Можно ли программно узнать факт зависания дисплея SSD1306 (по I2C)

morskoyzmey

✩✩✩✩✩✩✩
28 Мар 2023
2
0
Зависает, если задеть пальцем SCL+SDA :)
Я понимаю, что не стоит трогать дисплей руками. Думаю, причины зависания могут быть разные.
Интересует вопрос - можно ли программно понять, что он завис и перезагрузить его.
Пользуюсь GyverOLED.
 

te238s

★★✩✩✩✩✩
14 Ноя 2021
374
98
@morskoyzmey,если задеваешь пальцами и экран виснет,значит на iic ошибка происходит. Аппаратный модуль TWI в МК имеет контроль ошибок. Таким образом,программно можно понять что по шине ошибка передачи и ,как следствие,возможное зависание экрана.
1. Передаём информацию
2. Если ошибка,то аппаратный сброс дисплея и новая инициализация.
 
  • Лойс +1
Реакции: morskoyzmey

Alex_HF

★✩✩✩✩✩✩
11 Мар 2023
40
16
Попробуйте подключить внешние резисторы подтяжки 1-4,7кОм к питанию на линии SCL+SDA.
 
  • Лойс +1
Реакции: morskoyzmey

Wan-Derer

★★★★★✩✩
Команда форума
31 Июл 2018
2,169
415
Москва
wan-derer.ru
Если оно совсем зависло, значит и на команды не реагирует. Значит можно периодически давать команду, которая предполагает ответ: адрес запрашивать и т.п. Если не отвечает - значит висит.
Ну а вообще, в правильно спроектированном устройстве дисплей вешаться не должен.
 
  • Лойс +1
Реакции: morskoyzmey и te238s

morskoyzmey

✩✩✩✩✩✩✩
28 Мар 2023
2
0
Как выяснилось, МК как будто тоже зависает, т.к. перестает работать пищалка, которая дергается в прерывании, но запускается по флагу в loop. Пищалка работает чуть дольше после зависания экрана, т.к. у нее свой счетчик в прерывании. Получается ломается главный цикл.
Резисторы попробую внедрить.

UPD. С резисторами не зависает! Правда вместо подтяжки я внедрил их на сами линии, но не суть. Я почитал про ошибки на i2c и понял, что хоть зависание и программное, лечится оно подтяжкой, т.к. задает нужные уровни на ногах.
 
Изменено: