Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
350 Часть 111. Практическое программирование микроконтроллеров АVR пор. Это простейшие часы с 1 2 С-интерфейсом, в 8-выводном корпусе с внешним резонатором на 32 768 Гц, 5-вольтовым питанием и возможностью подключения резервной батарейки на 3 В (т. е. обычной литиевой «монетки» 2032 или 20 1 6). Схема переключения питания на батарейку- встроенная и не требует внешних элементов. Часы допускают максимальную тактовую частоту интерфейса I 2 c 1 00 кГц. Отметим, что DS 1 307 практически без изменений в программе (кроме I 2 С адреса) можно заменить на модель DS 1 33 8, допускающую напряжения питания 3 , 3 , 3,0 или 1 , 8 вольта (в зависимости от разновидности), а также повышенную ско рость передачи по I 2 c. ПОДРОБНОСТИ Часы DS 1 307 имеют лишь один недостаток - точность их хода полностью зависит от используемого кварца , и обычно минимум каждые несколько месяцев их показания приходится корректировать . Популярные модели DS3231 /DS3232 с интегрированным кварцем и повышенной стабильностью совместимы с DS1 307 по базовым функциям, и хотя по управлению они немного отличаются , приведенные далее программы должны работать и для них без существенных изменений . Часы DS3231 /DS3232 также рабо тают с напряжением питания 1 ,8-3 ,3 В. Для 1 2 С-устройств с разным напряжением пи тания имеется специальная микросхема-согласователь уровней РСА9306, которую часто ставят в готовые модули часов на их основе, а «подтягивающие» резисторы включаются с каждой стороны такой микросхемы . Отметим , что включение простого резистивного делителя для сопряжения уровней оказывается невозможным в этой си туации , когда одно устройство (с 3-вольтовым питанием) имеет выход с открытым коллектором, а второе (5-вольтовый контроллер) - выход с тремя состояниями . Тут нужен , как минимум , развязывающий транзистор по схеме, приведенной на рис. 4.6 в главе 4. В DS 1 307 имеется вывод для прерывания МК, который может программироваться с различным коэффициентом деления частоты кварца. Мы запрограммируем его на выдачу импульсов с периодом 1 с, чтобы по внешнему прерыванию от этих им пульсов можно было считать секунды, обновлять значение времени и выполнять другие полезные действия - т. е. использовать часы вместо таймера. В отличие от счета времени самим контроллером (см. главу 9), здесь мы можем быть уверены, что при любых сбоях в МК время у нас будет отсчитываться верно, а также получа ем возможность проведения длинных процедур (вроде чтения из внешней памяти) без боязни сбить отсчет времени. Но в этом случае, если вы вместо «голой» микро схемы захотите использовать готовый модуль часов реального времени, каких пол но в магазинах, торгующих аксессуарами для Arduino, то он должен иметь допол нительный вывод этой частоты, обычно обозначаемый как SQW (в некоторых RТС модулях он выведен отдельно от основного разъема) . В остальном для нашего слу чая безразлично, в каком варианте вы подключаете часы: как отдельную микросхе му с кварцем и батарейкой или как единый модуль, все это объединяющий в одно целое. Схема подключения DS 1 307 к ATmega8 приведена на рис . 1 3 .3 . На схеме не пока зан основной кварцевый резонатор контроллера, т. к. он в этом случае не очень-то и нужен. Напоминаю, что процедуры в файле i2c.pгg рассчитаны на тактовую частоту 4 МГц, но для нашей задачи необязательно получать именно точное значение от кварца: для отсчета времени у нас есть часы, а внутренний генератор большинства
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==