[1] Bezpłatna biblioteka graficzna Microchip Graphics Library dla mikrokontrolerów PIC24 i PIC32: jak zacząć i pierwsze przykłady

Firma Microchip jest jednym z niewielu producentów mikrokontrolerów na rynku, tak mocno dbającym o budowanie wysokiej jakości supportu dla programistów. Firma udostępnia bezpłatnie – poza środowiskiem MP LAB i kompilatorami – dużą liczbę programów przykładowych oraz biblioteki realizujące różnego rodzaju funkcje, a tym m.in. stosu USB, stosu TCP/IP, a także efektowną bibliotekę graficzną, której możliwości – na przykładach – prezentujemy w artykule (druga część jest dostępna pod adresem).

Do testowania funkcji bibliotecznych użyłem modułu Multimedia Expansion Board (MEB) połączonego z modułem PIC32 USB Starter Kit II z mikrokontrolerem PIC32MX795F521L. Oba moduły są połączone ze sobą specjalnym złączem (fotografia 1). Taki zestaw jest bardzo wygodny do przeprowadzania testów, bowiem firmowe programy przykładowe mają zdefiniowaną miedzy innymi taką właśnie konfigurację sprzętową. Wybór konfiguracji sprzętowej jest standardowo wykonywany w pliku nagłówkowym HardwareProfile.h. Fragment tego pliku pokazano na listingu 1.

Fot. 1. Wygląd modułu MEB z PIC32USB Stater Kit II

Prezentowane w artykule biblioteki graficzne należą do pakietu MLA (Microchip Libraries for Applications), który jest dostępny bezpłatnie do pobrania na stronie firmy Microchip. Prezentowana w artykule graficzna biblioteka Microchipa jest przeznaczona dla mikrokontrolerów z rodzin PIC24 i PIC32!

List. 1. Opis konfiguracji sprzętu

Po usunięciu komentarza z linii #include „Configs/HWP_MEB_PIC32_USB_SK_16PMP.h” jest dołączany plik konfiguracyjny Configs/HWP_MEB_PIC32_USB_SK_16PMP.h zawierający wszystkie niezbędne definicje 16-bitowego interfejsu komunikacyjnego, stałych używanych przez procedury obsługi kontrolera wyświetlacza, linii interfejsu dotykowego itp. Wyświetlacz modułu MEB ma wymiary matrycy 320×240 pikseli, 16-bitową głębię koloru i wbudowany rezystancyjny panel dotykowy. Matryca LCD jest sterowana przez kontroler SSD1926 produkowany przez firmę Solomon Systech.

W przypadku skomplikowanego, rozbudowanego oprogramowania dobrze sprawdza się model warstwowy. Prezentowana biblioteka graficzna ma również budowę warstwową i jest zbudowana z 3 warstw od najniższej do najwyższej (rysunek 2):

  • Device Driver Layer,
  • Primitive Layer,
  • Object Layer.

Rys. 2. Warstwowy model biblioteki graficznej

Biblioteka może być skonfigurowana do pracy w 2 trybach: Blocking lub Non Blocking. W trybie Blocking wszystkie funkcje rysowania obiektów graficznych blokują wykonywanie innych funkcji przez program użytkownika. Inaczej mówiąc cały program jest zatrzymywany aż funkcja biblioteki narysuje obiekt. W trybie Non Blocking funkcje rysowania nie czekają na zakończenie rysowania, tylko przekazy ja sterownia do programu użytkownika. Użytkownik stwierdza, czy rysowanie zostało zakończone przez cykliczne sprawdzanie warunku wykonania procesu rysowania.

Najniżej umieszczony element to fizyczny wyświetlacz LCD ze sterownikiem matrycy. Warstwa Device Driver Layer jest ściśle powiązana z zastosowanym wyświetlaczem, a właściwe z zastosowanym sterownikiem matrycy LCD. Procedury rysowania podstawowych elementów graficznych: odcinków linii, okręgów, prostokątów i znaków alfanumerycznych są zaimplementowane w warstwie Graphics Primitive Layer. Nad warstwą Graphics Primitive jest umieszczona warstwa rysowania obiektów graficznych (widżetów) Graphics Object Layer. Korzysta ona z funkcji umieszczonych w warstwie Graphics Primitive i jest przeznaczona do rysowania obiektów typu przycisk (button), miernik (meter), suwak (slider), przycisk wyboru (radio button) itp. Na rysunku 2 pokazano jeszcze jedną warstwę – aplikacji. Nie jest to warstwa biblioteki, ale warstwa tworzona przez użytkownika biblioteki. Użytkownik musi zapewnić sobie komunikację pomiędzy warstwą obiektów graficznych, a warstwą aplikacji wykorzystując zestaw funkcji przesyłających polecenia do warstw biblioteki (Messager Interface).

O autorze