No Image

Ds3231 описание на русском

СОДЕРЖАНИЕ
1 497 просмотров
12 декабря 2019

Сегодня мы продолжим поиски идеальной микросхемы часов реального времени (RTC). Часы будем изготавливать на основе DS3231. Индикация будет использоваться более удобная для разработки — LCD дисплей, на котором будет отображаться вся информация сразу кроме настроек. В таком виде часы удобно использовать как настольный вариант.

Итак, рассмотрим саму микросхему DS3231. DS3231 — это часы реального времени с экстремально точным ходом (подобрали же производители словечко) благодаря встроенному кварцевому резонатору с температурной компенсацией. Интерфейс передачи данных — I 2 C. В этой микросхеме есть также вход для напряжения резервной батареи, при отключении основного питания микросхема автоматически переключается на работу от резервной батареи, точность хода от резервной батареи не нарушается. Весьма радует, не правда ли? В DS3231 поддерживается подсчет секунд, минут, часов, дней месяца (даты), дней недели, месяцев и лет (с учетом високосного года для месяцев). Поддерживается работа в 12 и 24 часовом формате. Имеется 2 будильника с возможностью их настройки и отслеживания состояния. Подстройка точности температурной компенсации. А также два выхода — на 32 кГц (выход составляет 32.768 кГц) и программируемый выход от 1 Гц до 8.192 кГц. Имеется также вывод сброса — RST. микросхема часов реального времени выпускается в корпусе SO-16. Корпус достаточно крупный, но если учитывать что внутри уже имеется кварц, да еще и температурно компенсируемый, то мне кажется, с размерами тут все отлично. У DS3231 есть близнец в виде DS3232, у которого, правда, на 2 ножки больше. Все это очень напоминает продукцию компании NXP — микросхемы часов PCA2129 и PCF2129. Аналогично температурно компенсируемый встроенных кварцевый резонатор, оба такие же близнецы только с разным количеством n.c. выводов и схожими функциями относительно DS3231 помимо хронометрожа времени.

RTC DS3231 имеются в продаже в виде модулей с необходимой обвязкой, а также до комплекта микросхемой EEPROM, которая чаще всего и даром не нужно, только веса добавляет:

Кроме необходимых деталей на плате модуля есть также светодиод, функция которого — индикация подключения питания к выводам. Наверно просто так доставили, для красоты.

Что важно знать при работе с такой микросхемой часов реального времени, так это как же извлечь из нее данные или записать их туда. Часы имеют интерфейс I 2 C. Для того чтобы осуществить запись данных (а это нужно и для того чтобы прочитать данные) нужно передать условие старта (эти команды осуществляются по средствам аппаратного или программного I 2 C для микроконтроллера), далее передать адрес микросхемы с битом записи, далее передать адрес регистра к которому будем обращаться и далее передать в этот регистр байт данных, если следом передать еще байт данных, он запишется в следующий регистр и так далее. По окончании нужно передать условие остановки. Графическое изображение выше сказанного на рисунке:

Запись данных необходима для первоначальной настройки, а также для настройки текущего времени. Далее нам нужно постоянно получать данные о текущем времени и даты. Для этого необходимо осуществлять чтение из регистров хранения этой информации. Чтение состоит из двух процедур — установить указатель на нужный регистр и прочитать его. Чтобы установить указатель на нужный регистр, нужно передать условие старта, потом передать адрес микросхемы с битом записи и байт с адресом регистра. Далее либо условие остановки и следом условие старта, либо просто рестарт. Теперь вторая процедура — непосредственно чтение из регистров. Старт передан, далее нужно отправить адрес микросхемы с битом чтения и далее считывать регистры в необходимом количестве, по окончании передать условие остановки. Если информация из регистра была прочитана, то указатель автоматически переходит на следующий за ним регистр без лишних действий со стороны микроконтроллера (мастер устройства). На рисунке проиллюстрировано все выше сказанное относительно чтения регистров по средствам I 2 C интерфейса:

  • для записи — 0b11010000
  • для чтения — 0b11010001

