ENVIANDO DADOS A UM DISPLAY LCD COM APENAS 3 PINOS DE UMA PIC 16F628
O que proponho aqui é a utilização de um módulo para ligação a um LCD 16x2, o módulo consiste em uma plaquinha de circuito impresso e um chip, onde se faz a conexão do LCD a esta plaquinha.
Sabemos o quanto é cansativo e as veses extressante escrever rotinas para LCD, demoramos mais pra fazer estas rotinas do que na conclusão do programa principal. Um tempo atras descobri umas macros muito interessantes, a qual pude estuda-las e algumas modificar. Vi a necessidade de fazer uma conexão a um LCD e uma PIC 16F628, mas tive um problemas ao descobrir que não tinha pinos suficientes, pois ligaria alguns sensores na PIC, pensei ...porque não fazer um modulo que carrega-se os dados em serie através de 3 pinos da pic e um registrador de deslocamento, comecei a “tentar “ fazer tal modulo, e não é que consegui hehehehe
A maior parte foi absorvida por esta pagina de Portugal: http://www.mikroelektronika.co.yu/portuguese/product/books/picbook/capitulo6a.htm
Eu consegui com alguma dificuldade mexer um pouco numa macro para LCD, para tentar enviar caracteres para um LCD utlizando poucos pinos, a maior vantagem seria o ganho que se teria em $$$$ já que chips dedicados a estas funções são caros, dificeis de encontrar, e claro normalmente quando um projeto pede mais pinos de um microcontrolador recorremos a PICs mais modernos com mais portas, mais memorias, otimizados, mas também caros, dificil aquisição, e relativa complexa programação, e olha que programar rotinas para LCD é dor de cabeça em qualquer tipo de microcontrolador. Com este “esquema” que bolei, ganha-se em tempo de programação, ganha $$$, as idéias ficam mais claras e objetiva para o desenvolvimento de um determinado projeto. Normalmente quando você esta fazendo um projeto muito show de bola, esbarra no LCD, e pensa “ Bom agora só falta a rotina do LCD, vou pegar alguma por ai, e colar e fazer as modificações necessarias para meu projeto funcionar” e vc fica noites, programando e modificando. Derrepente tem uma droga de um BUG, e vc nem faz idéia de onde ele apareceu, ai fica mais tempo em cima do software ate resolver o problema, e pensa ...Deus me livre, que treta que foi isso hehehehe. Mas um belo dia vc quer novamente acrescentar algo em seu projeto,...pronto...a m..ta feita.
Agora e se um arquivo que fica la escondido, que voce pede pra ele mostrar aquilo no LCD, ele mostra, vc pede para ele imprimir um texto na linha 1 do lcd e esperar 4 segundos para imprimir outro texto na linha 2 do LCD a partir da posição 5 do ecrã ele faz isso ...qu bom não é?
A única exigencia é conhcer os comandos e declarar certinhos as variaveis, e se acostumando .... que é muito facil e show de bola. E de quebra vc apenas utiliza 3 pinos da PIC, e tem que comprar um chip que já comprei por aqui na sta Efigenia por R$1,30. è um ótimo esquema para quem faz circuitos para vender fazer em escalas grandes pois o custo é reduzido. Agora chega de blablabla e vamos ao que interessa
Olhe o desenho :
Note que foi utilizado PORTA,0 PORTA,1 e PORTA,2
Os outros pinos estão livres para sua programação o chip SHIFT REGISTER utilizado é o CD4094
Todos comandos do LCD vc pode ver na parte que fala das MACROS
Leia ...releia.... vc vai ver que vale apena ...mesmo ... pode acreditar J
O programa principal:
;***************************************************************************************************************************************
;por Mauro R. Sousa - Balee 30/05/2005
;exemplo de programa para um conjunto de macros para acessar um LCD 16x2 utilizando 3 pinos da PIC 16F628,627A..e um shift register formando
;um módulo simples, facil e util de utilizar em diversos projetos.
; códigos de uso livre
;***************************************************************************************************************************************
PROCESSOR 16F628
#INCLUDE"P16F628A.INC"
__CONFIG (_PWRTE_ON & _CP_OFF & _MCLRE_OFF & _WDT_OFF & _LVP_OFF & _INTRC_OSC_NOCLKOUT)
;definição de variaveis
CBLOCK 0X20
;----------------------------variaveis para LCD---------------------------------------------
LCDBUF ; não pode ser removido, para a Macro LCD
LCDTEMP ; não pode ser removido, para Macro LCD
LCDPORT ; Não pode ser removido ...Macro LCD
;------------------------------variaveis para Wait (delay)-----------------------------------
WCYCLE ; não pode ser removido, para Macro de delay WAIT
PRESCWAIT ; não pode ser removido, para Macro de delay WAIT
;-------------------------variavel para auxilio do LCD ... macro Print------------------------
POINTER ; não pode ser removido, para Macro PRINT
;----------------------variaveis para o conversor de 8 bits para DECIMAL macro LCDVAL8----------
TEMP1 ;
TEMP2 ; não pode ser removido, para Macro de conversão Binario em Decimal LCDV8
LO ; não pode ser removido, para Macro de conversão Binario em Decimal LCDV8
LO_TEMP ;não pode ser removido, para Macro de conversão Binario em Decimal LCDV8
BCHECK ; não pode ser removido, para Macro de conversão Binario em Decimal LCDV8
;-----variaveis de uso geral, aqui vc pode colocar o que vc quiser para seu programa normalmente -----------------------
TX ; variavel definida para receber dados da macro do LCD
COUNT ; variavel que define quantos pulsos o Shift register ira deslocar , normalmente é 8 (8bits, é melhor nao mexer hehehe) esta definido na macro 4015.inc
ENDC ; fim das definiçoes
;-------definição de qual pino da PIC vc quer usar para interface do modulo de saida serial----------------------------
#DEFINE DADOS_SAIDA PORTA,0 ; define qual pino sera saida de dados para o modulo serial
#DEFINE CLOCK PORTA,1 ; define qual pino sera o clock de maquina para o modulo serial
#DEFINE LATCH PORTA,2 ; define um controle de latch para o modulo serial
ORG 0X00
GOTO INICIO
ORG 0X04
RETFIE
;--- aqui é que vc vai incluir estas MACROS ----------------------------------------------------------------------------
#INCLUDE"BANK.INC" ; macro para definir qual banco sera usado, vc pode remover e utilizar a forma padrao
#INCLUDE"WAIT.INC" ; macro extremamente util, obrigatória para LCD e ao mesmo tempo util pra mais diversas finalidades
#INCLUDE"MODULO_LCD.INC" ; macro principal que une algumas macros e as rotinas para o LCD
#INCLUDE"PRINT.INC" ; macro auxiliar para LCD para imprimir cadeia de caracteres( strings), uso obrigatorio
#INCLUDE"LCDV8.INC" ; macro util para converter um byte em um numero decimal e apresentar no LCD
#INCLUDE"4015.INC" ; Macro que une o modulo serial ‘a macro do LCD, torna possivel o fluxo de dados em série
;----------------------------------------------------------------------------------------------------------------------
;----SETOR DE MENSSAGENS, aqui voce define todas mensagens que você quer por em forma de string no visor de LCD--------
MENSAGENS ; nao remova esta linha
MOVWF PCL ;
MENSAGE1 DT"Um eXemPlo" ; coloque suas menssagens, de ate 16 caracter
MENSAGE2 DT"balee" ; mesma coisa
MENSAGE3 DT" " ; mesma coisa
; repete suas meenssagens definindo tabela como é mostrado, mensage4, mensage5 etc....
FIM_MENSAGENS ; nao remova esta linha.... fim das mensagens
;______________________________________________________________________________________________
; definições de I/O dos pinos, nao esquecendo dos pinos para o modulo , já que os 3 pinos é saida, fica em 0 J
INICIO
BANK1
MOVLW B'00000000'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'10000000'
MOVWF OPTION_REG
MOVLW B'00000000'
MOVWF INTCON
BANK0
MOVLW B'00000111'
MOVWF CMCON
;-------------------------------------------------------------------------------------------------------------------------------------------------
; programa principal, aqui esta um exemplo do que pode ser feito com estas macros, note que é muito facil programar :)
MAIN
LCDINIT ; obrigatorio para inicialização do LCD
LCDLINE 1 ; comando que escolhe a linha 1 do LCD
PRINT MENSAGENS,MENSAGE1,MENSAGE2,POINTER,LCDW ; imprime a primeira mensagem
WAIT .20 ; espera um tempinho
LCDLINE 2 ; muda para linha 2 do LCD
PRINT MENSAGENS,MENSAGE2,MENSAGE3,FIM_MENSAGENS,LCDW ;imprime a mensagem 2
TRAVA
GOTO TRAVA ; como é um exemplo o programinha so faz isto :)
; de MAIN até aqui é o programa principal, o resto é o esqueleto da estrutura para programar com estas macros, ou seja, você pode fazer o que bem entender
; no seu programa principal, lembrando que para acessar os comandos das macros é preciso familializar-se com elas
;----------------estas 5 linhas une o fluxo de dados que vem da macro LCD para a macro CMOS4015 shift register, nao pode ser mexida----
SAIDA
MOVF LCDPORT,W
MOVWF TX ;
CMOS4015 TX,COUNT ; note que LCDPORT TX e COUNT é quem faz o elo do fluxo de dados
RETURN
;---------------------------------------------------------------------mas não mexa mesmo nestas linhas hehhehehehehheheh--------------------------
;********************************************************************************************************************
; de resto é com vc .... espero que este esquema possa ajudar de alguma forma J
;********************************************************************************************************************
END ; fim J