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.
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


Sześciu na dziesięciu liderów IT stawia na roboty. Tylko czterech jest na to gotowych
Precyzyjny pomiar dużych prądów
Kiedy obudowa staje się częścią projektu elektroniki? 

![https://www.youtube.com/watch?v=XkeyLmtLfxo O konkursie organizowanym przez firmę TRUMPF Huettinger i polskie uczelnie techniczne opowiada Alicja Peresada i prof. Jacek Rąbkowski oraz kilkoro nagrodzonych dyplomantów: mgr inż. Jakub Dobosz, inż. Maja Zielińska, dr inż. Jakub Kołodziej, dr inż Weronika Hryniewska-Guzik i dr inż. Grzegorz Bartyzel. Zapraszamy do obejrzenia filmu! [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/07/TRUMPF-czolowka.png)