Программно код на языке Си будет выглядеть следующим образом:

Это весь исходный код, использовавшийся для работы с микросхемой, подстройка хода часов не затрагивалась, так как и без того часы не ушли ни на секунду за несколько дней.

Да — отличной фишкой DS3231 является то, что эта же микросхема выполняет функции термометра (а то как же еще осуществлять температурную компенсацию) и возможность чтения текущей температуры. Максимальное разрешение температуры составляет 0.25 градусов Цельсия. Также период обновления температуры достаточно большой — около 1 минуты. Да нам быстро то не к чему обновлять ее.

Схема же всего устройства часов выглядит так:

Читайте также:  Аккумуляторная дрель шуруповерт фиолент

Микроконтроллер был выбран Atmega8 за свою широкую распространенность и небольшую цену. Данный микроконтроллер можно использовать как в корпусе DIP-28, так и в SMD исполнении в корпусе TQFP-32. Резистор R3 необходим для предотвращения самопроизвольного перезапуска микроконтроллера в случае появления случайных помех на выводе PC6. Резистор R3 подтягивает плюс питания к этому выводу, надежно создавая потенциал на нем. Для индикации используется жидко кристаллический (ЖК или LCD) дисплей. Мною использовался дисплей 2004А — 4 строки по 20 символов больше для красоты, поэтому можно применять дисплей более привычный — 2 строки по 16 символов. ЖК дисплей подключается к микроконтроллеру по четырех битной системе. Переменный резистор R2 необходим для регулировки контраста символов на дисплее. Вращением движка этого резистора добиваемся наиболее четких для нас показаний на экране. Подсветка ЖК дисплея организована через вывод "А" и "К" на плате дисплея. Подсветка включается через резистор, ограничивающий ток — R1. Чем больше номинал, тем более тускло будет подсвечиваться дисплей. Однако пренебрегать этим резистором не стоит во избежание порчи подсветки. Кнопки S1 — S4 управляют настройками часов. Светодиод сигнализирует о том, что будильник сработал. Светодиод можно заменить на какую-либо звуковую схему. Резисторы R5 — R8 являются подтягивающими (pull-up) и необходимы для формирования прямоугольных импульсов на выводах микросхемы часов. Также это необходимо для правильной работы протокола I2C. Для питания схемы используется микросхема линейного стабилизатора L7805, ее можно заменить на отечественный аналог пяти вольтового линейного стабилизатора КР142ЕН5А, либо применить другу микросхему стабилизатора напряжения в соответствии с подключением ее в схеме (например LM317 или импульсные стабилизаторы LM2576, LM2596, MC34063 и так далее). Далее 5 вольт стабилизируются другой микросхемой — AMS1117 в исполнении, дающей на выходе 3,3 вольта. Микросхема часов, в соответствии с даташитом, питается от напряжения 3,3 вольта. Однако максимальное напряжение составляет 5,5 вольта. Поэтому Данный стабилизатор можно использовать, а можно и нет, на ваше усмотрение. Стабилизатор напряжения AMS1117 можно также заменить на исполнение ADJ (AMS1117ADJ) — то есть регулируемый вариант, задать необходимое напряжение при таком выборе необходимо будет при помощи двух резисторов, подключаемых к микросхеме в соответствии с даташитом на нее.

Схема была собрана и отлажена с применением отладочной макетной платы для микроконтроллера ATmega8:

Назначение кнопок:

  • S1 — отключает сигнал будильника, либо выходит в главное меню из любого меню настроек
  • S2 — сброс микроконтроллера
  • S3 — изменяет время или дату в меню настроек
  • S4 — вход в меню настроек и перелистывание меню

Вывод 32 кГц может использоваться для контроля частоты кварцевого резонатора. Подключаем к этому выводу частотомер или осциллограф и контролируем частоту:

Как видно из скриншота осциллограммы, частота примерно соответствует 32,768 кГц (примерно в силу ограничения разрешения измерения частоты, а "на глаз" настолько точно трудно определить).

