Biblioteki graficzne Microchipa: obsługa touch-panela i LCD ze sterownikiem SSD1289
List. 16. Odczytanie współrzędnej x
int TouchGetXRAW(void)
{
TP_CS=0;
Delay();
WriteTpSpi(0x90);
Delay();
X=ReadTpSpi();
TP_CS=1;
return((X&0x0fff));
}
List. 17. Odczytanie współrzędnej y
int TouchGetYRAW(void)
{
TP_CS=0;
Delay();
WriteTpSpi(0xD0);
Delay();
Y=ReadTpSpi();
TP_CS=1;
return((Y&0x0fff));
}
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
SHORT TouchGetY(void){
int x;
float xp;
if(TP_PENIRQ==1)
return(-1);
DelayMs(30);
x=TouchGetYRAW();
if (x > 3900)
x = 3900;
else if (x < 200)
x = 200;
xp=(x - 200) / 16.25;
x=xp;
if (x > 240)
x = 240;
return(x);
}
List. 19. Procedura odczytania przekonwertowanej współrzędnej y
SHORT TouchGetX(void){
int y;
float yp;
if(TP_PENIRQ==1)
return(-1);
DelayMs(30);
y=TouchGetXRAW();
if (y > 3850)
y = 3850;
else if (y < 150)
y = 150;
yp=((y - 150) / 11.56);
y=yp;
if(y>320)
y=320;
return(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.

Technologie End of Life i bezpieczeństwo sieci – wyzwania Europy związane z tzw. długiem technologicznym
Najczęstsze błędy firm przy wyborze dostawcy energii i jak ich uniknąć
Fotorezystor, czyli czujnik światła dwojakiego działania. Przykład innowacji w automatyce i elektronice możliwej dzięki technologii fotooporników 



