O DS1302 é um circuito integrado que realiza um trabalho de contagem do tempo em tempo real (RTC) de forma independente do microcontrolador e com apenas uma bateria de 3v usado em balanças pode realizar esse trabalho por anos.
Aplicações
- Datalogger;
- Estações meteorológicas;
- Relógio;
- Alarmes.
Especificações
- Voltagem de Trabalho: 2v ~ 5v5;
- Corrente de Trabalho: 300nA;
- Encapsulamento: PID e SO;
- Interfaces de comunicação: 3 Fios.
Faixa de contagem
- Segundos;
- Minutos;
- Horas;
- Data do mês;
- Mês;
- Dia da semana e ano com ano bissexto;
- Compensação válida até 2100.
DS1302 Peculiaridades
O DS1302 é vendido como módulo em diversas lojas e até mesmo em nossa loja na shopee mas caso tenha os componentes, pode ser montado de forma muito fácil pois o circuito é composto pelo CI, cristal de 32,768kHz e um slote para bateria de 3v.

DS1302 e Arduino Diagrama
Como não foi encontrado uma biblioteca para ilustrar o módulo RTC no programa Fritzing, foi recriado na protoboad, e os fios Amarelo, Verde e laranja representam respectivamente: CE, IO/DATA e SCLK.

Código do DS1302 com Arduino
Existem diversas bibliotecas para usar o DS1302 com Arduinos e ESP32, mas em diversos testes realizado houve alguns problemas ao decorrer do tempo como os agilizar muito o tempo e dias. No entanto, a biblioteca que deu a maior mobilidade e não apresentou problemas foi a do Matt Sparks.
#include <stdio.h>
#include <DS1302.h>
namespace {
const int kCePin = 8; // Chip Enable
const int kIoPin = 7; // Input/Output
const int kSclkPin = 6; // Serial Clock
DS1302 rtc(kCePin, kIoPin, kSclkPin);
String dayAsString(const Time::Day day) {
switch (day) {
case Time::kSunday: return "Sunday";
case Time::kMonday: return "Monday";
case Time::kTuesday: return "Tuesday";
case Time::kWednesday: return "Wednesday";
case Time::kThursday: return "Thursday";
case Time::kFriday: return "Friday";
case Time::kSaturday: return "Saturday";
}
return "(unknown day)";
}
void printTime() {
Time t = rtc.time();
const String day = dayAsString(t.day);
char buf[50];
snprintf(buf, sizeof(buf), "%04d/%02d/%02d %02d:%02d:%02d",
t.yr, t.mon, t.date,
t.hr, t.min, t.sec);
Serial.println(buf);
}
}
void setup() {
Serial.begin(9600);
rtc.writeProtect(false);
rtc.halt(false);
Time t(2021, 6, 27, 22, 14, 00, Time::kSunday);
rtc.time(t);
}
void loop() {
printTime();
delay(1000);
}
Funcionamento
No vídeo abaixo é a saída serial do Arduino e durante alguns momentos foi resetado o nano para mostrar que o DS1302 continua contando o tempo, o mesmo acontece caso desligue o RTC e esteja com bateria.
Considerações
O DS1302 é um componente muito simples de ser usado para implementação de RTC em projetos com Arduino, usando apenas 3 componentes.