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

13 comentários:

  1. Parabéns pelo blog.

    Só para agregar um pouco mais, você ainda pode economizar um pino do PIC. Não é necessário usar o pino RW do LCD pois você está sempre escrevendo no mesmo.
    Talvez esse pino sobrando seja interessante em algumas situações.

    ResponderExcluir
  2. É uma boa idéia, não o fiz pois como o projeto é simples não necessitei de mais pinos livres, mas sem duvida é uma observação legal.
    Obrigado por visitar o eletronicaffa.
    Até mais

    ResponderExcluir
  3. ola amigao gostaria de sabe se possivel me enviasse para albertoice@yahoo.com.br
    os codigo em mikroc
    e tambe gostaria de receber menu em css com seguinte:
    voltimetro
    rpm
    temperatra

    etc

    ResponderExcluir
  4. Dwou

    ola rafael gostei do seu projeto pretendo montar um , queria saber se tem como passar as entradas de ajustes (h/m/s/d)pra nivel lógico baixo

    ResponderExcluir
  5. ola refael fiz esse projetinho seu do relógio mais ao acionar o pino numero dois ra3 do 16f628a, não muda nada no lcd, fica estático DOMINGO 00:00:02,estou usando um oscilador de 4 Mh

    ResponderExcluir
  6. Olá Rafael, acho q vc é minha solução...
    Estou precisando fazer esse modelo de relogio para esse bimestre, mas precisa ser com o mikroc. será que vc poderia postar ou me enviar o arquivo??
    Brigadão
    Ricardo
    rricardofsantana@ig.com.br

    ResponderExcluir
  7. eu lhe enviei convite no seu e-mail precisaria tirar umas duvidas se vc puder ajudar. vitor0702@hotmail.com

    ResponderExcluir
  8. olá rafael achei seu projeto interessante pois montei o mesmo e não apareceu nada no lcd estou usando um ocilador de 4mhz e nada se tiver tempo responda por favor.

    ResponderExcluir
  9. Boa tarde amigo, este relógio você pode fazer uma 2 versão com o DS1307.
    obrigado.
    Florisvaldo.

    ResponderExcluir
  10. vc colocou o hex errado , diferente do codigo fonte,por isso nao funciona

    ResponderExcluir
  11. Olá Rafael, vc tem um email. para responder minha duvida? eu queria fazer este projeto mais queria mudar o texto inicial do display. tem como?
    abço
    Marcos A.

    ResponderExcluir
  12. Boa noite colega Rafael,
    Meus parabéns, muito bom projeto,
    Mas gostaria de sua ajuda,
    Quando compilo o programa, da um ( 1 warnings),
    Não tem erro, mas essa advertências ta dando erros no display,
    Abrç~...

    ResponderExcluir
  13. Lembrando que o código fonte foi elaborado em linguagem C, e compilado com o CCS, tem como vc disponibilizar o mesmo feito com o MikroC.

    ResponderExcluir