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

Atmega 8 + PT6578, jak ugryźć?

Domanoid 17 Cze 2012 03:23 3599 4
  • #1 17 Cze 2012 03:23
    Domanoid
    Poziom 9  

    Witam wszystkich, od jakiegoś czasu uczę się obsługi uC Atmega8.
    Umiem już trochę obsługiwać Timery, PWM, Watchdoga, SPI... itd.

    Sterowanie jednym uC drugiego uC przez SPI to raczej nie problem, jednak w moje łapki dostał się mi układ PT6578LQ razem z wyświetlaczem. Wymontowane z jakiegoś taniego chińskiego radyjka.

    To jest najdłuższy dokument jaki znalazłem na temat tego kontrolera lcd:
    http://www.princeton.com.tw/downloadprocess/downloadfile.asp?mydownload=PT6578.pdf

    I nie za bardzo się orientuję jak miało by wyglądać sterowanie nim... Bardzo proszę o pomoc w tej kwestii.

    W sumie to jest prawie gotowy moduł, czyli interesuje mnie tylko co i w jaki sposób podać na złącze z drugiego obrazka po lewej stronie. Na pewno muszę podłączyć +5V i GND do zasilania procesora. Są to piny od prawej dołu pierwszy i drugi oraz na górze od prawej pierwszy. Do tego chyba +8V albo do POWER albo do LAMP+ (musi podać na VLCD). Moje takie gdybania... Niestety LCD nie da się podnieść, żeby zobaczyć dokładne połączenie.

    Do obsługi SPI używam takiego prostego kodu:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Czy takim kodem komunikacja z kontrolerem lcd wogóle zostanie nawiązana?

    Na koniec załączam jeszcze zdjęcia płytki z lcd i kontrolerem:

    Atmega 8 + PT6578, jak ugryźć? Atmega 8 + PT6578, jak ugryźć?

    PS. Może rzucam się na za głęboką wodę, ale to jest chyba najlepszy sposób nauki :)


    Przeczesałem internet..

    I znalazłem kilka ciekawych pliczków:

    pt6578.c:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    display.h:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    oraz display.c:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    a do tego całą tablicę znaków i pozycji:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    To teraz mam co rozgryzać. Jeśli jednak ktoś ma gotowca to chętnie przygarnę :)
    Przy okazji uczę się do sesji więc może mi to trochę zająć, ale tematu nie porzucę na pewno.
    Jeśli nikt nie zna odpowiedzi lub nie ma dla mnie podpowiedzi to po prostu będę w tym temacie robił zapiski z postępu prac :)

    Trochę czasu nad rozgryzieniem tego spędziłem, i niestety się zawiesiłem... Układ powinien już działać a jednak dziad jeden nie chce działać.

    Mój kod wygląda całkiem całkiem:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Specjalnie napisałem programowo wysyłanie przez SPI, kod już był tyle razy zmieniany, że czasami w komentarzu jest poprzednia wartość albo kombinowana.
    Kod w obecnej postaci powinien działać.
    Z podanego wyżej pliku pdf jasno wynika sterowanie tym kontrolerem. Sterowanie jest trochę zaczerpnięte z podanych przeze mnie plików, jednak większość napisałem sam lub przerobiłem pod siebie.

    SPI sterowane programowo, bo raz jest wysyłane 9 bitów, raz 6, raz 4, raz 3 bity... Różnie, tak aby wszystko było jak najbardziej dopasowane do wzoru podanego w pdf.

    W analizatorze stanów logicznych wszystko wygląda prawie dokładnie tak jak w datasheet...
    Atmega 8 + PT6578, jak ugryźć?

    Pierwszy obrazek przedstawia całość analizatora.
    Od góry kolejno: A0 - CS (czy tez SS), A2 to MOSI, A4 - SCK, A6 - INH.
    Drugi obrazek przedstawia sam początek nadawania danych, pierwsze bity inicjalizujące przedstawione w datasheet, czyli 11010010.
    Trzeci przedstawia zakończenie, czyli bity inicjalizujące, bity konfiguracyjne oraz 3 bity zakańczające (101 - jak w datasheet).

    Wszystko wygląda bardzo cacy... Kod działa, powinien wyświetlać cokolwiek. Jednak nie wyświetla nic.

    Zarówno m8 jak i wyświetlacz są podłączone do zasilacza komputerowego, V_lcd oraz Vcc są podpięte pod 5V, do m8 idą 4 kable - SS, SCK, MOSI oraz INH.

    Na drugim zdjęciu jest gniazdo, wszystko jest podpięte dokładnie tak:
    - dolny rząd:
    INH - COM1 (pin ostatni prawy dół),
    +5 - zasilanie kontrolera,
    ACC - zasilanie Vlcd
    - górny rząd:
    GND - masa,
    CLK - SCK,
    DATA - MOSI,
    CE - SS.


    Nie wiem czy puls dodatni na INH powinien być po każdym secie danych czy tylko po pierwszym. Ogólnie jest to wg. datash reset kontrolera.

    Może ktoś coś poradzi, lub podpowie bo zaczyna mi brakować pomysłów.

    Kombinuje dalej!

    0 4
  • #2 20 Lip 2012 12:27
    Domanoid
    Poziom 9  

    Mój układ PT6578 chyba jest niesprawny. Jak bym nie kombinował to i tak nie idzie go uruchomić.

    Natomiast udało mi się uruchomić 3 inne podobne układy, sterowanie odbywa się tak samo przez SPI. Konkretnie:
    LC75884 -> datasheet - ma podłączony słaby wyświetlacz więc się nim nie zajmuje.
    SC75823E -> datasheet - najprostrzy w obsłudze, wymaga tylko jednej linii danych. Jednak ze względu na "bajerancki" wyświetlacz postanowiłem się nim nie zajmować.
    LC75873N -> datasheet - tym postanowiłem się bardziej zająć z prostego powodu - ma najlepszy wyświetlacz.

    Wszystkie te podzespoły pochodzą z paneli starych radyjek samochodowych. Mam ich trochę, więc postanowiłem wykorzystać. Nauka przez praktykę jest najlepsza prawda? :)

    Podgląd LC7573N z wyświetlaczem w akcji:
    Atmega 8 + PT6578, jak ugryźć?

    Kod którym napędzam wyświetlacz:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    I teraz pytanko do bardziej doświadczonych użytkowników.
    Program zajmuje mi większość procka (przyp. Atmega8). Najpewniej jest to spowodowane nieziemskim rozpisaniem if`ów :) Jak mógłbym to ładniej zapisać lub zamknąć w jakiś array? Każde pole jest przypisane do konkretnego pola na wyświetlaczu. Miałem kilka pomysłów ale tylko ten podany wyżej jakoś działa. Problem siedzi w tym, że kolejne miejsca na wyświetlaczu nie są w jednym ciągu np. 0xFF 0xFF 0xF0 jest pierwszym znakiem a kolejny zaczyna się na końcu tego pierwszego, 0x0F 0xFF 0xFF, jednak to nie wszystko. Czasami są luki w samym środku znaku, bo pomiędzy np. 7 a 8 segmentem jest podpięty jakiś znaczek np. RDS (panel z radia). Proszę ładnie o podpowiedź, skierowanie na właściwy tor a będę kombinował dalej. Bo te wyświetlacze są dosyć fajne a praktycznie każdy jest tak właśnie skonstruowany.

    Tak wygląda rozpiska pól i kolejnych liter cyfr na tych polach:
    Atmega 8 + PT6578, jak ugryźć? Atmega 8 + PT6578, jak ugryźć?

    Oznaczenia 0x 1x 2x odnoszą się do kolejnych miejsc w tablicy:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Przy czym znaki od 1 do 4 na wyświetlaczu znajdują się w 2 rzędzie a znaki 5 do 8 w 3 rzędzie.

    Jeśli nikt nie podpowie jak zoptymalizować kod to niech ten temat zostanie dla potomnych - może ktoś będzie miał taki problem to większość rozwiązania już gotowa :)

    Pozdro.


    PS. Administratorze/Moderatorze - linki do datasheetów nigdy nie wygasną.

    0
  • #4 20 Lip 2012 14:35
    Domanoid
    Poziom 9  

    Dzięki, już widzę mniej więcej o co chodzi z pamięcią programu. Spróbuję to zaimplementować jak należy.

    0