Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ARM]Wyświetlacz graficzny OLED - szybsze rysowanie

you-zek 22 Gru 2008 22:44 2859 16
  • #1 22 Gru 2008 22:44
    you-zek
    Poziom 15  

    Witam
    Chcę połączyć wyświetlacz OLED z mikrokontrolerem. Postanowiłem wybrać uC ARM AT91SAM7S256. Bawiąc się płytką ewaluacyją z OLED 2.0" z kontrolerem graficznym HX-5051-A oraz uC RENESAS odkryłem, że producent domyślnie zastosował szynę 8bit. Jeden piksel wymaga 3 transferów danych (po jednym bajcie na składowe RGB). Mikrokontroler obsługuje szynę programowo. Jest to bardzo wolne. Wolne - odświeżanie wygląda nieporfesjonalnie. Więc uC 8Bit nie wchodzi raczej w rachubę.
    Myślę o przyspieszeniu transferu danych w taki sposób:
    -zastosować szynę danych o szerokości 16bit.
    -zastosować redukcję kolorów do 65536 tak aby dane piksela mieściły się w pojedynczym słowie 16bit.
    W dokumentacji sterownika odkryłem że jeden cykl zapisu może mieć min 80ns co daje maksymalną częstotliwość pracy szyny 12.5MHz.
    Wysyłając dane z taką szybkością zmieszczę się z odświeżeniem obrazu w jednym cyklu skanowania wyświetlacza.
    Jako że nie mam doświadczenia z mikrokontrolerami ARM pytanie moje:
    -czy uda mi się programowo zrealizować obsługę szyny danych z taką częstotliwością?
    Kontroler wyświetlacza można zmapować w obszar pamięci zewnętrznej.
    ARMy NXP posiada (w większości modeli) kontroler zewnętrznego SRAM - i do niego mógłbym podpiąć wyświetlacz. czy w takim wypadku da się zaprząc do transferu danych układ DMA?
    Zajmował się ktoś z Was podobnym problemem?

  • #2 22 Gru 2008 22:56
    Freddie Chopin
    Specjalista - Mikrokontrolery

    12.5MHz programowo - nigdy.

    LPC2xxx posiadaja zewnetrzna szyne, ale tylko niektore, a juz na pewno nie wiekszosc. lpc 21xx - nie maja w ogole, lpc22xx maja pelna (20-cia kilka bitow adresu, 32 bity danych), lpc23xx maja mala (16bitow adresu, 8 bitow danych), lpc24xx maja pelna.

    dma obsluguje zwykle tylko niewielki wycinek pamieci RAM (a juz na pewno nie zewnetrzna z tego co mi wiadomo), wiec nie uda ci sie uzyc DMA do tego celu. tutaj jednak moge sie mylic, warto sprawdzic w manualach.

    4\/3!!

  • #3 22 Gru 2008 23:38
    you-zek
    Poziom 15  

    Freddie Chopin napisał:
    12.5MHz programowo - nigdy.

    Widziałem niedrogie ARmy z rdzeniem taktowanym 55 czy 60MHz.
    60/12.5=4.8. Czy optymalna procedura w asm nie dałaby rady?
    gdybym osiągnął 10-5MHz też byłbym zadowolony.
    5Mhz to już 12 cykli zegarowych. W takim czasie da się sporo wykonać :)
    Tylko że to musi stwierdzić ktoś kto ma doświadczenie z ARM.

    Dziiw mnie ograniczenie obszaru obsługi DMA. To jest na fakcie?

  • #4 23 Gru 2008 07:20
    DosinskY
    Poziom 18  

    W LPC23XX do transferów z użyciem DMA można wykorzystać pamięć SRAM podpiętą pod szynę AHB1 czyli pamięć 8kB dedykowaną dla USB. Możliwy jest transfer ze stosunkowo niewieloma peryferiami ale z tego co kojarzę pamięć zewnętrzną DMA obsługuje.

    Pozdrawiam

  • #5 23 Gru 2008 07:24
    Freddie Chopin
    Specjalista - Mikrokontrolery

    5 rozkazow jest iloscia nierealna. sciagniecie danych z pamieci to jeden rozkaz z adresowaniem posrednim, postinkrementacja - to juz zajmie pare cykli, bo szyna danych, bo rozkaz zlozony. wystawienie danych na port to rozkaz zapisu posredniego - kolejne kilka cykli, bo kolejna paczka do przepchniecia przez magistrale. potem jeszcze skok na poczatek petli - kolejne pare cykli.

    trzeba miec swiadomosc, ze ARM to szybki rdzen, wiec obliczenia potrafi zrobic bardzo szybko. ale żonglowanie danymi na prawo i lewo po wolnych magistralach systemowych go zabije i tyle.

    nikt nie powie ci, jaka predkosc osiagniesz - musisz to sprawdzic.

    zas co do DMA - za datasheetem do LPC236x

    Cytat:

    8 kB SRAM for general purpose DMA use also accessible by the USB.
    ...
    General Purpose AHB DMA controller (GPDMA) that can be used with the SSP serial
    interfaces, the I2S port, and the Secure Digital/MultiMediaCard (SD/MMC) card port,
    as well as for memory-to-memory transfers.


    zawsze tak jest, ze DMA nie obsluguje calego obszaru pamieci, tylko wybrany jej fragment, ktory jest do kontrolera DMA przypiety bezposrednio.

    EDIT:
    DMA na LPX2378 obsluzy pamiec zewnetrzna, ale bedzie to DMA od Ethenetu, wiec ... bezsensu. a do tego:

    Cytat:

    However, using memory other than the Ethernet SRAM, especially off-chip
    memory, will slow Ethernet access to memory and increase the loading of its AHB.


    wiec nalezy raczej zapomniec o tym. nie do konca kumamm po co ci takie predkosci odswiezania... co ty te dane wystawiasz bezposrednio? nie ma tam jakiegos kontrolera z pamiecia wlasna?

    zas co do predkosci, to sa ARMy od NXP (LPC210x, LPC23xx, LPC24xx), ktore smigaja nawet na 72MHz.

    4\/3!!

  • #6 23 Gru 2008 12:12
    you-zek
    Poziom 15  

    Freddie Chopin napisał:
    nie do konca kumamm po co ci takie predkosci odswiezania... co ty te dane wystawiasz bezposrednio? nie ma tam jakiegos kontrolera z pamiecia wlasna?

    Pamięć własna jest. Duża szybkość jest mi potrzebna aby uniknąć efektu powolnego rysowania i tearing. Chcę zsynchronizować zmianę pamięci z cyklem odświeżania wyświetlacza. Po prostu chcę mieć możliwość wypełnienia całej pamięci grafiki (GRAM) w jednym cyklu odśiweżania wyświetlacza. Coś jak w komputerach synchronizacja zmiany ekranu z odchylaniem pionowym monitora.

    Dodano po 3 [minuty]:

    Nie zależy mi w ogóle na kontrolerze ethernet, więc DMA ethernetu mogę wykorzystać!

  • #7 23 Gru 2008 12:14
    Freddie Chopin
    Specjalista - Mikrokontrolery

    przeciez takie rzeczy sie realizuje inaczej - poprzez frame buffering - powinienes miec 2x wiecej pamieci niz ma obraz - wypelniajac strone druga wyswietlasz strone pierwsza, a po przeslaniu danych przelaczasz tylko strone - zero tearingu.

    DMA ethernetu mozesz wykorzystac - pewnie, ale IMHO nigdy nie wyciagniesz takiej predkosci. wykorzystanie DMA niewiele ci pomoze, bo DMA i tak bedzie musialo sie przebijac przez DWIE magistrale.

    4\/3!!

  • #8 23 Gru 2008 12:32
    you-zek
    Poziom 15  

    Freddie Chopin napisał:
    powinienes miec 2x wiecej pamieci niz ma obraz

    TRafiłeś w sedno. Powinienem mieć. Ale nie mam. Kontroler wyświetlacza ma tylko front. Nie moge rysować sobie w backplane i gdy gotowe przełączyć strony. Gdybym to miał to w ogóle nie zawracałbym forum...
    No jest to pewne wyzwanie. Wymyśliłem jakieś rozwiązanie - buforowanie w RAMie i zamiast podmianki stron (tak jak to się powinno dziać) zrobię szybkie kopiowanie. Pytanie moje czy takie szybkie kopiowanie jest możliwe. I to będę drążył.

  • #9 23 Gru 2008 12:36
    Freddie Chopin
    Specjalista - Mikrokontrolery

    nie dowiesz sie, dopoki nie sprawdzisz [;

    swoja droga - mowisz ze chcesz sie zmiescic w jednym cyklu odswiezania (czyli pewnie 1/60 sekundy). niemniej jednak jesli twoj cykl rozciagnie sie na 2 albo i nawet 4 cykle (1/15 sekundy), to mysle ze bedzie to dosyc trudne do zauwazenia.

    4\/3!!

  • #10 23 Gru 2008 12:37
    you-zek
    Poziom 15  

    Tearingu mogę się pozbyć w jeszzcze inny sposób- na czas wypełniania GRAM wygasić wyświetlacz. Jest to dopuszczalne, bo system będzie wyświetlał statyczne obrazy i rzadko będę przerysowywał na raz cały ekran. Ale najpierw chcę zbadać inne - lepsze rozwiązania.

    Dodano po 54 [sekundy]:

    Sprawidziłem że tearnig jest widoczny.

  • #11 23 Gru 2008 12:40
    Freddie Chopin
    Specjalista - Mikrokontrolery

    calkiem elegancko wygladaloby wygaszanie kilku linii do przodu przed wjezdzajacym nowym obrazem - nawet wtedy pozadana bylaby niska predkosc - sekunda-dwie na obraz. cos a'la pokaz slajdow.

    4\/3!!

  • #12 28 Gru 2008 22:02
    you-zek
    Poziom 15  

    Witampo świętach. Wracając do rozmowy: interesuje mnie framebuffering i tego się trzymajmy

  • #13 29 Gru 2008 10:15
    Freddie Chopin
    Specjalista - Mikrokontrolery

    biorac pod uwage to co pisales niedawno o ilosci dostepnego RAMu... nie wiem co z tego zainteresowania wyniknie [;

    4\/3!!

  • #14 29 Gru 2008 12:23
    kedzi1
    Poziom 18  

    Witam wszystkich po świętach :)
    Może warto pomyśleć o dodatkowym układziku typu proste CPLD + SRAM i zrobić automat który nam szybko przepisze obraz do wyświetlacza? Jaka jest rozdzielczość? Ile pamięci zajmuje jeden obraz?

  • #15 29 Gru 2008 15:59
    you-zek
    Poziom 15  

    OK poddaje się. Jak należny to zrobić? Jak podłączyć ten wyświetlacz? Robił to już ktoś? Bez udziału układu programowalnego?

    Dodano po 5 [minuty]:

    Kedyś myślałem o podobnym rozwiązaniu (CPLD+SRAM)ale to przypomina trochę uzbrajanie armaty w celu zabicia muchy.
    Obraz na wyświetlaczu będzie wyświetlaczem miernika wielokanałowego. Tło będzie stałe. Odświeżanie będą jednie mierzone wartości. 2-3 razy na sekundę.

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME