Зависают часы DS3231
- Войдите на сайт для отправки комментариев
Пт, 04/05/2018 - 01:05
Собрал три блока автоматики на ESP32 с модулем часов DS3231 на шине I2C. И на всех блоках через несколько часов часы зависают, такая вот тафталогия, т.е. и на экране замирают и на брокер идет nan(165). Два блока только передают температуру, никаких пульсаций от реле и т.п. нет. Два блока питаются от компьютерных БП, один от мелкого 5в 3Вт, и фильтры по питанию и конденсаторы дополнительные на платах есть. Температура передается стабильно. Скетчи собраны из стандартных примеров, память не утекает. Дело думаю в связке DS3231(точнее шины I2C) и ESP32, несовместимость железа или библиотек.
Можно как то перезапускать шину I2C программно?
"Перезапустить шину I2C" - это выдать на нее STOP. После стопа блоки сопряжения с I2C всех устройств находятся в исходном состоянии и готовы к работе, т.е. к приему старта.
Вы это проверяли, или просто "веруете"? Как проверяли?
проверял вот так
Serial.print("Free memory = ");
Serial.println(ESP.getFreeHeap());
char FreeM[10];
dtostrf(ESP.getFreeHeap(), -2, 0, FreeM);
client.publish("Teplica2/FreeM", FreeM);
"Перезапустить шину I2C" - это выдать на нее STOP. После стопа блоки сопряжения с I2C всех устройств находятся в исходном состоянии и готовы к работе, т.е. к приему старта.
Вот так?
Wire.endTransmission();
Wire.begin();
Запускаю это раз в три минуты, бестолку. Через какое то время шина I2C перестает работать.
"Перезапустить шину I2C" - это выдать на нее STOP. После стопа блоки сопряжения с I2C всех устройств находятся в исходном состоянии и готовы к работе, т.е. к приему старта.
Вот так?
Wire.endTransmission();
Wire.begin();
Запускаю это раз в три минуты, бестолку. Через какое то время шина I2C перестает работать.
Это не "шина I2C перестает работать", а устройство на шине I2C перестает работать. У если устройство не работает, то сколько шину не сбрасывать, толку не будет.
Многие часы реального времени очень чувствительны к помехам и наводкам, потому что работают с мизерными мощностями сигналов. Если у вас все собрано на соплях и подключения земли сделаны как ни попадя, то от помех часы могут зависать.
Ну если зависает устройство, то при перезагрузки есп кнопкой на модуле оно так бы и осталось зависшим, питание же не трогаю. Проблема на трех блоках с ESP32, два сделаны на макетках, но одна на заказанной плате от JLPCB, землю там может я и не правильно развел, но не на соплях.
Ну если зависает устройство, то при перезагрузки есп кнопкой на модуле оно так бы и осталось зависшим, питание же не трогаю.
А про это вы до сих пор молчали как мышь об кирпич. То есть, после сброса ESP все работает, а потом опять зависает?
Тогда мож быть не часы зависают, а ESP? Или есть какие-то признаки, что ESP не завис?
Проблема на трех блоках с ESP32, два сделаны на макетках, но одна на заказанной плате от JLPCB, землю там может я и не правильно развел, но не на соплях.
На соплях земля почти наверняка неправильно разведена. А не на соплях - надо смотреть, правильно или нет.
Вот есть на просторах интернета такой модуль
Такой вы используете или нет, я не знаю. Вы же не говорите, может, это военная тайна.
И там же на просторах есть схема такого модуля
И на этой схеме у часов вход RST (пин 4) висит в воздухе. А с висящим в воздухе входом сброса, почему бы часам не виснуть время от времени от какого-нибудь кошкина бздеха? Правда, в чипе есть встроенная подтяжка 50 кОм, вроде бы должно хватать.
Но это все из области гаданий на кофейной гуще. Устройство у вас секретное, бог весть чего там у вас накосячено.
Да часики такие, есп не зависает, температура стабильно передается на сервер, как писал в первом посте, релюшками управляет, а вот на шине i2c экран олед 0,96 и часы, изображение замирает и на брокер вместо часов и минут передается значение 165.
Вот схема и плата https://easyeda.com/editor#id=648a0a2f36fe4386aaf93c30dc702bf6|0bbb99ca9b4a4061af2391025849df24
Надо подключить полив по времени а с часами беда.
Вот схема и плата https://easyeda.com/editor#id=648a0a2f36fe4386aaf93c30dc702bf6|0bbb99ca9b4a4061af2391025849df24
Она доступна только вам. А остальным - permission denied. Точно - военная тайна.
на шине i2c экран олед 0,96 и часы, изображение замирает и на брокер вместо часов и минут передается значение 165.
Возможная причина - зависание OLED. В принципе любое зависшее устройство I2C способно повесить всю шину.
Вопрос только почему все это начинает работать после сброса ESP. Если ESP при старте не сбрасывает другие устройства, значит проблема все-таки в нем самом. Скорей всего ваша прога лезет в пины, которые управляют шиной I2C, и прописывает туда 0. После этого шина зависает.
OLED только в двух блоках автоматики, в третьем ТМ1637 и в этом блоке на индикаторе двоеточие моргает, а когда часы зависнут, то вместо минут и часов -5. Тоже думаю дело именно в ESP32 или в библиотеках и их оптимизации под двухядерность ESP32.