Biblioteki graficzne Microchipa: obsługa touch-panela i LCD ze sterownikiem SSD1289
W naszym portalu przedstawialiśmy praktyczne możliwości bezpłatnych bibliotek graficznych firmy Microchip na podstawie przykładów uruchamianych na firmowym module ewaluacyjnym Multimedia Expansion Board (MEB). Firma Microchip przygotowała dla tego modułu kompletną konfigurację wszystkich niezbędnych modułów sprzętowych mikrokontrolera, oraz definicje linii portów niezbędną do prawidłowego sterowania wbudowanego modułu TFT i panelu dotykowego. Wykorzystanie MEB umożliwiło mi skupienie się na konfiguracji i możliwościach samej biblioteki bez konieczności zajmowania się problemami sprzętu. To bardzo komfortowa sytuacja, ale po zapoznaniu się z możliwościami biblioteki prędzej czy później przyjdzie moment, kiedy zechcemy wykorzystać na przykład wtyczkę Graphic Designer Display X do zaprojektowania i wykonania interfejsu graficznego we własnym urządzeniu.
Żeby wykorzystać kolorowy panel TFT trzeba go sterować albo dedykowanym sterownikiem albo mikrokontrolerem z odpowiednimi układami peryferyjnymi. Jak wiemy biblioteka graficzna powinna wspierać całkiem sporą liczbę sterowników dedykowanych i może być stosowana z jednym mikrokontrolerów rodziny PIC24, lub mikrokontrolerami PIC32 w roli sterownika TFT. Ponieważ w module MEB jest wykorzystywany sterownik SSD1926, to na początku najbardziej naturalne wydało mi się poszukanie panelu TFT z wbudowanym takim sterownikiem. Niestety po sprawdzeniu oferty krajowych dystrybutorów takiego wyświetlacza nie znalazłem. Sięgnąłem po raz kolejny do dokumentacji biblioteki i znalazłem informację, że możliwe jest jej proste skonfigurowanie do pracy z alternatywnym sterownikiem S1D13517 firmy Epson. I tu również poszukiwania nie dały pozytywnego wyniku. Pozostało znalezienie panelu TFT ze sterownikiem z listy wspieranych sterowników przez bibliotekę, lub w ostateczności z dowolnym sterownikiem i napisanie całkowicie własnych procedur warstwy Device Driver Layer. To ostanie przy pewnym doświadczeniu nie powinno być specjalnie trudne.
W trakcie dalszych poszukiwań natrafiłem na najpopularniejszym polskim serwisie aukcyjnym na wyświetlacz TFT o rozmiarach 240×320 pikseli i ze sterownikiem SSD1289 będącym na liście wspieranych sterowników. Wyświetlacz był dodatkowo wyposażony w podświetlenie LED, rezystancyjny panel dotykowy ze sterownikiem XPT2046, oraz złącze karty SD. Jeżeli dodamy do tego cenę ok. 70 PLN, to taki wyświetlacz wydaje się idealny do stosowania we własnych urządzeniach. Niska cena być może będzie skutkowała gorsza jakością matrycy, ale to nie jest przesądzone.
Sterowanie wyświetlaczem – podstawowe funkcje warstwy device driver layer
Jak wiemy biblioteka graficzna jest przeznaczona do używania z mikrokontrolerami rodzin PIC24 i PIC32. Do testów z wyświetlaczem użyłem modułu PIC32 USB Stater kit II z mikrokontrolerem PIC32MX795F512L. Jest to dokładnie taki sam moduł jaki sterował wyświetlaczem w module Multimedia Expansion Board. Żeby można było połączyć ten moduł z wyświetlaczem jest potrzebna specjalna płytka – przejściówka Starter Kit I/O Expansion Board. Oczywiście taki zestaw nie jest t niezbędny. Do testów może być użyty dowolny moduł pozwalający połączyć wyprowadzenia mikrokontrolera z płytką wyświetlacza.
Na płytce wyświetlacza jest umieszczone złącze szpilkowe IDC40. Każdy z pinów jest opisany (fotografia 1) i podłączenie nie powinno sprawiać problemu. Do podłączenia zostały wykorzystane kable z końcówkami przystosowanymi do kontaktu ze standardowymi goldpinami.
Fot. 1. Wyprowadzenia wyświetlacza
Fot. 2. Wygląd testowanego zestawu
Sterownik SST1289 produkowany przez firmę Solomon Sysytech jest przeznaczony do sterownia kolorowymi matrycami TFT o rozmiarach 320×240 pikseli RGB z maksymalnie 18-bitową głębią kolorów. Jest wyposażony w pamięć obrazu RAM o pojemności 172800 B (240*320*18/8)
Sterownik ma również wbudowaną przetwornicę DC-DC wytwarzającą napięcie do zasilania driverów matrycy LCD. Zapisywanie i odczytywanie pamięci obrazu oraz rejestrów konfiguracyjnych umożliwiają równoległe interfejsy pracujące w standardzie Motorola 6800 lub Intel 8080 oraz szybki interfejs szeregowy SPI.
Interfejs komunikacyjny jest zazwyczaj wybierany poprzez wymuszenie kombinacji stanów na wejściach konfiguracyjnych. Producent panelu wyświetlacza może udostępnić te wejścia lub nie. W naszym przypadku interfejs jest ustalony na stałe i nie można go zmienić . Jest to 16-bitowa równoległa magistrala danych z sygnałami sterującymi pracującymi w standardzie Intel 8080.
Wiemy już jak musimy komunikować się ze sterownikiem. Wróćmy teraz na chwilę do biblioteki graficznej. Projekt wygenerowany przez GDD X zawiera podkatalog Drivers z plikiem TCON_SSD1289.c . W opisie biblioteki napisano, ze w przypadku sterownika SSD1289 plikiem drivera jest drvTFT2.c . Na początku te dwie informacje wprowadzają trochę zamieszania. Intuicyjnie chcielibyśmy wykorzystać do sterownia plik z nazwą odpowiadającą nazwie sterownika. Po dokładniejszej analizie obu plików okazuje się, że TCON_SSD1289.c zawiera obsługę tego wyświetlacza z interfejsem SPI. Z tego powodu niestety nie możemy go wykorzystać do naszych celów, bo nasz wyświetlacz ma ustawiony na stałe interfejs równoległy. W pliku drvTFT2.c znajdziemy parę niezbędnych procedur, ale nie ma funkcji komunikacji poprzez magistralę równoległą. Microchip oferuje do sterowania interfejsami równoległymi specjalny moduł peryferyjny PMP ( Parallel Master Port ). PMP może pracować z 8- lub 16-bitową szyną danych i jest elastycznie konfigurowany. Ja do celów testowych nie użyłem PMP, a zastosowałem programową emulację standardu Intel 8080 z 16 bitową magistralą danych. Jednak w docelowym nowo projektowanym układzie PMP jest najlepszym rozwiązaniem.
Programową integrację biblioteki z naszym wyświetlaczem zaczniemy od napisania procedur emulacji magistrali równoległej i zapisu oraz odczytu danych pamięci obrazu i oraz rejestrów sterujących. Procedury te zostaną umieszczone w pliku drvTFT2.c . Zanim to zrobimy trzeba będzie zdefiniować środowisko sprzętowe. Tradycyjnie w projektach Microchipa do takich definicji jest stosowany plik HardwareProfile.h . W pliku wygenerowanym przez GDDX definiujemy jak na listingu 1.
List. 1. Modyfikacja pliku HardwareProfile.h
#elif defined (__PIC32MX__) || defined (__dsPIC33E__) || defined(__PIC24E__) #include "Configs/MY_BOARD.h"
Definicja sprzętu będzie umieszczona w pliku MY_BOARD.h . Jest to zmodyfikowany do potrzeb testów plik konfiguracyjny pierwotnie przeznaczony dla modułu MEB – listing 2. Znajdziemy tu definicje stałych właściwych dla użytego sterownika i definicje linii sterujących magistrali równoległej.