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

stm32f4 + TFT - Kolorowe paski na wyświetlaczu

Giani91 15 Lis 2013 23:45 6177 33
  • #1 15 Lis 2013 23:45
    Giani91
    Poziom 9  

    Witam,

    Postanowiłem obsłużyć wyświetlacz TFT: WF57ETIBCDBT0# (zawierający kontroler ssd1963) używając do tego STM32F4DISCOVERY. Podłączyłem zasilanie podświetlenia poprzez zasilacz (wszystko ok ekran stał się biały) oraz zasilanie kontrolera wprost od płytki DISCOVERY i tutaj pojawił się problem. Na wyświetlaczu na całej szerokości pojawiły się kolorowe paski o szerokości 1 piksela (każdy pasek w konkretnym kolorze). Odłączając zasilanie kontrolera wyświetlacz wraca do podświetlenia na biało. Spróbowałem napisać funkcję inicjalizującą kontroler - najpierw na podstawie przykładu z jednego czasopisma dla elektroników, potem na podstawie kodu zawartego w nocie katalogowej wyświetlacza, niestety nie przyniosło to żadnego efektu. Jest to mój pierwszy kontakt z wyświetlaczami tft i nie bardzo wiem gdzie szukać błędu :( Prosiłbym o pomoc

    P.S. Napięcia zasilania zarówno podświetlenia jak i kontrolera mieszczą się w zalecanych:
    9,3V w zakresie 9-10.5V
    3V w zakresie 3.0 - 3.6V

    0 29
  • CControls
  • #2 16 Lis 2013 09:32
    Pituś Bajtuś
    Poziom 28  

    Różnokolorowe paski przez całą szerokość wyświelacza świadczą o tym, ze nie jest sterowany. Gdyby był sterowany ze złymi parametrami to coś by tam "migało". A tu chyba nawet pixel clocka nie dostaje.
    Tu masz jakieś kody pod ten sterownik :
    http://en.radzio.dxp.pl/ssd1963/
    http://embeddedcodesource.com/developer/techtoys_co/driver_for_ssd1963_display_controller
    Nie zamieściłeś żadnego kodu, a problem może leżeć w złym skonfigurowaniu chociażby portów w STM32 lub nie właczeniu jakiegoś zegara.

    0
  • #3 16 Lis 2013 12:21
    slqa
    Poziom 11  

    Witam,
    Jakiś czas temu zajmowałem się podobnym wyświetlaczem tylko, że 7" (z Unisystem). Posiadał on ten sam sterownik. Z tego co pamiętam długo walczyłem z tym, żeby dobrze dobrać czas resetu przed inicjalizacją. Dołączam plik z moją konfiguracją FSMC i inicjalizacją LCD, może się przyda.

    Pozdrawiam slqa

    0
  • CControls
  • #4 17 Lis 2013 22:13
    Giani91
    Poziom 9  

    Skorzystałem z zamieszczonych przez Was kodów i ciągle coś mi nie wychodzi =/ Poniżej zamieszczę kody źródłowe, może Wy znajdziecie jakieś błędy. Wątpię żeby wszystkie kody które wykorzystałem do tej pory były złe - więc albo popełniam jakieś błędy podczas inicjalizacji ssd1963(chodzi mi tutaj o parametry czasowe vertical i horizontal sync mimo, że brane są z datasheetu wyświetlacza) albo coś jest nie tak z ustawieniami STM32.

    wyswietlacz.h

    Spoiler:
    Kod: c
    Zaloguj się, aby zobaczyć kod



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



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

    0
  • #5 17 Lis 2013 22:47
    Pituś Bajtuś
    Poziom 28  

    Cytat:
    CONTROL_PORT->BSRRL = WR_PIN || CS_PIN;

    To jest OR logiczny, nie bitowy! Wynik tej operacji jest inny niż oczekujesz.

    0
  • #6 17 Lis 2013 22:58
    slqa
    Poziom 11  

    Witam,
    Ja też odradzał bym używanie SPL do zapisu komend i doradzał użycie FSMC. Jeśli masz możliwość to podglądnij sobie na oscyloskopie czy masz dobre czasy w interfejsie. Z tego co zobaczyłem w nocie do tego wyświetlacza to tam czekają 5ms na możliwość załączania PLL (str. 17).

    Pozdrawiam slqa

    0
  • #7 18 Lis 2013 00:55
    Giani91
    Poziom 9  

    Dzięki za pomoc, wyświetlacz ruszył i coś wyświetla :D niestety jeszcze nie te kolory które chcę ale i tak mam już progres :) Czytam właśnie o tym FSMC i będę chciał to wykorzystać do obsługi wyświetlacza :) muszę się tylko dowiedzieć o co chodzi z tą pamięcią bo w helpie widze NORSRAM_init i NAND_init więc zakładam, że jest to istotna informacja :) Napiszę coś, podrzucę Wam i poproszę o wytknięcie błędów :)


    edit:
    Napisałem coś takiego (w oparciu o helpa oraz przykład w CooCoxie)

    Kod: c
    Zaloguj się, aby zobaczyć kod


    ale nie jestem pewien kilku rzeczy, ponieważ nie były one wytłumaczone i nie mogłem nigdzie ich znaleźć:
    1) p.FSMC_AccessMode = FSMC_AccessMode_A; co to za access mode? Czemu nie może być tutaj B,C lub D?
    2)FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; Czy aby na pewno PSRAM? Do wyboru miałem jeszcze SRAM oraz NOR.

    0
  • #8 18 Lis 2013 12:23
    tomzor
    Poziom 14  

    Ja co prawda używam WF43CTIBEDA#000 ale również na sterowniku SSD1963.
    W przypadku mojego LCD jest kilka pinów innych, ale generalnie powinno pasować.

    Istotne w sterowaniu FSMC może być poprawna konfiguracja "timing'ów", zobacz plik SSD1963.c , wiersz 619...622. W moim LCD było optymalnie, mniejsze wartości już robiły sieczkę na ekranie.

    Poniżej masz przykładowy projekt w Keil'u, oraz schemat jak ja mam podłączone do STM32F4 Discovery.

    Może będzie przydatne

    Pozdrawiam

    0
  • #9 18 Lis 2013 12:33
    tomzor
    Poziom 14  

    A jak masz LCD z panelem dotykowym, to w projekcie masz układ ADS7843 jaki ja użyłem. Jakbyś użył ten układ to możesz zamienić podłączenie do niego z X+ na X-, oraz Y+ na Y-. Tak jak ja mam również będzie działać, tylko że mam zwracane "na dzień dobry" zamienione wartości XY z "dotyku" w stosunku do ekranu. Skapowałem jak już miałem płytkę zrobioną, ale da się to "wyprostować" programowo.

    0
  • #10 18 Lis 2013 16:28
    slqa
    Poziom 11  

    Witam,
    W mojej funkcji inicjalizacyjnej FSMC mam wybrany SRAM, bo według noty do sterownika SSD1963 posiada on pamięć SRAM. Mode A ma być z tego względu, że B, C, D odnoszą się do pamięci NOR_Flash (od str. 1530 manual STM32F4)

    Pozdrawiam slqa

    0
  • #11 18 Lis 2013 21:57
    Giani91
    Poziom 9  

    Udało mi się wyświetlić kawałek bmp (na szybko wrzuciłem go do pamięci stm) i powiem Wam, że efekt nie był powalający. Tak powinien wyglądać ten obrazek
    stm32f4 + TFT - Kolorowe paski na wyświetlaczu

    Natomiast u mnie (wyświetlałem tylko górną połowę) wokół płomienia znajdowała się taka czerwonawa poświata która na zdjęciu jest praktycznie niewidoczna... rozumiem, że musi być różnica pomiędzy 24 a 16 bitami kolorów ale jak dla mnie to troszkę słabawo wyszło :) stąd moje pytanie czy jak zamienię interface na 8-bitowy (18 bitów na piksel zamiast 16) to czy różnica będzie odczuwalna? Teoretycznie będę miał dostępne 4 razy więcej kolorów...

    Wracając do FSMC - Dzięki za odpowiedzi i porady :) ogarnę je tak szybko jak tylko mogę i dam znać; dzisiaj nie miałem za dużo czasu a chciałem wyświetlić jakiś obrazek i zobaczyć efekt. Swoją drogą troszkę się namęczyłem w MatLabie żeby wydobyć RGB z bmp.

    Pozdrawiam

    0
  • #12 18 Lis 2013 23:03
    Pituś Bajtuś
    Poziom 28  

    Może zacznij od wyświetlenia kolorów podstawowych i sprawdź czy nie masz zamienionego czerwonego z niebieskim ;-)

    0
  • #13 18 Lis 2013 23:13
    Giani91
    Poziom 9  

    To już dawno sprawdziłem :) wyświetla pięknie wszystko to co mu każę - niebieski, czerwony, zielony i mieszanki w RGB565. Nie żaliłbym się do Was nie sprawdzając najpierw podstawowych rzeczy :)

    0
  • #14 19 Lis 2013 21:23
    m.ki
    Poziom 15  

    Giani91 napisał:

    Natomiast u mnie (wyświetlałem tylko górną połowę) wokół płomienia znajdowała się taka czerwonawa poświata która na zdjęciu jest praktycznie niewidoczna... rozumiem, że musi być różnica pomiędzy 24 a 16 bitami kolorów ale jak dla mnie to troszkę słabawo wyszło :) stąd moje pytanie czy jak zamienię interface na 8-bitowy (18 bitów na piksel zamiast 16) to czy różnica będzie odczuwalna? Teoretycznie będę miał dostępne 4 razy więcej kolorów...

    Nie będzie.
    Wyświetlam na podobnych wyświetlaczach (ten sam sterownik, tylko 4,3" i 7") zdjęcia i są nie do odróżnienia od tych z ekranu komputera. Używam 16 bitów na piksel.

    Obstawiam, że jakiś parametr inicjalny jest niewłaściwy - na początkach mojej pracy z wyświetlaczem miałem ostrą kolorową krawędź przy pionowej zmianie koloru (na przykład między białym a niebieskim była widoczna czerwona kreska na pół piksela). Panowie z Unisystemu twierdzili, że kod inicjujący od nich na pewno jest poprawny. W końcu zaniosłem do nich dwa układy - z felernym wyświetlaniem i z innym wyświetlaczem, gdzie obraz był dobry. Dopiero wtedy przestali marudzić, pstryknęli dwie fotki, wysłali do Winstara i okazało się, że jednak kod inicjujący tak nie do końca był poprawny.

    Giani91 napisał:
    Wracając do FSMC - Dzięki za odpowiedzi i porady :) ogarnę je tak szybko jak tylko mogę i dam znać;

    Warto, będzie o niebo szybciej.

    Giani91 napisał:

    dzisiaj nie miałem za dużo czasu a chciałem wyświetlić jakiś obrazek i zobaczyć efekt. Swoją drogą troszkę się namęczyłem w MatLabie żeby wydobyć RGB z bmp.

    Hm, a jesteś pewien, że nie pomyliłeś się przy konwersji? Może to jest przyczyna tej czerwonej poświaty?

    Pozdrowienia,
    m.ki

    0
  • #15 20 Lis 2013 01:04
    Giani91
    Poziom 9  

    Dzięki wielkie za odpowiedź m.ki :) skoro używałeś tej samej ilości bitów na piksel i mówisz, że zdjęcia są nie do odróżnienia to na pewno pomyliłem się gdzieś przy konwersji (mniejsza z tym, to był tylko test). Planuję po sprawdzeniu FSMC dorzucić do układu adapter karty uSD żeby mieć skąd brać obrazki po SPI (a nie odwalać amatorszczyznę z zapisywaniem ich do RAMu uC xD).

    Swoją drogą macie może pod ręką jakieś dobre i sprawdzone źródła (nie chodzi mi tylko o gotowe kody ale także o opisy lub artykuły np. w czasopiśmie - więcej mogę zrozumieć :)) na temat wyświetlania .bmp oraz .jpg? Z tymi pierwszymi jest łatwiej, z tego co słyszałem, ze względu na sposób zapisu informacji, natomiast do .jpg zaciągnięta jest wyższa matematyka (transformacja cosinusowa jeśli dobrze pamiętam) i wydaje się to już znacznie trudniejsze.

    I tak na koniec, co sądzicie o wyświetlaniu filmów na układzie który posiadam? Nie mówię tutaj o takich typowych filmach (dekompresja i inne rzeczy skutecznie by mnie spowolniły o ile w ogóle byłbym w stanie cokolwiek wyświetlić), a raczej o pokazywanie w odpowiednim tempie kolejnych zdjęć typu np. .bmp. Gdyby częstotliwość wyświetlania wynosiła około 15-20 Hz to chyba nie wyszedłbym na tym tak źle? :)

    0
  • #16 20 Lis 2013 16:21
    Pituś Bajtuś
    Poziom 28  

    Chyba najwyższy czas zainteresować się biblioteką STemWin - darmową wersją Seggerowskiej emWin (sprzedawanej po 10k EUR). BMP i JPG wyświetli, nawet odtwarza filmy (niestety tylko MJPEG). Pozatym GUI i cała masa fajnych ficzerów za kompletną darmochę (pod warunkiem stosowania jej z procesorami STM). Na youtubie jest pełno przykładów z jej działania, odtwarzanie filmów widać chociażby tu : http://www.youtube.com/watch?v=l6KmvP-Kwro
    Ogólnie szukaj pod hasłem STM32F429 (będzie najwięcej przykładów) ale bibliotekę możesz uruchomić na dowolnym STM32. Niestety zajmuje ona sporo Flasha.

    0
  • #17 20 Lis 2013 21:02
    m.ki
    Poziom 15  

    Giani91 napisał:
    Swoją drogą macie może pod ręką jakieś dobre i sprawdzone źródła (nie chodzi mi tylko o gotowe kody ale także o opisy lub artykuły np. w czasopiśmie - więcej mogę zrozumieć :)) na temat wyświetlania .bmp oraz .jpg? Z tymi pierwszymi jest łatwiej, z tego co słyszałem, ze względu na sposób zapisu informacji, natomiast do .jpg zaciągnięta jest wyższa matematyka (transformacja cosinusowa jeśli dobrze pamiętam) i wydaje się to już znacznie trudniejsze.

    Mój sposób niestety wymaga napisania dodatkowego programu na PC i sprawdza się tylko, jeśli zestaw grafik jest niezmienny w trakcie eksploatacji urządzenia.
    W urządzeniu jest dodatkowa pamięć Flash (komunikacja z prockiem po SPI). W tej pamięci trzymam zdekompresowane grafiki.
    Wyświetlenie grafiki to po prostu uruchomienie transferu DMA SPI->FSMC.
    Grafiki ładuję do pamięci własnym programem z PC, komunikującym się z urządzeniem po USB - program rozkompresowuje grafikę, wysyła taką do
    urządzenia piksel po pikselu, a procesor urządzenia zapisuje do zewnętrznej pamięci Flash.
    To wszystko oczywiście na etapie programowania urządzenia, potem już tego nie używam.
    Wymaga to oczywiście oprogramowania USB po obu stronach i opracowania jakiegoś protokołu transmisji danych PC->urządzenie.

    Pozdrowienia,
    m.ki

    0
  • #18 21 Lis 2013 01:14
    Giani91
    Poziom 9  

    @m.ki
    Fajnie wymyślone i wykonane rozwiązanie ale lekko ograniczone funkcjonalnie jak dla mnie :) Chociaż plus za dodatkowy program na PC i ogarnięcie USB :)

    @pituś bajtuś
    gdyby mój projekt potrafił to co widziałem na tym filmiku... spełnienie marzeń :) Mam nadzieję, że flasha starczy xD ale wszystko po kolei muszę poogarniać :) FSMC -> adapter microSD po SPI -> biblioteczka którą mi poradziłeś -> może DMA pomiędzy SD a FSMC.

    Pozdrawiam,
    Giani91

    0
  • #19 03 Gru 2013 01:38
    Giani91
    Poziom 9  

    Niestety pomimo wielkich chęci, FSMC coś nie chce ruszyć :( Podłączyłem zgodnie ze schematem jaki podałeś mi slqa (wywnioskowałem, że piny oznaczone w Twoim wyświetlaczu R/W to mój Data/Command, E to Read, A0 to Write), poniżej daje inicjalizację GPIO i FSMC

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod: c
    Zaloguj się, aby zobaczyć kod


    Bez FSMC śmigało jak chciałem, teraz wygląda jakby się nie inicjalizował SSD1963.
    Więc do wyboru mam:
    - złe podłączenie pinów (sprawdzę jeszcze raz)
    - zły kod przy inicjalizacji FSMC
    - złe timingi (wziąłem te same co slqa dla SSD1963)

    Help please :)

    0
  • #20 03 Gru 2013 08:19
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Giani91 napisał:
    wywnioskowałem, że piny oznaczone w Twoim wyświetlaczu R/W to mój Data/Command, E to Read, A0 to Write

    Osobiście raczej założyłbym, że A0 to data/command, a R/W to write.

    Przy okazji dane dla tych wyświetlaczy są chyba 16 bitowe, a nie 8-bitowe? Do tego taki wyświetlacz na 100% nie jest pamięcią typu NOR.

    4\/3!!

    0
  • #21 03 Gru 2013 09:30
    SeerKaza
    Poziom 20  

    Witam tak się trochę wcisnę w temat. Jak jest z tym sterownikiem do TFT w STMach opłaca się kupić wyświetlacz bez sterownika i wykorzystać ten z STMa ?

    0
  • #22 03 Gru 2013 11:57
    Giani91
    Poziom 9  

    @Freddie
    Sprawdzę może Twój pomysł z pinami, bo możesz mieć w tym dużo racji.

    Co do tych 16 bitów zamiast 8... nie za bardzo wiem, o który fragment kodu Ci chodzi. Ustawiam

    Kod: c
    Zaloguj się, aby zobaczyć kod

    chyba, że gdzieś jeszcze czegoś nie zauważyłem.
    Dlaczego użyłem pamięci NOR... nie wiem wczoraj miałem SRAM ale coś mi się pokręciło i zmieniłem... =/

    0
  • #23 03 Gru 2013 12:27
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Giani91 napisał:
    Co do tych 16 bitów zamiast 8... nie za bardzo wiem, o który fragment kodu Ci chodzi.

    Giani91 napisał:
    void Write_Data(unsigned char Dane)


    4\/3!!

    0
  • #24 03 Gru 2013 12:31
    Giani91
    Poziom 9  

    Racja, racja... naleciałość z poprzednich prób oczywiście zapomniałem zmienić. Dzięki wielkie :)


    Niestety to ciągle nie jest to :( raz pojawiają się kolorowe paski, raz ekran jest cały czarny lub biały :( może załączę kod, żeby było jasne co robię i dlaczego

    wyswietlacz.h

    Kod: c
    Zaloguj się, aby zobaczyć kod



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


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


    w mainie oprócz inicjalizacji chciałem aby ekran wypełnił się na czerwono (RGB565).

    0
  • #25 03 Gru 2013 16:33
    Pituś Bajtuś
    Poziom 28  

    SeerKaza napisał:
    Witam tak się trochę wcisnę w temat. Jak jest z tym sterownikiem do TFT w STMach opłaca się kupić wyświetlacz bez sterownika i wykorzystać ten z STMa ?

    Dla rozdzielczości QVGA raczej się nie opłaca. Dla VGA albo WVGA jak najbardziej się opłaca.

    0
  • #26 03 Gru 2013 16:45
    slqa
    Poziom 11  

    Witam,

    W strukturze inicjalizacyjnej FSMC wybierasz

    Kod: c
    Zaloguj się, aby zobaczyć kod

    a uruchamiasz FSMC_Bank1_NORSRAM3.

    Pozdrawiam slqa

    0
  • #27 03 Gru 2013 18:06
    Giani91
    Poziom 9  

    Drobny błąd się wkradł xD próbowałem wszystkie banki po prostu i przed wklejeniem kodu tutaj nie cofnąłem tej jednej zmiany :) także ten błąd nie ma tu znaczenia :) ale dzięki za wytknięcie :)

    0
  • #28 03 Gru 2013 19:10
    starob
    Poziom 25  

    Giani91 napisał:
    Niestety to ciągle nie jest to :( raz pojawiają się kolorowe paski, raz ekran jest cały czarny lub biały :(


    Idzie ku dobremu :) Skróć maksymalnie przewody i na początek timing na maksa.

    U mnie przy zegarze 120Mhz i taśmie długości 10cm zaczęło stabilnie pracować przy
    DataSetUpTime = 100,AddressSetUpTime = 20

    0
  • #29 04 Gru 2013 21:20
    m.ki
    Poziom 15  

    SeerKaza napisał:
    Witam tak się trochę wcisnę w temat. Jak jest z tym sterownikiem do TFT w STMach opłaca się kupić wyświetlacz bez sterownika i wykorzystać ten z STMa ?

    Właśnie byłem na seminarium ST w tym temacie.
    Sterownik z 4x9 działa maksymalnie do 800x600. Osiąga szybkości rzędu 3,5mln pikseli na sekundę - przelicz sobie, czy dla tak dużego ekranu to jest jeszcze sensowne, to zależy, co chcesz wyświetlać.
    Ogólnie możliwości wewnętrznego sterownika robią wrażenie. Na przykład można używać dwóch warstw z kanałem przezroczystości (plus trzecia - jednolite tło).
    Trzeba tylko pamiętać, że to wszystko wymaga pamięci RAM na frame bufffer, jeśli chcesz mieć dwie warstwy z podwójnym buforowaniem, to oznacza to pamięć ekranu razy 4. Nie trzeba pamiętać "surowych" 32 bitów na piksel, można zastosować parę różnych kodowań, więc wtedy pamięć potrzebna jest trochę mniejsza. Ale trudno sobie wyobrazić sensowne działanie przy jedynie wewnętrznej pamięci RAM.

    Pozdrowienia,
    m.ki

    0
  • #30 04 Gru 2013 21:32
    Pituś Bajtuś
    Poziom 28  

    m.ki napisał:
    Ale trudno sobie wyobrazić sensowne działanie przy jedynie wewnętrznej pamięci RAM.

    Toteż po to właśnie dodano do STM32 w końcu po latach kontroler SDRAMu i poszerzono magistralę zewnetrzną do 32 bitów. Na wewnętrznej pamięci to QVGA najwyżej zrobisz.

    0