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 + LCD WC1602a - nic nie wyświetla

Bartoneczek 03 Paź 2011 13:16 3261 14
REKLAMA
  • #1 9988452
    Bartoneczek
    Poziom 10  
    Witam,

    Mam problem. Po podłączeniu wyświetlacza WC1602a do mojej płytki uruchomieniowej świeci się w nim tylko podświetlenie. Vss i Vdd pin podłączyłem pod zasilanie i masę, V0 i R/w również pod masę, RS i E odpowiednio pod PC0 i PC1, DB0..DB7 pod PB0..PB7 i oprócz tego podłączyłem zasilanie podświetlenia. Niezależnie od tego czy zasilanie wyświetlacza jest podpięte czy nie, widzę to samo, nic. Nie mam pojęcia czy nie powinienem widzieć chociaż jakichś ciemnych kwadracików, zwłaszcza że linia kontrastu podpięta jest pod masę. Wyświetlacz podpięty jest pod ATmegę8 i działa (a właściwie to nie) pod programem:


    Kod: text
    Zaloguj się, aby zobaczyć kod


    Zastanawia mnie czy poprawnie inicjalizuję wyświetlacz i czy poprawnie wysyłam na niego dane. Może tu tkwi problem. Bardzo proszę o pomoc i wskazówki.
  • REKLAMA
  • #3 9988797
    Bartoneczek
    Poziom 10  
    Czy to rozwiazanie mojego problemu czy ogolna sugestia? ;)
  • #4 9988811
    piotrva
    VIP Zasłużony dla elektroda
    Ogólna sugestia mogąca być rozwiązaniem Twojego problemu.
    Tu przedstawiam znaleziony na Google schemat poprawnych połączeń - być może to pomoże.
    http://www.pocketmagic.net/wp-content/uploads/2009/02/lcdlayout-full.gif
    Dalej pytanie, czy jeśli odłączysz procesor to po podłączeniu zasilania na wyświetlaczu masz czarne prostokąty w pierwszej linii? Jeśli nie to dużą szansa że moja sugestia jest rozwiązaniem problemu.
    Niestety ASM zbyt dobrze nie znam, więc co do kodu to nie pomogę osobiście.
  • REKLAMA
  • #5 9989107
    Bartoneczek
    Poziom 10  
    Po odłączeniu procesora nie widzę czarnych prostokątów. Między V0 a masą wlutowałem na sztywno rezystor 1k i w dalszym ciągu to samo - pusto. Rezystor 10k również. Uszkodzony wyświetlacz?

    Swoją drogą, czy mogę traktować ten sterownik jak HD44780? W specyfikacji wyświetlacza podany jest inny model sterownika i nie ma podanej możliwości podłączenia tylko 4 linii transmisji.
  • REKLAMA
  • #6 9989156
    piotrva
    VIP Zasłużony dla elektroda
    Moim zdaniem można traktować ten LCD jako HD44780, ale czym różni się potencjometr od rezystora?
    Odp.: Tym że potencjometr w tej aplikacji zachowuje się jak dzielnik napięcia (o co nam chodzi) a nie jako element ograniczający prąd (to co Ty robisz). Zacznij od tego, potem można szukać błędów gdzie indziej.
  • #7 9989220
    excray
    Poziom 41  
    Twój sterownik jest zgodny z HD44780 co jest dokładnie opisane w specyfikacji i może pracować w trybie komunikacji 8-mio i 4-ro bitowej tak samo jak HD44780.
    Po kiego grzyba to:
    Kod: text
    Zaloguj się, aby zobaczyć kod
    ???

    Poniżej mój kod na komunikację 4bit z HD44780 w AVR:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Cała komunikacja jest u mnie na PORTB więc jak masz na innym porcie to pozmieniaj odpowiednie komendy w kodzie. Bardzo łatwo jest ten kod przerobić na komunikację po szynie 8-mio bitowej jeśli koniecznie chcesz w ten sposób się komunikować. Standardowo używa się procedur:
    rcall LCDINI - do zainicjowania LCD-ka
    rcall LCDWRC - do wysłania zawartości r16 jako komendy
    rcall LCDWRD - do wysłania zawartości r16 jako danej do wyświetlenia na ekranie.
    Przykładowo:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #8 9989385
    Bartoneczek
    Poziom 10  
    excray napisał:
    Po kiego grzyba to:
    Kod ASM - [rozwiń]
    cbi PORTC, 0
    cbi PORTB, 7
    cbi PORTB, 6
    cbi PORTB, 5
    cbi PORTB, 4
    cbi PORTB, 3
    sbi PORTB, 2
    sbi PORTB, 1
    cbi PORTB, 0
    ???


    Zgodnie z arkuszem informacyjnym wyświetlacza jest to ostatni etap inicjowania wyświetlacza, instrukcja wprowadzania danych. Pomijając to, mój asm jest ubogi w związku z tym że dopiero zaczynam swoją przygodę z nim. Niektóre instrukcje rozpisuję sobie w jak najbardziej skomplikowany ale czytelny sposób. ;)

    piotrva: dzięki za wyjaśnienie, jak tylko zdobędę potencjometr, wypróbuję. ;)
  • #9 9989432
    excray
    Poziom 41  
    Bartoneczek napisał:
    Zgodnie z arkuszem informacyjnym wyświetlacza jest to ostatni etap inicjowania wyświetlacza, instrukcja wprowadzania danych. Pomijając to, mój asm jest ubogi w związku z tym że dopiero zaczynam swoją przygodę z nim. Niektóre instrukcje rozpisuję sobie w jak najbardziej skomplikowany ale czytelny sposób. :wink:

    To źle robisz. Utrwalasz sobie bardzo zły sposób pisania. Poza tym osiągnąłeś tak duży stopień skomplikowania że chyba sam się w nim pogubiłeś. Powiedz mi gdzie w tej części Twojego kodu jest sygnał strobe dla danych? Ustawiasz i negujesz poszczególne bity szyny danych a zapomniałeś o ich wprowadzeniu do wyświetlacza poprzez zerowy impuls na Enable.

    BTW> Podłącz tylko 3 piny - Vo i VSS do masy a VDD do +5V. Jeśli się nic Ci się nie wyświetli to na 99% masz uwalony wyświetlacz.
  • REKLAMA
  • #10 9990470
    Bartoneczek
    Poziom 10  
    excray napisał:
    BTW> Podłącz tylko 3 piny - Vo i VSS do masy a VDD do +5V. Jeśli się nic Ci się nie wyświetli to na 99% masz uwalony wyświetlacz.


    Podłączyłem tylko te trzy piny i nic. Fatalnie. ;) Czy przyczyną może być zbyt niskie zasilanie, konkretnie około 4,4V?

    excray napisał:
    Ustawiasz i negujesz poszczególne bity szyny danych a zapomniałeś o ich wprowadzeniu do wyświetlacza poprzez zerowy impuls na Enable.


    Ee, o tym nie zapomniałem. ;)

    LCDSEND:
    sbi PORTC, 0
    sbi PORTC, 1
     
    ldi R18, 0b01000011
    out PORTB, R18
     
    nop
     
    *** cbi PORTC, 1 ***
     
    nop
     
    *** sbi PORTC, 1***
     
    ret
  • #11 9990538
    excray
    Poziom 41  
    Bartoneczek napisał:
    Podłączyłem tylko te trzy piny i nic. Fatalnie. :wink: Czy przyczyną może być zbyt niskie zasilanie, konkretnie około 4,4V?

    Może to być przyczyną. LCD będzie działać ale Vo czyli kontrast wymaga napięcia o 4,6-5V mniejszego od VDD czyli musiałbyś dać na Vo napięcie wręcz ujemne rzędu ok -1V żeby coś zobaczyć. Dlatego najlepiej postaraj się o zasilacz 5V.

    Bartoneczek napisał:
    Ee, o tym nie zapomniałem. :wink:

    ale tutaj zapomniałeś:
    LCDINIT:
    rcall a250ms
     
    cbi PORTC, 0
    cbi PORTB, 7
    cbi PORTB, 6
    sbi PORTB, 5
    sbi PORTB, 4
    sbi PORTB, 3
    sbi PORTB, 2
    
    ;---tutaj powinien być zapis
    *** cbi PORTC, 1 ***
    nop
    *** sbi PORTC, 1*** 
    ;----koniec
     
    ldi R16, 0
    rcall us40
     
    cbi PORTC, 0
    cbi PORTB, 7
    cbi PORTB, 6
    cbi PORTB, 5
    cbi PORTB, 4
    sbi PORTB, 3
    sbi PORTB, 2
    sbi PORTB, 1
    sbi PORTB, 0
    
    ;---tutaj powinien być zapis
    *** cbi PORTC, 1 ***
    nop
    *** sbi PORTC, 1*** 
    ;----koniec
     
    ldi R16, 0
    rcall us40
     
    cbi PORTC, 0
    cbi PORTB, 7
    cbi PORTB, 6
    cbi PORTB, 5
    cbi PORTB, 4
    cbi PORTB, 3
    cbi PORTB, 2
    cbi PORTB, 1
    sbi PORTB, 0
    
    ;---tutaj powinien być zapis
    *** cbi PORTC, 1 ***
    nop
    *** sbi PORTC, 1*** 
    ;----koniec
     
    rcall a2ms
     
    cbi PORTC, 0
    cbi PORTB, 7
    cbi PORTB, 6
    cbi PORTB, 5
    cbi PORTB, 4
    cbi PORTB, 3
    sbi PORTB, 2
    sbi PORTB, 1
    cbi PORTB, 0
    
    ;---tutaj powinien być zapis
    *** cbi PORTC, 1 ***
    nop
    *** sbi PORTC, 1*** 
    ;----koniec
     
    ret
  • #12 9990727
    Bartoneczek
    Poziom 10  
    Ah, no tak. ;) Dzięki wielkie za zwrócenie uwagi. Swoją drogą wyświetlacz uwalony, 5V i pusto.
  • #13 9993111
    Bartoneczek
    Poziom 10  
    Wracam z problemem. Kupiłem nowy wyświetlacz który działa i wyświetla kwadraciki. ;) Korzystając z gotowego programu (z książki AVR&ARM7 Pawła Borkowskiego), postanowiłem go sprawdzić. Po zaprogramowaniu atmegi na wyświetlaczu pojawiają się dwa rzędy kwadracików a nie napis. Połączenie i odpowiadające porty są napewno prawidłowe, sprawdzane trzy razy. Komunikacja 4bitowa. Podpiąłem zasilanie, V0 do masy, EN do PB0, RS do PB1, DB4..7 do PB2..5. Oto kod programu:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Dlaczego widzę dwa rzędy kwadracików zamiast napisu?
  • #14 9993153
    piotrva
    VIP Zasłużony dla elektroda
    Bo masz za duży kontrast - daj na to V0 potencjometr:
    http://www.pocketmagic.net/wp-content/uploads/2009/02/lcdlayout-full.gif
  • #15 9993213
    Bartoneczek
    Poziom 10  
    Z potencjometrem jest to samo.
REKLAMA