DS3231

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

Да, я подтягивал SDA и SLC к + а вывод SQW у меня и так на плюсе, через резюк 1к и светодиод. По прошествии 45-60 сек светодиод загорается, так как если бы его второй вывод соеденил с землёй. А время будильника выставляю как в примере приведено. 

void ClockInit(){
  isAlarm = false; 
  alarmState = false;
  clock.begin();
 
  // Disarm alarms and clear alarms for this example, because alarms is battery backed.
  // Under normal conditions, the settings should be reset after power and restart microcontroller.
  clock.armAlarm1(false);
  clock.clearAlarm1();
  Wire.beginTransmission(104);
  Wire.write(0x0E);
  Wire.write(0x05);
  Wire.endTransmission();

  // Manual (Year, Month, Day, Hour, Minute, Second)
  clock.setDateTime(2014, 1, 1, 0, 0, 0);

  // Set Alarm1 - Every 20s in each minute
  // setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true)
  clock.setAlarm1(0, 2, 0, 0, DS3231_MATCH_S);
  delay(3000);
  sleepNow();     // Вызов функции sleep() для засыпания     
}

Чего тут может быть не правильно? Тем более, если МК не спит, то всё работает. Проблема появляется после того, как Arduino уснёт. При чём, если я её бужу после того, как светодиод загорелся, то он гаснет, после того, как она опять уснёт - загорается.

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

Viktor1306, помедитируйте над строчкой 20 вашего скечта. И объясните, почему аларм должен включиться через (сколько там вы хотели), а не раз в минуту как у вас запрограммировано?

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

Я понял так, первое значение - день. Поскольку у меня срабатывание должно происходить через 2 часа, то тут оставил 0, второе значение - часы, тут выставил - 2, третье значение - минуты 0, четвёртое - секунды 0. А что я не так там запрограммировал? Если подскажите, буду очень признателен. В примере было так 

clock.setAlarm1(0, 0, 0, 20, DS3231_MATCH_S);

Будильник срабатывал через 20 сек.

 

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

Viktor1306, внимательно посмотрите на последний байт, что у вас передаётся в функцию. Перевожу на русский на всякий случай - "совпадение секунд".

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

Всё, понял! 

clock.setAlarm1(0, 2, 0, 0, DS3231_MATCH_H_M_S);

Так нужно было. Спасибо Вам! А вообще библиотеки это зло. Хотел как быстрее, а нужно было, как я теперь думаю, использовать максимум что - библиотеку wire. 

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

И где связь между ошибкой в коде и неправильной работе DS3231 при ушедшим в сон МК ?

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

Связи как выяснилось нет. Просто когда контроллер спит это заметно (просыпается каждую минуту), а если я отключаю сон, закоментировав строчку кода, каждую минуту диод коротко вспыхивает. И это сложно заметить. Остаётся не понятным как у меня через 2 часа этот диод загорался и горел... Списал это в аномальные явления... А так всё работает нормально теперь.