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

inicjalizacja wyświetlacza LCD 2x16 HD44780 pod ATmega16

klosik1986 27 Wrz 2011 19:29 2492 2
REKLAMA
  • #1 9969713
    klosik1986
    Poziom 2  
    Witam.
    Wiem, że temat wygląda podobnie do wielu innych tematów, ale rady podane w tychże nie pomogły.
    Mam płytkę, gdzie dane przesyłane są przez port A (D0...D7 - PA0...PA7) natomiast linie sterujące są podłączone do portu C (E-PC7,RW-PC6,RS-PC5).
    Płytka jest sprawdzona omomierzem i wszędzie są przejścia.

    Napisałem kod w AVRStudio4:
    ldi r16,0xFF;ustawienie linii PA0-PA7 jako wyjście
    out DDRA,r16
    rcall ini_LCD
    ldi r16,30
    rcall zapisz_LCD
    ety:
    rjmp ety

    ini_LCD:
    push r16
    push r17

    cbi PORTC,6
    cbi PORTC,5
    cbi PORTC,7

    rcall WAIT_15MS
    rcall WAIT_15MS
    rcall WAIT_15MS

    ldi r16,0x30
    rcall instrukcja_LCD

    rcall WAIT_1MS
    rcall WAIT_1MS
    rcall WAIT_1MS
    rcall WAIT_1MS
    rcall WAIT_1MS

    ldi r17,2
    ini_LCD_1:
    rcall instrukcja_LCD
    rcall WAIT_100US
    rcall WAIT_100US
    dec r17
    brne ini_LCD_1

    ldi r16,0x01
    rcall instrukcja_LCD
    ldi r16,0x02
    rcall instrukcja_LCD
    ldi r16,0x06
    rcall instrukcja_LCD
    ldi r16,0x08
    rcall instrukcja_LCD
    ldi r16,0x38
    rcall instrukcja_LCD

    pop r17
    pop r16
    ret

    instrukcja_LCD:
    cbi PORTC,5
    rcall zapisz_LCD
    sbi PORTC,5
    ret

    zapisz_LCD:
    sbi PORTC,7 ;linia EN na stanie wysokim
    out PORTA,r16
    cbi PORTC,7 ;linia EN w niskim - potwierdzenie
    rcall WAIT_100US ;opóźnienie 100us
    ret

    Wydaje mi się, że o niczym nie zapomniałem a wyświetlacz zachowuje się jakby był przed inicjalizacją (czarny pierwszy wiersz).
    Nawet wyłączyłem JTAGa bo jest wspólny dla portu C.

    Takie same objawy dla dwóch ATmeg i dwóch wyświetlaczy.

    Co jest nie tak?
  • REKLAMA
  • #3 9971271
    klosik1986
    Poziom 2  
    Dzięki pomogło.
    zapomniałem o jednej instrukcji inicjalizującej i opóźnienie w funkcji zapisywania danych miałem za małe (chociaż wg specyfikacji powinno chodzić)
    Dzięki.

    EDIT:
    jeszcze trzeba było wyłączyć JTAG bo część linii było obsługiwanych przez port C.
REKLAMA