[pytanie laika] LCD przez LPT, jak zainicjowac

Jun 11, 2004 7 Replies

Witam



Podlaczylem wyswietlacz LCD 2x16 na sterowniku HD44780 do portu LPT. Napisalem juz program tak, ze moge dowolnie zmieniac stany logiczne na pinach wyswietlacza, zasilanie rowniez doprowadzilem. Proboje sterowac wyswietlaczem tak jak jest to opisane w karcie katalogowej sterownika (jest tam podany przyklad krok po kroku) ale narazie zadnych efektow nie ma...



Pierwsze pytanie bardzo banalne - nie mialem jeszcze kontaktu z cyfrowka i nie wiem jak wysylac sygnaly do wyswietlacza LCD. Na jak dlugo nalezy na niektorych pinach podniesc napiecie do +5 V ? czy czas utrzymywania sie tego stanu ma jakies znaczenie ?



Czy przed wyslaniem kolejnej instrukcji trzeba ustawic na wszystkich pinach stan niski czy po prostu "plynnie" przjesc z jednej instrukcji do drugiej ? jesli tak, to jak dlugo ma trwac ten stan "wyzerowania" ?



Zamierzam uzywac interfejsu 4-o bitowego wiec kazda instrukcja bedzie podzielona na dwa sygnaly - jak wyslac dwa sygnaly tak, aby sterownik potraktowal to jako 1 instrukcji ? (oczywiscie juz po ustawieniu go w prace 4-o bitowa) czy do tego celu sluzy wejscie ENABLE ?



Przy ustawionym kontrascie na maximum zapala sie cala gorna linia wyswietlacza, czy moze tak byc czy nalezy zmniejszyc kontrast aby cokolwiek moc wyswietlic ?



Pozdrawiam i z gory dziekuje.


U¿ytkownik "Keeller" snipped-for-privacy@NOSPAMwp.pl napisa³:

Od tego jest chyba sygnal BSY (zajetosc)....

chyba niedokladnie czytales dokumentacje, sterownik trzeba przestawic w tryb 4 bitowy, ale poniewaz stan sterownika moze byc dowolny w chwili wlaczenia zasilania trzeba wyslac pare "pustych" komend.... procedura jest dokladnie opisana w dokumentacji, procedura jest tak skonstrulowana ze tryb mozna ustawic niezaleznie od czy polaczenie jest na 4 czy 8 bit

pozdrawiam BobyX

Dokladniej chodzi mi o to jak uzywac wyprowadzenia ENABLE.

W specyfikacji sterownika na przykladzie wyswietlania przez interfejs 4-o bitowy w tabeli nie ma podanego stanu ENABLE.

  1. Podlaczam napiecie zasilania
  2. Function set RS=0 R/W=0 DB5=1 Punkt ten odpowiada za przejscie sterownika w tryb 4-o bitowy.

