включение питания сигнализатора часов реального времени что это

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

Однако хоть они и следуют с заданной частотой и чаще всего зависят от кварцевого резонатора, но при выполнении операций в режиме реального времени, а особенно если они привязаны к времени суток — происходит их смещение во времени. Чтобы решить эту проблему используют микросхемы часов реального времени или RTC.

Что это такое

RTC (real time clock, рус. часы реального времени) — это вид микросхем, предназначенных для отсчета времени в «реальных» единицах (секунды, минуты, часы и т.д.).

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

Точность отсчета как раз и зависит от качества и точности настройки внутреннего генератора или внешнего кварцевого резонатора. При этом точность кварца и RTC соответственно, указывается не в герцах и не в процентах, а в «ppm», например ±12 ppm, ±50 ppm. Это расшифровывается, как Parts Per Million, т. е. количество миллионных частей от какой-то средней величины.

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

Часы реального времени могут быть реализованы на базе микроконтроллеров, однако, использование специальных чипов позволяет снизить энергопотребление, поскольку большинство микроконтроллеров даже в спящем режиме (или режиме пониженного энергопотребления) потребляют больше энергии чем специальные интегральные микросхемы (ИМС). RTC могут быть и встроенными в сам микроконтроллер (как в STM32).

Именно благодаря часам реального времени на вашем компьютере не сбивается время и дата после его отключения от сети, в этом случае они работают от батарейки CR2032, установленной в разъёме на материнской плате, она же и питает микросхему BIOS, чтобы не сбивались выставленные в нем настройки.

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

Классификация

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

Intersil Corporation (д.к. Renesas Electronics);

Cymbet (линейка EnerChip™ RTC, отличительная особенность — встроенная твердотельная батарея);

NXP (RTC с календарем, с поддержкой протоколов I2C или SPI)

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

Компания Maxim Integrated в качестве основного критерия для классификации микросхем RTC использует тип интерфейса управления, а именно:

1. Микросхемы RTC с последовательным интерфейсом управления: I2C, 3-wire, SPI.

2. С параллельным интерфейсом управления:

с мультиплексированной шиной «адрес/данные»;

с разделенными шинами адреса и данных;

с однопроводным интерфейсом 1-wire.

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

Можно классифицировать и по формату представления данных:

Календарный. В виде шаблона YY-MM-DD для даты и HH-MM-SS для времени время и другие их форматы;

Бинарный. В виде непрерывного двоичного счетчика единиц времени (секунд или их долей).

В зависимости от назначения микросхемы в схеме устройства и выбирается её тип, если ИМС с календарным представлением — она будет выполнять функцию обычных часов, а в случае с бинарным — для таких применений, как отчеты периодов времени, например срока действии лицензии, гарантийного срока или в устройства для учета чего-либо (например, электросчетчиках), например в каталоге Maxim Integrated они называются «Elapsed Time Counter» — счетчик прошедшего времени, пример такой ИМС — DS1683.

В других случаях микросхемы часов реального времени могут классифицироваться по функционалу или другим характеристикам:

Наличие встроенного генератора или необходимо использовать внешний генератор (кварцевый).

По наличию встроенного источника питания или возможности использования внешней батареи.

По типу и объёму внутренней памяти и протоколам связи с «внешним» миром (описывались выше).

По наличию фантомного (phantom) интерфейса для доступа к внутренним регистрам микросхемы (для настройки, установки режимов или считыванию значений).

Другие функции: сторожевой таймер (watchdog), будильника (alarm), секундный выход, контроль питания, возможность зарядки внешней батареи и пр.

И, наконец, многие производители классифицируют свои устройства по уровню энергопотребления, в среднем потребляемый ток лежит в пределах от 200 до 1500 нА, но может и выходить из этого диапазона в зависимости от конкретной ИМС и производителя.

Применение в радиолюбительской практике

Часы реального времени нередко используются в паре с такими популярными платформами для разработки и прототипирования, как семейство Arduino, и при разработке устройств на любых других микроконтроллерах, а также микрокомпьютерах семейства Raspberry Pi и подобные.

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

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

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

