sábado, 8 de janeiro de 2011

Relógio Calendário PIC16f628a e LCD


Olá meus queridos, hoje irei falar como usei o PIC para exibir o horário, e o dia da semana.
Lembrando que o código fonte foi elaborado em linguagem C, e compilado com o CCS, em breve estarei disponibilizando o mesmo feito com o MikroC.

O cerebro do projeto é o microcontrolador PIC16f628a, que é bastante conhecido, e creio que seja um dos mais utlizados atualmente.Ele fará o controle do display LCD 16x2 além de ler 4 teclas que farão o ajuste de:
Segundo;
Minuto;
Hora;
Dia da semana.
Quando pressionamos a tecla desejada, está irá incrementar 1 na variavel que desejamos modificar (sec,min...).
As teclas estão ligadas ao GND, e no outro terminal temos resistores de pull-up ligados ao Vcc, que irá impor nível lógico 1 no pino do PIC quando as teclas estiverem soltas.

Para inicializar o LCD foi usada a biblioteca do CCS 4.12, que contém todas sa funções necessárias para manusea-lo, entre as principais podemos destacar:
lcd_init(); // Inicializa LCD
lcd_putc('x'); // Imprime caractere em que x é o caractere a ser impresso
lcd_gotoxy(C,L); // Descola cursor, em que C = coluna, L = linha.

Como eu mencionei acima, para termos o clock necessário para o funcionamento do relógio, usamos o TIMER0, e para gerar a interrupção, aplicamos a técnica conhecida como acumulo de erros, em que uma variavel de 16bits com sinal (signed int16), é divida a cada interrupção.
Como o cristal usado é de 4MHz, e temos o clock dividido internamente por 4, com isso o que operará o PIC é de 1MHz.

Na diretiva setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_64 ); usaremos o clock interno (1MHz), e o prescaler para dividi-lo por 64 que é o maior valor que resultará em uma frequência inteira:
1MHz / 64 = 15625Hz.
Ou seja a interrupção será gerada a cada 15625Hz.
Esse valor será atribuido a uma variavel (no nosso caso t0_conta) e cada ciclo de interrupção iremos subtratir 256 (este valor é o fator natural de divisão do TIMER0 e nos PICs da serie 16 é 8bits) desta variavel, e quando seu valor for menor ou igual a 0, significa que se passou 1s.Daí executamos os comandos necessários.

Por favor, peço que comentem sobre o projeto e explicação para juntos fazermos o blog cada vez melhor.

Qualquer dúvida entrem em contato comigo:
rafaelvarago@yahoo.com.br
Os arquivos encontram-se no meu disco virtual com o seguinte nome:"Relógio Calendário Timer0.rar ", e devem ser descompactados com WinRar ou semelhante.
Download Relógio Calendário

Até a próxima !!