LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

Digilent Pmod i STM32 (cz. 2) – PmodHYGRO i PmodOLEDrgb

PmodOLEDrgb

Moduł PmodOLEDrgb zawiera kolorowy wyświetlacz graficzny typu OLED o przekątnej 0,95 cala ze sterownikiem SSD1331. Wyświetlacz ma rozdzielczość 96×64 pikseli i 16-bitową głębię kolorów RGB (5:6:5). Zastosowany sterownik SSD1331 posiada wewnętrzną pamięć o rozmiarze 96x64x16 bitów, a także wsparcie sprzętowe m.in. dla operacji czyszczenia ekranu, rysowania linii i prostokątów. Dzięki takiemu rozwiązaniu rysowanie podstawowych kształtów wymaga zdecydowanie mniejszej ilości danych przesyłanych do wyświetlacza w porównaniu do standardowego podejścia polegającego na rysowaniu piksel po pikselu.

Podłączenie PmodOLEDrgb do KAmeleona

PmodOLEDrgb zawiera 12-pinowe złącze z interfejsem SPI i dodatkowymi pinami kontrolującymi moduł. Odpowiada ono złączu typu 2A z niepołączonym pinem MISO i pinami INT oraz RESET zamienionymi na sygnały kontrolne wyświetlacza. Ze względu na wykorzystanie pinów 9 i 10 na złączu, modułu nie można podłączyć do gniazda Pmod-SPI w zestawie KAmeleon. Dlatego na potrzeby przykładu PmodOLEDrgb został podłączony do złącza oznaczonego jako ARDUINO CONNECTOR. Rozkład pinów na złączu oraz sposób podłączenia do zestawu KAmeleon zostały przedstawione w tabeli 2.

Tabela 2. Podłączenie modułu PmodOLEDrgb do złącza ARDUINO zestawu Kameleon

Sygnał Numer pinu PmodOLEDrgb Numer pinu Kameleon ARDUINO CONNECTOR Pin mikrokontrolera
CS 1 D10 PB12
MOSI 2 D11 PB15
N/C 3
SCK 4 D13 PB10
GND 5 GND
VCC 6 +3,3
D/C 7 D6 PD10
RES 8 D7 PB11
VCCEN 9 D8 PD11
PMODEN 10 D9 PB13
GND 11
VCC 12

Kod do obsługi wyświetlacza – konfiguracja

Do obsługi wyświetlacza została wykorzystana biblioteka udostępniona przez firmę Digilent na stronie modułu: https://reference.digilentinc.com/pmod/pmod/oledrgb/example_code

Znajdująca się na stronie wersja sterownika PmodOLEDrgb dla środowiska MPIDE na potrzeby przykładu zmodyfikowano tak, aby współpracowała z biblioteką STM32Cube_FW_L4 i środowiskiem Atollic TrueSTUDIO. Źródła sterownika, znajdujące się w katalogu Drivers/OLEDrgb, zaimplementowano w języku C++, dlatego też przykładowy projekt skonfigurowano dla tego języka.

Przykład jest dostępny w sekcji „Do pobrania”

W celu uruchomienia wyświetlacza należy utworzyć obiekt klasy Oledrgb, której interfejs znajduje się w pliku Drivers/OLEDrgb/OLEDrgb.h. Za konfigurację mikrokontrolera oraz inicjalizację wyświetlacza jest odpowiedzialna metoda Oledrgb::begin, wywołująca kolejno dwie inne metody: Oledrgb::OledrgbHostInit oraz Oledrgb::OledrgbDevInit. Pierwsza z nich konfiguruje SPI oraz wymienione w tabeli 3 piny mikrokontrolera. Sygnał zegarowy SPI jest ustawiony w trybie 3 (Mode = 3, CPOL = 1, CPHA = 1), dane są 8-bitowe, natomiast sygnał CS jest kontrolowany programowo. Druga z wymienionych metod konfiguruje wyświetlacz zgodnie z sekwencją opisaną w dokumentacji modułu dostępnej na stronie: https://reference.digilentinc.com/reference/pmod/pmodoledrgb/reference-manual

Metody do obsługi wyświetlacza

Po zakończonej konfiguracji dostępnych jest kilka metod umożliwiających pracę z wyświetlaczem. Wymienione są one w tabeli 3. Do oryginalnej biblioteki zostały dodane dwie metody pozwalające na wyświetlanie pojedynczych znaków i całych napisów. Funkcja wyświetlająca znaki, pokazana na listingu 4, generuje lokalną bitmapę zawierającą znak na tle o kolorze zdefiniowanym w argumencie. Jest to optymalizacja zapobiegająca ustawianiu na wyświetlaczu pojedynczych pikseli, co znacząco wpływa na szybkość wyświetlania. Funkcja obsługuje czcionkę o nazwie font zdefiniowaną w pliku Drivers/OLEDrgb/Font.c.

Tabela 3. Lista metod do obsługi wyświetlacza PmodOLEDrgb

Metoda Opis
Oledrgb::DrawRectangle Rysowanie prostokąta (wsparcie sprzętowe).
Oledrgb::DrawLine Rysowania linii (wsparcie sprzętowe).
Oledrgb::DrawPixel Rysowanie piksela.
Oledrgb::DrawBitmap Rysowanie bitmapy.
Oledrgb::DrawString Rysowanie napisu (dodane do oryginalnej biblioteki).
Oledrgb::DrawChar Rysowanie znaku (dodane do oryginalnej biblioteki).

Listing 4. Funkcja wyświetlająca znaki

void Oledrgb::DrawChar(uint8_t col, uint8_t row, char character, uint16_t color, uint16_t bgColor)
{
	uint8_t bitmap[FONT_WIDTH * FONT_HEIGHT * 2] = {0};
	for(int i = 0; i < FONT_WIDTH * FONT_HEIGHT; i++)
	{
		bitmap[2 * i] = (bgColor >> 8) & 0xFF;
		bitmap[2 * i + 1] = bgColor & 0xFF;
	}

	uint8_t charIndex = character - ' ';

	for(int i = 0; i < 6; i++) {
		for(int j = 0; j < FONT_HEIGHT; j++)
			if ((font[charIndex][i] << j) & 0x8000) {
				bitmap[2 * (i + (j * FONT_WIDTH))] = (color >> 8) & 0xFF;
				bitmap[2 * (i + (j * FONT_WIDTH)) + 1] = (color) & 0xFF;
			}
	}

	this->DrawBitmap(col, row, col + FONT_WIDTH - 1, row + FONT_HEIGHT - 1, bitmap);
}

W funkcji main przykładu generowana jest bitmapa zawierająca powtarzające się poziome paski w trzech głównych kolorach: czerwonym, zielonym i niebieskim. Na bitmapie wyświetlany jest także napis „Hello KAMELEON!”. Do generacji kodów kolorów wykorzystywano metodę Oledrgb::BuildRGB, która konwertuje trzy 8-bitowe wartości (RGB) na jedną liczbę 16-bitową. Efekt działania programu przedstawiono na fotografii 7.

Fotografia 7. Efekt uruchomienia przykładowego programu dla PmodOLEDrgb

Moduły PmodHYGRO i PmodOLEDrgb, a także zestaw KAmeleon oraz wiele innych płytek ewaluacyjnych i modułów rozszerzających można znaleźć w ofercie Kamami.pl
Zachęcamy do przeczytania trzeciej części cyklu, w której omówiliśmy moduły PmodACL i PmodMAXSONAR Digilent Pmod i STM32 (cz. 3) – PmodACL i PmodMAXSONAR