В среде ардуинщиков и современных самодельщиков наибольшее распространение получили микросхемы часов реального времени компании Maxim Integrated и модули на их базу, а именно:

Их отличия приведены в таблице ниже.

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

Как видите, все из них поддерживают связь с микроконтроллером по шине I2C, а DS1302 и по SPI, хотя в даташите сказано «простой 3-проводной последовательный интерфейс, подходящий для большинства микроконтроллеров». И может подключаться не только к 10-13 пинам Ардуино, на которых назначены выводы шишны SPI, но и к други, установленным в скетче, схемы будут ниже. Даташиты на эти ИМС со всеми техническими данными прилагаем к статье.

Даташиты на микросхемы реального времени:

Arduino UNO поддерживает оба этих протокола, что вы можете увидеть на схеме ниже (помечено фиолетовым и серым цветом для SPI и I2C соответственно).

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

Как и Raspberry pi.

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

Это значит, что вы можете использовать любой из этих модулей с каждой из платформ. Внешние отличия модулей вы можете видеть на иллюстрации ниже, но компоновка платы может отличаться, смотрите на маркировку ИМС.

Для того чтобы Arduino работала с RTC нужна библиотека, но так как её нет в стандартном пакете Arduino IDE, её нужно скачать. В сети есть библиотеки для каждой из рассмотренных ИМС, а есть и универсальные, что выбрать, и какая будет удобнее решать уже вам.

include // Подключаем библиотеку
iarduino_RTC time(RTC_DS3231); // Создаём объект time, для ИМС DS3231
iarduino_RTC time(RTC_DS1307); // ДЛЯ DS1307
iarduino_RTC time(RTC_DS1302, RST, CLK, DAT); // для DS1302.
// Вместо RST, CLK и DAT номера пинов ардуино,
// к которым подключены соответствующие пины модуля часов

Схема для DS1302, еще раз напомним, что выводы могут быть другими:

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

А вот линия данных DS1307 и DS3231 подключается только к пинам A5 и A4 Arduino UNO (для других ревизий и версий платы смотрите распиновку).

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

Заключение

Часы реального времени позволяют делать проекты, в которых какие-либо процессы должны запускаться по расписанию. Почти в любом относительно сложном проекте для практического использования есть такая потребность неважно это автоматическая система полива растений или же система управления технологическими процессами на производстве.

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

Источник

Урок 11. Работаем с DS1307 микросхемой часов реального времени

В этом уроке я расскажу про работу с микросхемой реального времени DS1307 в BASCOM-AVR. DS1307 ещё называют RTC (Real Time Clock). Данная микросхема представляет из себя часы реального времени и календарь. Связь с микросхемой осуществляется по интерфейсу I 2 C. Её преимущество в том, что она работает (считает время) при выключенном основном питании от резервного источника питания в 3 вольта (например, от батареики типа CR3022). Но в DS1307 есть один недостаток: в ней нет проверки на правильность введённых данных. Для работы с микросхемой потребуется минимальный обвес: кварц на 32768Hz, батарея на 3 вольта и два резистора на 4,7кОм. Схема подключения DS1307:

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

Работа с DS1307 в BASCOM-AVR

Для начала работы с микросхемой необходимо сконфигурировать порты, к которым подключена микросхема, для этого воспользуемся командой Config:
Config Sda = (Порт микроконтроллера к которому подключена нога SDA микросхемы DS1307)
Config Scl = (Порт микроконтроллера к которому подключена нога SCL микросхемы DS1307)
Например:
Config Sda = Portb.1
Config Scl = Portb.0

После конфигурации портов можно начать работать с микросхемой: считывать и записывать данные. Время и дату с микросхемы DS1307 можно считать так:

