Ir ao conteúdo
  • Cadastre-se

Preciso de rotina de mensagens em LCD com PIC!


alexrodrigues

Posts recomendados

Ola pessoal, sou novo por aqui será que alguem pode me ajudar no projeto da faculdade, preciso da rotina de um microcontrolador pic que mostre duas mensagens em um LCD (16x2) de acordo com o nível lógico na entrada do pic , para nível lógico 0 a mensagem será: Não há mensagens novas! e para nível logico 1 será: Você possui novas mensagens!

qual PIC e LCD devo utilizar , será que alguem pode me mandar um esquema?

Até mais!

Link para o comentário
Compartilhar em outros sites

Olá

Aqui tem uma explicação de como montar o circuito e um exemplo de programa fonte

http://www.eletrônica.etc.br/igor/lcd/index.html

Se o link não abrir copie e cole o endereço na barra de endereços do seu Brownser.

Aqui um exemplo com o pic 16F84 com o programa fonte e o codigo p/ gravar no PIC

ESCREVE MENSAGEM: "PIC16F84 LCDTEST"

http://www.electronic-engineering.ch/micro.../LCDx_test.html

ABRAÇOS!

Link para o comentário
Compartilhar em outros sites

Valeu Valdenir obrigado pelo toque! Vou dar uma olhada mas se você conseguir alguma coisa manda pra cá , porque a coisa tá feia e o tempo ta acabando, infelizmente o link que você me passou não tá abrindo, mas mesmo assim valeu, se souber qual pic e lcd usar já é um começo

Um abraço e até mais !

Link para o comentário
Compartilhar em outros sites

Olá Paul!

O primeiro link que postei e que não está abrindo é de um circuito com o PIC 16F84, e um

módulo LCD 16x2 (14 pinos) baseado no controlador HD44780. É um projeto desenvolvido

POR ÍGOR TSCHOEPKE GOEDEL, figura em anexo. Está no link que eu postei, tem um programa

fonte para escrever uma mensagem padrão:"DESENVOLVIDO POR"=>Na primeira linha e

" IGOR TSCHOEPKE " => Na segunda linha e " GOEDEL "=> Numa terceira linha. É só

voce mudar o conteúdo faz dua primeiras linhas e excluir a terceira.

tente no link: http://igortg.cjb.net

Ou então:

Vá no Google e digite na barra de pesquisa:

"Rotinas para LCD" entre aspas DEIXE SELECINADO páginas em português => É O PRIMEIRO RESULTADO.

ABRAÇOS!

post-78018-13884929334905_thumb.jpg

Link para o comentário
Compartilhar em outros sites

olá amigo eu tb estava procurando por uma rotina par escrever uma mensagem no lcd usando pic eu estava tentando fazer um circuito para isso se alguém pudesse informar se este circuito ira funcionar, se o desenho esta bom e tb sobre os valores dos componentes a serem usados no porojeto eu agradeceria....

post-99601-13884929674965_thumb.gif

Link para o comentário
Compartilhar em outros sites

olá joselmosangi. beleza ??

além do cristal, tem mais alguns errinhos aí no seu circuito.

como o trafo não tem center-tap, D2 deve ser removido, mas, nesse caso, você vai ter uma fonte com retificação de meia onda. pra esse transformador, você precisa usar uma ponte de diodos, com 4 diodos para obter retificação em onda completa.

com relação ao MCLR do PIC eu não sei te dizer, porque eu não conheço PICs, mas, do jeito que está ligado, você vai colocar 1,6V nesse pino.

se é pra dar reset no mcu, então seria melhor construir uma rede RC, onde, na deriva entre o capacitor e o resistor, você ligaria o pino de reset.

no LCD, se você não for ler o LCD, então, o pino RW deve ser conectado diretamente ao GND (terra). e, ao invés de ligar o pino RW no PIC, você deve ligar o pino RS no PIC. de resto, é só software, e aí eu não posso ajudá-lo. :-BEER:bye:

sem esquecer, óbvio, que nas ligações do LCD estão faltando a alimentação e o potênciometro de controle de contraste, que vai ligado no pino V0 (pino 3 do LCD).

[]'s

Link para o comentário
Compartilhar em outros sites

A diferença que vejo é só na quantidades de linhas que você vai utilizar do seu microcontrolador.

