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.


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;


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).


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!


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.


— 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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.