В итоге получились часы со следующими характеристиками:

  • индикация времени
  • индикация даты
  • индикация дня недели
  • индикация активности будильника
  • 1 будильник с выходом сигнала от микроконтроллера
  • индикация температуры окружающей среды (программно реализована только положительная температура, отрицательная, думаю, нам ни к чему)
  • настройки будильника
  • настройки времени
  • настройки даты
  • LCD-дисплей с подсветкой
  • сохранение настроек и продолжение хода часов при отключении основного питания

Подытожим. Микросхема часов реального времени DS3231 является отличным решением. Точность хода сравнительно c какой-нибудь DS1307 или PCF8523 выше, а вот PCA/PCF2129 еще могут потягаться с ней. Среди рассмотренных мною микросхем часов реального времени данный экземпляр на сегодняшний день занимает первое место по функционалу и точности.

Для программирования микроконтроллера Atmega8 необходимо знать конфигурацию фьюз битов (скриншот сделан в программе AVR Studio):

К статье прилагается прошивка для микроконтроллера Atmega8, проект схемы в программе Proteus, а также видео работы часов (в самом начале сработает будильник — загорится светодиод).

Ещё один интересный модуль для Arduino ZS-042 – это модуль часов Модуль RTC (Real Time Clock — часы реального времени) DS3231 с интерфейсом I2C(TWI).
Для микросхемы не нужен внешний кварцевый резонатор, благодаря встроенному термокомпенсированному кварцевому генератору (TCXO) с частотой 32,768 кГц.
У микросхемы есть вход для подключения батарейки, и благодаря питанию от батареи поддерживается точный отсчет времени даже когда питание системы отключается.
Интеграция кварцевого резонатора в корпус микросхемы улучшило стабильность точности хода часов.

Модуль DS3231 RTC Arduino собран на микросхеме DS3231 и модуле памяти EEPROM на микросхеме 24C32 объемом 32 Кбит от производителя Atmel. Может работать как совместно с Arduino, так и отдельно (необходима батарейка CR2032).

Читайте также:  Антивандальный щит учета электроэнергии

Связь модуля с Arduino происходит по сетевому последовательному интерфейсу I2C(Inter-IntegratedCircuit) с максимальной скоростью 400 кГц, разработанному фирмой Philips.
Для питания часов и памяти модуля в автономном режиме необходима батарейка CR2032.
Модуль отслеживает состояние VCC для обнаружения сбоев питания и при необходимости автоматически переключается на резервный источник питания.
Модуль позволяет устанавливать и считывать: секунды, минуты, часы, дни, дни недели, месяц, год, а так же температуру и есть возможность установки 2-х будильников.
Что может модуль DS3231 RTC Arduino
• Установить календарь до 2100 года с учётом високосных лет
• Выбор режимов 12(AM/PM) или 24-часового режима
• Возможность настроить 2 будильника
• Использовать в качестве генератора прямоугольных импульсов
• Измерять температуру микросхемы для температурной компенсацией кварцевого генератора (TCXO). Она практически не нагревается поэтому можно сказать, что она равна температуре окружающей среды

Характеристики
• Микросхема: DS3231
• Рабочее напряжение: 3,3 В — 5 В.
• Потребляемый ток (в режиме ожидания): до 170 мкА.
• Потребляемый ток (во время передачи данных): до 300 мкА.
• Потребляемый ток (во время резервного питания, без передачи данных): до 3,5 мкА.
• Тактовая частота шины I2C: до 400 кГц.
• Рабочая температура: 0 . 70 °C.
• Точность хода: ±2 ppm (примерно ± 1 минута в год) при температуре от 0 до 40С
• внутренний термометр с диапазоном от −40…+85°C.
• Размер: мм 38 мм (длина) мм * 22 мм (Ш) мм * 14 мм (высота)
• Вес: 8 г

ppm(partspermillion) – частей на миллион.