Se voce trabalhar no modo 8 bits, voce vai gastar 11 linhas, sendo 8 de dados mais 3 linhas de controle, como o Pic 16f84 só tem 13 linhas só sobram outras 2 linhas para outras aplicaçõs.

Ao passo que se voce optar pos 4 bits, sobram 6 linhas para futuras aplicações.

ABRAÇOS!

Link para o comentário
Compartilhar em outros sites

Obrigado de novo Valdenir por esclarecer minha dúvida, aproveitando o embalo será que poderia me dizer como faço um comando condicional usando a mesma linguagem de programação da rotina de 4 bits que está no site do Igor que você me passou, pois no meu projeto quando houver tensão na entrada mclr do pic 16f84 aparecerá uma mensagem e quando não houver tensão outra mensagem deverá aparecer, por isso preciso saber como faço o comando condicional desde já agradeço!

UM ABRAÇO!

Link para o comentário
Compartilhar em outros sites

Olá Paul!

Montei o esquema do Igor num kit para testes de PIC que eu tenho, mas não funcionou, nem a rotina para 4 bits nem a rotina para 8 bits. Tentei encontrar o erro, mas não tenho muito as "MANHAS" de programar PIC, apesar de serem apenas 35 instruções, tenho muita dificuldade de memorizar os menmônicos das instruções, se fosse com o 8051 era mais fácil para mim.

O que eu fiz então?

Entrei no site da EDUTECBAURU: http://WWW.EDUTECBAURU.COM.BR

E montei o esquema da aula22: http://www.edutecbauru.com.br/cursopic/aula22.htm

Conforme o esquema em anexo. Peguei o exemplo lcd_01.asm, compilei com o MPLAB e gravei num PIC16F84, e funcionou ok.

A mensagem original da EDUTECBAURU é:

MENS1:

"www.edutecbauru."

"com.br 234 9558

Modifiquei o programa para alternar entre a mensagem original ==> MENS1

e uma mensagem que eu bolei ==>MENS2

Quem decide qual mensagem mostrar no LCD é uma chave (S7) que coloquei no pino 13 do pic RB7.

Se achave estiver fechada, joga 0v em RB7 e é apresentado a mensagem2

Se achave estiver aberta, joga 5v em RB7 e é apresentado a mensagem1

A segunda mensagem que eu coloquei foi:

MENS2:

"ROTINA LCD FORUM"

"_CLUBEDOHARDWARE"

Você falou:

...pois no meu projeto quando houver tensão na entrada mclr do pic 16f84 aparecerá uma mensagem e quando não houver tensão outra mensagem deverá aparecer, por isso preciso saber como faço o comando condicional desde já agradeço!...

O MCLR (pino 4 do Pic16f84) tem que estar sempre para o potencial +5v, senão não funciona, veja o anexo.

ABRAÇOS!

post-78018-13884930722293_thumb.png

Link para o comentário
Compartilhar em outros sites

O Programa fonte ficou assim:

;****************************************************************************

;* Programa para escrita no display de cristal liquido

;*

;* www.edutecbauru.com.br

;*

;****************************************************************************

;===========================================================

;= Definicoes de hardware

;=

;= LCD - C/D CS D4 D5 D6 D7

;= | | | | | |

;= PIC - RA4 RB0 RA0 RA1 RA2 RA3

;=

;===========================================================

;#define simula

list p=16F84A ;INFORMA O PIC UTILIZADO

radix dec ;informa para o compilador onde não tiver sistema

;de numeracao indicado, entender como decimal

include <p16f84.inc>

__config _xt_osc & _cp_off & _wdt_off & _pwrte_on

;###### Definicoes ##########

x equ 0ch ; define posicao de memoria auxiliar

tempo equ 0dh ; idem

valor equ 0eh ; idem

s7 equ 7 ;RB7 - seleciona amensagem a ser mostrada no lcd

;######################### Inicio do programa ####################

inicio:

bsf status,rp0 ; vai para o banco 1

movlw b'00000000'

movwf trisa ;faz port A como saida

movlw b'11110000'

movwf trisb ;Rb0 a Rb3 como saida e Rb4 a Rb7 como entrada

movlw b'11000111'

movwf option_reg ;acerta o registro option

bcf status,rp0 ;volta para o banco 0

clrf porta

clrf intcon

movlw 0xf0

movwf portb

call lcd_reset ; inicio obrigatorio para o display

call ini_lcd ;inicia display de cristal liquido