После чтения данных необходимо перевести их в десятичный формат, вот так:
(переменная секунд) = Makedec((переменная секунд))
(переменная минут) = Makedec((переменная минут))
(переменная часов) = Makedec((переменная часов))
(переменная дня недели) = Makedec((переменная дня недели))
(переменная даты) = Makedec((переменная даты))
(переменная месяца) = Makedec((переменная месяца))
(переменная года) = Makedec((переменная года))

Вот пример чтения времени и даты, а также перевод их в десятичный формат:

Данные считывать научились, теперь попробуем записывать данные в DS1307. Вот так:
(Переменная которую запишем) = Makebcd((Переменная которую запишем))
I2cstart
I2cwbyte &HD0
I2cwbyte (Ячейка в которую запишем данные)
I2cwbyte (Переменная которую запишем)
I2cstop

Обратите внимание, что команда Makebcd переводит переменную в двоично-десятичный формат. Номера и обозначения ячеек:

Источник

Часы реального времени на RTC модулях Ардуино DS1302, DS1307, DS3231

Во многих проектах Ардуино требуется отслеживать и фиксировать время наступления тех или иных событий. Модуль часов реального времени, оснащенный дополнительной батарей, позволяет хранить текущую дату, не завися от наличия питания на самом устройстве. В этой статье мы поговорим о наиболее часто встречающихся модулях RTC DS1307, DS1302, DS3231, которые можно использовать с платой Arduino.

Модули часов реального времени в проектах Arduino

Модуль часов представляет собой небольшую плату, содержащей, как правило, одну из микросхем DS1307, DS1302, DS3231.Кроме этого, на плате практически можно найти механизм установки батарейки питания. Такие платы часто применяется для учета времени, даты, дня недели и других хронометрических параметров. Модули работают от автономного питания – батареек, аккумуляторов, и продолжают проводить отсчет, даже если на Ардуино отключилось питание. Наиболее распространенными моделями часов являются DS1302, DS1307, DS3231. Они основаны на подключаемом к Arduino модуле RTC (часы реального времени).

Часы ведут отсчет в единицах, которые удобны обычному человеку – минуты, часы, дни недели и другие, в отличие от обычных счетчиков и тактовых генераторов, которые считывают «тики». В Ардуино имеется специальная функция millis(), которая также может считывать различные временные интервалы. Но основным недостатком этой функции является сбрасывание в ноль при включении таймера. С ее помощью можно считать только время, установить дату или день недели невозможно. Для решения этой проблемы и используются модули часов реального времени.

Электронная схема включает в себя микросхему, источник питания, кварцевый резонатор и резисторы. Кварцевый резонатор работает на частоте 32768 Гц, которая является удобной для обычного двоичного счетчика. В схеме DS3231 имеется встроенный кварц и термостабилизация, которые позволяют получить значения высокой точности.

Сравнение популярных модулей RTC DS1302, DS1307, DS3231

В этой таблице мы привели список наиболее популярных модулей и их основные характеристики.

НазваниеЧастотаТочностьПоддерживаемые протоколы
DS13071 Гц, 4.096 кГц, 8.192 кГц, 32.768 кГцЗависит от кварца – обычно значение достигает 2,5 секунды в сутки, добиться точности выше 1 секунды в сутки невозможно. Также точность зависит от температуры.I2C
DS130232.768 кГц5 секунд в суткиI2C, SPI
DS3231Два выхода – первый на 32.768 кГц, второй – программируемый от 1 Гц до 8.192 кГц±2 ppm при температурах от 0С до 40С.

Точность измерения температуры – ±3С

I2C

Модуль DS1307

DS1307 – это модуль, который используется для отсчета времени. Он собран на основе микросхемы DS1307ZN, питание поступает от литиевой батарейки для реализации автономной работы в течение длительного промежутка времени. Батарея на плате крепится на обратной стороне. На модуле имеется микросхема AT24C32 – это энергонезависимая память EEPROM на 32 Кбайт. Обе микросхемы связаны между собой шиной I2C. DS1307 обладает низким энергопотреблением и содержит часы и календарь по 2100 год.

Модуль обладает следующими параметрами:

