Página 1 de 1
lcd + 16f628a clock int e nao funciona

Enviado:
26 Jan 2010 10:39
por fred1234
Bom dia pessoal! Estou com o seguinte problema...criei uma rotina para escrever no lcd, testei no proteus e rodou perfeito, gravei o pic montei o circuito soh que ele dava o seguinte problema ele inicializava o lcd que é 16x2 ficava a metada da linha de baixo e na hora que era para comecar a aparecer os digitos ele pulava de posicao, resumindo descobri que o pino "RS" por alguma razao nao funcionava no "rb0" troquei para outro rb e resolvi esse problema...no dia seguinte fui ligar e os caracteres ficaram loucos, fui tentar regravar o programa e agora nem iniciar o lcd esta iniciando, ja testei com 4 pics diferentes, parece que o clock interno nao esta funcionando, para nao ter erro eu nao estou usando a opcao "__CONFIG" dentro do asm eu estou fazendo a configuracao pelo mplab e export para salvar com os bits de config certo. Escrevi bastante mas a intencao foi ser o mais claro possivel. Ah, estou usando o pickit 2 para gravar.t+

Enviado:
26 Jan 2010 11:14
por tcpipchip
voce esta fazendo no braço as rotinas do LCD ? Se sim, esta testando se o LCD esta ocupado ou dando um pequeno delay ?

Enviado:
26 Jan 2010 12:09
por Andre_Cruz
fred1234,
Experimenta fazer um pisca led, se funcionar maravilha.
Você volta o programa do jeito que esta, retira o LCD do circuito e colocar LED's nos pinos do LCD, RS, Enable, e nos pinos de dados do led, assim você vai visualizar se os dados estão saindo do PIC, depois recoloque o LCD no circuito e teste com o multimetro ou scope pra ver se continua mandando os dados.
Observa também se quando você alimenta o circuito o LCD não mostra nada, ou fica na primeira linha uma seria de "quadradinhos pretos", se acontece isso o LCD esta apenas sendo alimentado, os dados não estão chegando até o LCD.
Uma vez montei uma placa e o EN e o RS ficaram com mau contato, e aparecia caractere aleatóriamente.
Já montei cristal de 4 MHz para software, para cristal de 20 MHz e o LCD também ficava doido, verifique os tempos dos delays de inicialização do LCD se estão dentro do informado no datasheet.
Abraço
André

Enviado:
26 Jan 2010 12:41
por Washburn
Pra começar é bom deixar os delay's bem altos e depois que funcionar certinho abaixa pra valores mais apropriados.

Enviado:
28 Jan 2010 07:10
por fred1234
tipo o lance de pisca o led ja tinha pensado e vou tentar fazer esse fds, sobre o delay eu nao estou usando o busyflag pq ta comendo caracter atraves dele, to tentando fazer com delay alto mesmo, e como vcs falaram com certeza nao esta chegando dado algum, eu tbm cheguei a fazer o teste sem o lcd para ver como funcionava e com o pic ou sem o pic ele só fica com a primeira linha de quadrados, ou seja, ele esta sendo alimentado(ja verifiquei), a montagem esta correta(primeiro pq chegou a funcionar com esse programa, e depois e conferi a ligacao 4x em dias diferentes e dei para outra pessoa conferir)o que parece eh que o config de clock nao ta valendo de nada, testo no proteus funciona, gravo no pickit2 grava consigo ler do pic e da tudo ok, soh nao funciona
se quiserem eu upei a pasta que esta com arquivo do mplab, e do proteus, eu estou usando o arquivo lcd certo.hex para gravar ja que eu nao escrevi a linha "__CONFIG" e estou usando a config dos bits do mplab, atraves da opcao export.
http://www.4shared.com/file/209660879/e ... splay.html