Czy w tym momencie wystarczy na chwile podniesc napiecie na pinie DB5 do +5V, a potem obnizyc z powrotem do 0, a moze napiecie ma zostac az do nastepnego rozkazu ? czy podczas tej instrukcji nalezy uzyc sygnalu ENABLE ? Jesli tak ktory sygnal ma byc zalaczony jako pierwszy i ktory ma wygasnac pierwszy ?

  1. I tutaj mamy pierwszy rozkaz rozlozony na 2 sygnaly, wiem ze najpierw trzeba wyslac bardziej znaczaca czesc bajtu, a potem mniej. Probowalem w rozny sposob wysylac te sygnaly do wyswietlacza, ale niestety nic nie chcialo dzialac prawidlowo :(

Jak ma wygladac uzywanie sygnalu ENABLE przy wysylaniu tego rozkazu ? Chodzi mi o opis typu:

  1. Na wszystkich pinach napiecie 0V
  2. RS=H ENABLE=L
  3. RS=H ENABLE=H
  4. RS=H ENABLE=H + bardziej znaczaca czesc bajtu
  5. RS=H ENABLE=L
  6. RS=H ENABLE=H
  7. RS=H ENABLE=H + mniej znaczaca czesc bajtu
  8. RS=H ENABLE=L
  9. Na wszystkich pinach napiecie 0V To tylko przyklad, ktory niestety nie dziala... Jak powinny wygladac poszczegolne kroki aby wyswietlacz potraktorwal to jako jedno polecenie wyslane interfejsem 4-o bitowym ?

Pozdrawiam

Użytkownik Keeller napisał:

[...]

na

formatting link
znajdziesz gotowy program, kolega pisal go w pascalu, moze da zrodlo.

przeanalizuj

formatting link
niestety nie znalazlem strony w normalniejszym jezyku

U¿ytkownik "AlexY" <alexy@irc.-cut_this-.pl> napisa³ w wiadomo¶ci news:caem0j$a11$ snipped-for-privacy@nemesis.news.tpi.pl...

Dzieki, fajny link, ale nie rozumiem w tych opisach jednego: Najpierw kaza ustawic jakis stan np.(RS, R/W, a potem dane):

0 0 0 0 1 1 n/c n/c n/c n/c (1)

potem odczekac 4.1ms i:

0 0 0 0 1 1 n/c n/c n/c n/c (2)

odczekac 100 us i znowu to samo ! Jaki to ma sens ? przeciez nic sie nie zmienia. Nigdzie nie pisze zeby miedzy tymi stanami ustawic wszsytkie piny na 0, a za to troche dalej, zwracaja uwage na to ze w pewnym momencie maja byc same zera:

Wait 40us

RS R/W DB7 DB6 DB5 DB4

0 0 0 0 0 0

Skad wiec wyswietlacz ma wiedziec ze sygnal (1) oraz sygnal (2) to dwa rozne sygnaly a nie jeden ten sam ?

I podobny problem, co jezeli bede musial wyslac same zera jako bardziej/mniej znaczaca czesc bajtu, skad program ma wiedziec ze wlasnie w danej chwili chce przeslac te zera, a nie jest to po prostu jakas 'chwila odpoczynku' ? bylo by to jasne jezeli miedzy kolejnymi sygnalami nie zerowalo by sie pinow, wtedy bylo by wiadomo ze zmiana na zera oznacza kolejny sygnal, ale skoro miedzy sygnalami nie zeruje sie pinow to pierwsza omawiana sytuacja nie ma sensu bo oba sygnaly sa identyczne i wyswietlacz powinien je traktowac jako jede, i powstaje takie bledne kolo.

Niezle namieszalem ale mam nadzieje ze wiecie o co chodzi :-) mowia krotko - po kazdym sygnale nalezy ustawic 000000 czy nie ?

Pozdrawiam

U¿ytkownik "Keeller" snipped-for-privacy@NOSPAMwp.pl napisa³:

ma taki, ze nie wiesz w jakim stanie jest kontroler wyswietlacza, moze byc np. w 8bitowym... taka sekwencja zapewnia poprawna inicjalizacje a co do sygnalu ENABLE to chyba caly czas ma byc wysoki programowalem ten wyswietlacz, ale z mikrokontrolera, w troche innej konfiguracji sprzetowej

pozdrawiam BobyX

bo jeśli przypadkiem LCD był w trrybie 4-bitowym, to oczekuje na dwie "połówki" rozkazu. Jedna "wysyłka" spowodowałaby w takim przypadku, że połowa następnego rozkazu zostałaby potraktowana przez LCD jako młodsze bity tego rozkazu - lub innymi słowy: wszystkie dalsze rozkazy były przesunięte "o pół bajtu"

U¿ytkownik "Jarek Andrzejewski" snipped-for-privacy@dawid.com.pl> napisa³ w wiadomo¶ci news: snipped-for-privacy@4ax.com...

Dzieki za rade teraz juz rozumiem. Z dokladniejszej analizy karty kanalogowej wywnioskowalem ze moment przejscia sygnalu enable w stan niski oznacza "wyslanie rokazu", na takiej zasadzie napisalem program i wszystko dziala juz dobrze :-)

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required