Модуль оправдано использовать в случаях, когда данные считываются довольно редко, с интервалом в неделю и более. Это позволяет экономить на питании, так как при бесперебойном использовании придется больше тратить напряжения, даже при наличии батарейки. Наличие памяти позволяет регистрировать различные параметры (например, измерение температуры) и считывать полученную информацию из модуля.

Взаимодействие с другими устройствами и обмен с ними информацией производится с помощью интерфейса I2C с контактов SCL и SDA. В схеме установлены резисторы, которые позволяют обеспечивать необходимый уровень сигнала. Также на плате имеется специальное место для крепления датчика температуры DS18B20.Контакты распределены в 2 группы, шаг 2,54 мм. В первой группе контактов находятся следующие выводы:

Во второй группе контактов находятся:

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

Для подключения к плате Ардуино нужны сама плата (в данном случае рассматривается Arduino Uno), модуль часов реального времени RTC DS1307, провода и USB кабель.

Чтобы подключить контроллер к Ардуино, используются 4 пина – VCC, земля, SCL, SDA.. VCC с часов подключается к 5В на Ардуино, земля с часов – к земле с Ардуино, SDA – А4, SCL – А5.

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

Для начала работы с модулем часов нужно установить библиотеки DS1307RTC, TimeLib и Wire. Можно использовать для работы и RTCLib.

Проверка RTC модуля

При запуске первого кода программа будет считывать данные с модуля раз в секунду. Сначала можно посмотреть, как поведет себя программа, если достать из модуля батарейку и заменить на другую, пока плата Ардуино не присоединена к компьютеру. Нужно подождать несколько секунд и вытащить батарею, в итоге часы перезагрузятся. Затем нужно выбрать пример в меню Examples→RTClib→ds1307. Важно правильно поставить скорость передачи на 57600 bps.

При открытии окна серийного монитора должны появиться следующие строки:

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

Будет показывать время 0:0:0. Это связано с тем, что в часах пропадает питание, и отсчет времени прекратится. По этой причине нельзя вытаскивать батарею во время работы модуля.

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

В этой строке будут находиться данные с компьютера, которые используются ля прошивки модуля часов реального времени. Для корректной работы нужно сначала проверить правильность даты и времени на компьютере, и только потом начинать прошивать модуль часов. После настройки в мониторе отобразятся следующие данные:

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

Настройка произведена корректно и дополнительно перенастраивать часы реального времени не придется.

Считывание времени. Как только модуль настроен, можно отправлять запросы на получение времени. Для этого используется функция now(), возвращающая объект DateTime, который содержит информацию о времени и дате. Существует ряд библиотек, которые используются для считывания времени. Например, RTC.year() и RTC.hour() – они отдельно получают информацию о годе и часе. При работе с ними может возникнуть проблема: например, запрос на вывод времени будет сделан в 1:19:59. Прежде чем показать время 1:20:00, часы выведут время 1:19:00, то есть, по сути, будет потеряна одна минута. Поэтому эти библиотеки целесообразно использовать в случаях, когда считывание происходит нечасто – раз в несколько дней. Существуют и другие функции для вызова времени, но если нужно уменьшить или избежать погрешностей, лучше использовать now() и из нее уже вытаскивать необходимые показания.

Пример проекта с i2C модулем часов и дисплеем

Проект представляет собой обычные часы, на индикатор будет выведено точное время, а двоеточие между цифрами будет мигать с интервалом раз в одну секунду. Для реализации проекта потребуются плата Arduino Uno, цифровой индикатор, часы реального времени (в данном случае вышеописанный модуль ds1307), шилд для подключения (в данном случае используется Troyka Shield), батарейка для часов и провода.

В проекте используется простой четырехразрядный индикатор на микросхеме TM1637. Устройство обладает двухпроводным интерфейсом и обеспечивает 8 уровней яркости монитора. Используется только для показа времени в формате часы:минуты. Индикатор прост в использовании и легко подключается. Его выгодно применять для проектов, когда не требуется поминутная или почасовая проверка данных. Для получения более полной информации о времени и дате используются жидкокристаллические мониторы.

