Подключение DS3231 в корпусе SO-16 на основе даташита. 

Распиновка DS3231 (SO-16)

Номер ножки Название Описание
1 32kHz Выход 32 кГц (опционально, требует подтяжки к VCC через резистор 10 кОм)
2 VCC Основное питание (+2.3V–5.5V)
3 INT/SQW Выход прерывания или меандра (открытый сток, подтяжка к VCC)
4 RST Сброс (активный низкий уровень, внутренняя подтяжка к VCC)
5–12 N.C. Не подключены (должны быть заземлены!)
13 GND Земля
14 VBAT Резервное питание (батарейка 3V, например, CR2032)
15 SDA Данные I²C (открытый сток, подтяжка к VCC через 4.7 кОм)
16 SCL Тактирование I²C (подтяжка к VCC через 4.7 кОм)

Схема подключения к Arduino (ESP)

 
DS3231 (SO-16)   →   Arduino (Uno/Nano)
------------------------------------
VCC (2)          →   5V (или 3.3V)
GND (13)         →   GND
SDA (15)         →   A4 (SDA)
SCL (16)         →   A5 (SCL)
INT/SQW (3)      →   Цифровой пин (опционально, для прерываний)
VBAT (14)        →   CR2032 (плюс к VBAT, минус к GND)
  • Ножки 5–12 (N.C.) должны быть заземлены (подключены к GND), иначе возможны сбои!

  • Подтяжка SDA/SCL к VCC через резисторы 4.7 кОм обязательна (если их нет на модуле).

  • Для INT/SQW (прерывания) нужна внешняя подтяжка к VCC.

Важные нюансы из даташита

  1. Питание:

    • Основное (VCC): 2.3–5.5V.

    • Резервное (VBAT): 2.3–5.5V (обычно 3V от батарейки).

    • Если VBAT не используется, подключите его к GND.

  2. I²C:

    • Адрес DS3231: 0x68 (шестнадцатеричный).

    • Скорость: до 400 кГц (Fast Mode).

  3. Температурная компенсация:

    • DS3231 автоматически корректирует ход часов на основе температуры.

  4. Кварцевый резонатор:

    • Встроен в корпус SO-16, внешний кристалл не нужен.

Пример кода для Arduino

#include <Wire.h>
#include "RTClib.h"  // Библиотека RTClib от Adafruit

RTC_DS3231 rtc;

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

  if (!rtc.begin()) {
    Serial.println("DS3231 не найден!");
    while (1);
  }

  // Установка времени (раскомментируйте для первого запуска)
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}

void loop() {
  DateTime now = rtc.now();
  
  Serial.print("Дата: ");
  Serial.print(now.day());
  Serial.print(".");
  Serial.print(now.month());
  Serial.print(".");
  Serial.println(now.year());
  
  Serial.print("Время: ");
  Serial.print(now.hour());
  Serial.print(":");
  Serial.print(now.minute());
  Serial.print(":");
  Serial.println(now.second());
  
  delay(1000);
}

Подключение SQW/INT (опционально)

Если нужно использовать прерывания или меандр:

  1. Установите бит INTCN в регистре управления (0x0E):

    • INTCN = 1 — прерывание по будильнику.

    • INTCN = 0 — меандр (частота настраивается битами RS2/RS1).

  2. Подключите INT/SQW (ножка 3) к цифровому пину Arduino через подтяжку.

Ошибки, которых стоит избегать

  1. Не подключайте N.C. (5–12) к VCC — только к GND!

  2. Не забывайте подтяжки для SDA/SCL и INT/SQW.

  3. Проверьте полярность VBAT (CR2032).