btfss portb,s7 ;testa a chave s7, se for 1 (desligada), pula a próxima linha

goto mens2

mens1: btfss portb,s7 ;testa a chave s7, se for 1 (desligada), pula a próxima linha

goto mens2

call lcd_reset ; inicio obrigatorio para o display

call ini_lcd ;inicia display de cristal liquido

movlw 0x80 ;posicao inicial da escrita no display 80H primeira

call cmd_lcd ; linha e coluna

movlw 'w' ;carater 1

call wr_lcd

movlw 100

call ms

movlw 'w' ;caracter 2

call wr_lcd

movlw 100

call ms

movlw 'w' ;caracter 3

call wr_lcd

movlw 100

call ms

movlw '.' ;caracter 4

call wr_lcd

movlw 100

call ms

movlw 'e' ;caracter 5

call wr_lcd

movlw 100

call ms

movlw 'd' ;caracter 6

call wr_lcd

movlw 100

call ms

movlw 'u' ;caracter 7

call wr_lcd

movlw 100

call ms

movlw 't' ;caracter 8

call wr_lcd

movlw 100

call ms

movlw 'e' ;caracter 9

call wr_lcd

movlw 100

call ms

movlw 'c' ;caracter 10

call wr_lcd

movlw 100

call ms

movlw 'b' ;caracter 11

call wr_lcd

movlw 100

call ms

movlw 'a' ;caracter 12

call wr_lcd

movlw 100

call ms

movlw 'u' ;caracter 13

call wr_lcd

movlw 100

call ms

movlw 'r' ;caracter 14

call wr_lcd

movlw 100

call ms

movlw 'u' ;caracter 15

call wr_lcd

movlw 100

call ms

movlw '.' ;caracter 16

call wr_lcd

movlw 100

call ms

movlw 0xc0 ;escreve a partir da segunda linha, coluna 1 0ch

call cmd_lcd

movlw 'c'

call wr_lcd

movlw 100

call ms

movlw 'o'

call wr_lcd

movlw 100

call ms

movlw 'm'

call wr_lcd

movlw 100

call ms

movlw '.'

call wr_lcd

movlw 100

call ms

movlw 'b'

call wr_lcd

movlw 100

call ms

movlw 'r'

call wr_lcd

movlw 100

call ms

movlw ' '

call wr_lcd

movlw 100

call ms

movlw ' '

call wr_lcd

movlw 100

call ms

movlw '2'

call wr_lcd

movlw 100

call ms

movlw '3'

call wr_lcd

movlw 100

call ms

movlw '4'

call wr_lcd

movlw 100

call ms

movlw ' '

call wr_lcd

movlw 100

call ms

movlw '9'

call wr_lcd

movlw 100

call ms

movlw '5'

call wr_lcd

movlw 100

call ms

movlw '5'

call wr_lcd

movlw 100

call ms

movlw '8'

call wr_lcd

movlw 250

call ms

movlw 250

call ms

movlw 250

call ms

movlw 250

call ms

movlw 01 ;limpa display

call cmd_lcd

movlw 250

call ms

goto mens1

mens2: btfsC portb,s7 ;testa a chave s7, se for 0(ligada), pula a próxima linha

goto mens1

call lcd_reset ; inicio obrigatorio para o display

call ini_lcd ;inicia display de cristal liquido

movlw 0x80 ;posicao inicial da escrita no display 80H primeira

call cmd_lcd ; linha e coluna

movlw 'R' ;carater 1

call wr_lcd

movlw 100

call ms

movlw 'O' ;caracter 2

call wr_lcd

movlw 100

call ms

movlw 'T' ;caracter 3

call wr_lcd

movlw 100

call ms

movlw 'I' ;caracter 4

call wr_lcd

movlw 100

call ms

movlw 'N' ;caracter 5

call wr_lcd

movlw 100

call ms

movlw 'A' ;caracter 6

call wr_lcd

movlw 100

call ms

movlw ' ' ;caracter 7

call wr_lcd

movlw 100

call ms

movlw 'L' ;caracter 8

call wr_lcd

movlw 100

call ms

movlw 'C' ;caracter 9

call wr_lcd

movlw 100

call ms

movlw 'D' ;caracter 10

call wr_lcd

movlw 100

call ms

movlw ' ' ;caracter 11

call wr_lcd

movlw 100

call ms

movlw 'F' ;caracter 12

call wr_lcd

movlw 100

call ms

movlw 'O' ;caracter 13