Индикатор подключается просто – выводы с него CLK и DIO подключаются к любым цифровым пинам на плате.

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

Скетч. Для написания кода используется функция setup, которая позволяет инициализировать часы и индикатор, записать время компиляции. Вывод времени на экран будет выполнен с помощью loop.

После этого скетч нужно загрузить и на мониторе будет показано время.

Программу можно немного модернизировать. При отключении питания выше написанный скетч приведет к тому, что после включения на дисплее будет указано время, которое было установлено при компиляции. В функции setup каждый раз будет рассчитываться время, которое прошло с 00:00:00 до начала компиляции. Этот хэш будет сравниваться с тем, что хранятся в EEPROM, которые сохраняются при отключении питания.

Для записи и чтения времени в энергонезависимую память или из нее нужно добавить функции EEPROMWriteInt и EEPROMReadInt. Они нужны для проверки совпадения/несовпадения хэша с хэшем, записанным в EEPROM.

Можно усовершенствовать проект. Если использовать жидкокристаллический монитор, можно сделать проект, который будет отображать дату и время на экране. Подключение всех элементов показано на рисунке.

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

В результате в коде нужно будет указать новую библиотеку (для жидкокристаллических экранов это LiquidCrystal), и добавить в функцию loop() строки для получения даты.

Алгоритм работы следующий:

Заключение

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

Источник

Электроника для всех

Блог о электронике

Часы реального времени PCF8583

Делал я тут один коммерческий девайсик и требовалось там вести лог событий. А конкретно фиксировать управляющие команды пользователя, а также время и дату, чтобы если оператор где накосячит его можно было взять за задницу. Вот такой вот электронный цербер.
Задача несложная, но для ее реализации нужен был способ замерять время, причем делать это независимо, с сохранением результатов даже если питалово вырубили. Данные можно хранить во флеше, а что делать с временем?

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это
включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это
включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

Также потребуются два диода. Диод VD1 не дает заряжать резервную батарейку напряжением питания (она все же не аккумулятор, а батарейка). Второй диод не дает батарейке питать всю схему когда из нее вынимают родной источник питания. Часы же в это время кормятся от таблетки. Причем напряжения питания девайса должно быть немного выше напряжения питания батарейки, где то на 0.7 вольт, чтобы не допускать кормление часов от батареи в нормальном, не аварийном, режиме. Лучше взять диоды Шоттки, тогда падение напряжения на них будет меньше и превышение питающего надо будет тоже меньше. Впрочем, на батарейке часы проживут несколько лет, так что это не очень критично. Конденсатор является подстроечным. С его помощью можно править ход часов немножко. Я его ставить не стал.

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

Теперь немного по разводке. Поскольку напряжение питания мало, потребление тоже крошечное, то и генератор на кварце работает на мизерной амплитуде, что его еле еле осциллографом прощупываешь. Отсюда повышенная чувствительность к наводкам. Так что при разводке часовой кварц надо прифигачить как можно ближе к ногам микросхемы часов, корпус кварца окружить земляным полигоном, а лучше вообще взять и припаять к земле. Благо часовой кварц снаружи луженый и паяется отлично. По крайней мере мой. Если не сделать — будет работать очень нестабильно. Я на этом уже прокололся, на моей монтажке которую ты видишь на фото то работало то не работало. Так что вот так вот делать не следует! Часовой кварц надо припаивать корпусом к земле!

Код тут несложен. Во главе угла стоит библиотека iic_dumb.asm
Вот ее содержимое:

Общение с RTC происходит как с обычной EEPROM типа АТ24Схх, только вместо сохраненных байтов данных мы принимаем значения времени. Впрочем, там, после регистров с временем еще есть 240 байт памяти которые мы можем юзать как нам угодно. Мелочь, а приятно.

Вот, например, чтение:

