Зависают часы DS3231

kvn73
Offline
Зарегистрирован: 28.04.2018

Собрал три блока автоматики на ESP32 с модулем часов DS3231 на шине I2C. И на всех блоках через несколько часов часы зависают, такая вот тафталогия, т.е. и на экране замирают и на брокер идет nan(165). Два блока только передают температуру, никаких пульсаций от реле и т.п. нет. Два блока питаются от компьютерных БП, один от мелкого 5в 3Вт, и фильтры по питанию и конденсаторы дополнительные на платах есть. Температура передается стабильно. Скетчи собраны из стандартных примеров, память не утекает. Дело думаю в связке DS3231(точнее шины I2C) и ESP32, несовместимость железа или библиотек.

Можно как то перезапускать шину I2C программно?

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

"Перезапустить шину I2C" - это выдать на нее STOP. После стопа блоки сопряжения с I2C всех устройств находятся в исходном состоянии и готовы к работе, т.е. к приему старта.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

kvn73 пишет:
Скетчи собраны из стандартных примеров, память не утекает.

Вы это проверяли, или просто "веруете"? Как проверяли?

kvn73
Offline
Зарегистрирован: 28.04.2018

проверял вот так

Serial.print("Free memory = ");
  Serial.println(ESP.getFreeHeap());
  char FreeM[10];
  dtostrf(ESP.getFreeHeap(), -2, 0, FreeM);
  client.publish("Teplica2/FreeM", FreeM);

kvn73
Offline
Зарегистрирован: 28.04.2018

triac пишет:

"Перезапустить шину I2C" - это выдать на нее STOP. После стопа блоки сопряжения с I2C всех устройств находятся в исходном состоянии и готовы к работе, т.е. к приему старта.

Вот так?

Wire.endTransmission();
Wire.begin();

Запускаю это раз в три минуты, бестолку. Через какое то время шина I2C перестает работать.

 

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

kvn73 пишет:

triac пишет:

"Перезапустить шину I2C" - это выдать на нее STOP. После стопа блоки сопряжения с I2C всех устройств находятся в исходном состоянии и готовы к работе, т.е. к приему старта.

Вот так?

Wire.endTransmission();
Wire.begin();

Запускаю это раз в три минуты, бестолку. Через какое то время шина I2C перестает работать.

Это не "шина I2C перестает работать", а устройство на шине I2C перестает работать. У если устройство не работает, то сколько шину не сбрасывать, толку не будет.

Многие часы реального времени очень чувствительны к помехам и наводкам, потому что работают с мизерными мощностями сигналов.  Если у вас все собрано на соплях и подключения земли сделаны как ни попадя, то от помех часы могут зависать.

kvn73
Offline
Зарегистрирован: 28.04.2018

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

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

kvn73 пишет:

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

А про это вы до сих пор молчали как мышь об кирпич. То есть, после сброса ESP все работает, а потом опять зависает?

Тогда мож быть не часы зависают, а ESP? Или есть какие-то признаки, что ESP не завис?

kvn73 пишет:

Проблема на трех блоках с ESP32, два сделаны на макетках, но одна на заказанной плате от JLPCB, землю там может я и не правильно развел, но не на соплях.

На соплях земля почти наверняка неправильно разведена. А не на соплях - надо смотреть, правильно или нет.

Вот есть на просторах интернета такой модуль

Такой вы используете или нет, я не знаю. Вы же не говорите, может, это военная тайна.

И там же на просторах есть схема такого модуля

И на этой схеме у часов вход RST (пин 4) висит в воздухе. А с висящим в воздухе входом сброса, почему бы часам не виснуть время от времени от какого-нибудь кошкина бздеха? Правда, в чипе есть встроенная подтяжка 50 кОм, вроде бы должно хватать. 

Но это все из области гаданий на кофейной гуще. Устройство у вас секретное, бог весть чего там у вас накосячено.

kvn73
Offline
Зарегистрирован: 28.04.2018

Да часики такие, есп не зависает, температура стабильно передается на сервер, как писал в первом посте, релюшками управляет, а вот на шине i2c экран олед 0,96 и часы, изображение замирает и на брокер вместо часов и минут передается значение 165.

Вот схема и плата https://easyeda.com/editor#id=648a0a2f36fe4386aaf93c30dc702bf6|0bbb99ca9b4a4061af2391025849df24

Надо подключить полив по времени а с часами беда.

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

Она доступна только вам. А остальным - permission denied. Точно - военная тайна.

kvn73 пишет:

 на шине i2c экран олед 0,96 и часы, изображение замирает и на брокер вместо часов и минут передается значение 165.

Возможная причина - зависание OLED. В принципе любое зависшее устройство I2C способно повесить всю шину.

Вопрос только почему все это начинает работать после сброса ESP. Если ESP при старте не сбрасывает другие устройства, значит проблема все-таки в нем самом. Скорей всего ваша прога лезет в пины, которые управляют шиной I2C, и прописывает туда 0. После этого шина зависает.

kvn73
Offline
Зарегистрирован: 28.04.2018

OLED только в двух блоках автоматики, в третьем ТМ1637 и в этом блоке на индикаторе двоеточие моргает, а когда часы зависнут, то вместо минут и часов -5. Тоже думаю дело именно в ESP32 или в библиотеках и их оптимизации под двухядерность ESP32.