Wyświetlacz firmy Riverdi z modułem rozszerzającym dla Arduino

Wyświetlacz firmy Riverdi z modułem rozszerzającym dla Arduino
Pobierz PDF Download icon

Dołączenie kolorowego wyświetlacza TFT z pojemnościowym panelem dotykowym jako modułu rozszerzającego Arduino, tworzy możliwości budowy urządzeń z interfejsem graficznym o profesjonalnym wyglądzie i sposobie działania. W artykule - oprócz opisu wyświetlacza i modułu - sporo uwagi zostanie poświęcone procedurom programistycznym pozwalającym na uruchomienie potencjału drzemiącego w wyświetlaczu.

Rysunek 1. Rozmieszczenie złączy na płytce adaptera wyświetlacza

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

Tabela 1. Sygnały wyprowadzone na gniazdo CN2

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

Listing 1. Przykład użycia procedury przesyłającej do wyświetlacza 32 bity danych za pomocą SPI

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.

Listing 2. Przykład użycia procedury odczytującej z wyświetlacza 32 bity danych za pomocą SPI

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

Rysunek 2. Obraz wyświetlany w oknie STM32CubeMX po poprawnym skonfigurowaniu połączeń

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.

Tabela 2. Połączenia pomiędzy mikrokontrolerem a wyświetlaczem

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

Listing 3. Procedura kontrolująca stan zapełnienia bufora kołowego

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.

Listing 4. Deklaracja wartości zmiennych odpowiadających użytej matrycy TFT

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.

Listing 5. Inicjowanie interfejsu SPI i jego wyprowadzeń

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.

Listing 6. Zawartość pliku ft800.h

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.

Listing 7. Zapisanie stałych do rejestrów FT801 oraz wyłączenie audio

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

Lisitng 8. Sprawdzenie bufora kołowego oraz operacje na wyświetlaczu

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

Rysunek 3. Okno główne programu Screen Designer

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.

Listing 9. Struktura i funkcja wyświetlające tekst na ekranie

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.

Lisiting 10. Przykład użycia procedury do wyświetlenia tekstu o foncie 24 i znakach w kolorze zielonym

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

Artykuł ukazał się w
Elektronika Praktyczna
maj 2016
DO POBRANIA
Pobierz PDF Download icon
Materiały dodatkowe

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik kwiecień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio maj - czerwiec 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje kwiecień 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna kwiecień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich maj 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów