LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

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

Warstwa Device Driver Layer

Jest to warstwa dostarczająca funkcji odpowiadających za obsługę sterownika wyświetlacza. Sterowniki kolorowych matryc LCD TFT są produkowane przez różne firmy. W ofertach tych firm można spotkać wiele różniących się między sobą sterowników. Różnice wynikają z zastosowanego interfejsu komunikacyjnego, możliwości obsłużenia matryc o innych rozdzielczościach i głębiach koloru, funkcjami obsługi palety koloru itp. Każdy z typów sterownika nawet z obrębie jednej firmy musi mieć napisane własne procedury inicjalizacji i funkcje odpowiadające z podstawowe operacje na pikselach matrycy. Biblioteka standardowo obsługuje zestaw bardziej lub mniej popularnych sterowników, a jeżeli wyświetlacz ma inny sterownik to użytkownik musi sobie samodzielnie napisać oprogramowanie tej warstwy. Microchip dostarcza tez dwa własne programowe sterowniki matryc LCD. Jeden wykorzystujący na mikrokontroler PIC24FJ256DA210, a drugi mikrokontrolery rodziny PIC32MX. Piny mikrokontrolerów sterują bezpośrednio wyprowadzenia RGB wyświetlacza, a funkcje biblioteki graficznej są uruchamiane bezpośrednio na mikrokontrolerze sterownika. W tabeli 1 zestawiono typy sterowników obsługiwanych przez standardowe drivery biblioteki.

Tab. 1. Typy driverów LCD obsługiwanych przez bibliotekę graficzną firmy Microchip

Typ kontrolera

Producent

Interfejs

Driver

PIC24FJ256DA210

Microchip

RGB

mchpGfxDrv.c, mchpGfxDrv.h

PIC32MX

Microchip

RGB

mchpGfxLCC.c, mchpGfxLCC.h

LGDP4531

LG

8/16 bit PMP

drvTFT001.c, drvTFT001.h

R61505U/R61580

Renesas

8/16 bit PMP

drvTFT001.c, drvTFT001.h

SPDF5408

Orise Technology

8/16 bit PMP

drvTFT001.c, drvTFT001.h

S1D13517

Epson

8/16 bit PMP

S1D13517.c, S1D13517.h

S1D13522

Epson

8/16 bit PMP SPI

S1D13517.c, S1D13517.h

SSD1926

Solomon Systech

8/16 bit PMP

SSD1339.c, SSD1339.h

SSD1289

Solomon Systech

8/16 bit PMP

SSD1926.c, SSD1926.h

SSD1339

Solomon Systech

8 bit PMP

SSD1339.c, SSD1339.h

SSD1303

Solomon Systech

8 bit PMP

SH1101A_SSD1303.c, SH1101A_SSD1303

SSD1305

Solomon Systech

8 bit PMP

SSD1305.c, SSD1305.h

SSD2119

Solomon Systech

8/16 bit PMP

drvTFT002.c, drvTFT002.h

SH1101A

Sino Wealth

8 bit PMP

SH1101A_SSD1303.c, SH1101A_SSD1303.h

ST7529

Sitronix

8 bit PMP

ST7529.c, ST7529.h

HIT1270

Hitech Electronics

8 bit PMP

HIT1270.c, HIT1270.h

ILI9320

Ilitek

8/16 bit PMP

drvTFT001.c, drvTFT001.h

HX8347

Himax

8/16 bit PMP

HX8347.c, HX8347.h

UC1610

UltraChip

8 bit PMP

UC1610.c, UC1610.h

Na rysunku 3 pokazano strukturę plików wykorzystywanych przez warstwę Device Driver Layer

Rys. 3. struktura plików warstwy Device Driver Layer

