Как запрограммировать вывод INT на будильник в DS3231
- Войдите на сайт для отправки комментариев
Чт, 24/11/2016 - 14:03
Требуется пробуждать Ардуину по DS3231 1 раз в 2 часа. Посоветуйте какую библиотеку (желательно с примером) использовать для модуля DS3231. Все скачанные мной с просторов Интернета, не выводят сигнал будильника на вывод INT платы модуля. А без него я не смогу выводить ардуину из самого глубокого сна.
https://github.com/trunet/DS3231RTC
Обратите внимание на функцию void set_creg(uint8_t val) и биты 0,1,2 этого регистра, описанные в h файле.
Принцип понял, но что бы я в регистр не писал, выход или вообще не работает, или работает в режиме square wave, выдаёт импульсы каждую секунду. Может я что не так делаю? Я решил не подключать библиотеку, а взял из неё только эту фунцию.
И прописал её в
Почему 0x05, потому что исходя из заголовочного файла, мне нужны 0 и 2 биты. 1+4=5.
Выход не может не работать. В даташите написано или так или так, никак иначе. Если не генерит частоту,то в режиме прерывания. Что бы сработало прерывание, должен быть установнен будильник, время будильника должно совпадать с часами - при этом выставляется флаги A1F или A2F 0x0F регистра. Проверяйте регистры 0xE и 0xF. Если биты 1,2,3 первого и 1,2 второго выставлены, а прерывания нет - то тогда да, проблемы.
Viktor1306, по-моему вы как-то слишком просто представляете себе управление будильником. Боюсь в чём-то ошибиться, ибо склероз, но насколько память позволяет вспомнить там вообще нет такой возможности -срабатывать каждые два часа. Можно поставить время от секунды до дня месяца, и отдельными флажками указать при каких комбинациях вызывать срабатывание. Например только при совпадении часов, или часов + минут, итп. Соответсно доступны циклические варианты - раз в секунду, раз в минуту, раз в час, раз в день, раз в месяц. После срабатывания прерывания нужно произвести снятие флагов аларма, иначе следущий аларм никогда не наступит.
Я знаю что там можно только генерить частоты до 1 гц, или прерывание. Мне нужно именно прерывание. При включении контроллера устанавливаются часы на 00:00:00 и будильник на 02:00:00 (точное время мне не нужно), при срабатывании будильника просыпается контроллер, выполняет то что ему нужно, ставит часы на 00:00:00 а будильник на 02:00:00 и засыпает снова. Пытался реализовать это с помощью watch dog-а, но из за того, что контроллер просыпался каждые 8 сек. аккумулятроа на 4000 мА\ч хватило чуть больше чем на неделю, а нужно минимум 5-6 месяцев.
Разобрался, это я затупил. В сетапе на первое место инициализацию прерывания поставил.