На основе этого модуля DS3231 можно построить
Часы, будильник, секундомер, генератор прямоугольных импульсов, термометр, включать/выключать внешние устройства по расписанию
На модуле выведена гребёнка контактов. Для удобного использования контакты расположены с двух сторон платы.

Теперь немного о самом модуле.
построен он на микросхеме DS3231N.
Резисторная сборка RP1 (4.7 кОм),

необходима для подтяжки линий 32K, SQW, SCL и SDA (кстати, если используется несколько модулей с шиной I2C, необходимо выпаять подтягивающие резисторы на других модулях).
Вторая сборка резисторов, необходима для подтяжки линий A0, A1 и A2, необходимы они для смены адресации микросхемы памяти AT24C32N.
Резистор R5 и диод D1, служат для подзарядки батареи.
Микросхема памяти EEPROM AT24C32N .
Резистор R1 и светодиод Power, работают как индикатор, показывая, что модуль включен.
Модуль DS3231 RTC Arduino связывается с Arduino по шине I2C(TWI), для удобства монтажа они выведены с двух сторон модуля, J1 и J2.

Питание DS3231 RTC Arduino
Если модуль питается от платы Arduino, то он не использует батарею на модуле.
При питании от батарейки модуль отслеживает дату и время, но не работает с шиной I2C.
При отсутствии обоих источников питания модуль прекращает работать и сбрасывает все данные в заводские настройки.
С резервной батарейкой часы способны проработать несколько лет.

Группы контактов — J1
• 32K: выход генератора, частота 32 кГц
• SQW: Выход прямоугольного(Square-Wave) сигнала.
• SCL: Serial CLock — шина тактовых импульсов интерфейса I2C
• SDA: Serial Data — шина данных интерфейса I2C;
• VCC: «+» питание модуля
• GND: «-» питание модуля

Группы контактов — J2
• SCL: линия тактирования (Serial CLock)
• SDA: линия данных (Serial Data)
• VCC: «+» питание модуля
• GND: «-» питание модуля

Подключение модуля DS3231 RTC Arduino к шине I2C
(например, для Arduino UNO, Nano, Pro Mini):
SCL → A5
SDA → A4
VCC → +5 В
GND → земля
Подключение происходит по двухпроводной шине I2C(TWI)
Выводы SDA и SCL подключаются к аналогичным выводам на Arduino Питание VCC к +5 Вольт, а GND к GND на плате Arduino

Пины SDA и SCL на разных платах Arduino:
SDA SCL
UNO A4 A5
Mini A4 A5
Nano A4 A5
Mega2560 20 21
Leonardo 2 3

Для работы необходимо установить библиотеку DS3231

После установки откройте пример из библиотеки

или запустите пример установки даты и времени из скаченной папки. Это тот же пример, но с комментариями на русском языке и добавлено измерение температуры.

Загрузите скетч в плату, после чего откройте монитор последовательного порта (Ctrl+Shift+M).
Вы увидите неправильные данные, но не переживайте – это потому, что для работы надо установить календарь и время самостоятельно. Это делается один раз, при включении. И потребуется ещё раз только если разрядится батарея.

Ну вот и всё. DS3231 RTC Arduino очень простой и интересный модуль.

Читайте также:  Декоративная подушка сова своими руками

В ближайшее время я напишу статью как подружить этот модуль с 4-х разрядным, семисегментным индикатором с контроллером TM1637, 4 цифры, двоеточие.
LED TM1637

Подписывайтесь и не пропустите новые интересные статьи и описания различных модулей.

Автор: Сергей · Опубликовано 16.01.2017 · Обновлено 27.09.2019

Модуль DS3231 (RTC, ZS-042) — представляет собой недорогую плату с чрезвычайно точными часами реального времени (RTC), с температурной компенсацией кварцевого генератора и кристалла. Модуль включает в себя литиевую батарею, которая поддерживает бесперебойную работу, даже при отключении источник питания. Интегрированный генератор улучшить точность устройства и позволил уменьшить количество компонентов.

Технические параметры

