17 de jul de 2012

Relógio LCD com números grandes

Durante o desenvolvimento do projeto de um robô de sumô para a disciplina de projeto integrado II do curso de Engenharia de Controle e Automação, me deparei com a necessidade de mostrar informações numa tela de LCD caractere de 20X4, porém uma grande limitação destes displays facilmente encontrados a venda no comércio é o tamanho efetivo do caractere.

Pensando nisto busquei um artigo que havia me deparado na internet, em que o programador utilizava mais de um caractere para a construção dos dígitos a serem exibidos. O artigo em questão pode ser visto aqui.

Utilizando a técnica descrita anteriormente, aqui mesmo neste blog  foram criados alguns caracteres especiais que formam os dez algarismos utilizados para a criação deste relógio que apresento hoje a vocês.

Caracteres Especiais

A junção de quatro destes caracteres especiais formam um numeral decimal que ocupa o lugar de seis caracteres do display com exceção dos dois últimos caracteres que formam os pontos para divisão dos dígitos do relógio.

Para a base de tempo utilizamos o RTC PCF8583 contido na placa PK2Lab, que nos retorna de forma serial as informações referentes a hora, minutos e segundos e ainda gera um sinal de clock de 1Hz  para a atualização dos dados no display a cada segundo.

O microcontrolador escolhido para este exemplo é o PIC18F4520, por ser o microcontrolador escolhido pela Microchip como substituto natural ao PIC16F877 sendo a pinagem totalmente compatível com os microcontroladores da linha 16F, portanto os pinos de comunicação I2C também seguem esta regra, consequentemente a placa tem que estar com os jumpers na posição 16F e não na posição 18F como usual.

1

Os pinos de enables dos leds devem estar dasabilitados para não influenciarem na comunicação serial I2C.

O programa foi desenvolvido utilizando a ferramenta MikroC PRO e foi baseado no código exemplo do RTC que acompanha a placa, apenas foram feitas algumas modificações para a inserção do código que gera os caracteres maiores no LCD.

Para este projeto foi utilizado o oscilador interno de 8MHz do microcontrolador, é importante observar que por default o microcontrolador opera com uma frequência de 1MHz e é necessário que sejam setados dois bits do registrador OSCCON para configurar a frequência de 8MHz.

OSCCON.B5 = 1;            // Ajusta oscilador interno para 8MHz
OSCCON.B4 = 1;            // Ajusta oscilador interno para 8MHz

Foram criadas algumas funções para conversão e exibição dos números no LCD.

void Caracter_Especial()         

Cria os caracteres especiais na CGRAM do display LCD

void Converte_Numeros(char numero,char lin, char col)

Efetua a conversão dos numeros do RTC para os digitos grandes

void Display_Time()

Mostra os digitos na tela do display LCD

void ZERO(char linha, char coluna)

Prepara os caracteres especias para exibição dos digitos grandes

void PONTOS(char linha, char coluna)

Prepara os caracteres especiais para exibição dos pontos


O resultado pode ser visto abaixo:

DSC00926

 

 

Código do projeto

4 comentários:

  1. Heim cara gostaria de colaborar com o blog, com alguns projetos que tenho desenvolvido, curti seus ideais e tenho os mesmos pensamentos, todos os meus algoritmos estão linha por linha comentados, quem sabe esse humilde porém rico em detalhes blog não venha num futuro próximo virar um site, conhecido, estou procurando algo sem fins lucrativos mais como algo beneficente para ajudar quem gostaria de aprender mas não tem condições, quase desisti por causa dessa falta de apoio. mas hoje estou aqui, não tenho emprego na área mais estou lutando para isso e além disso ensinar é o melhor meio de aprender e aprimorar. caso interesse me adicione no msn: edu_element190@hotmail.com

    esse trabalho seria, bom minha parte estou fazendo saka, tipo ter a alma limpa que você está fazendo algo não só para você. mas para pessoas que tem curiosidade mas não tem oportunidade.

    ResponderExcluir
    Respostas
    1. Olá Eduardo,toda ajuda é sempre muito bem vinda, porém o blog é baseado na placa PK2Lab que é um projeto bem bacana e que visa tornar mais fácil a vida do estudante da área de microcontroladores, tendo um custo benefício bem interessante, caso queira desenvolver algum código e nos enviar ficaremos muito gratos porém deverá utilizar a mesma configuração da placa PK2Lab(I/Os, períféricos...)já estou enviando para o seu e-mail o manual de uso da placa. Caso queira entrar em contato meu e-mail é tossupper@gmail.com

      Excluir
  2. Ola amigo

    Como eu faso isso em linguagem basic ,usando copilador mkrobasic ?

    Abraços

    ResponderExcluir
  3. Caro Jean,

    gostei muito do seu blog

    como podemos fazer para trocar ideias sobre microcontroladores pic ?

    eu posso usar a parte do teu programa que detecta pulso no PIC16F628A?

    como faço para obter literatura a respeito do que significa no seu programa
    Pulso = (Tempo_H<<8)+ Tempo_L; ,ISTO É H<<8

    COMO POSSO APRENDER COM VOCE COMO DETECTAR PULSO COM CCP1 COM PIC16F628A COM MIKROC PRO FOR PIC

    UM ABRAÇO

    Maciel

    ResponderExcluir