call wr_lcd

movlw 100

call ms

movlw 'R' ;caracter 14

call wr_lcd

movlw 100

call ms

movlw 'U' ;caracter 15

call wr_lcd

movlw 100

call ms

movlw 'M' ;caracter 16

call wr_lcd

movlw 100

call ms

movlw 0xc0 ;escreve a partir da segunda linha, coluna 1 0ch

call cmd_lcd

movlw '_'

call wr_lcd

movlw 100

call ms

movlw 'C'

call wr_lcd

movlw 100

call ms

movlw 'L'

call wr_lcd

movlw 100

call ms

movlw 'U'

call wr_lcd

movlw 100

call ms

movlw 'B'

call wr_lcd

movlw 100

call ms

movlw 'E'

call wr_lcd

movlw 100

call ms

movlw 'D'

call wr_lcd

movlw 100

call ms

movlw 'O'

call wr_lcd

movlw 100

call ms

movlw 'H'

call wr_lcd

movlw 100

call ms

movlw 'A'

call wr_lcd

movlw 100

call ms

movlw 'R'

call wr_lcd

movlw 100

call ms

movlw 'D'

call wr_lcd

movlw 100

call ms

movlw 'W'

call wr_lcd

movlw 100

call ms

movlw 'A'

call wr_lcd

movlw 100

call ms

movlw 'R'

call wr_lcd

movlw 100

call ms

movlw 'E'

call wr_lcd

movlw 250

call ms

movlw 250

call ms

movlw 250

call ms

movlw 250

call ms

movlw 01 ;limpa display

call cmd_lcd

movlw 250

call ms

goto mens2

;************************* INICIALIZAÇÃO DO LCD ************************

ini_lcd

movlw 30

call ms

movlw 0x28 ;LCD 16x2 4 bits de dados

call cmd_lcd

movlw 0x0f ;display com cursor piscante

call cmd_lcd

movlw 0x06 ;cursor desloca a direita

call cmd_lcd

movlw 0x01 ;limpa todo display

call cmd_lcd

return

;************************ ESCRITA DE COMANDO NO LCD ***********************

cmd_lcd:

movwf valor ;salva o valor a ser escrito em byte auxiliar

swapf valor ;troca nible,para mandar o mais significativo primeiro

movf valor,w

movwf porta ;coloca o valor na porta a

bcf porta,4 ;seleciona escrita no lcd

nop

bsf portb,0 ;habilita chip

movlw 1

call ms

bcf portb,0 ;desabilita chip

movlw 3

call ms

swapf valor ;destroca o nibble

movf valor,w

movwf porta

bcf porta,4

nop

bsf portb,0

movlw 1

call ms

bcf portb,0

movlw 3

call ms

return

;*********************** ESCRITA DE CARACTERES NO LCD ************************

wr_lcd:

movwf valor ;Armazena o caracter

swapf valor ;troca nible para mandar o mais significativo primeiro

movf valor,w

movwf porta

bsf porta,4 ;habilita escrita de dados

bsf portb,0 ;habilita chip

movlw 1

call ms

bcf portb,0 ; desabilita chip

movlw 1

call ms

swapf valor ;destroca o nible colocando o valor menos significativo

movf valor,w

movwf porta

bsf porta,4 ;habilita escrita de dados

bsf portb,0 ;habilita chip

movlw 1

call ms

bcf portb,0 ; desabilita chip

movlw 1

call ms

return

;****************************************************************************

;* Rotina obrigatoria de reset do LCD ao ligar o sistema *

;****************************************************************************

lcd_reset:

movlw 30 ;tempo de delay antes de resetar lcd

call ms

movlw b'00000011' ;coloca dados na porta A=00011, onde

movwf porta ;ra0=b4, ra1=b5, ra2=b6, ra3=b7, ra4=C/D e rb0=CS

bsf portb,0 ;reseta lcd, habilitando por 5ms-hi e 1 ms-low rb0

movlw 5

call ms

bcf portb,0

movlw 1

call ms

bsf portb,0 ;mais 1 ms em alto e 1 ms em baixo

movlw 1

call ms

bcf portb,0

movlw 1

call ms

bsf portb,0 ;mais 1 ms em alto e 1 ms em baixo

movlw 1

call ms

bcf portb,0

movlw 1

call ms

movlw b'00000010' ;reseta display. porta = 00010

movwf porta

