Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[STM32][C/Keil] Nie działają jasne kolory w LCD na sterowniku SSD1289

piotrek662 06 Apr 2012 14:36 2465 3
  • #1
    piotrek662
    Level 14  
    Witam! Posiadam moduł wyświetlacza LCD 3.2", prawdopodobnie na sterowniku SSD1289 (sprzedawca twierdził, że na HX8347-A, jednak dopiero metoda inicjalizacji do SSD1289 zadziałała). Próbuję nim sterować przy pomocy mikrokontrolera STM32F103RBT6. Wszystko zdaje się działać dobrze, do czasu gdy chcę wyświetlić jasny kolor, np. RGB(240,240,240). Wtedy sterownik zdaje się "olewać" przesyłane mu dane, nie dzieje się nic. Po wielu próbach i przetestowaniu całej masy różnych metod inicjalizacji znalazłem pewne obejście problemu. Otóż przed wysłaniem ciągu danych zawierających informacje o jasnym kolorze trzeba wpisać do rejestru o adresie 0x12 wartość 0 i odczekać około 15ms. Wtedy na ekranie pojawiają się pasy, obraz ulega rozmyciu, jednak po przesłaniu danych i przywróceniu w rejestrze 0x12 wartości domyślnej (0x6CEB) na wyświetlaczu pojawia się poprawny obraz. Obejście to nie nadaje się jednak do np. dynamicznej aktualizacji tekstu(np. sekundnik), ponieważ przy każdej aktualizacji widoczne jest mignięcie i pojawiają się na chwilkę paski. Aby spróbować lepiej zobrazować problem zamieszczam filmiki.
    1:
    0:00 - Zainicjalizowany LCD i wypełniony kolorem czarnym - bez użycia rejestru 0x12
    0:19 - Wypełniamy kolorem białym - z użyciem rejestru 0x12
    0:27 - Wypełniamy kolorem jasnozielonym - bez użycia rejestru 0x12
    0:33 - Wypisujemy przykładowy tekst - z użyciem rejestru 0x12 - jest wyraźne zaciemnienie ekranu
    0:40 - Zaczynamy cyklicznie zmieniać cyfrę w rogu ekranu z użyciem rejestru 0x12 - widać paski i mignięcia





    2: (Całość bez użycia rejestru 0x12)
    0:00 - Zainicjalizowany LCD i wypełniony kolorem czarnym
    0:10 - Wypełniamy kolorem białym - nic się nie dzieje
    0:17 - Wypełniamy kolorem jasnozielonym
    0:26 - Wypisujemy przykładowy tekst - jak widać pojawiają się tylko niewielkie fragmenty
    0:33 - Zaczynamy cyklicznie zmieniać cyfrę w rogu ekranu - również pojawiają się tylko fragmenty





    Poniżej zamieszczam również kod głównego programu oraz funkcje użyte do obsługi LCD.

    Code: c
    Log in, to see the code


    Code: c
    Log in, to see the code


    Czy ktoś zna rozwiązanie tego problemu, czy jest to może uszkodzenie sterownika LCD?

    Pozdrawiam.
  • #2
    starob
    Level 28  
    .. wygląda mi na to że za szybko sterujesz magistralą na piechotę..na próbę powstawiaj małe delay we skazanych miejscach.
    
    void LCDSendCommand(unsigned short int data)
    {
    	GPIO_ResetBits(CSGPIO, CSPIN);
    	GPIO_ResetBits(RSGPIO, RSPIN);
    	GPIO_Write(DBGPIO, data);
    	GPIO_ResetBits(WRGPIO, WRPIN);
    
           [u] delay[/u]
    
    	GPIO_SetBits(WRGPIO, WRPIN);
    	GPIO_SetBits(CSGPIO, CSPIN); 
    }
     
    void LCDSendData(unsigned short int data)
    {
    	GPIO_SetBits(RSGPIO, RSPIN);
    	GPIO_ResetBits(CSGPIO, CSPIN);
    	GPIO_Write(DBGPIO, data);
    	GPIO_ResetBits(WRGPIO, WRPIN);
    
            [u]delay[/u]
    
    	GPIO_SetBits(WRGPIO, WRPIN);
    	GPIO_SetBits(CSGPIO, CSPIN); 
    }
  • #3
    piotrek662
    Level 14  
    Niestety wstawienie opóźnień nie pomaga, wszystko działa dopóki nie chcę skorzystać z jasnej barwy.
  • #4
    Mechanik PSC
    Level 12  
    Nie wiem z jakiej dokumentacji wziąłeś komendę 0x0012 dla sterownika w mojej nocie aplikacyjnej SSD1289 taki rejestr nie istnieje. Poza tym w czasie inicjalizacji sterownika SSD1289 po każdej komendzie wysłanej do rejestru trzeba odczekać ok. 50ms przed wysłaniem żądania zapisu kolejnego rejestru. Dane które wysyłasz podczas inicjalizacji są takie same jak moje (nawiasem mówiąc ustawienie parametrów nie jest najlepsze, obrazu wyświetlacza nie widać już pod kątem ok 30st.). Spróbuj po wysłaniu każdej komendy zaczekać te 50ms. W końcu wyświetlacz inicjuje się tylko raz ;)