lcd + 16f628a clock int e nao funciona

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

lcd + 16f628a clock int e nao funciona

Mensagempor fred1234 » 26 Jan 2010 10:39

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+
fred1234
Bit
 
Mensagens: 7
Registrado em: 20 Jul 2007 13:45

Mensagempor tcpipchip » 26 Jan 2010 11:14

voce esta fazendo no braço as rotinas do LCD ? Se sim, esta testando se o LCD esta ocupado ou dando um pequeno delay ?
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor Andre_Cruz » 26 Jan 2010 12:09

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é
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Washburn » 26 Jan 2010 12:41

Pra começar é bom deixar os delay's bem altos e depois que funcionar certinho abaixa pra valores mais apropriados.
Il capolavoro...
Washburn
Bit
 
Mensagens: 31
Registrado em: 24 Jul 2007 09:05
Localização: Maringá / PR

Mensagempor fred1234 » 28 Jan 2010 07:10

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
Editado pela última vez por fred1234 em 28 Jan 2010 07:16, em um total de 1 vez.
fred1234
Bit
 
Mensagens: 7
Registrado em: 20 Jul 2007 13:45

Mensagempor Andre_Cruz » 28 Jan 2010 08:13

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
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor fred1234 » 28 Jan 2010 10:50

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! :D
fred1234
Bit
 
Mensagens: 7
Registrado em: 20 Jul 2007 13:45

Mensagempor vtrx » 28 Jan 2010 20:00

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..."
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor fred1234 » 28 Jan 2010 22:30

Nao pensei que um post tao simples fosse causar tanto movimento :D
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!
fred1234
Bit
 
Mensagens: 7
Registrado em: 20 Jul 2007 13:45


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x