-
Posts
786 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por Dani piresk
-
-
ahuhauahuahuahuua
cara, esse programa era aquele que você tava me ajudando, que você seleciona o valor com dois botões + e - depois aperta start. ae ele vaí contando de 1 em 1 segundo o tempo e quando der aquele valor selecionado ele aciona um bit do porta, lembra?
-
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 -
Nem no loop "aqui" funcionou, que que pode ser?
-
Paulo, não é poissível, tenho que te incomodar de novo....
contador = (10 * contador) + 5
contador = contador / 10
Lcdcmdout LcdClear
Lcdout "Valor contador: ", #contadorA variável contador é do tipo word.
Sempre fica 0 essa coisa...
Que que to fazendo de errado...?
-
Ah, certo, entendi...
Olha só, me tira uma dúvida como mostro o valor de uma váriavel byte ou word no display? Tentei LcdOut teste e não mostrou nada..
EDIT: Consegui, to acostumado com c++ cara..... Bom eu perder o costume haha.
-
Ah certo, posso fazer 1 / 2 então né? heheh valeu cara!
-
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
ResumeOnde controle seria o valor em segundos do tempo em que o timer ficaria ativo.
Mas não dá certo né?
-
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.
-
Opa, pic 16f627a, 4mhz.
-
Pedi umas coisas, uns Z80, uns ci, uns max232, 555, ..
Vamos ver..
-
Você pode sim, simular clicando em: File -> Load Program
Agora descompilar para bas não dá, só asm.
-
#off:
Amigo utilize o www.imageshack.us para hospedar as imagens, depois você pega o link dela em põe entre essas tags:
[img] [/img]
Exemplo:
[img] www.meusite.com.br/imagem.png [/img][img=http://meusite.com.br/minhaimagem.png]
-
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 ProcVocê pode analisar meu código?
-
Sim, I2C, erro de digitação meu..
-
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)
-
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 loopNão consegui fazer funcionar...
-
Paulo, outra coisa, na parte 3 faz um projeto com cartões SD!!!
-
Felipe, deixa eu te perguntar..
Esse Pics da família 32 se acha no brasil? Se sim, onde? Quanto mais ou menos?
Outra coisa, posso usar mais de um periférico num barramento L2C de um pic da familia 18 por exemplo?
Exemplo uma EEPROM e um DS1307.
-
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
ReturnAchei 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?
-
Amigo Paulo, gostaria de tirar uma dúvida com você, o PSI tem suporte para HID?
-
Ah sim. Se sua placa for 110V pode usa esse varistor mesmo.
-
Amigo pode postar uma foto?
R2 está mais para um resistor do que varistor hehe.
-
:o Amigo qual é o som do seu carro? (o módulo)
-
Conterrâneo lukastrauer.. Você tem mais que um problema ai. Isole os problemas e trate-os de modo independente senão eles se misturam e quem vai piscar é sua cuca..
uhuahuahuahauhuahauhhauhau
Amigo lucas, faça isso que o nosso amigo faller falou e dê um retorno para nós.
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
Tutorial : Introdução ao uso de PIC´s em BASIC com o PIC Simulator IDE - Parte 1/2
em Microcontroladores
Postado
beleza cara, tranquilo hehe.