O módulo RTC que comprei já tem o suporte para uma pilha, o que é óptimo! Caso falhe a alimentação do circuito, tudo vai abaixo excepto a temporização do DS1302.
No entanto tem de haver uma simples possibilidade de se poder actualizar as horas sem que o programa fique bloqueado cada vez que a energia falhe.
Para resolver essa questão, implementei o seguinte: o programa inicia e via serial (com um baudrate de 19200) envia uma mensagem a questionar se é pretendida alguma configuração. São activadas então 2 interrupções, uma pelo Timer0 e outra pela chegada de uma caracter à USART.
Numa situação comum de falha de energia e regresso, o Timer0 irá contar 10s e o programa avançará sem que se passe pelo processo de configuração.
Detalhe das 3 possibilidades de iniciação:
* Por overflow do Timer0: na verdade o overflow deste timer irá ocorrer 610 vezes (correspondente a cerca de 10s) antes de uma flag ser colocada a 1 dentro do ISR. Conclui-se com isso que houve uma falha de energia e que ninguém quer actualizar horas.
* Receber um caracter diferente de "S" ou de "s": neste caso é assumido que a pessoa tem o terminal ligado mas simplesmente não pretende fazer qualquer configuração no relógio. A flag é colocada com o valor 2 e no main() segue um rumo semelhante ao 1º caso.
* Receber o caracter "S" ou "s": neste caso entende-se que a pessoa deseja configurar o relógio, é colocada a flag com o valor 1 e no main() (ver figura em baixo) é chamada a função que dá inicio à configuração.
Na figura seguinte é visível um pedaço da função de configuração, neste caso apenas correspondente às horas.
Em resumo, são enviadas duas mensagens, uma dá conta da "Etapa de configuração" e a outra dá as instruções de introdução de horas.
Qualquer valor (de 2 números) que não esteja no intervalo 0<horas<13, é descartado e o ciclo repete novamente.
De um modo geral as partes principais da inicialização estão explicadas em cima.
Nas figuras seguintes irão surgir alguns exemplos do que já foi falado, em ambiente de simulação.
* 10s sem actividade na usart
* Introdução de caracter diferente de "S" ou "s"
* Introdução de caracter "S" ou "s"
"Não percam os próximos episódios, ..."
0 Responses so far.
Enviar um comentário