► Напряжение питания: 3.3В и 5В
► Чип памяти: AT24C32 (32 Кб)
► Точность: ± 0.432 сек в день
► Частота кварца:32.768 кГц
► Поддерживаемый протокол: I2C
► Габариты: 38мм x 22мм x 15мм

Общие сведения

Большинство микросхем, таких как DS1307 используют внешний кварцевый генератор частотой 32кГц, но в них есть существенный недостаток, при изменении температуры меняется частота кварца, что приводит к погрешности в подсчете времени. Эта проблема устранена в чипе DS3231, внутрь которого установили кварцевый генератор и датчик температуры, который компенсирует изменения температуры, так что время остается точным (при необходимости, данные температуры можно считать). Так же чип DS3231 поддерживает секунды, минуты, часы, день недели, дата, месяц и год информацию, а так же следит за количеством дней в месяце и делает поправку на високосный год. Поддерживает работу часов в двух форматов 24 и 12, а так-же возможно запрограммировать два будильника. Модуль работает по двух проводной шине I2C.

Теперь немного о самом модуле, построен он на микросхеме DS3231N. Резисторная сборка RP1 (4.7 кОм), необходима для подтяжки линий 32K, SQW, SCL и SDA (кстати, если используется несколько модулей с шиной I2C, необходимо выпаять подтягивающие резисторы на других модулях). Вторая сборка резисторов, необходима для подтяжки линий A0, A1 и A2, необходимы они для смены адресации микросхемы памяти AT24C32N. Резистор R5 и диод D1, служат для подзарядки батарее, в принципе их можно выпаять, так как обычной батарейки SR2032 хватает на годы. Так же установлена микросхема памяти AT24C32N, это как бы бонус, для работы часов RTC DS3231N в ней нет необходимости. Резистор R1 и светодиод Power, сигнализируют о включении модуля. Как и говорилось, модуль работает по шине I2C, для удобства эти шины были выведены на два разъема J1 и J2, назначение остальных контактов, можно посмотреть ниже.Назначение J1
► 32K: выход, частота 32 кГц
► SQW: выход
► SCL: линия тактирования (Serial CLock)
► SDA: линия данных (Serial Dфta)
► VCC: «+» питание модуля
► GND: «-» питание модуля Назначение J2
► SCL: линия тактирования (Serial CLock)
► SDA: линия данных (Serial Data)
► VCC: «+» питание модуля
► GND: «-» питание модуля

Немного расскажу, о микросхеме AT24C32N, это микросхема с 32к памятью (EEPROM) от производителя Atmel, собранная в корпусе SOIC8, работающая по двухпроводной шине I2C. Адрес микросхемы 0x57, при необходимости легко меняется, с помощью перемычек A0, A1 и A2 (это позволяет увеличить количество подключенных микросхем AT24C32/64). Так как чип AT24C32N имеет, три адресных входа (A0, A1 и A2), которые могут находится в двух состояния, либо лог «1» или лог «0», микросхеме доступны восемь адресов. от 0x50 до 0x57.

Подключение DS3231 к Arduino

Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Часы реального времени на DS3231, RTC, SPI, AT24C32 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.

Подключение:
В данном примере буду использовать только модуль DS3231 и Arduino UNO R3, все данные будут передаваться в «Мониторинг порта». Схема не сложная, необходимо всего четыре провода, сначала подключаем шину I2C, SCL в A4 (Arduino UNO) и SDA в A5 (Arduino UNO), осталось подключить питание GND к GND и VCC к 5V (можно записать и от 3.3В), схема собрана, теперь надо подготовить программную часть.

Библиотеки работающий с DS3231 нет в среде разработке IDE Arduino, необходимо скачать «DS3231 » и добавить в среду разработки Arduino.

Установка времени DS3231
При первом включении необходимо запрограммировать время, откройте пример из библиотеки DS3231 «Файл» —> «Примеры» —> «DS3231» —> «Arduino» —> «DS3231_Serial_Easy», или скопируйте код снизу

Комментировать
1 497 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock detector