включение питания сигнализатора часов реального времени что это. Смотреть фото включение питания сигнализатора часов реального времени что это. Смотреть картинку включение питания сигнализатора часов реального времени что это. Картинка про включение питания сигнализатора часов реального времени что это. Фото включение питания сигнализатора часов реального времени что это

Да все просто. В нулевой ячейке памяти PCF лежит регистр конфига часов, нам он не интересен. В первой ячейке лежат сотые доли секунды. Нам они тоже не интересны, а вот начиня с 2 ячейки идут секунды, минуты, часы, число, месяц, год…

RTC_WRITE: RCALL IIC_START ; Старт LDI OSRG,0b10100000 ; Загрузили Адрес часов на запись RCALL IIC_BYTE ; Отослали адрес часов на запись LDI OSRG,RTCAddr ; Загрузили адрес ячейки памяти часов RCALL IIC_BYTE ; Отослали адрес ячейки LDS OSRG,Sec_i ;Sec ; Загрузили секунды RCALL IIC_Byte ; Отослали секунды LDS OSRG,Min_i ;Min ; Загрузили минуты RCALL IIC_Byte ; Отослали минуты LDS OSRG,Hour_i ;Hr ; Загрузили часы RCALL IIC_Byte ; Отослали часы LDS OSRG,Date_i ;Date ; Загрузили число RCALL IIC_Byte ; Отослали число LDS OSRG,Mth_i ;Mth ; Загрузили Месяц RCALL IIC_Byte ; Отослали месяц IIC_WErr: RCALL IIC_STOP ; Стоп RET ; Выход из задачи

В общем, захочешь юзать мою черновую либу, то собираешь себе нужную процедуру чтения-записи как из кусочков. Но учти, что обработки ошибок там нет (добавь если хочешь), так что на шине может и никого и не быть, а микроконтроллер упорно отошлет адрес, данные, а может и считать что нибудь попытается. И ведь считает мусор какой нибудь! 🙂 Проверку сделать не сложно, надо всего лишь после каждой процедуры опросить регистр TWISR на предмет флагов — есть ли там ожидаемое нами состояние, например наличие бита ACK. Если что то не то — косяк.

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

Другие плюшки:
Эти часы также могут работать в режиме счетчика.
То есть считать входящие события и генерировать логический 0 на выходе INT при переполнении. Для этого надо всего лишь на вход OSC1 подать считаемые импульсы. А еще там есть будильник. То есть можно запрограммировать его и в назначенное время на выходе INT будет ноль. Программирование ведется записью данных в ячейки, адресация подробно указана в даташите. Можно менять формат вывода с 24 часового на 12 часовой. В общем, навротов там порядочно.

Перевод чисел из BCD в ASCII:
Тут все просто. Что такое BCD? Это Двоично десятичное число. То есть мы десятичное числое записываем в двоичном виде как есть. Выглядит это так: 0х01,0х02..0х09,0х10.. То есть, видишь, после 0х09 идет не 0х0А, а 0х10. Таким образом, в одном байте может влезть не больше чем 0х99. Но зато такие числа удобно перегонять в ASCII. Например, код ‘0’ в ASCII это 0х30, код ‘1’ = 0x31, ‘2’ = 0x32 и так далее, закономерность видишь? 😉 Так что чтобы получить цифру в ASCII надо к 0х30 прибавить ее BCD разряд. BCD обычно идет упакованым, то есть в одно байте два числа, старший и младший разряд. Так что чтобы вывести двузначное число надо его по маскам 0x0F и 0xF0 разделить на младшую и старшие тетрады, каждую из них сложить с кодом 0х30 и последовательно отрыгнуть в USART или куда нам там надо. Что я, собственно, и сделал в процедуре BCD2ASCII.

