Biblioteki graficzne Microchipa: obsługa touch-panela i LCD ze sterownikiem SSD1289

List. 16. Odczytanie współrzędnej x

 

List. 17. Odczytanie współrzędnej y

Obie te procedury podają zmierzone wartości rezystancji w rozdzielczości 12-bitowej, a więc ich wartości zmieniają się w zakresie 0…4095. Żeby uzyskać rzeczywiste współrzędne z zakresu 0<x<319 i 0<y<219 trzeba odczytany wynik przekonwertować. Ale najpierw trzeba ustalić gdzie się znajduje punkt początkowy o współrzędnych (0,0), bo do tego zależy jak będzie wykonywana konwersji. Ja do ustalenia tego punktu dla biblioteki graficznej Microchipa posłużyłem się wtyczką GDD-X. Na ekranie postawiłem obiekt button i tak go przesunąłem by dwie współrzędne były zerowe. Okazało się, ze współrzędne (0,0) są w lewym górnym rogu wyświetlacza.

Na podstawie tej informacji zostały napisane 2 procedury odczytujące pomiary z XPT2046 i zwracające po przekonwertowaniu współrzędne x i y dotknięcia na ekranie. Zostały one pokazane na listingach 18 i 19.

 

List. 18. Procedura odczytania przekonwertowanej współrzędnej x

 

List. 19. Procedura odczytania przekonwertowanej współrzędnej y

Na początku obu procedur jest sprawdzany stan wejścia PENIRQ i jeżeli jest on wysoki, to procedura kończy działanie i zwraca wartość -1. Jeżeli ten stan jest niski, to odczytywana jest wartość z XTP2046 dla konkretnych kanałów. Każda z procedur zwraca po konwersji swoja współrzędną.

Wróćmy teraz do biblioteki i projektu generowanego w GDD-X. Jak już wspomniałem standardowo taki projekt, w którym wybrano MEB generuje pliki ze skonfigurowaną obsługą panelu rezystancyjnego przez przetworniki ADC mikrokontrolera. Musimy teraz go tak przekonfigurować by biblioteka korzystała z obsługi napisanej przez nas.

Po pierwsze trzeba wyłączyć kompilacje dla procedur umieszczonych TouchScreenResistive.c przez usuniecie definicji #define USE_TOUCHSCREEN_RESISTIVE w pliku konfiguracji MY_BOARD.h .

Obsługa panelu dotykowego sprowadza się głównie do funkcji void TouchGetMsg(GOL_MSG *pMsg) umieszczonej w pliku TouchScreen.c . Ta funkcja korzysta z wcześniej opisanych procedur TouchGetX() i TouchGetY() . Ponieważ po usunięciu #define USE_TOUCHSCREEN_RESISTIVE nie będą kompilowane funkcje z TouchScreenResistive.c , to projekt użyje naszych procedur.

Funkcje TouchGetMsg na podstawie odczytanych współrzędnych x, oraz y modyfikuje składowe struktury GOL_MSG dotyczące obsługi panelu dotykowego.

Jak widać z powyższego opisu, żeby dodać własną obsługę panelu dotykowego trzeba dostarczyć 2 procedury: TouchGetX() i TouchGetY() zwracające współrzędne dotkniętego punktu i tak skonfigurować bibliotekę, by z tych procedur korzystała. Zależnie od użytych rozwiązań sprzętowych trzeba też zmodyfikować procedurę TouchInit inicjującą w naszym przypadku programowy interfejs SPI.

Testowanie działania ekranu dotykowego można szybko sprawdzić przez postawienie na ekranie obiektów wykorzystujących ekran dotykowy. Ja użyłem trzech: przycisku Button , suwaka Slider i pokrętła Round Dial fotografia 7.

 

Fot. 7. Wygląd ekranu testowania panelu dotykowego

 

Testy wykazały, ze wszystkie te obiekty współpracują prawidłowo z obsługa ekranu dotykowego, a ich działanie nie odbiega od działania takich samych obiektów w projekcie przeznaczonym dla firmowego modułu MEB.

 

Podsumowanie

W artykule pokazałem jak można w praktyce zintegrować dostępny na rynku wyświetlacz LCD z panelem dotykowym z graficzna biblioteką firmy Microchip. W trakcie pracy nad integracją z biblioteką miałem możliwość porównania efektów działania z wyświetlaczem modułu Multimedia Expansions Board. Oba wyświetlacze zachowywały się identycznie poza szybkością rysowania niektórych obiektów. Nieznacznie szybszy był wyświetlacz ze sterownikiem SSD1926 modułu MEB. Wynika to najprawdopodobniej z różnicy w budowie sterowników. Poza tym nie starałem się optymalizować czasowo obsługi komunikacji z SS1289

Integracja biblioteki z nowym sterownikiem, szczególnie wykonywana po raz pierwszy nie jest zadaniem prostym, chociaż być może na taka wygląda. Jest to spowodowane dość sporym skomplikowaniem projektu, dużą ilością plików źródłowych i nagminnym stosowaniem kompilacji warunkowej. Przykładowe projekty Microchipa maja tą właściwość, ze działają bardzo dobrze z modułami formowymi, ale ich modyfikacja dla innego sprzętu wymaga trochę pracy. W przypadku biblioteki graficznej naprawdę warto ta prace wykonać, bo efekty są znakomite. 

O autorze