Opis dotyczy kolorowego wyświetlacza TFT firmy Riverdi typu RVT4.3B480272CFWC81 o wymiarach 106 mm×68 mm×9 mm, przekątnej 4,3 cala, rozdzielczości 480×272 piksele i z pojemnościowym panelem dotykowym. Możliwość montażu w obudowie ułatwia metalowa ramka z 4 uchwytami. Wyświetlacz może być sterowany za pomocą interfejsu SPI lub I²C.
Do zasilania jest wymagane pojedyncze napięcie 3,3 V. Zasilanie i sygnały sterujące doprowadzane są giętką, 20-przewodową taśmą zatrzaskiwaną w rozłącznym gnieździe typu ZIF. Wyświetlacz wymaga sygnałów sterujących o napięciu z zakresu 0...3,3 V. Zamontowany układ kontrolera graficznego FT801 steruje wyświetlaczem, panelem dotykowym oraz odpowiada za obsługę funkcji graficznych i efektów dźwiękowych.
Moduł rozszerzający o nazwie "Arduino Riverdi TFT Shield" umożliwia dołączenie i zastosowanie wspomnianego wyświetlacza w projektach opartych o płytki Arduino oraz z nimi zgodne pod względem wymiarów i rozmieszczenia wyprowadzeń. Oprócz typowych dla standardu złącz, na płytce modułu zamontowano gniazdo ZIF dla taśmy wyświetlacza, gniazdo dla karty MicroSD, monofoniczny wzmacniacz akustyczny TPA6205A, złącze głośnika i przycisk Reset.
Gniazda i złącza modułu rozszerzającego
Na rysunku 1 pokazano rozmieszczenie elementów zamontowanych na płytce modułu adaptera. Najważniejsze są złącza umożliwiające połączenie modułu z innymi płytkami Arduino.
Oprócz tego, na rysunku zaznaczono położenie takich elementów, jak: gniazdo ZIF dla taśmy łączącej płytkę z wyświetlaczem, położenie gniazda dla karty MicroSD, złącza dla dołączenia zewnętrznego głośnika, zwory wyboru napięcia podświetlania: (5 V lub 3,3 V).
Sygnały ze złącza ZIF wyświetlacza są wyprowadzone na szpilki gniazda CN2. Dzięki temu można podłączyć się bezpośrednio do wyświetlacza i sterować nim z zewnętrznego kontrolera. W tabeli 1 umieszczono wykaz wszystkich sygnałów wyprowadzonych na gniazdo CN2.
Wybór interfejsu do komunikacji z wyświetlaczem
Do komunikacji z wyświetlaczem można użyć interfejsu I²C lub SPI. O wyborze decyduje poziom sygnału MODE na wyprowadzeniu 9 złącza wyświetlacza. Poziom niski oznacza wybór interfejsu SPI, a wtedy na linie 3...6 wyprowadzone są sygnały SCLK, MISO, MOSI, CS.
Poziom wysoki sygnału powoduje wybranie interfejsu I²C, a wtedy na linie 3...6 wyprowadzone są sygnały SCL, SDA, bity "A0" i "A1" adresu. Wyświetlacz reaguje na 7-bitowy adres I²C z przedziału 20...23h ustalany za pomocą I2C_SA0 i I2C_SA1.
Sterownik FT801
Pracą wyświetlacza steruje układ kontrolera FT801. Odpowiada on za wytwarzanie sygnałów sterujących pracą matrycy TFT oraz za operacje graficzne i dźwiękowe. W tym - za podstawowe operacje rysowania punktów, linii, figur geometrycznych, generowanie obrazu złożonych komponentów, takich jak: przyciski, suwaki, przełączniki, wskaźniki i inne. Sterowanie FT801 dokonuje się poprzez odwołanie do określonych obszarów adresowych pamięci układu i rozkazy sterujące.
Informacje techniczne dotyczące samego układu FT801 oraz sposobów jego sterowania można znaleźć na stronie firmy FTDI zamieszczonej pod adresem http://goo.gl/oIi1Jb. W dokumencie DS_FT801.pdf są zawarte dane techniczne oraz opis budowy sterownika.
W dokumencie FT800 Programmers Guide.pdf można znaleźć opis programowania, adresów i komend pozwalających na sterowanie układem i wygenerowanie na ekranie obrazów komponentów. Pod podanym adresem można także znaleźć pliki z przykładami programów dla platformy Arduino, mikrokontrolerów ARM oraz PIC. Są tam także linki do pobrania narzędzi ułatwiających pisanie oprogramowania dla FT801.
Przykładowy program demo i biblioteki
Dla ułatwienia zrozumienia sposobu programowania FT801, opracowano program demonstracyjny pokazujący niektóre z możliwości układu. Pliki źródłowe programu zostały wygenerowane przez pakiet programistyczny Ac6 System Workbench for STM32 - C/C++ Embedded Development Tools.
Jako część sprzętową przy testowaniu oprogramowania wykorzystany został wyświetlacz RVT4.3B480272CFWC81, moduł rozszerzający "Arduino Riverdi TFT Shield" oraz płytka stm32NUCLEO-F411RE. Program demonstracyjny i pliki bibliotek oparte zostały na przykładzie udostępniony przez firmę FTDI dla kontrolera ARM do pobrania ze strony http://goo.gl/x0txGI.
W skład programu demonstracyjnego wchodzą osobne pliki biblioteki procedur dla FT801. Dzięki temu mogą być łatwo przeniesione do oprogramowaniu pisanego dla innego kontrolera i pakietu programistycznego. Oprogramowanie przykładowe korzysta z biblioteki HAL dla kontrolera STM32F411. Komunikacja z układem FT801 odbywa się za pośrednictwem interfejsu SPI. Struktura plików jest następująca:
- FT801_procedury.c i FT801_procedury.h (pliki zawierające procedury inicjujące FT801 i podstawowe procedury transmisji rozkazów i danych do układu).
- FT801_funkcje.c i FT801_funkcje.h (biblioteka procedur graficznych do rysowania figur geometrycznych, wyświetlania obrazów, tekstów oraz złożonych komponentów graficznych, jak przyciski, suwaki, wskaźniki itp.).
- FT800.h (plik nagłówkowy z deklaracjami stałych wykorzystywanych przez bibliotekę).
- Procedury_Demo_FT801.c i Procedury_Demo_FT801.h (plik główny programu demonstracyjnego).
- Demo_Obrazy.c i Demo_Obrazy.h (pliki przykładowych bitmap).
Wygenerowanie szkieletu oprogramowania
Wyświetlacz jest sterowany przez płytkę STM32NUCLEO- F411RE. Do wygenerowania szkieletu oprogramowania użyto programu STM32CubeMX.
Za jego pomocą skonfigurowano interfejsy i wyprowadzenia, które zostały użyte do komunikacji pomiędzy płytką NUCLEO a wyświetlaczem. Połączenia pomiędzy mikrokontrolerem a wyświetlaczem wymieniono w tabeli 2.
Na rysunku 2 pokazano obraz wyświetlany w oknie STM32CubeMX po poprawnym skonfigurowaniu połączeń. Po zaznaczeniu w opcjach Project → Settings nazwy projektu i jego folderu na dysku, wskazano wykorzystywane IDE - w tym wypadku SW4STM32.
Po wybraniu Project → Generate Code został automatycznie wygenerowany i zapisany we wskazanym miejscu szkielet oprogramowania. Tak przygotowane pliki szkieletu nadają się do wczytania przez środowisko programistyczne Ac6 System Workbench for STM32 - C/C+.
Procedury inicjujące
Wygenerowany przez STM32CubeMX szkielet oprogramowania zawiera procedury inicjujące interfejs SPI i porty sterujące wyświetlaczem. Należy je uzupełnić procedurami transmisji i odbioru wykorzystującymi interfejs SPI oraz procedurą przygotowującą wyświetlacz do odbioru i wykonywania rozkazów sterujących. Wszystkie znajdują się w pliku FT801_procedury.c programu demonstracyjnego.
Procedury transmisji korzystają ze sprzętowego interfejsu SPI wbudowanego w kontroler STM32F411. Jeżeli biblioteki miały by być wykorzystywane dla innego typu kontrolera, należy zmienić tylko te fragmenty kodu, pozostałe nie będą wymagały zmian. Procedury transmisji i odbioru zostały opracowane dla obsługi danych 8-, 16-, i 32-bitowych.
Na listingu 1 pokazano przykład użycia procedury przesyłającej do wyświetlacza 32 bity danych za pomocą SPI. Procedura jest wywoływana z dwoma argumentami: adresem i 32-bitową daną do zapisu. W procedurze użyto biblioteki HAL dla mikrokontrolera STM32F411.
Analogiczną procedurę odczytu danej 32-bitowej spod wskazanego adresu pamięci kontrolera FT801 zamieszczono na listingu 2.
Ponieważ rozkazy dla sterownika FT801 wpisywane są najpierw do bufora kołowego w wewnętrznej pamięci układu, przydatna będzie procedura kontrolująca stan jego zapełnienia - zaprezentowano ją na listingu 3. Jest ona wywoływana z 2 parametrami: aktualną pozycją do zapisu i liczbą bajtów zapisywanego rozkazu. Zwracana jest nowa, aktualna pozycja do kolejnego zapisu.
Procedura inicjująca wyświetlacz po włączeniu zasilania rozpoczyna się od deklaracji wartości zmiennych odpowiadających użytej matrycy TFT - pokazano je na listingu 4. Następnie, ustawiane są odpowiednie poziomy na liniach portów kontrolujących sygnały MODE, PD i CS wyświetlacza oraz konfigurowane rejestry FT801 odpowiadające za tryb pracy SPI (listing 5).
Jeżeli teraz wartość odczytana spod adresu REG_ID będzie równa 0x7C, to oznacza nawiązanie komunikacji z kontrolerem FT801. Adres REG_ID oraz inne stałe używane w procedurach są zadeklarowane w w pliku FT800.h zamieszczonym na listingu 6.
W kolejnym kroku, do rejestrów FT801 zapisuje się stałe zależne od użytej matrycy TFT i można wyłączyć układ audio (listing 7). Na koniec są wykonywane operacje związane z buforem kołowym FT801, do którego będą przesyłane rozkazy - pokazano je na listingu 8.
Po zakończeniu prawidłowej procedury inicjującej ekran wyświetlacza powinien być jednolity, ciemny z załączonym podświetleniem tła. Sterownik wyświetlacza FT801 jest gotowy do przyjmowania rozkazów graficznych.
Funkcje biblioteki procedur graficznych FT801
Biblioteka użyta w programie demonstracyjnym składa się z szeregu procedur przeznaczonych do wykonania określonej czynności, np. wyświetlenia przycisku. Przed wywołaniem procedury należy zapisać parametry wyświetlanego obiektu do skojarzonej z procedurą struktury. Struktury i procedury są umieszczone w plikach FT801_funkcje.c i FT801_funkcje.h. Struktura i funkcja pozwalająca wyświetlić tekst na ekranie wyświetlacza wyglądają następująco: listing 9.
Przykład użycia procedury do wyświetlenia tekstu o foncie 24 i znakach w zielonym kolorze pokazano na listingu 10.
Programy narzędziowe do projektowania ekranów
Projektując samodzielnie wygląd ekranu, który ma być wyświetlony na wyświetlaczu, trzeba wyliczyć pewne parametry, takie jak pozycje i wielkość komponentów na ekranie. Dla ułatwienia życia użytkownikom sterowników FT800 i FT801, firma FTDI opracowała narzędzia wspomagające projektowanie ekranu i tworzenie kodu rozkazów dla sterownika. Są to dwa programy: FTDI EVE Screen Editor i FTDI EVE Screen Designer.
Pliki instalacyjne programów można pobrać ze strony http://goo.gl/mqq5tW. Korzystając z wymienionych programów można metodą przesuwania komponentów ustalić optymalny wygląd wyświetlanego ekranu, dobrać wielkość, kształt, kolor komponentów a nawet wygenerować szkielet programu zawierający wywołania procedur i rozkazów.
Screen Designer wydaje się łatwiejszy w użyciu, widok jego pulpitu pokazano na rysunku 3. Z prawej strony pulpitu znajduje się przybornik z dostępnymi komponentami. Po kliknięciu na komponent i przytrzymaniu przycisku myszy można przesunąć komponent w wybrane miejsce na środkowej części pulpitu, symbolizującej ekran wyświetlacza.
Korzystając z uchwytów zaznaczonych na ramce wokół komponentu, można zmieniać wymiary, a niekiedy i orientację. Zakładka Widget Properties pozwala na wpisywanie parametrów zmieniających pozycję i wygląd ustawianego komponentu.
Z lewej strony pulpitu znajduje się zakładka Project Explorer, na której w porządku wstawiania na ekran wyświetlone są nazwy użytych komponentów. Kliknięcie na nazwę wybiera komponent do edycji. Na dole usytuowana jest zakładka Output Window.
Wyświetlane są na niej wywołania procedur i rozkazy niezbędne dla wyświetlenia na docelowym ekranie komponentów w takim kształcie i usytuowaniu jak w projekcie. Wybierając opcję File → Export → Screen to DL można zapisać w formacie pliku tekstowego wygenerowany szkielet wywołania procedur i rozkazów dla FT801.
Podstawiając pod nazwy procedur ze szkieletu, procedury z biblioteki graficznej, można szybko stworzyć własny kod, który po wysłaniu do sterownika spowoduje wyświetlenie na ekranie wyświetlacza zaprojektowanych komponentów.
Przykładowe oprogramowanie, z którego można skorzystać ucząc się obsługi wyświetlacza, jest dostępne w materiałach dodatkowych na serwerze FTP.
Ryszard Szymaniak, EP