Обзор
DS1302 — это микросхема часов реального времени (RTC) с малым энергопотреблением, которая обеспечивает точный учет секунд, минут, часов, дней месяца, месяцев, дней недели и лет. Главными особенностями чипа являются использование нестандартного 3-wire интерфейса и наличие 31 байта встроенной SRAM для хранения пользовательских данных.
DS1302 работает по проприетарному 3-проводному последовательному протоколу (не путать с I2C или SPI). Он оснащен системой двойного питания с интеллектуальной схемой Trickle Charger, позволяющей подзаряжать резервный аккумулятор или ионистор прямо во время работы от основного источника.
Быстрая навигация
Примеры кода
Характеристики DS1302
DS1302 отличается чрезвычайно низким потреблением энергии в режиме удержания времени.
Энергопотребление и Trickle Charger
Чип спроектирован для работы десятилетиями от одной батарейки:
- В режиме ожидания (2.0В): менее 300 нА.
- В активном режиме (5.0В): менее 1.2 мкА.
- Trickle Charger: Внутренний регистр управления позволяет выбрать один или два диода и резистор (2к, 4к или 8к Ом) для зарядки резервного источника (аккумулятора LIR2032 или суперконденсатора).
Распиновка DS1302
Интерфейс DS1302 использует три основные линии связи, которые требуют внимания при программной реализации.
| Пин | Тип | Описание | Функция |
|---|---|---|---|
| VCC2 | Питание | Основное питание (Primary) | Работа модуля |
| VCC1 | Резерв | Резервное питание (Backup) | Батарейка / Ионистор |
| SCLK | Вход | Serial Clock | Синхронизация данных |
| I/O (DAT) | I/O | Линия данных | Двунаправленная шина |
| RST (CE) | Вход | Chip Enable / Reset | Управление сессией (High = ON) |
Подключение DS1302 к ESP32
Поскольку интерфейс нестандартный, мы можем использовать любые свободные GPIO. В примере ниже используются стандартные пины для большинства библиотек.
| DS1302 Пин | ESP32 Пин | Важное примечание |
|---|---|---|
| VCC (VCC2) | 3.3V / 5V | Работает при 3.3В, но 5В предпочтительнее для точности |
| GND | GND | Общая земля обязательна |
| RST (CE) | GPIO 5 | Высокий уровень разрешает обмен данными |
| DAT (I/O) | GPIO 18 | Двунаправленная линия (Data) |
| CLK (SCLK) | GPIO 19 | Тактовая частота (Clock) |
Устранение неполадок DS1302
Время "зависло" или не идет
Ошибка записи (Write Protection)
Мусор в данных (Burst Mode)
Примеры программирования DS1302
1. Arduino IDE
Рекомендуется использовать библиотеку RtcDS1302 от Makuna для надежной работы.
#include <ThreeWire.h>
#include <RtcDS1302.h>
// Пины: DAT (18), CLK (19), RST (5)
ThreeWire myWire(18, 19, 5);
RtcDS1302<ThreeWire> Rtc(myWire);
void setup() {
Serial.begin(115200);
Rtc.Begin();
if (Rtc.GetIsWriteProtected()) {
Rtc.SetIsWriteProtected(false);
}
if (!Rtc.GetIsRunning()) {
Rtc.SetIsRunning(true); // Сброс бита CH
}
}
void loop() {
RtcDateTime now = Rtc.GetDateTime();
Serial.printf("%02d:%02d:%02d\n", now.Hour(), now.Minute(), now.Second());
delay(1000);
}
2. PlatformIO
Добавьте зависимость в platformio.ini:
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps =
makuna/RTC @ ^2.3.5
3. MicroPython (Software Protocol)
Поскольку стандартного модуля I2C/SPI нет, используется программная реализация (Bit-banging).
from machine import Pin
import time
class DS1302:
def __init__(self, clk, dio, cs):
self.clk = Pin(clk, Pin.OUT)
self.dio = Pin(dio)
self.cs = Pin(cs, Pin.OUT)
def _write_byte(self, dat):
self.dio.init(Pin.OUT)
for i in range(8):
self.dio.value((dat >> i) & 1)
self.clk.value(1)
self.clk.value(0)
def _read_byte(self):
self.dio.init(Pin.IN)
dat = 0
for i in range(8):
if self.dio.value():
dat |= (1 << i)
self.clk.value(1)
self.clk.value(0)
return dat
def get_time(self):
self.cs.value(1)
self._write_byte(0xbf) # Burst read
res = [self._read_byte() for _ in range(7)]
self.cs.value(0)
return res
# Использование
rtc = DS1302(clk=19, dio=18, cs=5)
print("Данные RTC (BCD):", rtc.get_time())
Итоги
DS1302 — это “ветеран” среди RTC-модулей. Он уступает по точности DS3231 (из-за внешнего кварца), но выигрывает в цене и наличии дополнительной SRAM. Это отличный выбор для простых логгеров и систем, где отклонение в пару минут в месяц не критично.