Внезапно!
Тут, пока возился со статьей, обнаружил косяк. Разные микросхемы работают по разному. Например тот экземпляр PCF, что ушел к заказчику — работает отлично.
Тот что стоит в моей макетке странно глючит — на том же самом коде выдает все нормально, но вместо месяца всегда число 04, мало того, при сбросе оно должно быть 00, а оно все равно 04. Ничего понять не могу. И нельзя туда ничего ни записать ни считать ничего отличного от 04 (реально всегда выдает 0х84, но от этого не легче) :/ Думал может в коде где косяк возник, на фоне выкидывания барахла… Загрузил всю эту бодягу в ISIS Proteus, благо там эта микросхема часов есть. Там всегда читается ноль вроде бы верно, но он не устанавливается в нужное число, как я ни пытался. А в девайсе заказчика все Ок. Либо у меня где то лыжи не едут, либо тут дело не чисто. В общем, фигня какая то. Причем ладно бы первый или последний байт посылки был косячным, а то прям с середины. И три разных результата. Я в панике 🙂

Спасибо. Вы потрясающие! Всего за месяц мы собрали нужную сумму в 500000 на хоккейную коробку для детского дома Аистенок. Из которых 125000+ было от вас, читателей EasyElectronics. Были даже переводы на 25000+ и просто поток платежей на 251 рубль. Это невероятно круто. Сейчас идет заключение договора и подготовка к строительству!

А я встрял на три года, как минимум, ежемесячной пахоты над статьями :)))))))))))) Спасибо вам за такой мощный пинок.

97 thoughts on “Часы реального времени PCF8583”

1. «напряжения питания девайса должно быть немного выше напряжения питания батарейки, где то на 0.7 вольт, чтобы не допускать кормление часов от батареи в нормальном, не аварийном, режиме.»
Оба источника подключены к нагрузке через одинаковые диоды (Шотки надеюсь?) Почему же требуется именно 0.7В превышения? 😉
2. Кто ж так кварцы, кроме китайцев, ставит? Да и китайцы уже научились класть их на плату и крепить перемычкой внахлест/пайкой.

1. Для общей надежности. =) Диоды шоттки стоят ессесно.

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

А чего с кварцем не так? Не понял, поподробнее пожалуйста.

Стоит он вертикально и корпус его не запаян на GND.

А почему именно эта микросхема? Есть отличия от DS1307 скажем? Просто везде где видел применения таких часов именно вышеупомянутая микруха стоит. Сам еще не юзал, потому спрашиваю 🙂

Была в наличии. А DS1307 часто юзается потому, что под нее готовая либа на Си есть 🙂

Кстати, в догонку, раньше занимался гитарными примочками, так вот — там распространена такая схема включения б/п и батарейки: http://s60.radikal.ru/i168/0906/f4/88a1f16fc2fa.jpg На схеме обозначены панелька под батарейку и гнездо под б/п (2.1мм power plug jack). При включении штекера в гнездо прижимная платстина отжимается, контакт разрывается, и питание идет только от б/п. Когда штекер б/п не вставлен в гнездо, контакт нормально замкнут и питание осуществляется от батарейки. ИМХО так дешевле будет — экономия двух диодов 😀 Думаю вы и сами знаете такую схему, наверное она вам тут чем-то неподошла. Просто в тему написал

Ага экономим 40 копеек на диодах и просераем 10 рублей на штеккере :))))

Отлично придумал! А когда пропадет питание от БП, как к микросхеме подключится батарейка?

Mazayac, шоттки нужны из-за малого прямого падения напряжения? На кремниевых вроде около 1В аж, для 3.3В это конечно не годится.

Именно. Шоттки отличается от обычных тем, что у них падение в районе 0.2 — 0.4 вольт.

При токе потребления этой микросхемы (Imax=1.5mA) падение на диоде Шотки будет почти ровно 0.2В. При питании от батареи — ток еще ниже, падение напряжения — порядка 0.1В.

Токи малые, можно поставить германиевые (из Д9 или более малогабаритных). Только брать с малыми утечками.

ой как замечательно. у нее есть десятые и сотые секунды.
если это так? и я правильно понял рисунок из даташита — то это основное отличие от ds1307 — которая только секунды выдавать может….

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *