Autor: drzasiek
Redakcja: dondu
Wielu początkujących programistów, stając przed potrzebą użycia w swoim projekcie wyświetlacza graficznego, nie zdaje sobie sprawy w jaki sposób taki wyświetlacz działa, oraz jak się z nim komunikować.
Dodatkowym problemem jest wybór wyświetlacza ze względu na cenę (kolorowe wyświetlacze graficzne niestety nie są tanie) oraz czy za taką cenę dany wyświetlacz będzie posiadał odpowiednie możliwości oraz czy zdoła go obsłużyć.
Warto w takich przypadkach skorzystać z gotowych modułów, gdzie nie trzeba się martwić o odpowiednie podłączenie i zasilenie wyświetlacza oraz najlepiej, jeśli można dostać przykładowy program demonstracyjny, aby nie trzeba było rozgryzać danego sterownika od zera wertując setki stron dokumentacji.
W poniższym artykule przedstawię moduł wyświetlacza HY-28A:
HY-28A |
jaki został użyty w module DSO uLAB1 oraz omówię w skrócie i zamieszczę bibliotekę obsługi tego wyświetlacza wraz z przykładowym projektem demonstracyjnym, utworzonym w Atmel Studio 6.
Moduł HY-28A
Jest to moduł z wyświetlaczem LCD TFT o przekątnej 2.8 cala, rozdzielczości 320x240 pikseli i 16 bitowej głębi kolorów. Wyświetlacz obsługiwany jest za pomocą sterownika ILI9320, w tym konkretnym module poprzez interfejs SPI. Dodatkowo, wyświetlacz posiada zintegrowany rezystancyjny panel dotykowy wraz ze sterownikiem XPT2046 zamontowanym na module, z którym komunikacja odbywa się również za pomocą interfejsu SPI.
Moduł posiada dodatkowo wbudowany stabilizator napięcia 3.3V oraz sterownik podświetlenia (domyślnie załączony). Poniżej kilka dokumentacji technicznych, które warto pobrać i zapisać:
- Wymiary modułu
- Schemat ideowy modułu
- Dokumentacja sterownika ILI9320
- Nota aplikacyjna sterownika ILI9320
- Dokumentacja sterownika XPT2046
Podłączenie do mikrokontrolera
Sterowniki wyświetlacza oraz panelu dotykowego zostały podłączone z mikrokontrolerem za pomocą interfejsu USART. Ale zaraz zaraz, przecież dopiero pisałem, że z tymi układami komunikujemy się za pomocą interfejsu SPI. Co jest grane?
Już wyjaśniam. Ponieważ jeden z dwóch dostępnych w tym mikrokontrolerze interfejsów SPI nie mógł być wykorzystany ze względu na współdzielenie pinów z USB, a drugi został wykorzystany do karty pamięci, zmuszony byłem obejść ten problem w taki sposób, aby urządzenia ze sobą nie kolidowały. Ponieważ wyświetlacz i panel dotykowy komunikują się z mikrokontrolerem w innym trybie SPI niż karta pamięci, nie mogłem ich bez przeszkód umieścić na tym samym interfejsie, ponieważ by ze sobą kolidowały i znacznie spowalniały pracę.
Dlatego też do wyświetlacza postanowiłem wykorzystać USART w trybie SPI. Co to znaczy? To znaczy tyle, że USART w mikrokontrolerach XMEGA można tak ustawić, że będzie kompatybilny z SPI.
Podłączenie wyświetlacza do mikrokontrolera można znaleźć na schemacie całej płytki w poprzednim artykule: DSO uLAB1 - Opis modułu
Przykład
A oto przykładowy projekt demonstracyjny przygtowany w Atmel Studio 6.
Pobierz: DSO_uLAB_LCD.rar
Kopia: DSO_uLAB_LCD.rar
Biblioteka obsługi wyświetlacza może zawierać podobne do dostępnych w internecie przykładowych funkcji. Funkcje te powstawały przez pewien okres czasu, ewaluowały z projektu na projekt. Nie jestem w stanie powiedzieć, czy nazewnictwo nie zostało wzorowane na dostępnych w internecie przykładowych kodach.
Projekt składa się z następujących plików:
- main.c – główny plik źródłowy programu
- ILI9320.c – plik źródłowy z deklaracjami funkcji obsługi wyświetlacza
- ILI9320.h – plik nagłówkowy z definicjami wyprowadzeń, kolorów
- fonts.h – plik nagłówkowy z tablicami wartości czcionek
- images.h – plik nagłówkowy z tablicą wartości obrazka wyświetlanego na LCD
- config.c – plik źródłowy z deklaracjami funkcji konfigurujących mikrokontroler
- config.h – plik nagłówkowy z definicjami do konfiguracji
A oto program główny z opisem poszczególnych linii:
#include <avr/io.h> #include <util/delay.h> #include <inttypes.h> #include "ILI9320.h" #include "images.h" int main(void) { PORTD_DIR |= (1<<5);//konfiguruje podświetlenie - wyjście PORTD_OUT &=~ (1<<5);//konfiguruje podświetlenie – stan niski (wyłączone) clock32MHz_init();//włącza zegar 32 MHz CCPWrite (&MCU_MCUCR, MCU_JTAGD_bm);//wyłącza JTAG PORTF_DIR |= (1<<7);//konfiguruje linię Touch Panel CS - wyjście PORTF_OUT &=~ (1<<7);//Touch Panel CS = 0 LCD_Init();//inicjalizacja LCD LCD_Clear(BLACK);//czyści ekran (zapełnia kolorem) PORTD_OUT |= (1<<5);//włącza podświetlenie LCD_Clear(GREEN);//czyści ekran (zapełnia kolorem) lcd_str_med_pio("Test czcionki medium",0,3,YELLOW,GREEN);//wyświetla tekst lcd_str_small_pio("Test czcionki small",0,20,ORANGE,GREEN); //wyświetla tekst lcd_Pixel (20,50,RED);//rysuje pixel lcd_Line_poz(10,310,230,WHITE);//rysuje linię poziomą lcd_Line_pio(10,40,230,WHITE);//rysuje linię pionową lcd_Area(50,150,50,50,BLUE);//zapełnia obszar kolorem lcd_line(10,310,40,230,PINK);//rysuje dowolną linię lcd_Image(test_img,190,60,40,112);//rysuje obrazek z tablicy danych lcd_Frame(188,59,42,115,2,RED); //rysuje ramkę while(1); //pętla główna }
Myślę, że poszczególne funkcje są napisane w taki sposób, że nie potrzeba tłumaczenia jakich argumentów wymagają i co robią.
Obsługa została napisana w taki sposób, aby punkt (0,0) znajdował się w lewym górnym roku ekranu (w normalnym położeniu urządzenia).
A oto fotografia, co powinno pojawić się na ekranie po wykonaniu tego programu demonstracyjnego:
W kolejnym artykule pokażę jak uruchomić i korzystać z panelu dotykowego oraz zamieszczę prosty program demonstracyjny z jego wykorzystaniem.
No chyba każdego to jara, więc nie dziwie się Autorowi, skoro miał ku temu możliwość. Chociaż jak teraz patrzę na jakiejś stronie to 12$ (tylko nie widzę czy z podatkiem i od ilu darmowa dostawa). Za 50 dychy odrazu z panelem dotykowym byłoby ok. Dotychczas widywałem za 90 zł. Może kiedyś. Na elektrodzie koleś podsłuchał telefon i dzięki temu ma za 20 zł tyle wyświetlaczy 3" ile tylko chce. Tylko nie każdy ma FPGA. (i umie to obsłużyć)
OdpowiedzUsuńAutorza nasz kochany myślisz wejść w STM32 :) ? Ja na to gorąco czekam .Pozdrawiam serdecznie
OdpowiedzUsuńNp tak?:
OdpowiedzUsuńhttp://www.elektroda.pl/rtvforum/topic2544100.html
Czy w Polsce można zakupić ten wyświetlacz? Pozdrawiam i podziwiam!
OdpowiedzUsuńAutorze, podpinam się pod prośbę kolegi który napisał wcześniej. Z chęcią zobaczymy jak konfigurujesz go pod STM32 ;)
OdpowiedzUsuńDrodzy Anonimowi.
UsuńWystarczy zastąpić konfigurację GPIO i funkcje obsługi transmisji na te dla STM32.
Reszta zostaje zupełnie ta sama, więc nie rozumiem gdzie jest problem :)
Witaj :) problem jest z tą transmisją jak to ustawić itp. nie mam wielkiego doświadczenia z spi a tym bardziej z wyświetlaczami a hy28a wpadł mi w ręce ostatnio,bardzo chętnie zobaczył bym jak konfigurujesz gpio i obsługę transmisji; pomogło by mi to jakoś zrozumieć te elementy,a nie mogę się doczekać uruchomienia tego cuda. Pozdrawiam
UsuńWitam,
OdpowiedzUsuńmam pytanie czy artykuł na temat tego panelu dotykowego został już napisany/opublikowany? Szukam już jakiś czas i nie mogę go znaleźć.
I ja chętnie bym poczytal o obsludze tego panelu dotykowego z jakims przykladem. Ale chyba nie bylo jeszcze nic opublikowanen
OdpowiedzUsuń