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

Всем добра!
Думал…думал как и где задать этот вопрос, но ничего не придумал, начну отсюда.
Есть самоделка с самописной программой. В какой-то момент обратил внимание на странный глюк. На устройстве есть экран LCD I2C 2004 и управление: пара тумблеров и энкодер с кнопкой. Этим самым энкодером можно путем поворота или щелчками его кнопкой менять всякие параметры и экраны отображения. Этих экранов порядка 15 штук. Так вот в какой-то момент (пока мне не понятный) на одном из экранов портится содержимое (ниже будут и фото и видео). С одной стороны похоже на порчу памяти. Но с другой непонятно… портится всегда одинаково (т.е. один и тот же экран и один и тот же “вид глюка”, отображение на экране). Специально привести в это состояние (глюка) не смог. Устройство какое-то время (от нескольких часов, до нескольких дней (пару недель)) может работать без глюка… А точнее и после, когда происходит глюк, устройство продолжает работать как и нужно, за исключением вот этого только экрана, о котором выше говорил.
На данный момент жду предположений. Весь код показывать не вижу смысла, хотя мне не жалко - могу и выложить, но там порядка ~1500 строк. Но еще и есть датчики, реле… поэтому полный код смотреть можно, но запустить его не получится. И как тут принято - сделать пример с этой ошибкой и показать - тоже не могу, потому как не пойму куда смотреть.
Вот так выглядит экран с глюком:


Вот так должно быть: (данное фото с прототипа, просто не стал пока перезагружать устройство) Но программа одна и та же

Т.е. видно, что пропало “COUNT” вместо С1: - ct
а C2: вообще нет

ЗЫЖ Как видео добавить?

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

если проблема с выводом на экран , надо начать с того как формируеться и как выводиться что либо на экран. в идеалие продублировать вывод в serial и когда на экране случиться глюк сравнить выводы в serial и экран

1 лайк

Микроконтроллер никогда, запомните - НИКОГДА не делате то, что вы от него хотите. Он делает исключительно только то, что вы ему указали сделать. Он построчно выполняет программу, которую для него написали. Т.е. если ваша программа ведет себя не так, как вам нужно, значит разбирайтесь, где вы накосячили ))
В данном случае смотрите, что вы там нумутили с выводом на экран

1 лайк

Не в пограмме дело, а в платке которая напаяна на твой экран. Был у меня такой глюк. На этих платах китайцы ставят разные чипы. PCF8574T и PCF8574AT. По умолчанию у них разные адреса (при не замкнутых перемычках). Вообщем глюки были со вторым чипом. Потом поставил Т и забыл про эту проблему

1 лайк

Имеешь ввиду, что сами PCF8574 с буквой А так делают?

ТС, какой адрес дисплея в коде указан? 0x27 или 0x3F ?

с дисплеем с адресом 0X27 какие-то непонятные глюки идут, 2004A который,
у меня 1602A (0x3F) c PCF AT проблем нет

Ардуино 2й версии (самая новая)

знать бы когда это произойдет… да еще и устройство работает… нет возможности его на сериале держать … А так идея норм, конечно бы так и проверил…

Вывод на экран у меня в двух функциях UpdateSvreen() и UpdateScreenData()
Соответственно статичные данные выводятся в первой, а обновляющиеся во второй. Глюк получается в первой а там вот так вывод сделан:
(пишу сейчас по памяти, не рядом с компом, где делаю проект, как доберусь, выложу код полностью)

void LCDPrint (const byte x, const byte y, const * char str) {
lcd.setCursor(x, y); //lcd - объект экран
lcd.print(str);
}

void UpdateScreen() {

LCDPrint(5, 0, “ERROR COUNT”);
LCDPrint(0,1, “P1:”);
LCDPrint(0,2, “C1:”);

}
Практически весь вывод на экран в программе происходит с помощью LCDPrint (возможно тут по памяти с параметрами напутал, потом покажу правильный код)

Вот тоже думал про это, но… проверить - это другой экран подключить… буду заказывать новый, поменяю потом. Хорошо если дело в нем…
Какой там экран - пока не скажу… узнаю, напишу.

на сколько помню - 0х27

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

можно ссылку, куплю, проверять буду.

1 лайк

так может опубликовать его?

Там достаточно много кода, в нескольких файлах, не считаю чужих библиотек…
Доберусь до компа, покажу файл, где происходит вывод на экран…

Как сюда видео с компа выложить? На видео немного понятнее видно проблему, чем на статичных фотках…

Сюда - никак, но кто мешает выложить на Ютуб и дать ссылку? Или там у вас какой-то “чебурнетовский” аналог Ютуба сделали, в принципе нет разницы.

Жалко

на видео просто кручу и нажимаю энкодер и периодически открываю проблемный экран

Если не экран, то может быть стек оверфлоу? Много прерываний в коде? И так и не сказал есть ли указатели или массивы. Понять бы архитектуру кода, которого нет…
“Там для меня горит очаг…”

Ой простите, но уже не удержался)))

1 лайк

И только один экран страдает всегда?. И всегда одинаково.

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

Есть. За массивами (т.е. за границами я слежу, а вот с указателями у меня проблема… Ну если уж совсем грубо ошибся где либо, то сразу бы вылазил глюк, а то нет… может и пару недель отработать норм…

Если есть желание разобраться в коде любителя-хоббиста, могу выложить хоть весь… Но там нет комментариев (практически нет) за что себя сам ругаю очень сильно, но как-то не приучусь к этому… и каждый раз когда есть время поковыряться, начинаю вспоминать что там и как… но пока не вспомню, в код с изменениями не лезу)))
Да и глюк как-то появился незаметно… случайно заглянул на этот экран уже на рабочем устройстве, а там… И ведь все остальное работает
После каких изменений появился - хз((

Выкладывай) всем интересно буит. А то народ щас анекдоты травить начнёт))))

1 лайк

Вот с выводом этого экрана и нужно разбираться