Uruchomienie Inicjalizacja modułu LCD HD44780

10

Używam klonowanego modułu LCD HD44780 KS0066U. Wszystko działa dobrze na module, z wyjątkiem gdy szybko włączam i wyłączam urządzenie (on-> off-> on). Z jakiegoś powodu bardzo krótka przerwa w zasilaniu powoduje nieprawidłową inicjalizację modułu wyświetlacza jako 1-liniowy wyświetlacz LCD zamiast 2-wierszowego wyświetlacza LCD. Co spowodowałoby to zachowanie? Czy jest jakiś sposób, aby temu zapobiec w oprogramowaniu?

EDYCJA: Używam kontrolera wyświetlacza w trybie 4-bitowym, a nie 8-bitowym.

mjh2007
źródło
Wydaje się, że nikt nie uważał twojego pytania za warte głosowania, dość dziwne.
Kortuk
Karty danych niektórych klonów HD44780 są dość słabo napisane. Moim celem było rozpoczęcie rozmowy na temat właściwego sposobu ich inicjowania. Może jestem jedynym, który miał problemy z używaniem ich w trybie 4-bitowym.
mjh2007
Nie, przechodzę teraz przez ten sam problem w trybie 4-bitowym. Minęło około 15 lat, odkąd ostatni raz zaprogramowałem prosty znak LCD i pamiętam, że debiutowanie z powrotem, gdy byłem w szkole, było prawdziwym bólem. Jednak nie jestem tak daleko od ciebie - nie mogę nawet poprawnie zainicjować, ponieważ nie mogę jeszcze wyświetlić żadnej postaci. :)
Dave

Odpowiedzi:

4

Zmieniłem swój kod inicjalizacyjny, tak aby dwukrotnie wysyłał górną 4-bitową końcówkę polecenia set funkcji. Po czym nie lubię górnej 4-bitowej końcówki, a następnie dolnej 4-bitowej końcówki. Nie jest to zgodne z arkuszem danych, który wydaje się wskazywać, że możesz wysłać górny 4-bitowy skrawek, a następnie wysłać polecenie ustawiania funkcji górny 4-bit, a następnie dolny 4-bit.

// Działa czasami pseudo-kod
portu = 0x20;
e = 1; e = 0;
port = 0x20;
e = 1; e = 0;
port = 0xC0;
e = 1; e = 0;

// Działa cały czas pseudo-kod
portu = 0x20;
e = 1; e = 0;
e = 1; e = 0;
port = 0x20;
e = 1; e = 0;
port = 0xC0;
e = 1; e = 0;

mjh2007
źródło
2

Domyślam się, że brakuje ci niezbędnego opóźnienia w sekwencji inicjalizacji. Jeśli wyświetlacz jest zajęty podczas próby wysłania polecenia, polecenie to zostanie zignorowane. Jeśli po rozpoczęciu procedury wyświetlacz jest w trybie czterobitowym i właśnie zapisano „0000” jako pierwszą połowę polecenia, to po uruchomieniu „0011” na wyświetlaczu będzie widoczne całe polecenie „00000011” , co spowoduje, że wyświetlacz będzie zajęty przez maksymalnie 1,6 ms.

Nawiasem mówiąc, dobrze jest, jeśli to możliwe, połączyć przewody danych niskiego rzędu z wyświetlacza w taki sposób, że gdy polecenie „0011” zostanie wysłane na wyświetlacz, całe 8 bitów widocznych na wyświetlaczu utworzy polecenie ustawione w trybie co jest właściwe dla używanego typu wyświetlacza. Pomoże to uniknąć problemów z wyświetlaniem podczas resetowania wyświetlacza, który jest już w użyciu (okresowe resetowanie wyświetlacza jest dobrym pomysłem, jeśli można to zrobić bez zakłóceń, ponieważ zapewni, że jeśli wyświetlacz przejdzie w jakiś zły tryb, naprawi to samo).

supercat
źródło
1

Znalazłem obejście problemu:

Dodałem opóźnienie 1000 milisekund przy uruchomieniu, przed inicjalizacją / konfiguracją kontrolera LCD. Działało mi to całkiem nieźle.

Niższe opóźnienie (100, 200 ms) nie działało tak dobrze. Tylko uwaga: stało się to tylko w 4-bitowej bazie danych.

Powodzenia!

Eduardo Brandt
źródło
0

Wstawienie opóźnienia w kodzie, więc po włączeniu daje LCD wystarczająco dużo czasu, aby zainicjować podczas uruchamiania. Maksymalnie kilkaset milisekund.

Możesz także spróbować podłączyć zasilanie LCD do mikrokontrolera i wyłączyć wyświetlacz LCD na sekundę po uruchomieniu.

Thomas O
źródło
Masz
Wypróbuj moją inną sugestię. Możesz nawet kontrolować moc LCD bezpośrednio z pinu; nie powinno pobierać więcej niż kilka mA.
Thomas O
czy naprawdę istnieje maksymalne dopuszczalne opóźnienie? Pomyślałem, że najważniejsze z tymi wyświetlaczami LCD jest to, że czekasz minimalną kwotę, ale jeśli nie możesz uzyskać prawidłowej synchronizacji, możesz grać bezpiecznie i po prostu dłużej czekać.
Dave
@Dave, mogłeś źle zinterpretować „maksymalne opóźnienie”, to tylko rozsądne opóźnienie, które poleciłbym. Na przykład czekanie kilku godzin byłoby trochę ekstremalne ...
Thomas O
LOL! Pomyślałem, że o to ci chodzi, ale chciałem się upewnić, że czegoś mi nie umknie, ponieważ jeszcze nie zainicjowałem LCD. Zastanawiam się, czy powinienem pójść i wziąć garnek, aby upewnić się, że to nie kontrast mnie tu wkręca. :)
Dave
0

Nie jestem pewien, czy to w ogóle pomaga, ale pomieszałem z KS0066U w projekcie Arduino. Oto link .

ThaKidd KG5ORD
źródło