DS3231 и DS1307 — часы реального времени с I²C
DS1307 и DS3231 — одни из самых распространённых микросхем часов реального времени с шиной I²C. Адрес у них один — 0x68, регистры времени почти совпадают, а различаются они питанием, кварцем и точностью: DS1307 работает только от 4,5–5,5 В с внешним часовым кварцем, DS3231 — от 2,3 до 5,5 В со встроенным кварцем и термокомпенсацией. Разбираем обе по даташитам Maxim Integrated (сейчас — Analog Devices).
Обновлено Редакция GAW
DS1307 и DS3231 — часы-календари для шины I²C: они считают секунды, минуты, часы, день недели, число, месяц и год, сами учитывают длину месяца и високосные годы (по даташитам — до 2100 года) и продолжают ход от батареи, когда основное питание пропадает. Время хранится в двоично-десятичном коде (BCD), и раскладка регистров 00h–06h у обеих почти одинаковая, поэтому программу легко перенести с одной на другую.
Коротко
- Адрес — 0x68 у обеих микросхем, изменить его нельзя.
- DS3231 — питание 2,3–5,5 В, кварц встроен, термокомпенсация: ±2 ppm при 0…+40 °C; I²C до 400 кГц, два будильника, датчик температуры.
- DS1307 — питание 4,5–5,5 В, внешний кварц 32 768 Гц на 12,5 пФ; I²C до 100 кГц, 56 байт ОЗУ с батарейным питанием.
- Батарея — DS1307 при VBAT = 3 В берёт до 500 нА с выключенным SQW/OUT и до 800 нА с меандром 32 кГц; DS3231 — 0,84 мкА типично и до 3 мкА при 3,63 В.
- Корпуса — DS1307 в DIP-8 и SO-8, DS3231 в SO-16 шириной 300 mil.
Чем различаются
| Параметр | DS1307 | DS3231 |
|---|---|---|
| Питание VCC | 4,5–5,5 В, типично 5 В | 2,3–5,5 В, типично 3,3 В |
| Батарея VBAT | 2,0–3,5 В | 2,3–5,5 В |
| Кварц | внешний, 32 768 Гц | встроенный, с термокомпенсацией (TCXO) |
| Точность хода | зависит от кварца и монтажа | при 3,3 В: ±2 ppm при 0…+40 °C, ±3,5 ppm до +70 °C (DS3231S) или в диапазоне −40…+85 °C (DS3231SN) |
| Шина I²C | до 100 кГц | до 400 кГц |
| Ток от батареи | 300 нА типично, до 500 нА (VBAT = 3 В, SQW/OUT выключен) | 0,84 мкА типично, до 3 мкА при 3,63 В |
| Выход меандра | SQW/OUT: 1 Гц; 4,096, 8,192 и 32,768 кГц | INT/SQW: 1 Гц; 1,024, 4,096 и 8,192 кГц, отдельный выход 32 кГц |
| Будильники | нет | два, с выходом прерывания |
| Дополнительно | 56 байт ОЗУ | датчик температуры, регистр старения, вывод сброса RST |
| Исполнения | DS1307 — 0…+70 °C, DS1307N — −40…+85 °C; Z — корпус SO | DS3231S — 0…+70 °C, DS3231SN — −40…+85 °C |
Распиновка DS1307
| Вывод | Обозначение | Назначение |
|---|---|---|
| 1, 2 | X1, X2 | кварц 32 768 Гц; на X1 можно подать сигнал внешнего генератора 32 768 Гц, тогда X2 не подключают |
| 3 | VBAT | батарея 2,0–3,5 В; если резервное питание не нужно, вывод соединяют с общим проводом |
| 4 | GND | общий провод |
| 5 | SDA | данные I²C, открытый сток — нужна подтяжка к питанию |
| 6 | SCL | тактовая линия I²C — с подтяжкой к питанию |
| 7 | SQW/OUT | выход меандра или логического уровня, открытый сток; если не нужен, его оставляют свободным |
| 8 | VCC | основное питание 4,5–5,5 В |
Подтяжки SDA, SCL и SQW/OUT по даташиту можно подключать к напряжению до 5,5 В независимо от VCC.
Распиновка DS3231
| Вывод | Обозначение | Назначение |
|---|---|---|
| 1 | 32kHz | выход 32 768 Гц от термокомпенсированного генератора, открытый сток; работает от любого из двух питаний, если не нужен — свободен |
| 2 | VCC | основное питание 2,3–5,5 В, блокировочный конденсатор 0,1–1,0 мкФ; если не используется — на общий провод |
| 3 | INT/SQW | выход прерывания будильников (активный ноль) или меандра, открытый сток; подтяжка — к напряжению не выше 5,5 В |
| 4 | RST | сброс: открытый сток с внутренней подтяжкой около 50 кОм к VCC и вход кнопки; внешнюю подтяжку ставить нельзя |
| 5–12 | N.C. | обозначены N.C., но по даташиту их обязательно соединяют с общим проводом |
| 13 | GND | общий провод |
| 14 | VBAT | батарея или второй источник 2,3–5,5 В; если не используется — на общий провод |
| 15 | SDA | данные I²C, открытый сток — с подтяжкой |
| 16 | SCL | тактовая линия I²C — с подтяжкой |
Внутри корпуса DS3231 стоит кварцевый камертон, поэтому Maxim советует избегать ультразвуковой отмывки, ограничивает пайку оплавлением двумя циклами и советует не вести дорожки под корпусом без слоя земли между ними.
Питание и батарея
DS1307. Пока VCC в норме, микросхема полностью доступна по шине. Когда VCC опускается ниже порога VPF = 1,25 × VBAT (по таблице — от 1,216 до 1,284 × VBAT), DS1307 обрывает текущий обмен и перестаёт принимать команды — так защищаются регистры от записи мусора при просевшем питании. Когда VCC становится ниже VBAT, часы переходят на батарею. При включении питание переключается обратно, когда VCC превысит VBAT на 0,2 В, а команды снова принимаются при VCC выше 1,25 × VBAT.
| Режим DS1307 | Ток | Условия |
|---|---|---|
| Обмен по шине, от VCC | до 1,5 мА | SCL 100 кГц |
| Ожидание, от VCC | до 200 мкА | VCC = 5 В |
| От батареи, генератор идёт | 300 нА типично, до 500 нА | VCC = 0, VBAT = 3 В |
| То же с меандром 32 кГц | 480 нА типично, до 800 нА | |
| Генератор остановлен (CH = 1) | 10 нА типично, до 100 нА | время не идёт, ОЗУ хранится |
Maxim пишет, что литиевой батареи ёмкостью от 48 мА·ч хватит DS1307 больше чем на 10 лет без основного питания при +25 °C. Арифметика сходится: 48 мА·ч / 0,5 мкА = 96 000 ч, почти 11 лет. Диоды последовательно с батареей по даташиту могут нарушить работу, а если батареи нет, VBAT обязательно соединяют с общим проводом.
DS3231. Здесь порог фиксированный: VPF от 2,45 до 2,70 В, типично 2,575 В. Микросхема питается от VCC, пока VCC выше VPF или выше VBAT, и переходит на батарею, только когда VCC ниже обоих (табл. 1 даташита). Шина I²C работает от любого из двух питаний. Чтобы не тратить батарею на складе, при первой установке батареи генератор не запускается, пока VCC не превысит VPF или пока по шине не придёт правильный адрес.
| Режим DS3231 | Ток | Условия |
|---|---|---|
| Обмен по шине, от VCC | до 200 мкА при 3,63 В, до 300 мкА при 5,5 В | SCL 400 кГц |
| Ожидание, от VCC | до 110 мкА при 3,63 В, до 170 мкА при 5,5 В | выход 32 кГц включён |
| От батареи, хранение времени | 0,84 мкА типично, до 3,0 мкА при 3,63 В | шина неактивна, EOSC = 0, BBSQW = 0, EN32kHz = 1 |
| От батареи, обмен по шине | до 70 мкА при 3,63 В, до 150 мкА при 5,5 В | SCL 400 кГц |
| Импульс измерения температуры | до 575 мкА при 3,63 В | раз в 64 с, учтён в средних токах |
| Генератор остановлен (EOSC = 1) | до 100 нА | +25 °C, время не идёт |
Средний ток хранения времени 0,84–3,0 мкА за год (8 760 ч) расходует от 7,4 до 26 мА·ч ёмкости батареи — это арифметика по таблице. Срок для своей батареи и своего режима удобно оценить в калькуляторе времени работы от батареи. Режим EOSC = 1 Maxim предлагает для хранения устройства до продажи: генератор стоит, батарея почти не расходуется.
Обе микросхемы признаны UL защищёнными от обратного тока заряда в литиевый элемент; DS3231 — при работе с первичным литиевым элементом. Цепей заряда батареи в даташитах нет. Если на готовом модуле стоит цепь, которая подаёт ток с VCC на батарею, это решение изготовителя модуля: проверьте по схеме своего модуля, на какой элемент она рассчитана.
Точность хода
DS3231 тактируется собственным кварцем, частоту которого подстраивает схема термокомпенсации: контроллер измеряет температуру при подаче питания и затем раз в 64 секунды, по таблице подбирает ёмкость нагрузки кварца и включает нужные конденсаторы. По даташиту (условия: VCC или VBAT = 3,3 В, регистр старения 00h):
| Температура | Отклонение частоты |
|---|---|
| 0…+40 °C | ±2 ppm |
| +40…+70 °C, коммерческое исполнение DS3231S | ±3,5 ppm |
| −40…0 °C и +40…+85 °C, промышленное исполнение DS3231SN | ±3,5 ppm |
| Зависимость от питания | 1 ppm/В типично |
| Старение кварца, первый год | ±1,0 ppm типично (после пайки, не проверяется в производстве) |
| Старение кварца, 0–10 лет | ±5,0 ppm типично |
Отклонение частоты в ppm переводится в уход часов простой арифметикой — умножением на время:
±2 ppm — до 0,17 с в сутки и около 63 с в год; ±3,5 ppm — до 0,30 с в сутки и около 110 с в год. С этим согласуется формулировка из описания даташита: точность хода ±2 минуты в год во всём диапазоне −40…+85 °C.
DS1307 собственного эталона не имеет. Даташит говорит лишь, что точность зависит от точности кварца, от того, насколько ёмкость нагрузки генератора совпадает с той, на которую настроен кварц, и от температурного ухода кварца; наводки от соседних цепей могут заставить часы спешить. Требования к кварцу (табл. 1 даташита):
| Параметр | Значение |
|---|---|
| Номинальная частота | 32,768 кГц |
| Последовательное сопротивление ESR | не более 45 кОм |
| Ёмкость нагрузки CL | 12,5 пФ |
Внешние резисторы и конденсаторы генератору DS1307 не нужны: он рассчитан на кварц с CL = 12,5 пФ, и с таким кварцем обычно запускается быстрее чем за секунду. Рекомендуемая разводка (рис. 2 даташита): не вести сигнальные дорожки в заштрихованной зоне — левой верхней четверти корпуса, где выводы X1 и X2, — если между дорожкой и корпусом нет слоя земли; на рисунке под этой зоной показан местный слой земли во втором слое. Кварц, его дорожки и выводы по примечанию к табл. 1 изолируют от источников ВЧ-сигналов. Что такое ёмкость нагрузки и почему от неё зависит частота, рассказано в статье «Кварцевый резонатор».
Регистры времени
Время и дата лежат в регистрах 00h–06h в формате BCD: старшая тетрада байта — десятки, младшая — единицы. Значение получают так:
где H — старшие четыре бита, L — младшие. Раскладка у DS1307 и DS3231 совпадает, кроме двух битов:
| Адрес | Бит 7 | Биты 6–0 | Диапазон |
|---|---|---|---|
| 00h | DS1307: CH, остановка генератора; DS3231: 0 | десятки и единицы секунд | 00–59 |
| 01h | 0 | минуты | 00–59 |
| 02h | 0 | бит 6 — режим 12/24 часа, бит 5 — AM/PM или «20 часов», биты 4–0 — часы | 1–12 или 00–23 |
| 03h | 0 | день недели | 1–7 |
| 04h | 0 | число | 01–31 |
| 05h | DS1307: 0; DS3231: бит века | месяц | 01–12 |
| 06h | — | год, все восемь битов | 00–99 |
Бит 6 регистра часов выбирает 12-часовой режим (1) или 24-часовой (0). В 12-часовом режиме бит 5 — признак PM, в 24-часовом — бит «20 часов», второй бит десятков часов (часы 20–23). Нумерация дней недели — на усмотрение программы, важно только, чтобы дни шли подряд. Бит века DS3231 переключается, когда год переходит с 99 на 00.
Дальше карты различаются. У DS1307 в 07h — регистр управления выходом SQW/OUT, а в 08h–3Fh — 56 байт ОЗУ с питанием от батареи и неограниченным числом записей. При многобайтном обмене указатель после 3Fh возвращается на 00h. У DS3231 в 07h–0Ah — будильник 1, в 0Bh–0Dh — будильник 2, в 0Eh — управление, в 0Fh — состояние, в 10h — регистр старения, в 11h–12h — температура; после 12h указатель переходит на 00h.
Пример: байты в часы и минуты
Допустим, чтение с адреса 00h вернуло семь байтов 45 30 69 07 18 10 26:
| Регистр | Байт | Разбор | Значение |
|---|---|---|---|
| 00h | 0x45 | 4 · 10 + 5 | 45 с |
| 01h | 0x30 | 3 · 10 + 0 | 30 мин |
| 02h | 0x69 | 0110 1001: бит 6 = 1 — 12-часовой режим, бит 5 = 1 — PM, бит 4 = 0, единицы — 9 | 9 PM = 21 ч |
| 03h | 0x07 | день 7 | воскресенье, если 1 — понедельник |
| 04h | 0x18 | 1 · 10 + 8 | 18-е число |
| 05h | 0x10 | бит 7 = 0, бит 4 = 1, единицы — 0 | октябрь |
| 06h | 0x26 | 2 · 10 + 6 | 26-й год |
Получается 18 октября 2026 года, 21:30:45. Если бы у DS1307 в регистре 00h оказалось 0x80, это означало бы 00 секунд и CH = 1: генератор стоит, часы не идут.
Даташиты требуют записывать только допустимые значения: «нелогичная» дата вроде 31 февраля даёт неопределённое поведение. Запись регистра секунд сбрасывает делитель, после чего остальные регистры времени нужно записать в течение секунды — проще всего одной транзакцией, как в коде ниже.
Управление и состояние
DS1307, регистр 07h управляет выводом SQW/OUT. Бит SQWE = 1 включает меандр, частоту задают биты RS1–RS0: 00 — 1 Гц, 01 — 4,096 кГц, 10 — 8,192 кГц, 11 — 32,768 кГц. При SQWE = 0 на выводе держится уровень бита OUT. На меандре 1 Гц регистры времени обновляются по его спаду. При первом включении обычно OUT = 0, SQWE = 0, RS1–RS0 = 11.
DS3231, регистр 0Eh (после включения — 0x1C):
| Бит | Имя | Назначение |
|---|---|---|
| 7 | EOSC | 1 — генератор останавливается при переходе на батарею; от VCC генератор работает всегда |
| 6 | BBSQW | 1 — меандр на INT/SQW (при INTCN = 0) не отключается, когда VCC падает ниже VPF; при 0 вывод в этот момент переходит в высокоимпедансное состояние |
| 5 | CONV | 1 — запустить внеочередное измерение температуры и подстройку частоты |
| 4–3 | RS2, RS1 | частота меандра: 00 — 1 Гц, 01 — 1,024 кГц, 10 — 4,096 кГц, 11 — 8,192 кГц |
| 2 | INTCN | 0 — на INT/SQW меандр, 1 — прерывание от будильников (после включения — 1) |
| 1, 0 | A2IE, A1IE | разрешение прерываний будильников 2 и 1 |
DS3231, регистр 0Fh:
| Бит | Имя | Назначение |
|---|---|---|
| 7 | OSF | генератор останавливался — время может быть неверным; сбрасывается только записью 0 |
| 3 | EN32kHz | 1 — выход 32kHz включён (после включения — 1) |
| 2 | BSY | идёт измерение температуры и подстройка |
| 1, 0 | A2F, A1F | флаги будильников; сбрасываются записью 0 |
Флаг OSF устанавливается при любой остановке генератора — например, при первой подаче питания, при слишком низком напряжении и на VCC, и на VBAT, при EOSC = 1 в режиме от батареи и от внешних помех или утечек на кварце. Чтобы флаг установился, генератор должен простоять около 100 мс (типичное значение tOSF). Программе стоит проверять OSF при старте: если он равен 1, время нужно установить заново, а затем записать в бит 0.
Будильники DS3231
Будильник 1 сравнивает секунды, минуты, часы и день или число, будильник 2 — то же без секунд. Бит 7 каждого регистра будильника — маска: если он равен 1, это поле не сравнивается. Так получаются режимы «раз в секунду» (будильник 1, все маски равны 1), «раз в минуту» (будильник 2, все маски — 1, срабатывает в 00 секунд), «по совпадению секунд», «минут и секунд» и далее до полного совпадения даты и времени. Бит 6 регистров дня или числа будильников (0Ah и 0Dh, бит DY/DT) выбирает, что сравнивать: 0 — число месяца, 1 — день недели. Комбинации масок, которых нет в табл. 2 даташита, дают непредсказуемый результат.
При совпадении устанавливается флаг A1F или A2F, а если включён соответствующий бит A1IE или A2IE и INTCN = 1, вывод INT/SQW уходит в ноль. Совпадение проверяется раз в секунду при обновлении времени. Флаг держится, пока программа не запишет в него 0, поэтому после обработки прерывания его обязательно сбрасывают.
Температура и регистр старения DS3231
Температура — 10-битный код в дополнительном коде с шагом 0,25 °C: целая часть в регистре 11h, два дробных бита — в битах 7–6 регистра 12h. Точность датчика — ±3 °C. Измерение идёт при включении и затем каждые 64 с, занимает 125 мс типично и до 200 мс. Внеочередное измерение запускает бит CONV; перед этим проверяют, что BSY = 0.
Пример из даташита: 11h = 0x19, 12h = 0x40 — код 00011001 01, то есть 25 + 0,25 = +25,25 °C. При отрицательной температуре дробь прибавляют к целой части со знаком: 11h = 0xF6 (это −10), 12h = 0x80 (0,5) — получается −10 + 0,5 = −9,5 °C, а не −10,5 °C.
Регистр старения 10h — поправка в дополнительном коде (−128…+127), которая добавляет или убирает конденсаторы из массива подстройки кварца. Положительное значение замедляет генератор, отрицательное — ускоряет. Чувствительность зависит от температуры, типичные значения на один шаг: при +25 °C — около 0,1 ppm, при −40 °C — 0,7 ppm, при +70 °C — 0,4 ppm, при +85 °C — 0,8 ppm. Новое значение применяется, только когда при очередном измерении изменилась температура или после ручного запуска CONV, поэтому сразу после записи стоит запустить CONV. Для точности из таблиц даташита регистр не нужен — он помогает скомпенсировать старение кварца при известной температуре.
Пример расчёта: если часы при комнатной температуре за неделю убегают вперёд на 1 с, частота выше на 1 / (7 · 86 400) ≈ 1,65 ppm, и поправка — около +16…+17 шагов. Это оценка по типичному значению 0,1 ppm на шаг, проверять её приходится новым замером хода.
Шина I²C
Семибитный адрес у обеих микросхем — 1101000, то есть 0x68; в восьмибитной записи — 0xD0 для записи и 0xD1 для чтения. Чем отличаются эти записи, рассказано на странице «Адрес I²C». DS1307 работает только в режиме Standard-mode — до 100 кГц, DS3231 — и в нём, и в Fast-mode до 400 кГц. Ёмкость каждой линии — до 400 пФ.
SDA у обеих — открытый сток, поэтому SDA и SCL подтягивают к питанию резисторами; номинал для своей ёмкости и частоты подбирает калькулятор подтяжки I²C. Уровень единицы на входах различается: у DS1307 — от 2,2 В, у DS3231 — от 0,7 × VCC. Устройство шины, режимы и подтяжки подробно разобраны в статье «Интерфейс I²C».
Чтение времени — одна транзакция: записать указатель регистра (байт 0x00), затем повторный старт с битом чтения и семь байтов подряд. На каждом старте микросхема копирует время в буфер, и чтение идёт из него, пока часы продолжают ход, — поэтому все семь байтов согласованы. Если же читать секунды и минуты разными транзакциями, между ними может смениться минута, а на границе часа или суток — час или дата. Указатель после каждого байта увеличивается сам; последний байт мастер не подтверждает.
Если микроконтроллер перезагрузился посреди чтения, DS3231 может держать SDA в нуле. Даташит советует подавать импульсы на SCL, пока SDA не освободится, и затем сформировать условие старта.
Код: чтение и установка времени
Пример для Arduino с библиотекой Wire работает с обеими микросхемами; адреса регистров — из табл. 2 даташита DS1307 и рис. 1 даташита DS3231.
#include <Wire.h>
const uint8_t RTC_ADDR = 0x68; // 7-bit address 1101000b, same for DS1307 and DS3231
uint8_t bcdToBin(uint8_t v) { return (v >> 4) * 10 + (v & 0x0F); }
uint8_t binToBcd(uint8_t v) { return ((v / 10) << 4) | (v % 10); }
// Write 00h..06h in one transaction, 24-hour mode. Seconds bit 7 = 0 also clears CH on DS1307.
void rtcSet(uint8_t year, uint8_t month, uint8_t date, uint8_t dow,
uint8_t hours, uint8_t minutes, uint8_t seconds) {
Wire.beginTransmission(RTC_ADDR);
Wire.write(0x00); // register pointer: seconds
Wire.write(binToBcd(seconds)); // writing seconds resets the divider chain
Wire.write(binToBcd(minutes));
Wire.write(binToBcd(hours)); // bit 6 = 0: 24-hour mode
Wire.write(dow); // 1..7, user-defined but sequential
Wire.write(binToBcd(date));
Wire.write(binToBcd(month));
Wire.write(binToBcd(year)); // 00..99
Wire.endTransmission();
}
void setup() {
Serial.begin(115200);
Wire.begin();
Wire.setClock(100000); // DS1307 is Standard-mode only; DS3231 accepts up to 400 kHz
// rtcSet(26, 10, 18, 7, 21, 30, 0); // uncomment once to set the clock
}
void loop() {
Wire.beginTransmission(RTC_ADDR);
Wire.write(0x00); // point to the seconds register
if (Wire.endTransmission(false) != 0 || // no STOP: repeated START follows
Wire.requestFrom(RTC_ADDR, (uint8_t)7) != 7) {
Serial.println(F("RTC does not answer at 0x68"));
delay(1000);
return;
}
uint8_t r[7];
for (uint8_t i = 0; i < 7; i++) r[i] = Wire.read();
bool halted = r[0] & 0x80; // DS1307: CH = 1, oscillator stopped
uint8_t seconds = bcdToBin(r[0] & 0x7F);
uint8_t minutes = bcdToBin(r[1] & 0x7F);
uint8_t hours;
if (r[2] & 0x40) { // bit 6 = 1: 12-hour mode
hours = bcdToBin(r[2] & 0x1F) % 12; // 12 AM -> 0
if (r[2] & 0x20) hours += 12; // bit 5 = 1: PM
} else {
hours = bcdToBin(r[2] & 0x3F); // 24-hour mode, bit 5 is the 20-hour bit
}
uint8_t date = bcdToBin(r[4] & 0x3F);
uint8_t month = bcdToBin(r[5] & 0x1F); // DS3231: bit 7 of 05h is the century bit
uint8_t year = bcdToBin(r[6]);
char buf[40];
snprintf(buf, sizeof buf, "20%02d-%02d-%02d %02d:%02d:%02d%s", year, month, date,
hours, minutes, seconds, halted ? " CH=1" : "");
Serial.println(buf);
delay(1000);
}
Для DS3231 полезно при старте прочитать регистр 0Fh: если бит 7 (OSF) равен 1, время было потеряно — после установки времени этот бит записывают в 0.
Типичные ошибки
- DS1307 от 3,3 В. Рабочее питание по даташиту — 4,5–5,5 В, а при батарее 3 В микросхема отвечает на шине только при VCC выше 3,65–3,85 В. С питанием 3,3 В берут DS3231. Если DS1307 питается от 5 В, а микроконтроллер — от 3,3 В, подтяжки к 3,3 В по цифрам даташита укладываются в требования: единица на входе DS1307 — от 2,2 В, а подтягивать линии можно к напряжению до 5,5 В независимо от VCC.
- DS3231 от 5 В при подтяжках к 3,3 В. Единица на входах DS3231 — от 0,7 × VCC, при 5 В это 3,5 В, и уровень 3,3 В уже не гарантирован. Надёжнее питать DS3231 от того же напряжения, к которому подтянута шина.
- Нет подтяжек. SDA, а также выходы SQW/OUT, INT/SQW и 32kHz — открытый сток: без резистора к питанию высокого уровня на них нет. Исключение — RST у DS3231: у него своя подтяжка 50 кОм, внешнюю ставить нельзя.
- Не сброшен CH. Новый DS1307 стоит с CH = 1 и не идёт, пока в регистр секунд не записан 0 в бите 7.
- Висящий VBAT. Если батареи нет, у обеих микросхем вывод VBAT соединяют с общим проводом. У DS1307 напряжение батареи должно быть в пределах 2,0–3,5 В, а диод последовательно с ней может нарушить работу.
- Неподключённые N.C. у DS3231. На своей плате все выводы 5–12 соединяют с общим проводом — этого требует даташит.
- Чтение по одному регистру. Время и дату читают одной транзакцией, иначе на границе минуты, часа или суток получится время с ошибкой на минуту, час или сутки.
- Кварц для DS1307 «на глаз». Нужен часовой кварц на 12,5 пФ с ESR не выше 45 кОм; внешние конденсаторы генератору не нужны, а кварц с другой ёмкостью нагрузки сместит частоту.
Другие микросхемы, связанные со временем и частотой, — в разделе «Микросхемы таймеров».
Частые вопросы
Работает ли DS1307 от 3,3 В?
Нет. По рекомендуемым условиям даташита питание DS1307 — от 4,5 до 5,5 В. К тому же микросхема принимает обмен по I²C, только когда VCC выше порога 1,25 × VBAT, а с батареей 3 В этот порог — от 3,65 до 3,85 В. При 3,3 В на VCC часы с такой батареей не ответят на шине. Для питания 3,3 В подходит DS3231 с диапазоном 2,3–5,5 В.
Насколько точно идут DS3231 и DS1307?
DS3231 при питании 3,3 В (от VCC или VBAT) держит частоту в пределах ±2 ppm от 0 до +40 °C и ±3,5 ppm за этими пределами: до +70 °C у коммерческого исполнения DS3231S и во всём диапазоне −40…+85 °C у промышленного DS3231SN; в описании Maxim говорит о точности ±2 минуты в год. ±2 ppm — это не больше 0,17 с в сутки, около минуты в год, а за первый год старение кварца добавляет типично ±1 ppm. Для DS1307 даташит цифр не даёт: точность определяется кварцем, тем, насколько его ёмкость нагрузки совпадает с 12,5 пФ, и температурой.
Сколько проработают часы от батарейки?
DS1307 с работающим генератором берёт от батареи 3 В 300 нА типично и до 500 нА при выключенном выходе SQW/OUT; по даташиту литиевого элемента от 48 мА·ч хватает больше чем на 10 лет при +25 °C. DS3231 в режиме хранения времени потребляет 0,84 мкА типично и до 3 мкА при 3,63 В — за год это от 7,4 до 26 мА·ч. Пока по шине идёт обмен, ток DS3231 от батареи вырастает до 70 мкА при 3,63 В и до 150 мкА при 5,5 В.
Какой адрес у DS3231 и DS1307?
У обеих 0x68 (двоичное 1101000): байт записи — 0xD0, байт чтения — 0xD1. Адресных выводов нет, адрес не меняется, поэтому две такие микросхемы на одну шину I²C не поставить. Если на шине есть другое устройство с адресом 0x68, адрес придётся сменить у него или развести устройства по разным шинам.
Почему новый DS1307 показывает 00:00:00 и не идёт?
При первом включении DS1307 устанавливает бит CH — бит 7 регистра секунд 00h, — а при CH = 1 генератор остановлен. Время при этом обычно сбрасывается в 01/01/00, день недели 1, 00:00:00. Достаточно записать в регистр 00h секунды в BCD со старшим битом 0. У DS3231 бита CH нет: при питании от VCC генератор работает всегда, а если сначала установлена только батарея, он ждёт, пока VCC превысит порог VPF или по шине придёт правильный адрес; при работе от батареи его останавливает бит EOSC = 1. О потере времени DS3231 сообщает флаг OSF в регистре 0Fh.
Источники
- Maxim Integrated (Analog Devices). DS3231 Extremely Accurate I2C-Integrated RTC/TCXO/Crystal, 19-5170, Rev 10, 3/15 — Benefits and Features — ±2 и ±3,5 ppm, I²C 400 кГц; Recommended Operating Conditions и Electrical Characteristics (с. 2–3) — питание 2,3–5,5 В, VIH = 0,7 × VCC, токи ICCA, ICCS, ICCSCONV и IBATTC (575 мкА при 3,63 В), IBATA, IBATT, IBATTDR, VPF 2,45–2,70 В, стабильность частоты по исполнениям S и SN, Δf на LSB регистра старения, точность датчика ±3 °C, старение кварца; AC Electrical Characteristics (с. 4) — тайминги I²C, tOSF, tCONV; Detailed Description — ±2 минуты в год от −40 до +85 °C, Pin Description (с. 9); 32kHz TCXO, Power Control, VBAT Operation, табл. 1 (с. 10); Address Map, I2C Interface, рис. 1 Timekeeping Registers (с. 11); Clock and Calendar, Alarms, табл. 2 (с. 12); Control Register 0Eh (с. 13); Status Register 0Fh, Aging Offset (с. 14); Temperature Registers 11h–12h (с. 15); Handling, PCB Layout, and Assembly, Pin Configuration (с. 18)
- Maxim Integrated (Analog Devices). DS1307 64 x 8, Serial, I2C Real-Time Clock, REV 3/15 — Benefits and Features, Pin Configurations, Ordering Information (с. 1); Recommended DC Operating Conditions, DC Electrical Characteristics (с. 2) — VCC 4,5–5,5 В, VBAT 2,0–3,5 В, VIH 2,2 В, токи от VCC и батареи, VPF = 1,216–1,284 × VBAT; AC Electrical Characteristics (с. 3) — SCL до 100 кГц, CB до 400 пФ; Pin Description, Detailed Description (с. 6) — кварц на 12,5 пФ, вывод VBAT, переключение питания; Oscillator Circuit, Clock Accuracy, табл. 1 Crystal Specifications, рис. 2 Recommended Layout for Crystal, Address Map (с. 7); Clock and Calendar, табл. 2 Timekeeper Registers (с. 8); Control Register (с. 9); I2C Data Bus (с. 10, 12) — адрес 1101000, только 100 кГц
Нашли ошибку?
Смотрите также
- Микросхемы таймеров555 и его КМОП-версии, часы реального времени DS3231 и DS1307
- I²CSDA и SCL, START/STOP, ACK, адреса, скорости, расчёт подтяжек
- RTCСчётчик времени в режимах сна: источники такта, счётчик и календарь
- Адрес I²C7-битный адрес ведомого и байт адреса с битом R/W
- Подтягивающие резисторы I²CДиапазон Rp по напряжению, скорости и ёмкости шины
- Кварцевый резонаторКварц у микроконтроллера: подключение, конденсаторы, часовой кварц