Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Jaki to typ LCD

adasb 17 Sty 2006 17:14 1437 2
  • #1 17 Sty 2006 17:14
    adasb
    Poziom 14  

    Chciałem się dowiedzieć czy wyświetlacz LCD 2x16 typ WC1602 jest oparty o sterownik HD44780? Ostatnio próbuje go skonfigurować wykorzystując do tego AT90s2313 w asemblerze i już nie mam pomysłów jak to zrobić.
    Postępując według dokumentacji konfiguruje wszystko jak trzeba. Wypróbowałem przerabiając programy znalezione w sieci i nic. Na wyświetlaczu widoczna 1 linia w czarnych kwadratach. Widać ze zla inicjalizacja. Poniżej przedstawiam napisany program. Linia danych podłączona do PORTB4-PORTB7, RS=PORTD0, E=PORTD1 .Sygnał R/W na stałe do masy.
    Z góry dzieki za pomoc.

    .device AT90S2313, English
    .cseg 0000h
    RJMP RESET

    RESET:
    LDI R16,0B11111111
    OUT DDRB,R16
    OUT PORTB,R16
    LDI R16,0B11111111
    OUT DDRD,R16
    OUT PORTD,R16
    LDI R16,127 ;USTAW STOS
    OUT SPL,R16
    RCALL LCDINIT

    PETLA:
    RJMP PETLA

    ;PROCEDURA ZAPISU BAJTU DO WYSWIETLACZA
    WRITELCD:
    PUSH R16
    SBI PORTD,2 ;ENABLE
    LDI R16,0FH
    OUT PORTB,R16
    LDI R16,0FH
    IN R26,PORTB
    AND R16,R26
    OUT PORTB,R16
    CBI PORTD,2

    POP R16
    SWAP R16

    SBI PORTD,2
    LDI R16,F0H
    OUT PORTB,R16
    LDI R16,0FH
    IN R26,PORTB
    AND R16,R26
    OUT PORTB,R16
    CBI PORTD,2

    LDI R16,01H
    RCALL CZAS
    RET

    ;PROCEDURA ZAPISU INSTRUKCJI DO WYSWIETLACZA
    WRITECOMMAND:
    CBI PORTD,1
    RCALL WRITELCD
    RET


    ;PROCEDURA INICJALIZACJI WYSWIETLACZA
    LCDINIT:
    LDI R16,0FH
    RCALL CZAS
    CBI PORTD,3 ;E=0 RS=0
    LDI R18,03H
    LL:
    SBI PORTD,2
    LDI R16,3FH
    OUT PORTB,R16
    CBI PORTD,2
    LDI R16,5H
    RCALL CZAS

    DEC R18
    BRNE LL
    SBI PORTD,2
    LDI R16,2EH
    OUT PORTB,R16
    CBI PORTD,2
    LDI R16,01H
    RCALL CZAS

    LDI R16,28H
    RCALL WRITECOMMAND

    LDI R16,08H
    RCALL WRITECOMMAND

    LDI R16,01H
    RCALL WRITECOMMAND

    LDI R16,06H
    RCALL WRITECOMMAND

    LDI R16,0CH
    RCALL WRITECOMMAND
    RET

    CZAS: ;15ms

    MOV R22,R16
    L:
    LDI R21,10
    L0:
    LDI R20,100
    L1:
    NOP
    DEC R20
    BRNE L1
    DEC R21
    BRNE L0
    DEC R22
    BRNE L
    RET
    TAB: .DB "CZESC",0

    0 2
  • #2 18 Sty 2006 16:36
    Pituś Bajtuś
    Poziom 28  

    Hmm znajomy kod :wink:

    Cytat:
    Linia danych podłączona do PORTB4-PORTB7, RS=PORTD0, E=PORTD1

    Cytat:
    SBI PORTD,2 ;ENABLE

    Widać pewną niekonsekwencję.

    PS. Proponuję używać program w postaci zbliżonej do oryginalnej łącznie z definicjami :
    .equ LCD = PORTB
    .equ RS = 2
    .equ E = 3

    łatwo jest przeoczyć jedną cyferkę i wszystko idzie w maliny.

    Dodano po 4 [minuty]:

    Pozatym
    Code:
    CBI PORTD,3 ;E=0 RS=0

    nie zrobi tego co napisałeś w komentarzu.
    CBI zeruje jeden bit o podanym numerze, więc za Chiny Ludowe nie wyzeruje naraz E i RS.
    Lepiej zastosuj program w wersji oryginalnej (wszystkie linie na jednym porcie)

    0
  • #3 09 Sie 2006 12:20
    adasb
    Poziom 14  

    Dzieki za pomoc.
    Powyższa rada pomogła.
    Zamykam temat
    Pozdrawiam

    0