Debugowanie wyświetlacza LCD 16x2 na Arduino

9

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: zniekształcony tekst

Richard Russell
źródło
1
Spróbuj dodać co najmniej 1 kondensator uF do szyn zasilających, to znaczy jeden koniec kondensatora do Vcc, a drugi do GND. Uważaj na kierunek kondensatora, jeśli jest on elektrolityczny :)
abdullah kahraman,
1
To jest naprawdę dziwne. Nie napędzasz bezpośrednio tego dużego przekaźnika, zakupione pudełko przekaźników ma w rzeczywistości niewielki DIP SSR, który przełącza moc na duży przekaźnik, a duży przekaźnik jest wyłączany z linii prądu przemiennego. W związku z tym naprawdę nie powinno być mowy o tym, aby emf wsteczny generowany przez uruchamiający przekaźnik dostał się do obwodu.
Connor Wolf,
Pachnie to problemem uziemienia / odsprzęgnięcia. Czy masz dużo pojemności na szynach zasilania na płycie?
Connor Wolf,
Ponadto, jak blisko jest pole przekaźnika do obwodu z płytką? Czy można umieścić kilka stóp drutu między skrzynką przekaźników a resztą obwodu? To wyeliminowałoby możliwość jakiegokolwiek sprzężenia magnetycznego.
Connor Wolf,
Dziękuję za odpowiedzi. Masz rację, że przekaźnik jest oddzielony od SSR i różnych innych komponentów. Próbowałem diody, a później wypróbowałem kondensator elektrolityczny 220uF między 5V a GND na szynach zasilania w pobliżu LCD. Żadne z nich nie miało żadnego efektu. Nie próbowałem (jeszcze) dwóch razem.
Richard Russell,

Odpowiedzi:

5

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)

Oli Glaser
źródło
Spójrz na arkusz danych „Przekaźnika”. Wejście do przekaźnika w rzeczywistości napędza niewielki przekaźnik SSR, który przełącza rzeczywistą moc do samego przekaźnika. Ponieważ wejście do przekaźnika to wejście SSR, nie widzę, żeby dioda tak naprawdę nic robiła.
Connor Wolf,
Spojrzałem (wcześniej nie mogłem go znaleźć) i zgadzam się, to była sugestia typu „nie mogę zranić” bez dodatkowych informacji. Mamy nadzieję, że wkrótce otrzymamy aktualizację dotyczącą dodanego oddzielania.
Oli Glaser,
Dzięki za odpowiedzi. Masz rację, że przekaźnik jest oddzielony od SSR i różnych innych komponentów. Wypróbowałem diodę, a później wypróbowałem kondensator elektrolityczny 220uF między 5V a GND na szynach zasilających w pobliżu LCD. Nie próbowałem (jeszcze) dwóch razem.
Richard Russell,
Próbowałem również świadomie przesunąć obwód prądu przemiennego o około stopę od obwodu 5 V, pozostawiając tylko łączący je przewód sygnałowy przekaźnika 5 V, ale to nie pomogło. W moich eksperymentach odkryłem, że niewielkie obciążenie przekaźnika (lampa halogenowa 85 W) nie wydaje się mieć dużego wpływu na wyświetlacz, ale jeśli mam duże obciążenie (czajnik 2000 W), bardziej prawdopodobne jest, że spowoduje błąd. Wcześniej widziałem ten problem z lampą, choć rzadko.
Richard Russell,
Ceramiczna nasadka o wartości około 1 uF byłaby lepsza w przypadku stanów nieustalonych, dodaj ją równolegle do 220uF. Spróbuj dodać jeszcze jedną lub dwie> 100uF nakrętki na + 5 V i GND w pobliżu przewodów przekaźnika. Czy możesz nam pokazać lepszy obraz swojej konfiguracji?
Oli Glaser,
1

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.

Len Shustek
źródło
czy mogę zobaczyć schemat obwodu szeregowego kondensatora i rezystora z przekaźnikiem. Dzięki
Jam Ville,
1

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

bobe
źródło
To niewiele dodaje do istniejących komentarzy.
David
-1

użyj kabla ekranowanego na wyjściu i uziem go. To rozwiązało problem dla mnie.

użytkownik25091
źródło