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:
Odpowiedzi:
Czy masz diodę na przekaźniku? Jeśli nie, impulsy indukcyjne przy zamykaniu / otwieraniu prawdopodobnie spowodują problemy.
Kiedy np. Zatrzymasz prąd płynący przez przekaźnik, spróbujesz go utrzymać, jeśli nie ma drogi rozładowania, wytworzy duże napięcie (zasadniczo będzie rosło, dopóki nie znajdzie trasy).
W szczególności wzór jest następujący: V = L (dI / dT). Oznacza to, że induktor przeciwstawia się zmianom przepływu prądu przez niego, wytwarzając napięcie proporcjonalne do szybkości zmiany prądu.
Spróbuj umieścić diodę w poprzek przekaźnika, zorientowaną tak, aby przeciwdziałać normalnemu przepływowi prądu.
EDYCJA - po sprawdzeniu strony produktu wydaje się, że jest to „gotowy zwinięty” przekaźnik w pudełku z dodanymi komponentami peryferyjnymi, więc jest mało prawdopodobne, aby było wyżej. Mimo to spróbowałbym umieścić diodę w poprzek zasilania przekaźnika.
Upewnij się również, że zasoby są dobrze filtrowane, jak wspomniano w komentarzach. Umieść kilka kondensatorów o pojemności co najmniej 1uF obok układów scalonych i wyświetlacza LCD, a gdzieś masową nasadkę> 100uF (wszystkie od zasilania do ziemi)
źródło
Miałem ten sam problem z wyświetlaczem LCD 16x4, gdy Arduino kontrolował również optoizolowaną płytkę przekaźnika SainSmart . Wszystko działało dobrze z odłączonymi stykami przekaźnika. Ale kiedy przekaźnik przełączył obciążenie indukcyjne (przekaźnik mocy 24 VAC), wyświetlacz zniekształcił się. Nie pomogła żadna ilość izolacji zasilania i kondensatorów filtrujących.
Rozwiązaniem problemu był tłumienie (kondensator i rezystor szeregowo) na stykach przekaźnika SainSmart. Do schludności użyłem paczkowanego filtra EMI / RFI Cornella Dubiliera, ale kondensator 0,1 ufd w ogrodzie z szeregowym rezystorem 47 omów prawdopodobnie równie dobrze działałby.
źródło
Uderzyłem się w głowę, dlaczego mój wyświetlacz LCD jest „zniekształcony” i okazało się, że nie podłączyłem mojego Arduino GND do deski do krojenia (jeśli to komuś pomoże). pozdrowienia
źródło
użyj kabla ekranowanego na wyjściu i uziem go. To rozwiązało problem dla mnie.
źródło