Logo Pisciotta

PISCIOTTA

Soluções Inteligentes

PROFESSOR

Listar
Artigos, curiosidades e muitas dicas.

Aproveite, curta, compartilhe.

Real Time Clock (RTC) DS1302



ARDUINO

1248 Views - 16 Curtidas




RTC (Real Time Clock ou Rel??gio de Tempo Real) s??o circuitos integrados capazes de armazenar informa????es de tempo (dia, hora, minutos e segundos), e que ap??s configurados, fazem a contagem do tempo sozinhos. Assim, a grosso modo, o microprocessador pode se dedicar a controlar suas fun????es sem se preocupar em errar o hor??rio caso alguma de suas tarefas demore mais do que 1 segundo para ser conclu??da. Por isso esses dispositivos s??o chamados de Rel??gios de Tempo Real, pois podemos estar certos de que a qualquer tempo que consultarmos o rel??gio, ele estar?? atualizado.

Os m??dulos RTC s??o compostos por um circuito integrado (CI) RTC, um cristal (caso ele n??o exista internamente ?? pastilha), e uma fonte de energia dedicada para manter sua mem??ria e a contagem do tempo mesmo que a alimenta????o principal seja cortada. Essa fonte de energia geralmente ?? uma bateria de 3V ou um supercapacitor.

RTC DS1302

O RTC DS1302 ?? um CI da MAXIM que necessita de um cristal externo e uma alimenta????o externa, e utiliza um protocolo de comunica????o TTL a 3 fios. Essa comunica????o a 3 fios n??o ?? I2C, n??o ?? SPI, n??o ?? UART. Por isso muita gente n??o gosta de utilizar esse CI, pois requer um sincronismo dedicado de bits para se conseguir realizar a leitura ou grava????o de dados no CI. O pr??prio site do Arduino.cc n??o recomenda o uso desse RTC devido a problemas com o cristal e tamb??m ?? complexidade do programa para permitir a comunica????o. Contudo, o usu??rio "Krodal" criou um c??digo que facilita muito a vida do usu??rio, e depois a VirtuaBotix reuniu em uma biblioteca chamada virtuabotixRTC que pode ser baixada aqui. Esse c??digo controla os tr??s pinos do DS1302: I/O (entrada e sa??da de dados), clock (sincronismo) e CE (chip-enable, chamado de Reset no passado), e ?? permitido configurar quaisquer 3 pinos do arduino para essas fun????es.

O DS1302 funciona normalmente com tens??es entre 2,0V e 5,5V. O ano armazenado no DS1302 possui dois d??gitos, e vai de 00 para o ano 2000 at?? 99 para o ano 2099 *(nota: alguns outros dispositivos come??am a contar o ano em 1970 ou 1980. N??o ?? o caso do DS1302.). O chip possui ainda 31 bytes de mem??ria RAM que pode ser utilizada, mas claro que se as duas alimenta????es do chip forem extintas, esses dados ser??o perdidos. O CI pode trabalhar com formato de hora Europeu (24h) ou Americano (12h AM e PM). O consumo para o armazenamento da informa????o ?? inferior a 1 micro Watts.

O datasheet do DS1302 pode ser encontrado aqui.

O m??dulo que eu adquiri requer o uso de uma bateria CR2032 no suporte para manter o rel??gio trabalhando mesmo com falta de energia no sistema. Existem m??dulos que usam baterias menores, e outros que utilizam supercapacitores, mas alguns necessitam dessa alimenta????o externamente ao Vcc1. Portanto, aten????o ao m??dulo que voc?? possui.

A seguir se encontra o circuito para testar o seu rel??gio de tempo real. Importante salientar que o programa mostrado adiante vai gravar uma data e hora predefinidos toda vez que o arduino for inicializado. Portanto deve-se realizar a grava????o do arduino uma vez com essa linha de configura????o do m??dulo RTC, e logo depois gravar novamente o arduino com essa linha comentada, para ele n??o mais voltar a data e hora das pr??ximas vezes que o arduino for inicializado.


//Programa Exemplo dispon??vel do site VirtuaBotix
#include 
//Define os pinos utilizados (CLK, DAT, RST)
myRTC(4, 3, 2);

void setup() {
Serial.begin(9600);

// Acerta o rel??gio com a data e hora no formato:
// segundos, minutos, horas, dia da semana, dia do m??s, m??s, ano
myRTC.setDS1302Time(00, 05, 17, 6, 21, 4, 2017);
//?? importante carregar esse c??digo no Arduino uma vez para configurar o RTC
//Mas logo em seguida deve-se comentar a linha do myRTC.setDS1302Time
//ou seu Arduino vai fazer seu rel??gio voltar a esta data toda vez que for reiniciado
}

void loop() {
// Atualiza as vari??veis de tempo.
myRTC.updateTime();

// Imprime os elementos individuais
Serial.print("Data/hora atual: ");
Serial.print(myRTC.dayofmonth);
Serial.print("/");
Serial.print(myRTC.month);
Serial.print("/");
Serial.print(myRTC.year);
Serial.print(" ");
Serial.print(myRTC.hours);
Serial.print(":");
Serial.print(myRTC.minutes);
Serial.print(":");
Serial.println(myRTC.seconds);

// Aplica espera de 1 segundo
delay(1000);
}

Carregue o c??digo no seu Arduino e abra o Serial Monitor para visualizar a data/hora atual.

Com esse c??digo e algumas pequenas modifica????es ?? poss??vel construir um rel??gio personalizado, e at?? automatizar algumas opera????es cotidianas. Consulte o link com o projeto Lumin??ria Autom??tica para Aqu??rio que eu fiz.

Se voc?? gostou, clique em Curtir e compartilhe com seus colegas esse site. Fique ?? vontade para fazer cr??ticas e propor novos temas na ??rea de Contato. ;)