Enviado:
28 Jan 2010 08:13
por Andre_Cruz
fred1234,
Dei uma zoiada no seu fonte "LCD.ASM", de cara você tem problemas na inicialização do display de LCD.
Use essa rotina de inicialização da própria mosaico.
- Código: Selecionar todos
; COFIGURA OS PINOS QUE SERÃO USADOS COMO SAÍDA
#DEFINE DISPLAY PORTB
#DEFINE RS PORTA,0
#DEFINE ENABLE PORTA,2
;-----------------------------------------------------------------------------
; ROTINA DE DELAY POR INSTRUÇÃO
; ESPERA O VALOR PASSADO POR W
DELAY_MS
MOVWF TEMPO1
MOVLW .250
MOVWF TEMPO0
CLRWDT
DECFSZ TEMPO0,F ; FIM DE TEMPO0 ?
GOTO $-2 ; NÃO - VOLTA 2 INSTRUÇÕES
; SIM - PASSOU-SE 1MS
DECFSZ TEMPO1,F ; FIM DE TEMPO1 ?
GOTO $-6 ; NÃO - VOLTA 6 INSTRUÇÕES
; SIM
RETURN ; RETORNA
;-----------------------------------------------------------------------------
;ROTINA PARA ESCRITA NO LCD
ESCREVE
MOVWF DISPLAY ; ATUALIZA DISPLAY (PORTB)
NOP ; PERDE 1US PARA ESTABILIZAÇÃO
BSF ENABLE ; ENVIA UM PULSO DE ENABLE AO DISPLAY
GOTO $+1 ; .
BCF ENABLE ; .
MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS
RETURN ; RETORNA
;-----------------------------------------------------------------------------
;ESTA ROTINA INICIALIZA O LCD
INICIALIZACAO_DISPLAY
BCF RS ; SELECIONA O DISPLAY P/ COMANDOS
MOVLW 0X30 ; ESCREVE COMANDO 0X30 PARA
CALL ESCREVE ; INICIALIZAÇÃO
MOVLW .3
CALL DELAY_MS ; DELAY DE 3MS (EXIGIDO PELO DISPLAY)
MOVLW 0X30 ; ESCREVE COMANDO 0X30 PARA
CALL ESCREVE ; INICIALIZAÇÃO
MOVLW 0X30 ; ESCREVE COMANDO 0X30 PARA
CALL ESCREVE ; INICIALIZAÇÃO
MOVLW B'00111000' ; ESCREVE COMANDO PARA
CALL ESCREVE ; INTERFACE DE 8 VIAS DE DADOS
MOVLW B'00000001' ; ESCREVE COMANDO PARA
CALL ESCREVE ; LIMPAR TODO O DISPLAY
MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS
MOVLW B'00001100' ; ESCREVE COMANDO PARA
CALL ESCREVE ; LIGAR O DISPLAY SEM CURSOR
MOVLW B'00000110' ; ESCREVE COMANDO PARA INCREM.
CALL ESCREVE ; AUTOMÁTICO À DIREITA
BSF RS ; SELECIONA O DISPLAY P/ DADOS
RETURN
;-----------------------------------------------------------------------------
COMO FICA O PROGRAMA !!!
;VETOR DE RESET
ORG 0x000
GOTO CONFIG ; VAI CONFIGURAR O PIC
CONFIG
;CONFIGURA O PIC
;INICIALIZA O LCD
CALL INICIALIZACAO_DISPLAY
;ROTINA PRINCIPAL
MAIN
;COMANDOS PARA ESCRITA NO LCD
BCF RS ; SELECIONA O DISPLAY P/ COMANDOS
MOVLW 0X01
CALL ESCREVE ; COMANDO P/ LIMPAR A TELA
MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS
MOVLW 0X80 ; COMANDO PARA POSICIONAR O CURSOR
; 0x80 PRIMEIRA LINHA E PRIMEIRA COLUNA
; 0x70 sEGUNDA LINHA E PRIMEIRA COLUNA
CALL ESCREVE ; LINHA 0 / COLUNA 0
BSF RS ; SELECIONA O DISPLAY P/ DADOS
; COMANDOS PARA ESCREVER AS
; LETRAS DE "TESTE L1"
MOVLW 'T'
CALL ESCREVE
MOVLW 'E'
CALL ESCREVE
MOVLW 'S'
CALL ESCREVE
MOVLW 'T'
CALL ESCREVE
MOVLW 'E'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE
MOVLW 'L'
CALL ESCREVE
MOVLW '1'
CALL ESCREVE
BCF RS ; SELECIONA O DISPLAY P/ COMANDOS
MOVLW 0XC0 ; COMANDO PARA POSICIONAR O CURSOR
; 0x80 PRIMEIRA LINHA E PRIMEIRA COLUNA
; 0xC0 sEGUNDA LINHA E PRIMEIRA COLUNA
CALL ESCREVE ; LINHA 0 / COLUNA 0
BSF RS ; SELECIONA O DISPLAY P/ DADOS
; COMANDOS PARA ESCREVER AS
; LETRAS DE "TESTE L2"
MOVLW 'T'
CALL ESCREVE
MOVLW 'E'
CALL ESCREVE
MOVLW 'S'
CALL ESCREVE
MOVLW 'T'
CALL ESCREVE
MOVLW 'E'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE
MOVLW 'L'
CALL ESCREVE
MOVLW '1'
CALL ESCREVE
;ESPERA UNS 500mS
GOTO MAIN
Desculpa deu não testar aqui essa rotina mas ja usei ela e funciona.
Para exibir o valor de uma váriavel, é preciso usar uma outra rotina, no site da mosaico, na area de downloads tem os exemplos do livro conectando o pic, que é baseado no 16F877A.
Esse fonte o delay é para cristal de 4MHz, como o oscilador interno do 16F628A é de 4MHz, acredito que não será necessário alterar o valor da variavel de controle, mas ja fica o alerta !
Testa ai qualquer coisa da um grito.
Abraço

