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

[STM32F429ZIT6] [STM32F429ZIT6][SSD1963] Wyświetlacz 4.3 nie wyświetla koloru czerwonego, tylko GBR

maciej_zar 17 Lut 2017 15:19 1296 3
REKLAMA
  • #1 16293185
    maciej_zar
    Poziom 7  
    Posty: 13
    Cześć wszystkim,

    Zabrałem się za obsługę wyświetlacza 4.3" opartego na SSD1963 w oparciu o FMC w STM32F429ZIT6.

    Konfigurację wszystkich podzespołów przeprowadziłem bezpośrednio na rejestrach.
    Sama procedura konfiguracyjna SSD1963 pochodzi z biblioteki UTFT z Arduino (oczywiście przepisana na potrzeby STMa) - na tamtym procku działa, więc tutaj ten sam zestaw komend też powinien działać.

    Wyświetlacz żyje, wszelkie komendy, które wysyłam do SSD1963 zdają się tam trafiać, jednakże jest jeden problem.
    Nie ma czerwonego koloru. Zielony oraz niebieski wyświetlają się poprawnie. Szukałem rozwiązań w złym systemie przesyłu kolorów (chcę użyć 565), jednakże i tutaj wszystko wydaje się być poprawnie ustawione. Dodatkowo, jak mamy słowo 16bit z kolorami, to wygląda, jakby były ustawione GBR zamiast RGB. Wszelkie sugestie mile widziane.

    Druga sprawa to konfiguracja FMC. Tutaj jak zmieniam ustawienia wyświetlacz wydaje się ciągle działać identycznie, bez względu na opóźnienia czy ustawienia typu pamięci. Czy tak może być? Wydaje mi się, że kiedyś powinien przestać działać...

    Trzecia rzecz, prędkość wrzucania danych do wyświetlacza. Na załączonym filmie widać, że zapełnienie całego ekranu chwilę zajmuje. Jak można by to było przyspieszyć?

    Docelowo chciałbym zaprzęgnąć do tego zestawu bibliotekę STemWin, także prędkość będzie miała znaczenie.

    Film z działania programu:
    https://www.youtube.com/watch?v=_3112t4ngQ0

    plik main.cpp:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Plik SSD1963.h:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Plik SSD1963.CPP:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 16295382
    maciej_zar
    Poziom 7  
    Posty: 13
    Aktualizacja w temacie.
    Brak koloru czerwonego wynika ze źle ustawionego trybu danych przyjmowanych. Zamiast 16bit 565 panel przyjmuje dane 24bit. Teraz rodzi sie pytanie, dlaczego nie chce przyjąć tego ustawienia. Próbowałem różnych timingow, opóźnień, kolejności danych. Jak w pętli głównej wyśle mu 0x01 to robi sie soft-reset bez problemu. Ale znowu jak wyśle 0xB0 i chce zeby przyjął typ danych 565 to juz nie przestawia tego.

    Czy cos oprócz timingow i opóźnień powinienem spróbować?

    Co do prędkości odświerzania to podniesienie HCLK przyspieszyło to znacząco.
  • REKLAMA
  • #3 16297903
    starob
    Poziom 29  
    Posty: 1088
    Pomógł: 128
    Ocena: 137
    Przed komendą 0xF0 wstaw

    //Set pixel format, i.e. the bpp
    /* WriteCommand(0x3A);
    WriteData(0x55); // set 16bpp
    W moim sterowniku mam również różnicę w
    WriteCommand(0xE6);
    WriteData(0x01);
    WriteData(0x33);
    WriteData(0x32);
    Spróbuj, może będzie działać ? :)
  • #4 16344062
    maciej_zar
    Poziom 7  
    Posty: 13
    Problem udało się rozwiązać.
    Po sprawdzeniu dosłownie wszystkiego (łącznie z analizatorem logicznym na przesyle danych) i potwierdzeniu, że jest okej, zacząłem mieszać w ustawieniach samego panelu LCD.
    Okazało się, że chińczykowy panel bez specyfikacji ma w niektórych wersjach szynę danych 24 bit a nie 18 bit jak było ustawione (komunikacja SSD1963 <-> panel LCD).
    Trzeba było zmienić na:

    Lcd_Write_Command(0xB0);
    Lcd_Write_Data(0x20);

    I wszystko śmiga pięknie ;)
REKLAMA