Introdução
Projetos envolvendo comunicação entre microcontrolador e PC são comuns na maioria das aplicações onde a captura de dados externos, ou o envio de dados para fora do computador seja o foco principal do projeto. O objetivo deste artigo é apenas didático, serve para orientar o iniciante em programação à fazer uma simples aplicação que, irá capturar a hora do sistema em segundos e enviar para o microcontrolador via porta Serial, para que o mesmo interprete e mostre em um display LCD atualizando a hora a cada segundo.
O projeto foi dividido em três partes, a primeira é a parte de hardware que trata do circuito elétrico do relógio, a segunda é a parte de software que trata da aplicação que roda no PC, e a terceira é a parte do firmware do microcontrolador que controla o relógio.
Hardware
Abaixo podemos ver que o circuito elétrico do relógio é bem simples, e pode ser montado em um protoboard, a alimentação do circuito é feita pela porta USB através da placa conversora USB/SERIAL com o chip da FTDI. O conector CN1 pode ser substituído por fios jumpers (aqueles que o Arduino usa) conforme veremos no vídeo de funcionamento.

Esquema elétrico
Software
Este software é o responsável por capturar a hora do PC, transformar tudo em segundos e enviar para a porta serial RS-232, e foi desenvolvido em C# utilizando o compilador Microsoft Visual C# 2010 pois facilita a comunicação com a porta Serial.

Nele temos um componente Timer que fica capturando a hora do sistema a cada segundo, e após isso são inseridos dois caracteres para informar ao PIC quando a transmissão começa e quando termina, a string final que é enviada ao PIC tem o seguinte formato: Ex: “<4000>” onde o caracter ‘<‘ indica para o PIC começar a capturar os caracteres que compõem a hora, e o caracter ‘>’ indica para o mesmo finalizar a captura da hora, e ao final temos somente o valor referente à hora em segundos “4000” sem os caracteres “< >” isso servirá para facilitar a conversão dessa string para um valor inteiro.
Firmware
O firmware do microcontrolador PIC, foi escrito em linguagem C utilizando o compilador da CCS, esse código também está incluso para download no final dessa página, os trechos principais desse serão tratados abaixo.
Para que possamos visualizar a hora no display do relógio precisamos extrair da string recebida, a hora, os minutos e os segundos, mas antes é necessário converter essa string em um valor inteiro de 32bits, pois para o valor máximo de horas ex: meia noite temos o valor 86400, o que supera o tamanho do tipo int, que no compilador CCS é de 8 bits (0 a 255), portanto a variável que armazena esse valor é do tipo int32 do compilador da CCS, e com o uso da função atoi32() é possível fazer essa conversão como segue abaixo.
/* armazena a hora recebida do PC */
int32 con=0;// converte a string de horas em um valor inteiro
con = atoi32(HoraRcv);

Abaixo temos detalhes da função converte(); do código do microcontrolador PIC.
// obtém a hora
R.h = con / 3600;
// obtém os minutos
R.m = (con % 3600) / 60;
// obtém os segundos
R.s = (con % 3600) % 60;
Por se tratar de um projeto didático, o mesmo foi montado em protoboard, mas se tiver experiência em PCI poderá confeccionar uma placa para o circuito.
Qualquer dúvida em relação ao artigo, deixe seu comentário abaixo, e aproveite para visitar e se inscrever em nosso Canal no YouTube.
Downloads
Cientista computacional e técnico em eletrônica com mais de 4 anos de experiência. Trabalhei 4 anos na área de reparação de produtos eletrônicos de consumo, e atualmente trabalho com P&D na área de sistemas embarcados desde 2015, projetando e desenvolvendo soluções eletrônicas completas utilizando microcontroladores e afins.

boa noite
vc faz este timer pra vender? E tem como fazer este timer pra programar via bluetooth, ou seja, alterar a programacao de acordo com as condicoes climaticas.. pra hidroponia?
grato
Olá, infelizmente não faço, mas vou deixar o link de um que eu fiz para hidroponia, porém sem bluetooth, mas tem diagramas do hardware caso queira montar.
https://www.youtube.com/watch?v=7MVoOfcIlVY
Valeu!