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

[ATmega8][C] problem z wyświetlaniem treści

kubiakteam 10 Sty 2010 14:16 2659 11
  • #1 7514354
    kubiakteam
    Poziom 10  
    Witam wszystkich,
    Mam problem z wyświetlaniem tekstu, program działa - ładnie się kompiluje, jest oparty na http://radzio.dxp.pl/ks0108/

    lcd to: dip128j-6n5lw
    datasheet:
    http://www.lcd-module.de/eng/pdf/grafik/dip128-6e.pdf

    procesor: ATmega8-16pu

    Poniżej foto reakcji wyświetlacza:

    [ATmega8][C] problem z wyświetlaniem treści

    Macie jakiś pomysł co z tym zrobić??? [/film]
  • #2 7516262
    Konto nie istnieje
    Poziom 1  
  • #3 7516989
    kubiakteam
    Poziom 10  
    Niestety to nie tu tkwi problem...:(

    Tak mam podłączony lcd z ATmega8
    D0 - PD0
    D1 - PD1
    D2 - PD2
    D3 - PD3
    D4 - PD4
    D5 - PD5
    D6 - PD6
    D7 - PD7

    PC0 - EN
    PC1 - RW
    PC2 - RS (D/I)
    PC5 - CS2
    PC6 - CS1

    RES podłączyłem przez rezystor pod +5V

    W podłączeniu użyłem:
    Enable and CS hi-active z powyższej dokumentacji wyświetlacza

    [ATmega8][C] problem z wyświetlaniem treści

    Może źle coś podłączyłem??? Próbowałem wielu opcji...
    Ma ktoś może jeszcze jakieś sygestie...
    Pozdrawiam:
    Karol
  • #4 7517438
    Konto nie istnieje
    Poziom 1  
  • #5 7517480
    kubiakteam
    Poziom 10  
    Ten obrazek to jest z datasheeta. Jak otworzysz link:
    http://www.lcd-module.de/eng/pdf/grafik/dip128-6e.pdf
    to tam sa mozliwości podłączenia tego wyswietlacza do procka i ja uzywem opcji enable and cs hi-active

    a podłączone jest tak:
    piny ATmega - wyświetlacz
    PC0 - EN
    PC1 - RW
    PC2 - RS (D/I)
    PC5 - CS2
    PC6 - CS1

    a RST przez rezystor do +5v
  • #6 13048732
    Leoo
    Poziom 16  
    Pozwolę sobie nieco odgrzać temat. Podobnie jak Autor wątku natknąłem się w sieci na stronę radzio.dxp.pl w poszukiwaniu bibliotek do obsługi wyświetlacza z KS0108 - bo po co odkrywać koło na nowo jeśli inni już to zrobili.
    Mój wyświetlacz też nie chciał działać. Dziesiątki prób, sprawdzanie poprawności podłączenia i ciągle nic. Nagle po dotknięciu palcem pinu 7 magistrali pokazał się długo oczekiwany obraz, mocno zakłócony ale zawsze coś. Początkowo podejrzewałem uszkodzenie wyświetlacza, bo pochodził z odzysku (pływał przez kilka dni pod wodą w okolicach Sandomierza) a podczas pierwszych prób przetrwał odwrotne podłączenie zasilania ale w końcu okazał się całkowicie sprawny. Nie uniknąłem straty czasu na przekopywania dokumentacji wyświetlacza i stodiowania funkcji sterujących z radzio.dxp.pl.
    Niestety funkcja "void lcdWait(void)" ma poważny błąd. Dokonuje ona odczytu magistali wyświetlacza po tym, jak procesor wystawia stan niski na EN. W tym miejscu program zawsze się zatrzymywał, bo mimo iż wyświetlacz odpowiadał po DB7, że jest gotów, to informacja trafiała w próżnię. Stan logiczny L na wejściu KS0108 wymusza przejście magistrali w stan wysokiej impedancji. W tym miejscu wyjaśniły się czary po dotknięciu palcem DB7 - ładunek tej szyny został rozładowany i procesor mógł poprawnie odczytać gotowość wyświetlacza. Rozwiązanie tego problemu nie jest specjalnie trudne, wystarczy nieco zmodyfikować funkcję:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    Po w/w modyfkacji wyświetlacz działa stabilnie ale żeby nie było zbyt łatwo, ujawniły się kolejne błędy obsługi. Podczas próby użycia funkcji "lcdSetPixel", w efekcie której włączane były wszystkie piksele w obrębie sterownika. Ostatnia kolumna miała zapalony tylko co 8-my piksel. Problem też udało się rozwiązać, choć trwało to znacznie dłużej, niż w pierwszym przypadku. Mogę opisać rozwiązanie o ile znajdzie się ktoś potrzebujący takich informacji.
  • #7 13048767
    BlueDraco
    Specjalista - Mikrokontrolery
    Ta biblioteka po prostu nie trzyma wymaganych zależności czasowych opisanych w dokumentacji wyświetlaczy. W niektórych przypadkach zadziała, w innych - nie.
  • #8 13048793
    Leoo
    Poziom 16  
    BlueDraco napisał:
    Ta biblioteka po prostu nie trzyma wymaganych zależności czasowych opisanych w dokumentacji wyświetlaczy. W niektórych przypadkach zadziała, w innych - nie.

    Poprawnie działająca funkcja lcdWait odpowiada za wymuszenie oczekiwania na gotowość KS0108, więc zależności czasowe są już spełnione. Proszę skompilować i sprawdzić przed i po poprawkach.
    Na stronie radzio.dxp.pl zabrakło jeszcze kilku deklaracji:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #9 13269189
    Kuniarz
    Moderator Projektowanie
    Odgrzebię temat - mam ten sam problem - krzaki na ekranie.
    Nie bardzo widzę, gdzie jest procedura LCD_WAIT, rzekłbym że jej nie mam :) Pliki ściągnięte świeżo ze strony "radzio", połączenia prawidłowe. Jakieś propozycje ?
    Pomogłem? Kup mi kawę.
  • #10 13407077
    r2r2010
    Poziom 1  
    a co masz w deklaracji tablicy czcionki?
    taki zapis:
    static const char font5x8[] PROGMEM = {
    ...
    }

    ???
  • #11 13407097
    Kuniarz
    Moderator Projektowanie
    Generalnie program już działa, ale mam to w pracy i nie pamiętam co w końcu pomogło. Kompilator pluł się, że dana tablica w fontach miała być CONST, bodajże dopisanie pomogło.
    Pomogłem? Kup mi kawę.
REKLAMA