bsf portb,0 ;mais 1 ms em alto e 1 ms em baixo em rb0

movlw 1

call ms

bcf portb,0

movlw 1

call ms

return

;************************* delay de milissegundos *************************

ms:

#ifdef simula

return

#else

movwf tempo ; Carrega o tempo com valor determinado

; antes do call ms

#endif

ms1:

movlw 249 ;carrega x com o valor 249 (decimal)

movwf x

ms2: ;Ate aqui incluindo o call gastaram-se 6 us.

nop ;+ 1 us

decfsz x ;+ 1 us

goto ms2 ;+ 2 us, totalizando 4 us. 6 us + (4 us x 249)

; = 1002 us

decfsz tempo ;decrementa tempo em 1 e testa se chegou a zero

goto ms1 ;vai a ms1 se tempo não chegou a zero

return ; retorna da sub-rotina apos 100 ms

end

;========================= FIM DO PROGRAMA ==================

Link para o comentário
Compartilhar em outros sites

Olá Valdenir muito obrigado por me ajudar mais uma vez , aproveitando o embalo de novo queria saber se tem algum problema utilizar uma configuração RC no lugar do cristal que está no desenho, vi a configuração RC no data sheet do pic 16f84, ouvi falar que não têm problema porque o cristal e só para projetos que precisam de uma freqüência bem definida, o que você acha? Será que vai dar algum problema ?

Link para o comentário
Compartilhar em outros sites

O oscilador RC pode ser uma opção para quem quer economizar um pouco no projeto e não precisa de muita precisão.

Tem que tomar cuidado para que o Resitor esteja entre 3k e 100k, e que o capacitor seja superior a 20pF, isso evita instabilidade no sistema. Se você montar o exemplo do EDUTECBAURU, lembre-se que a frequência é 4MHZ, e as rotinas de delay foram feitas levando em consideração esta frequência.

ABRAÇOS!

Link para o comentário
Compartilhar em outros sites

Olá Valdenir , agradeço novamente pela ajuda vou fazer o circuito e o desenho da placa depois eu posto pra você dar uma olhda. amanhã eu compi-lo a rotina que você me passou em Mplab, vou também correr atrás do cristal, até sexta-feira eu te informo dos resultados

Um abraço e até breve !

Link para o comentário
Compartilhar em outros sites

Qlá Valdenir ,

Aqui está o desenho do circuito, dá uma olhada se achar algum erro me informa por favor , mandei tambem o desenho da placa, to com medo da trilha passando entre dois pinos do pic se acha que vai dar problema? Vou usar o esquema de passar o ferro sobre o desenho em cima da placa por isso to preocupado !

Link para o comentário
Compartilhar em outros sites

  • 4 anos depois...

opa... boa noite galera...

Sou novo no forum... e esse é meu primeiro post aqui...

portanto desculpem se sou meio iniciante.. hehe

Bem, eu nao li todos os posts, mas eu vim na verdade disponibilizar um codigo fonte com as rotinas em assembly que fiz para controlar um LCD compativel com HD44780 da Hitachi (utilizei o Winstar WH1602A) com um PIC 16F628A.

O codigo está bem comentado, por isso vou dispensar muitas explicações.

Ai está um arquivo ZIP com a imagem do circuito, o arquivo do Proteus e o Codigo Fonte

http://www.4shared.com/file/5E9s46wM/PEDROMAIONE_PIC16F628A_LCD.html

espero ter ajudado.

t+

Link para o comentário
Compartilhar em outros sites

opa... boa noite galera...

Sou novo no forum... e esse é meu primeiro post aqui...

portanto desculpem se sou meio iniciante.. hehe

Bem, eu nao li todos os posts, mas eu vim na verdade disponibilizar um codigo fonte com as rotinas em assembly que fiz para controlar um LCD compativel com HD44780 da Hitachi (utilizei o Winstar WH1602A) com um PIC 16F628A.

O codigo está bem comentado, por isso vou dispensar muitas explicações.

Ai está um arquivo ZIP com a imagem do circuito, o arquivo do Proteus e o Codigo Fonte

http://www.4shared.com/file/7bbz1-OL/Maione_PIC16F6289A_LCD.html

espero ter ajudado.

t+

Valeu pela contribuição, realmente o programa está bem comentado, nunca tinha usado um LCD, mas até ja consegui mudar a mensagem. Ajudou muito embora que este topico é bem antigo hahaha.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...