Как запрограммировать вывод INT на будильник в DS3231

Viktor1306
Viktor1306 аватар
Offline
Зарегистрирован: 19.05.2016

Требуется пробуждать Ардуину по DS3231 1 раз в 2 часа. Посоветуйте какую библиотеку (желательно с примером) использовать для модуля DS3231. Все скачанные мной с просторов Интернета, не выводят сигнал будильника на вывод INT платы модуля. А без него я не смогу выводить ардуину из самого глубокого сна. 

nik182
Offline
Зарегистрирован: 04.05.2015

https://github.com/trunet/DS3231RTC

Обратите внимание на функцию void set_creg(uint8_t val) и биты 0,1,2 этого регистра, описанные в h файле.

Viktor1306
Viktor1306 аватар
Offline
Зарегистрирован: 19.05.2016

Принцип понял, но что бы я в регистр не писал, выход или вообще не работает, или работает в режиме square wave, выдаёт импульсы каждую секунду. Может я что не так делаю? Я решил не подключать библиотеку, а взял из неё только эту фунцию.

  Wire.beginTransmission(104);
  Wire.write(0x0E);
  Wire.write(0x05);
  Wire.endTransmission();

И прописал её в 

void setup() {...}

Почему 0x05, потому что исходя из заголовочного файла, мне нужны 0 и 2 биты. 1+4=5.

 

nik182
Offline
Зарегистрирован: 04.05.2015

Выход не может не работать. В даташите написано или так или так, никак иначе. Если не генерит частоту,то в режиме прерывания. Что бы сработало прерывание, должен быть установнен будильник, время будильника должно совпадать с часами - при этом выставляется флаги A1F или A2F 0x0F регистра. Проверяйте регистры 0xE и 0xF. Если  биты 1,2,3 первого и 1,2 второго  выставлены, а прерывания нет - то тогда да, проблемы.   

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Viktor1306, по-моему вы как-то слишком просто представляете себе управление будильником. Боюсь в чём-то ошибиться, ибо склероз,  но насколько память позволяет вспомнить там вообще нет такой возможности -срабатывать каждые два часа. Можно поставить время от секунды до дня месяца, и отдельными флажками указать при каких комбинациях вызывать срабатывание. Например только при совпадении часов, или часов + минут, итп.  Соответсно доступны циклические варианты - раз в секунду, раз в минуту, раз в час, раз в день, раз в месяц.  После срабатывания прерывания  нужно произвести снятие флагов аларма, иначе следущий аларм никогда не наступит.

Viktor1306
Viktor1306 аватар
Offline
Зарегистрирован: 19.05.2016

Я знаю что там можно только генерить частоты до 1 гц, или прерывание. Мне нужно именно прерывание. При включении контроллера устанавливаются часы на 00:00:00 и будильник на 02:00:00 (точное время мне не нужно), при срабатывании будильника просыпается контроллер, выполняет то что ему нужно, ставит часы на 00:00:00 а будильник на 02:00:00 и засыпает снова. Пытался реализовать это с помощью watch dog-а, но из за того, что контроллер просыпался каждые 8 сек. аккумулятроа на 4000 мА\ч хватило чуть больше чем на неделю, а нужно минимум 5-6 месяцев. 

Разобрался, это я затупил. В сетапе на первое место инициализацию прерывания поставил.