DS03131 (ZS-042) не работает без батарейки

nprizrak
Offline
Зарегистрирован: 27.09.2015

Линию VCC -> Bat отключил.

Странно, но нормально работает только, если вставлена батарейка.

Без батарейки - не выдает ни время, ни выход на SQW (генератор, будильники)

Сам модуль работает - регистры опрашиваются.

Вставляю батарейку - начинает работать как положено.

Чего это она так?

Green
Offline
Зарегистрирован: 01.10.2015

А почему нет? DS1307 именно так себя и ведёт. Попробуйте закоротить посадочное место. Говорят помогает.)

nprizrak
Offline
Зарегистрирован: 27.09.2015

Green пишет:

А почему нет? DS1307 именно так себя и ведёт. Попробуйте закоротить посадочное место. Говорят помогает.)

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

Взял другой модуль, еще не пользованный, оторвал цепь VCC->Bat. - Работает как положено, независимо от наличия батарейки.

Есть уменя сильные подозрения, что с первым модулем я что-то не туда прописал ( экспериментировал с разными примерами). Хотя состояние регистров статус и контрол одинаковые в обоих модулях.

Как вернуть к заводским установкам программно? (модуль впаян в плату, сторона с деталями не доступна)

 

nprizrak
Offline
Зарегистрирован: 27.09.2015

Еще один "прикол" с этим модулем:

Пытаю библиотеку для RTC от Michael Miller (Попробовал ртк библиотеку от Jarzebski - то же самое)

Простой код - по срабатыванию будильника (заведено на прерывание 0, нога ардуины-2) - переставляем будильник на следующее время. Вроде быработает как надо.

void loop() { 
  Rtc.IsDateTimeValid(); //
  if(interuptFlag) //флаг устанавливается по обработке прерывания
  {    
	//здесь установка нового времени для будильника
    
  }
  ReadSerial(); //прием команд с порта
  delay(100);
}

Но - если перенести вызов Rtc.IsDateTimeValid() внутрь обработки флага ( if(interuptFlag)), то прерывания от будильника не идут.  Но опять же - если вызвать эту функцию по команде с ком порта, то происходит прерывание от будильника, обработка, и все- тишина.

А вот на другом модуле RTC и ардуинке - все работает как и задумано, и дополнительный вызов IsDateTimeValid не нужен.

Кто тут виноват? часы или ардуинка? (комбинировать нет возможности - запаяно)

Сама функция IsDateTimeValid - просто чтение состояния регистра

bool IsDateTimeValid()
{
  Wire.beginTransmission(0x68);
  Wire.write(0xF);
  Wire.endTransmission();

  Wire.requestFrom(0x68, (uint8_t)1);
  Wire.read();
}
sadman41
Offline
Зарегистрирован: 19.10.2016

Кто меняет значение переменной interruptFlag?

nprizrak
Offline
Зарегистрирован: 27.09.2015

sadman41 пишет:

Кто меняет значение переменной interruptFlag?

Значение меняется в процедуре обработки прерывания INT0 по входу, на который заведен сигнал от будильника

upd:

В, общем "дело было не в бобине" :(. Исчезла цепь GND на часы на монтажной плате устройства. 

Вопрос теперь стал: а чего же часы вообще работали? Устройство работало нормально, пока не решил поменять батарейку.

Green
Offline
Зарегистрирован: 01.10.2015

Не забивайте голову ни себе, ни людям! Тщательней надо.)

nprizrak
Offline
Зарегистрирован: 27.09.2015

Green пишет:

Не забивайте голову ни себе, ни людям!

Да как скажите.

Однако, должен отметить, что такой эффект (работа часов при обрыве цепи GND) для вас тоже был не знаком.

Green
Offline
Зарегистрирован: 01.10.2015

С микромощными потребителями возможно всё. Вон, люди ds1302 запускаю с килоомным резистором по земле, иначе не работает!)