Mam standardowy wyświetlacz LCD 16x2 (uważam, że jest kompatybilny z Hitachi HD44780 - patrz podsumowanie i specyfikacja poniżej), podłączony do Arduino Uno za pomocą 4 pinów danych, jak opisano tutaj , chociaż dodałem 2x rezystory 220ohm równolegle (tj. Rezystor 110 omów) na pinie 16 (masa podświetlenia) i zastąpił garnek rezystorami statycznymi, aby wytworzyć 4 V na Vo.
Krótko mówiąc, RW jest podłączony do uziemienia, a RS, Enable i Data4-7 są podłączone do pinów Arduino, podczas gdy dane 0-3 są zmiennoprzecinkowe.
Mam inne rzeczy (czujniki, tranzystor z optoizolowanym SSR i przekaźnik sieciowy, niektóre przyciski) podłączone do różnych pinów Arduino. Używany przeze mnie kod zapisuje tekst na wyświetlaczu kilka razy na sekundę, i zwykle wyświetlacz działa idealnie.
Jednak gdy przekaźnik się zamyka (zajmuje około 10 mA i jest kontrolowany przez tranzystor, który z kolei jest kontrolowany z jednego z pinów Arduino), czasami wyświetlacz LCD jest zniekształcony. Pozostaje zniekształcony zwykle do następnego zamknięcia przekaźnika, ale czasami, gdy przekaźnik się otworzy, lub po kilku kolejnych cyklach otwierania / zamykania w celu zresetowania. Dudnienie zawsze zaczyna się i kończy w tym samym czasie, gdy przekaźnik albo się otwiera, albo zamyka.
Przez „zniekształcony” rozumiem, że za każdym razem, gdy piszę do niego po tym, jak staje się zniekształcony, zamiast pisać angielskie znaki, otrzymuję ciąg znaków, których zwykle nie potrafię zidentyfikować w arkuszu danych (choć niektóre potrafię). Ten ciąg zniekształconych znaków przesuwa się w lewo wzdłuż ekranu, gdy piszę nowy tekst na ekranie LCD.
Jestem pewien, że to nie samo zamieszanie w Arduino, ponieważ jednocześnie piszę ten sam tekst na monitorze szeregowym i nie jest zniekształcony.
Od tego czasu eksperymentowałem z podłączeniem styku RW do wyjścia Arduino, a Data0-3 do uziemienia, ale to nie pomaga. Zasiliłem całe urządzenie baterią 9V lub USB i to nie pomaga. Wymieniłem baterię ... bez zmian.
Jedyne, co wydaje się działać, to brak podłączonego obciążenia do przekaźnika, ale to przeczy celowi :-)
Nie mam analizatora sygnałów ani nic bardziej zaawansowanego niż multimetr, laptop i arduino ... Czy ktoś ma jakieś wskazówki, które pomogą mi w debugowaniu?
LCD Podsumowanie: http://oomlout.com/LCDD/LCDD-SUMM-BC1602A.pdf
Specyfikacja LCD: http://oomlout.com/LCDD/LCDD-DATA-BC1602A.pdf
Przykład zniekształconego tekstu: