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

[uc+tft]Tworzenie/rysowanie grafiki - szukam materiałów

Jagged 20 Lis 2010 22:30 1627 10
  • #1 20 Lis 2010 22:30
    Jagged
    Poziom 10  

    Witam,
    Czy ktoś może polecić jakieś materiały o teorii programowania grafiki na mikrokontrolerach?

    Na PC sprawa jest prosta, pracuje się na buforze, następnie bufor kopiuje się do pamięci i tyle.
    Z mikrokontrolerami sprawa wydaje mi się bardziej skomplikowana. Mam do dyspozycji ekran TFT 320x240, oraz 20kb ramu(no jak bym się uparł może być model z 64kb). Do ramu nie zmieści się nawet bufor 16 kolorowy o wielkości całego ekranu.

    Domyślam się, że trzeba działać bezpośrednio na plikach i jakoś kawałek po kawałku kopiować to od razu na ekran, tak? Tylko jak w takiej sytuacji pozbyć się efektu migotania, który występuje przy braku podwójnego buforowania?

    pozdrawiam

    0 10
  • #2 20 Lis 2010 22:51
    arrevalk
    Poziom 25  

    Jaki to wyświetlacz i jaki procesor?

    Niektóre wyświetlacze mają wbudowany sterownik który sprzętowo wspiera buforowanie. Jak napiszesz więcej szczegółów prościej będzie coś doradzić.

    0
  • #3 20 Lis 2010 22:56
    Jagged
    Poziom 10  

    wyświetlacz :
    TFT 320x240 ILI9320,

    Cytat:
    2.8" TFT LCD Module (ILI9325) with Touch Panel , the default i8080 16 bit parallel interface, optional 8-bit parallel interface mode. R7 open is 16-bit mode, R7 short is 8-bit mode (It's high 8 bit)
    http://www.egochina.net.cn/e-shop/ebay/Datasheet/028PCB_9325.rar

    procesor:
    STM32F103RB(128 kB Flash, 20 kB RAM)

    0
  • #4 20 Lis 2010 23:39
    tmf
    Moderator Mikrokontrolery Projektowanie

    Najprościej to wziąść LCD z kontrolerem, który ma dosyć pamięci na zrobienie double buffering. Jeśli tak nie ma, to jest problem. Trzeba całkowicie operować na pamięci LCD. Żeby nie było migotania, zapisy dokonuje się tylko w fazie, w której nie następuje odświeżanie obrazu LCD - w tym celu większe LCD, w tym ten przez ciebie wspomniany mają wyjście TE - aktywne wtedy, kiedy możesz pisać do pamięci kontrolera. Ten kontroler ma także specjalny rejestr, w którym ustawiasz linię po przejściu której aktywuje się sygnał TE. Dzięki temu jeśli rysujesz coś np. w liniach 0-100, to już podczas odświeżania 101 linii aktywuje się sygnał TE informując cię, że możesz już sobie bazgrać po pierwszych 100 liniach obrazu. Jeśli w danym modelu nie ma pinu TE, to analogiczny efekt uzyskasz sprawdzając rejestr stanu kontrolera obrazu.

    0
  • #5 21 Lis 2010 00:01
    Bruum
    Poziom 23  

    Witam! Pozwolę sobie podłączyć się do tematu.

    Cytat:

    możesz już sobie bazgrać po pierwszych 100 liniach

    Jak się zabrać do tego bazgrania w warunkach ograniczonych zasobów?

    0
  • #6 21 Lis 2010 00:06
    tmf
    Moderator Mikrokontrolery Projektowanie

    No cóż, grafika rastrowa nie stanowi problemu - robisz sobie funkcje rysujące różne prymitywy, typu linie, okręgi, wyświetlające fonty itp. i z tego składasz całość. Jeśli ci to nie wystarczy to możesz kopiować fragmenty bitmapowe. Tylko musisz mieć gdzie je trzymać. A przy 16-bitowej głębi koloru to nawet na proste bitmapki to dziesiątki kB pamięci FLASH potrzeba. Można też zrobić tak jak w dawnych czasach robiono w grach - obraz dzieliło się na podstawowe "cegiełki", było ich parę, a umiejętne ich połączenie dawało całkiem złożone obrazy.

    0
  • #7 21 Lis 2010 00:29
    Bruum
    Poziom 23  

    Dla przykładu taki dylemat. Jest sobie coś na ekranie, pasuje mi narysować coś na tym, a potem powrócić. Co się stosuje częściej, co jest mniej zasobożerne, kopiowanie "zamazywnego" fragmentu, czy coś innego. Co do funkcji rysujących. Jak byś proponował włączanie pixela na pozycji np.10,0? Jest to np. 5-ty bit drugiego bajtu pamięci obrazu. Pytam żeby nie wymyślać koła.

    0
  • #8 21 Lis 2010 00:42
    tmf
    Moderator Mikrokontrolery Projektowanie

    1. To zależy. Jeśli to coś zamazywane jest na tyle małe, że możesz utworzyć bufor w pamięci, to można oryginalny obraz skopiować do bufora (traktując to jako bitmapę), zamazać, po czym przywrócić z bufora - metoda sprawdza się jeśli masz wystarczającą ilość pamięci (a powinieneś mieć, bo kopiujesz tylko fragment obrazu) i takie zamazywane obiekty nie nakładają się. W przeciwnym wypadku pozostaje mozolne przerysowywanie całego ekranu, co jest oczywiście wolne, albo skomplikowane algorytmy typu okienka + z-bufor, co jest szybkie, ale wymaga sporej ilości pamięci (wielokrotnej ilości pamięci obrazu).
    2. Problem z pixelem jest trochę wydumany. Jak zobaczysz organizację pamięci w użytym przez ciebie sterowniku to pixem może zajmować 8 lub 16-bitów, a więc zawsze leży na granicy bajtu. Co więcej, pamięć nie adresujesz bezpośrednio, tylko przez zdefiniowane, prostokątne okienko, którego współrzędne jednego rogu oraz wysokość i szerokość wpisujesz do odpowiednich rejestrów kontrolera. Stąd zapis pixela to zdefiniowanie okna o parametrach {10, 0, 1, 1} i zapis wartości koloru do pamięci. Sterownik sam wyliczy stosowny adres komórki pamięci.
    Zanim zabierzesz się za pisanie takiej biblioteki dokładnie zapoznaj się notą katalogową kontrolera.

    0
  • #9 21 Lis 2010 10:25
    Bruum
    Poziom 23  

    Witam! Tylko ja akurat nie mam kontrolera, zrobiłem obsługę matrycy i mam bufor obrazu, gdzie kolejne bity odpowiadają pixelom.

    0
  • #10 21 Lis 2010 10:32
    Jagged
    Poziom 10  

    Cytat:
    A przy 16-bitowej głębi koloru to nawet na proste bitmapki to dziesiątki kB pamięci FLASH potrzeba.


    Planuje trzymać grafiki na karcie pamięci.Znalazłem na youtube filmik z ramką zdjęć opartą na tym wyświetlaczu i trochę się przestraszyłem, bo obrazki ładują się naprawdę długo http://www.youtube.com/watch?v=Fpm7-6nua-o

    Ogólnie to chciałbym zrobić ładny interfejs z graficznymi ikonami w takim stylu http://www.iconfinder.com/search/?q=iconset:ie_Shine
    Jak programowałem w J2ME to dodatkowo robiłem różne animacje, wysywane panele menu i inne takie bajery, ale rozumie, że tutaj niestety sprzęt z tym nie wyrobi.

    0
  • #11 21 Lis 2010 10:56
    arrevalk
    Poziom 25  

    @Jagged
    Patrząc na dokumentacje wyświetlacza jaką podałeś w poście, ma on wbudowany sterownik z własną pamięcią obrazu. Przeczytaj sobie dokładnie instrukcję samego sterownika (jest w paczce którą zlinkowałeś) a znajdziesz odpowiedzi na część dręczących Ciebie pytań.

    0