Moderadores: andre_luis, 51, guest2003, Renie
enigmabox escreveu:MOR_AL,
Recentemente eu fiz um projeto similar ao seu com um MC68hc908 e um LCD 2 linhas x 16 caracteres , cor azul.
O mcu está alimentado por modulo cristal de 32mhz. E tem como uma das funções contar pulsos de um encoder incremental e apresentar o valor no LCD. Digo que não tive nenhum problema de instabilidades.
Acho que você está tendo problemas com a ferramenta de gravação do PIC.
Como postei, fiz a mesma gravação em dois PICF873A. Tanto com o ICPROG, como com o PICFLASH, totalizando 4 gravações. Devido aos comportamentos diferentes dos PICs, joguei um fora. Aquele que tinha consumido corrente em excesso.
Dificil o LCD mandar dado pra fora se o mesmo esta com o pino W aterrado.
Também acho, mas quando já se tentou de tudo, não custa nada verificar!
Já passei por algo similiar com um Atmega16, quando uma má configuração de microfusiveis interna do MCU, deixava o mcu instavel ou dava problemas quando era ligado.
Dá uma analisada na ferramenta de gravação, como você mudou de PIC (mudei de componente, mas com a mesma especificação PIC16F873A), pode ter havido mudança de endereçamento de Ram e Flash ou use um outro tipo de PIC como teste.
Outra coisa, desligou o watchdog? (Sim!), se possuir no seu PIC, ele pode gerar Resets aleatorios. (Sim, mas não a cada 2 segundos. Como disse antes, todos os pinos respondiam como o esperado, com excessão do pino RS para o LCD, que oscilava)
LCD_LINE1_ADD EQU 0X80 ; ENDEREÇO DDRAM DA 1º COLUNA DA 1º LINHA DO DISPLAY
LCD_LINE2_ADD EQU 0XC0 ; ENDEREÇO DDRAM DA 1º COLUNA DA 2º LINHA DO DISPLAY
LCD_LINE3_ADD EQU 0X90 ; ENDEREÇO DDRAM DA 1º COLUNA DA 3º LINHA DO DISPLAY
LCD_LINE4_ADD EQU 0XD0 ; ENDEREÇO DDRAM DA 1º COLUNA DA 4º LINHA DO DISPLAY
enigmabox escreveu:Mor_Al
Dá medo trabalhar com PICs!![]()
Estou concluindo que o problema não é o PIC. Até hoje não encontrei um caso que não tenha sido eu o causador![]()
É fácil atribuir o problema ao PIC, mas difícil é reconhecer os próprios erros. Adiante eu reconheço mais um deles.
Quanto aos dados no LCD:
1) Quando envia o comando para apagar o LCD, este leva mais tempo para liberar o LCD para o MCU, assim, encavala a escrita freq. Ai tem que incrementar um delay maior, quando usa este comando.
Acho que você matou a charada!!!
Isso explicaria porque aparece apenas a parte final da palavra "FREQUENCIA". O LCD estava ocupado durante "FREQU" e aceitou "ENCIA".
Consultei diversas fontes sobre o tempo:
1 - 82us a 4,1ms - Um site que não tenho mais o endereço.
2 - 82us a 1,64ms - Idem.
3 - 1,53ms @ [E.T. (Fosc = 270kHz)] - Do manual.
Estou usando 50us, o que é pouco mesmo. Amanhã vou fazer a alteração para 5ms e ver se funciona. Depois eu conto o que ocorreu.
2)Normalmente eu nao apago o LCD inteiro, para atualizar informações, uso o comando linha e coluna e reescrevo acima dos caracteres que me interessam atualizar.
Eu não sigo essa técnica, porque considero o caso de algum ruído ou problema, que altere um caractere, daqueles que não devem ser alterados. É o caso da palavra "FREQUENCIA". Se reescrever cada vez que tenho que atualizar os dados, o erro nunca ficará por mais que um pequeno tempo.
Normalmente o campo numerico da frequencia no seu LCD deve ter X caracteres posicionados na segunda linha do LCD. Entao é mais facil usar o comando L,C e reescrever por cima os numeros. Fica mais rapido. Imagine um LCD com 4 linhas 32 caracteres, apagando a tela inteira e reescrevendo tudo! Fica uma coisa maluca!
Nesse caso, você tem razão! Quando reescrever tudo leva um tempo impeditivo, temos que alterar apenas o necessário, mesmo correndo o risco de mudar algum caractere fixo.
Outra coisa, recomendo enviar atualização de dados para o LCD a cada 01 segundo pra nao ficar oscilando o campo numerico devido a velocidade de atualização do mcu.
Para que eu tenha o maior número de dígitos corretos, coloquei uma janela de aquisição dos pulsos de 1,000000 segundo (ou 5.000.000 de clocks em 20MHz de cristal). Isso também facilita, pois o valor medido é o da frequência.
Valeu pela dica do tempo de apagar o LCD
MOR_AL
vtrx escreveu:Acho que sua rotina não esta setando os endereços corretos correspondente a linha um,dois etc.
- Código: Selecionar todos
LCD_LINE1_ADD EQU 0X80 ; ENDEREÇO DDRAM DA 1º COLUNA DA 1º LINHA DO DISPLAY
LCD_LINE2_ADD EQU 0XC0 ; ENDEREÇO DDRAM DA 1º COLUNA DA 2º LINHA DO DISPLAY
LCD_LINE3_ADD EQU 0X90 ; ENDEREÇO DDRAM DA 1º COLUNA DA 3º LINHA DO DISPLAY
LCD_LINE4_ADD EQU 0XD0 ; ENDEREÇO DDRAM DA 1º COLUNA DA 4º LINHA DO DISPLAY
Então o próximo passo é colocar um pequeno circuito entre o PIC e o ponto elétrico que desejamos medir a frequência. Esse circuito tem que apresentar uma impedância alta para o ponto elétrico que desejamos medir a frequência e ao mesmo tempo deixar passar os 40Mc/s (esta é a frequência máxima que o AD9850 fornece). Lembrando que a utilização do frequencímetro foi uma diretriz para a implementação do gerador com o AD9850.
MOR_AL
enigmabox escreveu:...
Ha algumas decadas atras....hehehehe, eu tinha construido um frequencimetro com componentes TTL e lembro de ter utilizado como buffer na entrada do circuito contador TTL, um circuito amplificador com um transistor em classe A.
Se nao me engano foi um BF254 ou BF494.
Se quiser , te mando o circuito do frequencimetro, pra tu se basear.
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante