Я использую китайскую Arduino Duemilanove (Atmega328p) с прошивкой Optiboot. К ней подключены разные модули по i2c, а также напрямую к пинам LCD Keypad Shield (LCD1602) и модуль твердотельного реле OMRON. Реле управляет пускателем двигателя. В коде активирован watchdog на 1 сек, который проверенно работает. Питание внешним китайским импульсным блоком на 9 В.
Возникают две проблемы:
1) Когда происходит несколько включений пускателя, LCD начинает очень странно себя вести. На каждом знакоместе очень быстро меняются символы из знакогенератора. Через это мельтешение видно, что и программно выведенный текст тоже пытается отобразиться и программа выполняется (реле работает).
Все это проходит, если параллельно блоку питания подключить USB.
2) Самая серьезная проблема: иногда реле не выключает пускатель. Я просмотрел код, он довольно большой, но никаких проблем я не увидел. Плюс в случае зависания должен сработать watchdog, но этого не происходит.
И вот у меня вопрос: могут ли помехи питания нарушать состояние памяти? И как их ловить, и где? на выходе блока питания? Я по части электроники не особо силен. Подскажите, пожалуйста, как диагностировать и какие действия можно предпринять, чтобы все работало стабильно?
1) источник питания андрунны должен быть полностью изолирован от сильноточных цепей. при использовании различного чина-хлама - не желательно даже включение в "ту же розетку" либо вообще на одну линию с мощным потребителем (пускатель). для теста можно запитать от внешнего акб или просто кроны - на некоторое время хватит.
2) если п.1 не помогает, можно попробовать спрятать андрунну + всю доступную "логику" внутрь железного коробка, можно обклеить фольгой картонную коробку - для тестов возможно подойдёт. "изоляция" в виде SSR для данного случая в целом недостаточна, т.к. при соседстве с большими силовыми потребителями становится очень важной "изоляция" в области ЭМИ - разного рода оплётки на кабели, металлические корпуса, ферриты на длинные провода.
3) без применения осциллографа в любом его исполнении или без явного опыта работы - достоверно диагностировать можно, напирмер, диарею. остальное - врядли.
Главный недостаток чужого кода - он либо заработает сразу и значит Вам повезло, либо не заработает и Вам придётся в нём глубоко разбираться, до чёткого понимания каждой его строки. Я к тому, что проблемы могут быть вовсе не от питания. А от "довольно большого" кода и "разных модулей".