Ir ao conteúdo
  • Cadastre-se

Dani piresk

Membro Pleno
  • Posts

    786
  • Cadastrado em

  • Última visita

posts postados por Dani piresk

  1. Paulo, você pode dar uma olhada no código?

    Queria saber se tem algo pra melhorar ou já tá bom.


    Define CONF_WORD = 0x3f50
    AllDigital

    TRISA = 00000111b

    'lcd
    TRISB = 0x00

    Define LCD_BITS = 4
    Define LCD_DREG = PORTB
    Define LCD_DBIT = 0
    Define LCD_RSREG = PORTB
    Define LCD_RSBIT = 5
    Define LCD_EREG = PORTB
    Define LCD_EBIT = 4
    Define LCD_READ_BUSY_FLAG = 1

    'botões
    Symbol botao_up = PORTA.0
    Symbol botao_down = PORTA.1
    Symbol botao_sp = PORTA.2

    'Variáveis
    Dim contador As Word
    Dim valors As Word
    Dim restante As Word
    Dim cont_int As Byte

    Dim habilitado As Bit
    Dim selecionando As Bit

    valors = 5 'teste.....
    contador = 0
    cont_int = 0

    habilitado = 0
    selecionando = 1

    Lcdinit 'iniciar lcd
    Lcdcmdout LcdClear 'limpar lcd
    Lcdout "Escolha um valor."

    Gosub configura_timer

    loop:
    Gosub teclaup
    Gosub tecladown
    Gosub teclasp
    Goto loop
    End

    On Interrupt
    Save System

    If habilitado = 1 Then
    cont_int = cont_int + 1
    If cont_int = 2 Then Goto loop1
    Goto sailoopt
    loop1:
    contador = contador + 1
    If contador = valors Then
    PORTA.3 = 0
    PORTA.4 = 1
    Lcdcmdout LcdClear
    Lcdcmdout LcdLine1Pos(1)
    Lcdout "Descarregando cap."
    Lcdcmdout LcdLine2Pos(1)
    Lcdout "Escolha um valor."

    habilitado = 0

    Goto sailoopt
    Endif
    Lcdcmdout LcdLine2Clear
    Lcdcmdout LcdLine2Pos(1)
    restante = valors - contador
    Lcdout "Restando: ", #restante, "s"

    cont_int = 0
    Else
    Goto sailoopt
    Endif

    Resume

    configura_timer:
    OPTION_REG.T0CS = 0 'usar clock interno
    OPTION_REG.PSA = 0 'prescaler ligado no TIMER0
    OPTION_REG.PS2 = 1 'valor prescaler = 256
    OPTION_REG.PS1 = 1
    OPTION_REG.PS0 = 1
    TMR0 = 0xfe 'contagem inicial do TIMER0

    INTCON.T0IE = 1 'habilita interrupções timer0
    INTCON.GIE = 1 'habilita todas interrupções mascaradas
    Enable
    Return

    teclaup:
    If botao_up = 0 Then
    Goto apertado_up
    Endif

    apertado_up: 'Rotina de Debounce
    WaitMs 50
    If botao_up = 1 Then
    Goto botaoconfirmado_up
    Else
    Goto sailoop
    Endif
    botaoconfirmado_up:
    If selecionando = 1 Then
    valors = valors + 1
    Lcdcmdout LcdLine2Clear
    Lcdcmdout LcdLine2Pos(1)
    Lcdout "Valor: ", #valors
    Endif
    Return

    tecladown:
    If botao_down = 0 Then
    Goto apertado_down
    Endif

    apertado_down: 'Rotina de Debounce
    WaitMs 50
    If botao_down = 1 Then
    Goto botaoconfirmado_down
    Else
    Goto sailoop
    Endif
    botaoconfirmado_down:
    If selecionando = 1 Then
    valors = valors - 1
    Lcdcmdout LcdLine2Clear
    Lcdcmdout LcdLine2Pos(1)
    Lcdout "Valor: ", #valors
    Endif
    Return

    teclasp:
    If botao_sp = 0 Then
    Goto apertado_sp
    Endif

    apertado_sp: 'Rotina de Debounce
    WaitMs 50
    If botao_sp = 1 Then
    Goto botaoconfirmado_sp
    Else
    Goto sailoop
    Endif
    botaoconfirmado_sp:
    Lcdcmdout LcdClear
    Lcdcmdout LcdLine1Pos(1)
    Lcdout "Timer habilitado"
    Lcdcmdout LcdLine2Pos(1)
    Lcdout "Restando: ", #valors, "s"
    If habilitado = 1 Then
    habilitado = 0
    Else
    habilitado = 1
    Endif
    Return

    sailoop:
    Return

    sailoopt:
    TMR0 = 0xfe
    INTCON.T0IF = 0
    Enable
    Return
    
    

  2. Sim sim, meu problema agora é outro.

    Queria saber se existe variaveis flutuante no psi. (exemplo var = 0.5)

    edit:

    Eu tava pensando em fazer assim...


    On Interrupt
    Save System
    'Lcdcmdout LcdClear
    'Lcdout "valor timer "

    if controle = contador then porta.7 = 1
    contador = contador + 0.5

    TMR0 = 0xfe
    INTCON.T0IF = 0
    Resume

    Onde controle seria o valor em segundos do tempo em que o timer ficaria ativo.

    Mas não dá certo né?

  3. Certo, assim que descobrir algo me dê um retorno.

    Já li esse datasheet umas 500x e nada..

    EDIT: Nem tinha visto o post, vou ler..

    PO muito obrigado cara.

    Mas, vou te incomodar mais um pouco..

    Amigo paulo, preciso fazer isso:

    No portA vou ligar três botões, um pra aumentar e outro diminuir, o valor de uma váriavel que será o tempo em que o timer ficará ativo, quando esse tempo estourar ele vaí ter que ligar um bit do portA.

    Exemplo, apertei 5 x o botão + e a variável ficou com valor 5, então quando eu apertar no botão start ele vai começar a contar e quando der 5segundos ele aciona uma saída da portA.

    Como posso fazer isso?

    PS: Com clock interno, não preciso do cristal né?

    EDIT 2: To tentando aqui, mas to com um problema... Como usa float no PSI? Preciso somar a uma variavl 0.5, quando ele gerar a interrupção e depois verificar com um if o valor dessa variavel se é igual ao valor da variavel que armazena o tempo.

  4. Opa, paulo consegui!!

    Agora meu problema é com o timer0...


    Define CONF_WORD = 0x1ec1

    'lcd
    TRISB = 0x00

    Define LCD_BITS = 4
    Define LCD_DREG = PORTB
    Define LCD_DBIT = 0
    Define LCD_RSREG = PORTB
    Define LCD_RSBIT = 5
    Define LCD_EREG = PORTB
    Define LCD_EBIT = 4

    'Variáveis
    Dim contador As Byte
    contador = 20

    Lcdinit 'iniciar lcd
    Lcdcmdout LcdClear 'limpar lcd

    Call configura_timer()
    End

    On Interrupt
    Save System

    Lcdcmdout LcdClear
    Lcdout "valor timer "

    TMR0 = 0x3d
    INTCON.T0IF = 0
    Resume

    Proc configura_timer()
    OPTION_REG.T0CS = 0 'usar clock interno
    OPTION_REG.PSA = 0 'prescaler ligado no TIMER0
    OPTION_REG.PS2 = 1 'valor prescaler = 256
    OPTION_REG.PS1 = 1
    OPTION_REG.PS0 = 1
    TMR0 = 0x3d 'contagem inicial do TIMER0

    INTCON.T0IE = 1 'habilita interrupções timer0
    INTCON.GIE = 1 'habilita todas interrupções mascaradas
    Enable
    End Proc

    Você pode analisar meu código?

  5. Felipe, segundo o manual é só colocar o pino, pois tem um outro define que define as portas mas o padrão é a B.

    Mas vou tentar como você falou, vaí que entendi errado.

    EDIT:

    Não é assim não felipe.. Pena, pensei que iria resolver o problema.

    Mas nem compilou...

    ..

    LCD_BITS - defines the number of data interface lines (allowed values are 4 and 8; default is 4)

    LCD_DREG - defines the port where data lines are connected to (default is PORTB)

    LCD_DBIT - defines the position of data lines for 4-bit interface (0 or 4; default is 4), ignored for 8-bit interface

    LCD_RSREG - defines the port where RS line is connected to (default is PORTB)

    LCD_RSBIT - defines the pin where RS line is connected to (default is 3)

    LCD_EREG - defines the port where E line is connected to (default is PORTB)

    LCD_EBIT - defines the pin where E line is connected to (default is 2)

    LCD_RWREG - defines the port where R/W line is connected to (set to 0 if not used; 0 is default)

    LCD_RWBIT - defines the pin where R/W line is connected to (set to 0 if not used; 0 is default)

    LCD_COMMANDUS - defines the delay after LCDCMDOUT statement (default value is 5000)

    LCD_DATAUS - defines the delay after LCDOUT statement (default value is 100)

    LCD_INITMS - defines the delay for LCDINIT statement (default value is 100)

  6. Beleza amigo paulo!

    O problema desse esse "pequeno" produto é o preço que não é compátivel com meus projetos hehehe.

    Você poderia ver esse código que eu fiz?


    Define CONF_WORD = 0x1ec1

    'lcd
    TRISB = 0x00

    Define LCD_RSBIT = 5
    Define LCD_EBIT = 4
    Define LCD_INITMS = 2

    Lcdinit

    loop:
    Lcdcmdout LcdClear
    Lcdout "Teste"
    WaitMs 1
    Goto loop

    Não consegui fazer funcionar...

  7. Amigo paulo, dei uma olhada e achei isso:


    Define CLOCK_FREQUENCY = 20
    Define CONFIG1L = 0x24
    Define CONFIG1H = 0x0c
    Define CONFIG2L = 0x3e
    Define CONFIG2H = 0x00
    Define CONFIG3L = 0x00
    Define CONFIG3H = 0x83
    Define CONFIG4L = 0x80
    Define CONFIG4H = 0x00
    Define CONFIG5L = 0x0f
    Define CONFIG5H = 0xc0
    Define CONFIG6L = 0x0f
    Define CONFIG6H = 0xe0
    Define CONFIG7L = 0x0f
    Define CONFIG7H = 0x40

    UsbSetVendorId 0x1234
    UsbSetProductId 0x1234
    UsbSetVersionNumber 0x1122
    UsbSetManufacturerString "OshonSoft.com"
    UsbSetProductString "Generic USB HID Device"
    UsbSetSerialNumberString "1111111111"
    UsbOnIoInGosub usbonioin
    UsbOnIoOutGosub usbonioout
    UsbOnFtInGosub usbonftin
    UsbOnFtOutGosub usbonftout

    AllDigital
    ADCON1 = 0x0e
    TRISB = 0
    PORTB = 0xff
    UsbStart
    PORTB = 0

    Dim an0 As Byte

    loop:
    Adcin 0, an0
    If an0 < 50 Then
    PORTB = 0
    UsbStop
    While an0 < 100
    Adcin 0, an0
    Wend
    PORTB = 0xff
    UsbStart
    PORTB = 0
    Endif
    UsbService
    Goto loop
    End

    usbonftout:
    Toggle PORTB.7
    Return

    usbonftin:
    UsbFtBuffer(0) = UsbFtBuffer(0) - 1
    UsbFtBuffer(1) = UsbFtBuffer(1) - 1
    UsbFtBuffer(2) = UsbFtBuffer(2) - 1
    UsbFtBuffer(3) = UsbFtBuffer(3) - 1
    UsbFtBuffer(4) = UsbFtBuffer(4) - 1
    UsbFtBuffer(5) = UsbFtBuffer(5) - 1
    UsbFtBuffer(6) = UsbFtBuffer(6) - 1
    UsbFtBuffer(7) = UsbFtBuffer(7) - 1
    Return

    usbonioout:
    Toggle PORTB.6
    Return

    usbonioin:
    UsbIoBuffer(0) = UsbIoBuffer(0) + 1
    UsbIoBuffer(1) = UsbIoBuffer(1) + 1
    UsbIoBuffer(2) = UsbIoBuffer(2) + 1
    UsbIoBuffer(3) = UsbIoBuffer(3) + 1
    UsbIoBuffer(4) = UsbIoBuffer(4) + 1
    UsbIoBuffer(5) = UsbIoBuffer(5) + 1
    UsbIoBuffer(6) = UsbIoBuffer(6) + 1
    UsbIoBuffer(7) = UsbIoBuffer(7) + 1
    Return

    Achei muito confuso, vocÊ teria algum exemplo de envio e recebimentos de dados pela usb? Nesse PSI18.

    Ah e dá pra eu alterar o número de bytes de envio e recebimento? (que nem no mikroc, que tem o descritor).

    OFF: Paulo você tem msn?

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!