Enviado:
28 Jan 2010 10:50
por fred1234
A todos muito obrigado pela ajuda, vou testar hj a noite e posto os resultados aqui, apesar de nao ter entendido o erro na inicializacao postado pelo andré mas vou etntar dar uma revisada para ver no q q da!


Enviado:
28 Jan 2010 20:00
por vtrx
Então,deveriam postar a resposta em C ,agora se voces ironizam perguntas com respostas tolas,tipo,satisfação pessoal etc,mais um ponto negativo para se aprender C ou outra linguagem atravez desses 'programadores',alias um detalhes sobre certos 'programadores' é a eficiencia de alguns comentários sobres a linguagem C,C voce fizer assim,C pode conseguir,Cnão voce não tem outra alternativa a não Cer Cei lá,C tenta de novo, hehe,legal ficar ironizando né?.
________________________________________
"...as vezes eu tenho que usar uma linguagem de alto nível para o pessoal de baixo nível compreender..."

Enviado:
28 Jan 2010 22:30
por fred1234
Nao pensei que um post tao simples fosse causar tanto movimento
kra nada pessoal sei que eh engracado a forma como fiz o codigo, tipo eu nao consegui converter o caracter em saida nos pinos entao fiz na marra mesmo, nao me importa se vou demorar 1 dia ou 1 ano ou ... mas as vezes damos voltas para contornar alguns "problemas" nada contra C mas se eu nao conseguir fazer em asm que é exatamente o q o PIC está fazendo para mim nao há motivo a aprender C a não ser que tenha um compreendimento perfeito da situação ai pretendo pular para C sim, parece ser mais pratico e objetivo...bom mesmo seria dominar os dois e ter a versatilidade, essa questao cada um tem a sua e é uma "rivalidade" assim como várias outras.
Illustrator x Corel
Photoshop x PhotoPaint
AMD x Intel
Sei que o que postei foi besta mas deve ter outras pessoas assim como eu, q nunca tiveram aula de PIC, comprou livro para tentar compreender, nunca mecheu com lcd e esta tentando se virar. Bom só farei o tal teste amanha ja que esqueci o livro e o gravador no trabalho. vlw pessoal!