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

[atmega8535] + lcd zgodny z KS0070B lub HD44780

Tracid 28 Sty 2009 04:16 1375 2
REKLAMA
  • #1 6064805
    Tracid
    Poziom 12  
    Witam!

    Mam problem z zainicjowaniem wyświetlacza, kombinuje już od kilku dni ale nic nie wychodzi. Potrzebuje aby pracował on w trybie 4-bit.

    Wpierw korzystałem z biblioteki: rklibavr lecz nic z tego nie wyszło - zero reakcji. Następnie napisałem obsługę wyświetlacza w asm, bity danych to 4 starsze dla portu C, bity sterujące to 4 młodsze.


    
    .include<m8535def.inc>
    .org 0x000
    rjmp RESET
    .org 0x015
    .def wyswietl1 = r16
    .def wyswietl2 = r17
    .def wyswietl  = r18
    
    .equ Black = 3
    .equ E = 2
    .equ RW = 1
    .equ RS = 0
    
    RESET:	
    		;obsluga przerwania reset
    ldi r16, low(ramend)    
    ldi r17, high(ramend)
    out spl, r16			
    out sph, r17
    
    ldi r16, $00
    ldi r17, $FF
    ldi r18, $0F
    
    out ddrB, r18
    out portB, r16
    
    out ddrC, r17
    out portC, r16
    
    ldi r23, 0x60 ; czekaj 50ms
    rcall waitms
    
    
    ; inicjalizacja
    ;ldi wyswietl, 0b00110000
    ;rcall send1;
    ;ldi r23, 0x5 ; czekaj 5ms
    ;rcall waitms
    
    ;ldi wyswietl, 0b00110000
    ;rcall send1;
    ;ldi r23, 0x5 ; czekaj 5ms
    ;rcall waitms
    
    ;ldi wyswietl, 0b00110000
    ;rcall send1;
    ;ldi r23, 0x5 ; czekaj 5ms
    ;rcall waitms
    
    ;ldi wyswietl, $20 ;4-bit
    ;rcall send1;
    ;ldi r23, 0x10 ; czekaj 5ms
    ;rcall waitms
    
    ;ldi wyswietl, $20 ;4-bit
    ;rcall send1;
    ;ldi r23, 0x10 ; czekaj 5ms
    ;rcall waitms
    
    ldi wyswietl, 0b00100000 ;4-bit
    rcall send1;
    ldi r23, 0x10 ; czekaj 10ms
    rcall waitms
    
    ldi wyswietl, 0b00100000 ;4-bit
    rcall send1;
    ldi r23, 0x10 ; czekaj 10ms
    rcall waitms
    
    
    ldi wyswietl1, 0b00100000 ;font
    ;rcall send1;
    ;ldi r23, 0x5 ; czekaj 5ms
    ;rcall waitms
    
    ldi wyswietl2, 0b11000000
    rcall send;
    ldi r23, 0x5 ; czekaj 5ms
    ;rcall waitms
    
    
    ldi wyswietl1, 0b00000000 ;08
    ;rcall send1;
    ;ldi r23, 0x5 ; czekaj 5ms
    ;rcall waitms
    
    ldi wyswietl2, 0b11110000
    rcall send;
    ldi r23, 0x5 ; czekaj 5ms
    rcall waitms
    
    
    ;ldi wyswietl1, 0b00000000 ;01
    ;rcall send1;
    ;ldi r23, 0x5 ; czekaj 5ms
    ;rcall waitms
    
    ;ldi wyswietl2, 0b00000000
    ;rcall send;
    ;ldi r23, 0x5 ; czekaj 5ms
    ;rcall waitms
    
    ldi wyswietl1, 0b00000000 ;ids
    ;rcall send1;
    ;ldi r23, 0x5 ; czekaj 5ms
    ;rcall waitms
    
    ldi wyswietl2, 0b01110000
    rcall send;
    ldi r23, 0x5 ; czekaj 5ms
    rcall waitms
    
    
    
    ;ldi wyswietl2, $70
    
    loop:
    sbi portC, Black
    ldi wyswietl1, $49
    ;rcall send1;
    ;ldi r23, 0x5 ; czekaj 5ms
    ;rcall waitms
    
    ldi wyswietl2, $89
    rcall send;
    ldi r23, 0x5 ; czekaj 5ms
    rcall waitms
    
    
    ldi wyswietl1, $79
    ;rcall send1;
    ;ldi r23, 0x5 ; czekaj 5ms
    ;rcall waitms
    
    ldi wyswietl2, $79
    rcall send;
    ldi r23, 0x5 ; czekaj 5ms
    rcall waitms
    
    rcall loop
    
    
    send:
    mov wyswietl, wyswietl1
    rcall send1;
    mov wyswietl, wyswietl2
    rcall send1;
    rcall czek;
    ret
    
    
    send1:
    out portc, wyswietl
    sbi portc, E
    ldi r23, 0x01 ; czekaj 1ms
    rcall waitms
    cbi portc, E
    ldi r23, 0x01 ; czekaj 1ms
    rcall waitms
    ret
    
    czek:
    ldi r24, $0F
    ldi r25, $00
    ;out portc, r25
    out ddrC, r24
    sbi portC, RW
    sbi portC, E
    ldi r23, 0x01 ; czekaj 1ms
    rcall waitms
    in wyswietl, portC
    cbi portc, E
    ldi r23, 0x01 ; czekaj 1ms
    rcall waitms
    sbi portC, E
    ldi r23, 0x01 ; czekaj 1ms
    rcall waitms
    in r23, portC
    cbi portc, E
    ldi r23, 0x01 ; czekaj 1ms
    rcall waitms
    sbrc wyswietl, 7
    rcall czek
    ldi r24, $FF
    ldi r25, $00
    cbi portC, RW
    out ddrC, r24
    out portC, r25
    ret;
    
    waitms:
    mov r22, r23; ustaw czas opóźnienia
    ; powtórz n razy pętlę L,
    ; co da opóźnienie ok. n * 1 ms
    L:
    ; powtórz 10 razy pętlę L0,
    ; co da opóźnienie ok 1ms
    ldi r21, 10
    L0:
    ; powtórz 100 razy pętlę L1,
    ; co da opóźnienie ok. 100 us
    ldi r20, 100
    L1:
    nop ; 1 cykl
    dec r20 ; 1 cykl
    brne l1 ; 2 cykle
    ; koniec pętli L1
    dec r21
    brne l0
    ; koniec pętli L0
    dec r22
    brne L
    ; koniec pętli L
    ret
    
    


    Próbowałem inicjalizacji dla sterownika KS0070B jak i HD44780. Zmieniłem na drugi (identyczny) wyświetlacz. I dalej nic. Przebiegi na nogach zgodne programem.

    Nie mam pojęcia co robię nie tak. Proszę o pomoc.
  • REKLAMA
  • #3 6099864
    Tracid
    Poziom 12  
    kłopot rozwiązany:

    uszkodzony potencjometr od kontrastu :)

    Procedury działają, trzeba od nowa napisać inicjowanie.
REKLAMA