Jeżeli w projekcie wykorzystamy sterownik wyświetlacza z listy pokazanej w tabeli 1, to ta warstwa nie zawiera z punktu widzenia programisty niczego interesującego. Przy pisaniu aplikacji trzeba zainicjować sterownik wyświetlacza i wszystko powinno działać pod warunkiem, że sprawny jest sprzęt. Jeżeli mamy wyświetlacz z innym sterownikiem, to trzeba znać dokładnie działanie i programowanie sterownika wyświetlacza i samemu napisać szereg funkcji stanowiących warstwę Device Driver Layer. Najważniejsze z nich to:

  • Reset Device() – funkcja inicjalizuje wyświetlacz. Inicjalizacja polega na zapisaniu rejestrów sterownika z niezbędnymi ustawieniami,
  • GetMaxX() – zwraca maksymalną współrzędną X wyświetlacza,
  • GetMaxY() – zwraca maksymalną współrzędną Y wyświetlacza,
  • SetColor() – ustawienie koloru rysowania,
  • GetColor() – zwraca aktualnie ustawiony kolor rysowania,
  • PutPixel() – ustawia parametry piksela na ekranie,
  • GetPixel() – zwraca kolor piksela,
  • PutImage() – Przetwarzanie grafiki i jej rysowanie na ekranie – działanie tej funkcji jest zależne od użytego formatu koloru,
  • IsDeviceBusy() – sprawdzenie czy można do sterownika wysłać nową komendę,
  • SetPalette() – ustawia rejestry palety kolorów.

Wszystkie funkcje są dokładnie opisane w pliku pomocy. Można też obejrzeć pliki źródłowe funkcji warstwy Device Driver dla wspieranych wyświetlaczy i na ich podstawie napisać własne.

Warstwa Graphics Primitive Layer

W tej warstwie są zawarte funkcje rysowania podstawowych elementów graficznych: linii, prostokątów, okręgów, ustawianie kursora, operacji na bitmapach i definiowania gradientu wypełnienia obszaru kolorem. Bardzo ważnym elementem tej warstwy jest wyświetlanie znaków alfanumerycznych (tekstu). W pliku pomocy są opisane wszystkie funkcje warstwy Graphics Primitive Layer (rysunek 4). Trzeba jednak pamiętać, że te funkcje mogą w pewnych okolicznościach nie dawać pełnej programowej kontroli nad rysowanymi elementami.

Rys. 4. Struktura plików warstwy Primitive Layer

Funkcje rysowania linii

Warstwa Graphics Primitive Layer zawiera funkcje do rysowania 3 rodzajów linii:

  • ciągłej SOLID_LINE,
  • z punktów DOTTED_LINE,
  • z odcinków DASHED_LINE.

Do ustawiania typu linii jest zdefiniowane makro SetLineType(lnType). Podstawowa funkcja rysująca linie to Line(x1, y1, x2, y2), gdzie:

  • x1, y1 – współrzędne początku linii (odcinka),
  • x2, y2 – współrzędne końca odcinka.

Funkcja w trybie Non Blocking zwraca 0, kiedy rysowanie nie jest zakończone i 1 kiedy rysowanie jest zakończone. W trybie Blocking zawsze zwraca 1. Linie mogą być rysowane z dwoma grubościami; 1 piksela (NORMAL_LINE) i 3 pikseli (THICK_LINE), co można ustawić za pomocą makra SetlineThickness(lnThickness).

Na listingu 2 pokazano fragment programu rysującego 3 różne linie w 3 różnych kolorach z ustawionym trybem Blocking.

List. 2. Program rysujący 3 rodzaje linii na ekranie

SetLineType(4);//DASHED LINE
  SetLineThickness(1); //3 piksele 
  SetColor(RGBConvert(96, 252, 0));//ustawienie koloru – Zielony 
  while(!Line( 29, //x1		//rysuj linię
          103, //y1
          130, //x2
          193 //y2
         )
     );

  SetLineType(0); SOLID LINE
  SetLineThickness(1);//3 piksele
  SetColor(RGBConvert(48, 48, 248));//niebieski
  while(!Line( 151, //x1		//rysuj linię 
          31, //y1
          151, //x2
          172 //y2
         )
     );

  SetLineType(1); DOTTED LINE 
  SetLineThickness(1);//3 piksele
  SetColor(RGBConvert(248, 0, 0));//czerwony
  while(!Line( 202, //x1		//rysuj linię 
          70, //y1
          251, //x2
          70 //y2
         )
     );

Wynik działania procedur z listingu 2 jest pokazany na fotografii 5.

Rys. 5. Efekt wykonania funkcji rysowania linii z listingu 2

Absolwent Wydziału Elektroniki Politechniki Wrocławskiej, współpracownik miesięcznika Elektronika Praktyczna, autor książek o mikrokontrolerach Microchip i wyświetlaczach graficznych, wydanych nakładem Wydawnictwa BTC. Zawodowo zajmuje się projektowaniem zaawansowanych systemów mikroprocesorowych.