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

[atmega][ks0108] - różne porty sterowania i danych

gorusag 17 Sty 2013 12:54 2088 5
  • #1 11801193
    gorusag
    Poziom 10  
    Witam!

    Mam pytanie, czy można uruchomić wyświetlacz graficzny 128x64 (ks0108) na różnych portach atmega? Precyzyjnie chodzi mi o różne porty danych D0...D7, bo z kontrolnymi nie ma problemu.
    Niefortunnie mam tak zaprojektowaną płytkę i na ekranie pojawiają mi się różne "krzaki". Problem jest chyba z przebiegami czasowymi. Pytanie czy nad tym można zapanować i w którym miejscu szukać przyczyn? Testowałem różne biblioteki w C ale bez skutku jak dotąd.
    Dzięki za sugestie i pomoc.
  • #2 11801288
    Steryd3
    Poziom 33  
    Da się ale wymaga to nieco więcej gimnastyki. Jeżeli nie działa to trzeba przyjrzeć się transmisji na najniższym poziomie. Najlepiej wyślij kod to może coś się rzuci w oczy. Sprawdź też czy porty są dobrze pokonfigurowane. Sprawdź czy nie jest aktywny fuse bit odpowiedzialny za jtag(domyślnie włączony i wyłączający z normalnego działania któreś piny portu C). Najlepiej było by podpatrzeć transmisje analizatorem stanów logicznych lub chociaż oscyloskopem.
  • #3 11801570
    piotrva
    VIP Zasłużony dla elektroda
    Nie potrzeba nawet analizatora. A jak się domyślam trzeba przepisać kod odpowiedzialny za komunikację niskopoziomową. Nie załączyłeś ani programu ani schematu ani modelu procesora, więc nic więcej nie możemy powiedzieć, ponad to, ze takie działanie jest możliwe (sam tak uruchamiam czasem różne wyświetlacze, gdy ich połączenie z procesorem wymagałoby wielu dodatkowych przelotek na płytce 2 warstwowej (aka 3 warstwa).
  • #4 11802787
    kamyczek
    Poziom 38  
    Sa w zasadzie dwie metody rozwiązania zadania krosowanie przewodów między pcb a wyświetlaczem lub taki sam manewr w programie tyle że tu trzeba troszkę pogłówkować .
  • #5 11805809
    gorusag
    Poziom 10  
    Dzięki za zainteresowanie problemem.
    Więc układ jest na ATmega32U4 z zewnętrznym 12MHz. Potrzebny będzie UART oraz SPI zatem lutowanie ścieżek jest niestety wykluczone. :/ GLCD jest podłączony na różnych portach tam gdzie były one wolne.
    I tak:
    CSEL1 - PORTE6
    CSEL2 - PORTB7
    RST - PORTD5
    D_I - PORTF6
    RW - PORTF7
    EN - PORTE2
    D0 - PORTC7
    D1 - PORTC6
    D2 - PORTB6
    D3 - PORTB5
    D4 - PORTB4
    D5 - PORTD7
    D6 - PORTD6
    D7 - PORTD4
    Więc całkowity misz-masz. Przyznam, że wyszło tak z mojego braku doświadczenia. No ale cóż...teraz się z tym męczę.
    Poniżej wklejam kod przerobionej bilblioteki GLCD.
    Odczyt i zapis do portów danych zrobiłem w osobnych funkcjach i domyślam się, że tu może być problem. Kod tych funkcji też wrzuciłem na koniec.
    [code]
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    [code]
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    W głównej pętli testuję tylko kasowanie ekranu i wypełnianie. Coś wypełnia, coś kasuje, robi co chce.

    [code]
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #6 11852638
    gorusag
    Poziom 10  
    Witam!

    Po kilku próbach udało mi się odpalić bibliotekę GLCD na różnych portach atmega32.
    Jak widać poniżej mieszanka portów jest dość spora:
    CSEL1 - PORTE6
    CSEL2 - PORTB7
    RST - PORTD5
    D_I - PORTF6
    RW - PORTF7
    EN - PORTE2
    D0 - PORTC7
    D1 - PORTC6
    D2 - PORTB6
    D3 - PORTB5
    D4 - PORTB4
    D5 - PORTD7
    D6 - PORTD6
    D7 - PORTD4

    Najważniejsze to opóźnienia czasowe w odpowiednich momentach kodu no i znalazłem przy okazji dwie źle zlutowane nóżki w sekcji danych. Zatem wniosek jest również taki, że jak coś widać ale w złych miejscach to może to być błąd lutowania. :)
    W każdym bądź razie polecam ten tutorial do GLDC:
    Link.
    Bardzo fajny i przejrzysty.
    Załączam również działającą bibliotekę.
    Temat zamykam i dziękuję za zainteresowanie.
REKLAMA