RTC Tiny com chip DS1307 e Arduino UNO

clock

Um RTC (Real Time Clock) é um relógio de precisão dedicado a registro de data e hora, utilizado em projetos que necessitam acuidade de tempo. Apesar de parecer um dispositivo especial, trata-se de um acessório comum a praticamente todo o equipamento microprocessado como smartphones, tablets, computadores desktop, notebooks, máquinas fotográficas, filmadoras, etc.

Se você chegou até esse post, a sorte é minha e não sua, porque é muito simples e comum a utilização desse popular dispositivo e você encontra facilmente tutoriais com uma simples busca no google. Ainda assim, eu não poderia deixar de ter uma referência e vou tentar ter algum diferencial em relação aos demais posts para que valha a pena para você utilizar o meu tutorial invés de outros.

Tenha paciência com a leitura, é bom saber exatamente o que você tem em suas mãos.

Características

O DS1307 é um relógio dedicado que exibe segundos, minutos, horas, dia do mês, mês, dia da semana e ano, incluindo ano bi-sexto.

Além da sua função especialista, ele oferece ainda um espaço extra de 56 bytes de NVRAM (Non Volatile Randomic Access Memory), que é mantida pela bateria com praticamente nenhum consumo. É um recurso bastante interessante, pois se você precisa armazenar dados de tempo inclusive para registrar startup e shutdown, não será necessário esmirilhar a EEPROM do Arduino.

Ele possui uma interface serial two-wire e para utilizá-lo com Arduino, uma das bibliotecas a ser utilizada é a Wire.

Ele possui uma saída de sinal de onda quadrada programável, de 1Hz a 32.768kHz.




Seu consumo é incrivelmente baixo; menos de 500 nA (nano Ampere).

Descrição

Essas informações que disponibilizo estão no datasheet, sinta-se à vontade para lê-lo (em inglês).

Sua pinagem oferece cascata para comunicação I2C; endereço e dados são transferidos via 2-wire bidirecional. Seu ajuste para meses de 31 dias e anos bisexto são feitos automaticamente, portanto você não precisará se preocupar em monitorá-lo. Outra característica importante é que ele oferece o modo 24h ou 12h com indicador AM/PM. Ele tem um circuito sensitivo que detecta falhas de alimentação e entra automaticamente em modo de bateria, consumindo menos de 500nA.

Operação

Esse RTC é um dispositivo passivo, ou seja, ele recebe comandos via barramento serial. O protocolo de comunicação tem uma condição de START e se encerra na condição de STOP.

Pinagem

Wiring
Wiring

VCC e GND – são conectados ao Arduino em 5v e ground.

Vbat – o slot recebe uma bateria de lithium de 3v, que é considerada em boas condições de uso quando entre 2v e 3.5v. Em baixa tensão, não é possível utilizar a NVRAM. Uma bateria de 48mAh teoricamente dá ao dispositivo uma capacidade de trabalho superior a 10 anos, trabalhando a 25 graus.

SCL – Serial Clock. Utilizado para sincronismo na interface serial.

SDA – Serial Data I/O. Comunicaçãoda interface 2-wire.

Precisão do relógio
A precisão é dependente do cristal e variação de temperaturas. Ruídos de circuito externo à MCU podem acelerar o relógio, mas podemos considerar um circuito de qualidade esse do Tiny RTC.

Endereçamentos
memory-rtc

Não é algo que tenhamos que nos preocupar, uma vez que utilizaremos um interface de alto nível para a comunicação, mas se tiver interesse em saber a estrutura dos dados. O relógio está na área de endereço de 00H (segundos) ao 07H (controle). De 08H até 3FH está toda a memória.

Você pode obter de forma independente cada um dos valores dos registros de memória, consultando-os diretamente. Os dados são armazenados no formato BCD (binary-coded decimal). O bit 6 do registrador de hora define o forma 12/24 (lembrando que cada registrador possui 8 bits).

Só descrevi alguns detalhes extras para se ter uma idéia de como o hardware funciona e de que não é trivial a comunicação, por isso as bibliotecas são muito bem-vindas.

RTCLib x DS1307new

Optei por utilizar a DS1307new porque apesar da suave diferença, me pareceu mais flexível para fazer uma função de ajuste do relógio a qualquer momento. Não vi algo do tipo em nenhum tutorial, então achei um diferencial legal, espero que goste tambem.

Criei a função de ajuste de relógio e um menu para exibir hora, data, data/hora e fazer o tal ajuste. Para ver o menu, apenas digite “ajuda” (sem aspas).

A biblioteca pode ser baixada nesse link. O código que utilizei já nesse primeiro momento no Arduino:




Menu de Opções
Menu de Opções

O terminal serial precisa estar com a opção newline selecionada porque 0x0D (ou “LF” (Line Feed), ou ‘n’) está sendo usado como delimitador na leitura serial.

Resta uma etapa; utilizar essa memoria sobressalente do RTC, que além de tudo é NVRAM e pode ser escrita à vontade. Mas essa deixarei para um próximo post porque preciso escrever mais dois que estão na fila.

Se gostou, acompanhe-nos no Do bit Ao Byte no facebook e até o próximo!



Comments

comments

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.

Deixe uma resposta