logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Atmega8][Assembler]Obsługa LCD (2x16)

KKobi 08 Paź 2008 20:10 4606 2
REKLAMA
  • #1 5612870
    KKobi
    Poziom 10  
    Czesc,
    od jakiegos czasu ucze sie programować układy atmega.
    Chciałbym nauczyc sie obslugi wyswietlacza lcd (mam taki 2x16)
    Czy ktoś z Was mógłby mi pomóc ? Zamieścić przykładowy program i opisać co po kolei sie dzieje ?
    Szukałm juz w różnych źródłach, ale albo są to bardzo skromne informacje, albo na tyle obszerne, ze mozna sie pogubić.
    Za wskazówki z podłączeniem bede wdzięczny.
    Z góry bardzo dziękuje.
  • REKLAMA
  • #2 5613154
    Andiron
    Poziom 10  
    Cytat:
    Alfanumeryczne wyświetlacze LCD ze sterownikiem HD44780

    Obecnie ze względu na swoją niską cenę, alfanumeryczne wyświetlacze LCD są bardzo często stosowane w układach opartych na mikrokontrolerach. Chciałbym przedstawić tutaj sposób sterowania takim wyświetlaczem.

    Sterowanie wyświetlaczem alfanumerycznym wyposażonym we sterownik HD44780 odbywa się na zasadzie wysyłania odpowiednich komend oraz zapisu danych do wewnętrzenj pamięci wyświetlacza. Komendy i dane są rozróżniane na podstawie stamu linii RS (0 - komendy; 1 - dane). Kierunek transmisji jest okreslany stanem linii R/W. Sterownik HD44780 posiada dwa rodzaje pamięci : pamięć generatora znaków (CGROM) oraz pamięc danych (DD RAM). Pamięć generatora znaków zawiera graficzną postac znaków wyświetlanych na wyświetlaczu (można porównać do czcionki). Oprócz znaków zdefiniowanych na stałe przez producenta sterownika do dyspozycji użytkownika pozostaje 8-znakowa pamięć RAM, w której można zdefiniowac własne znaki (np. polskie znaki diakrytyczne). Pamięc danych DD RAM ma pojemność 80 bajtów (jeden sterownik HD4478 może obłużyć maksymalnie 80 znaków, czyli np. 2 linie po 40 znaków, lub 4 linie po 20 znaków). W przypadku gdy wyswietlacz posiada mniej znaków niż oferuje sterownik, to te bajty można wykorzystać jako pamięć RAM ogólnego przeznaczenia.

    Instrukcje sterujące wyświetlaczem

    Display clear - (RS = 0, R/W = 0, dane = 00000001) -instrukcja ta powoduje wyczyszczenie wyświetlacza poprzez wypełnienie go spacjami, ustawienie trybu zapisu danych od pozucji w lesym górnum rogu wyświetlacza oraz wyłączenie trybu przesuwania okna; maksymalny czas trwania instrukcji - 1,64ms

    Display/cursor home - (RS - 0, R/W = 0, dane = 0000001x) - instrukcja powoduje ustawienie kursora na pozycji pierwszego zanku w pierwszej linii; maksymalny czas trwania instrukcji 1,64ms

    Entry mode set - (RS = 0; R/W = 0, dane = 000001IS) - okreslenie trybu pracy kursora/okna wyświetlacza :
    - dla S = 1 po zapisaniu znaku do wyświetlacza kursor nie zmienia położenia, natosmiast przesuwa się cała zawartość wyswietlacza
    - dla S = 0 po zapisaniu znaku do wyświetlacza kursor znienia połozenie, a przesuwanie okna jest wyłaczone
    - dla I = 1 kursor lub okno wyświetlacza przesuwa się w prawo (inkrementacja adresu zanku)
    - dla I = 0 kursor lub okno wyświetlacza przesuwa się w lewo (dekrementacja adresu zanku)
    Maksymalny czas trwania instrukcji - 40us

    Display ON/OFF - (RS = 0, R/W = 0, dane 0001DCB)
    - dla D = 1 - włączenie wyświetlacza
    - dla D = 0 - wyłączenie wyświetlacza
    - dla C = 1 - właczenie kursora
    - dla C = 0 - wyłączenie kursora
    - dla B = 1 - włączenie migania kursora
    - dla B = 0 - wyłączenie migania kursora

    Display kursor shift - (RS = 0, R/W = 0, dane = 0001SRxx)
    - dla S = 1 - przesuwana jest zawartość okna
    - dla S = 0 - przesuwany jest kursor
    - dla R = 1 - kierunek przesuwu w prawo
    - dla R = 0 - kierunek przesuwu w lewo

    Function set (RS= 0, , R/W = 0, dane = 001DNFxx)
    - dla D = 1 - interfejs 8-bitowy
    - dla D = 0 - interfejs 4-bitowy
    - dla N = 1 - wyświetlacz dwuwierszowy
    - dla N = 0 - wyświetlacz jednowierszowy
    - dla F = 1 - matryca znaków 5*10 punktów
    - dla F = 0 - matryca znaków 5*7punktów

    CG RAM set - (RS= 0, RW = 0, dane = 01AAALLL) - ustawia adres pamięci generatora znaków. AAA - 3-bitowy adres znaku, LLL - 3-bitowy numer linii składającej sie na graficzne odwzorowanie znaku.

    DD RAM set - (RS = 0, R/W = 0, dane = 1AAAAAAA) - ustawia adres pamięci wyświetlacza, pod który nastąpi zapis (bądź odczyt) danych operacją Data write lub Data read.

    Busy flag read - (RS = 0, R/W = 1, dane = BAAAAAAA) - odczyt flagi zajętości i adresu pamięci wyświetlacza. B - flaga zajętości wyświetlacza, AAAAAAA - 7-bitowy adrtes pamięci DD RAM.

    Data read - (RS = 1, R/W= 1, dane = odczytywany bajt danych) - odczyt danych z pamięci wyświetlacza, bądź pamieci CG RAM (jesli poprzednio wydano komendę CG RAM set)

    Data write - (RS = 1, R/W = 0, dane = zapisywany bajt danych) - zapis danych do pamięci wyświetlacza, bądź pamięci CG RAM (jeśli poprzednio wydano komendę CG RAM set)


    a linie w wyświetlaczu 2x20 albo 16 nie wiem sam jaki to jest ten co mam :)

    od 1-16:
    1:GND
    2: VCC
    3:VSS
    4:RS
    5:RW
    6:E
    7-14: linie danych 7:D0, 8:D1... 14:D7
    15:A
    16: K

    powinno ciut pomóc :)
  • #3 5613385
    Limonit
    Poziom 13  
    Ja radzę zacząć od przejrzenia noty katalogowej. To, jak kolega Andiron
    zauważył, jest wyświetlacz typu HD44780 i jak sobie to hasło wpiszemy, to Pan Googliński szybko znajdzie notę katalogową.
    Jedna istotna uwaga, w nocie nie ma opisanych wyprowadzeń. Te podane przez Andirona są najczęściej spotykane, ale zdarza się, że Vcc i GND są odwrotnie. Poznamy to tak, że wyświetlacz nic nie pokaże i zacznie się rozgrzewać.
    Prawidłowo zasilony wyświetlacz, ale niezainicjalizowany będzie w górnym rzędzie wyświetlał rząd ciemnych prostokątów.
    Jeśli sobie życzysz procedury to służę, mam w asemblerze i C (wszystko jest mojego autorstwa). Daj znać na priv. Ale na podstawie noty katalogowej sam spokojnie dasz rade napisać.
    Pozdro
REKLAMA