LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

Digilent Pmod i STM32 (cz. 4) – PmodOLED, PmodGPS i Pmod8LD

W czwartej odsłonie cyklu poświęconego modułom Pmod zostaną opisane moduły PmodOLED, PmodGPS oraz Pmod8LD. Przykłady dla wymienionych modułów przygotowano dla środowiska Atollic TrueSTUDIO i zestawu uruchomieniowego KAmeleon (www.kameleonboard.org) z wykorzystaniem biblioteki STM32Cube_FW_L4.

Pozostałe artykuły z cyklu dostępne są w zasobach portalu Mikrokontroler.pl

PmodOLED

Moduł PmodOLED zawiera monochromatyczny wyświetlacz graficzny typu OLED o rozdzielczości 128×32 pikseli. Wyświetlacz jest sterowany za pomocą kontrolera SSD1306 z wewnętrzną pamięcią RAM o rozmiarze 1 kB. Dzięki temu może on obsługiwać wyświetlacze o maksymalnym rozmiarze 128×64 pikseli. Pamięć RAM kontrolera podzielono na 8 stron. Dostęp do nich jest możliwy za pośrednictwem interfejsów SPI, I2C, a także interfejsu równoległego z 8-bitową szyną danych.

Fotografia 1. Moduł PmodOLED

Połączenie z KAmeleonem

PmodOLED wyposażono w 12-pinowe złącze Pmod SPI typu 2A zawierające oprócz sygnałów SPI cztery sygnały sterujące pracą wyświetlacza. Ze względu na liczbę sygnałów niezbędnych do obsługi modułu nie może on być podłączony do złącza Pmod-SPI KAmeleona, dlatego na potrzeby przykładu wykorzystano złącze Arduino. Lista wszystkich sygnałów oraz sposób ich podłączenia do zestawu KAmeleon znajduje się w tabeli 1.

Tabela 1. Podłączenie modułu PmodOLED do złącza ARDUINO zestawu KAmeleon

Sygnał Numer pinu PmodOLED Numer pinu KAmeleon ARDUINO CONNECTOR Pin mikrokontrolera
CS 1 D10 PB12
MOSI 2 D11 PB15
MISO 3 D12 PB14
SCLK 4 D13 PB10
GND 5 GND
VCC 6 +3,3
D/C 7 D9 PB13
Reset 8 D8 PD11
VBATC 9 D7 PB11
VDDC 10 D6 PD10
GND 11
VCC 12

Kod projektu

Do obsługi wyświetlacza wykorzystano bibliotekę pobraną z oficjalnej strony modułu PmodOLED i przeznaczoną dla środowiska MPIDE: https://reference.digilentinc.com/pmod/pmod/oled/example_code.

Znajdujący się w niej plik sterownika (Drivers/OLED/OledDriver.cpp) zmodyfikowano tak, aby korzystał z biblioteki do obsługi interfejsu SPI, a także linii GPIO STM32Cube_FW_L4. Bibliotekę napisano w języku C++, dlatego projekt przykładu również skonfigurowano dla tego języka.

Obsługa wyświetlacza rozpoczyna się od utworzenia obiektu klasy OledClass, a następnie wywołania metody OledClass::begin(). Jest ona odpowiedzialna za konfigurację interfejsów SPI i GPIO, inicjalizację wewnętrznych pól sterownika, przeprowadzenie procedury inicjalizacji wyświetlacza, a także wyzerowanie wewnętrznego bufora danych oraz pamięci kontrolera SSD1306. Fragment kodu, realizujący konfigurację SPI przedstawiono na listingu 1. Ustawia on polaryzację i fazę zegara w trybie 3. (CPOL=1, CPHA=1), rozmiar danych na 8 bitów i programową kontrolę sygnału CS (NSS).

Kod programu z plikami projektowymi środowiska Atollic można pobrać w sekcji „Do pobrania”

Listing 1: Konfiguracja inerfejsu SPI dla PmodOLED

pmodOledSpi.Instance = SPI2;
pmodOledSpi.Init.Mode = SPI_MODE_MASTER;
pmodOledSpi.Init.Direction = SPI_DIRECTION_2LINES;
pmodOledSpi.Init.DataSize = SPI_DATASIZE_8BIT;
pmodOledSpi.Init.CLKPolarity = SPI_POLARITY_HIGH;
pmodOledSpi.Init.CLKPhase = SPI_PHASE_2EDGE;
pmodOledSpi.Init.NSS = SPI_NSS_SOFT;
pmodOledSpi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
pmodOledSpi.Init.FirstBit = SPI_FIRSTBIT_MSB;
pmodOledSpi.Init.TIMode = SPI_TIMODE_DISABLE;
pmodOledSpi.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
pmodOledSpi.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
HAL_SPI_Init(&pmodOledSpi);

Pełna procedura inicjalizacji wyświetlacza opisano w dokumentacji modułu dostępnej na stronie: https://reference.digilentinc.com/reference/pmod/pmodoled/reference-manual.

Funkcje rysowania i pisania

Operacje rysowania i pisania są dostępne poprzez API biblioteki OLED, którego najważniejsze metody wymienono w tabeli 2. Ze względu na obecność wewnętrznego bufora obrazu w bibliotece OLED wszystkie operacje wykonują się w pamięci mikrokontrolera. Natomiast wyświetlacz aktualizuje się na żądanie. Jest to optymalizacja mająca na celu ograniczenie liczby transferów SPI i umożliwienie nakładania na siebie wyświetlanych elementów. W przypadku tekstu można włączyć lub wyłączyć opcję buforowania. W drugim przypadku napisy są wysyłane bezpośrednia do pamięci kontrolera wyświetlacza. Na uwagę zasługują także dwa tryby pisania. Pierwszy z nich (metody OledClass::drawChar i OledClass::drawString) umieszcza znaki w dowolnym miejscu wyświetlacza ustawianym metodą OledClass::moveTo. W drugim trybie, obsługiwanym przez metody OledClass::putChar i OledClass::putString, wyświetlacz można podzielić na 4 linie i 16 kolumn. Napis jest do nich wyrównywany. Linia i kolumna wybierana jest za pomocą metody OledClass::setCursor.

Tabela 2. Wybrane metody klasy OledClass

Metoda Opis
OledClass::begin Włączenie zasilania kontrolera i inicjalizacja wyświetlacza
OledClass::end Wyłączenie zasilania kontrolera i wyświetlacza
OledClass::displayOn Włączenie wyświetlania
OledClass::displayOff Wyłączenie wyświetlania bez utraty stanu pamięci obrazu
OledClass::clear Czyszczenie wewnętrznego bufora biblioteki i pamięci kontrolera
OledClass::clearBuffer Czyszczenie wewnętrznego bufora biblioteki
OledClass::updateDisplay Wysłanie bufora obrazu do pamięci kontrolera
OledClass::setDrawColor Ustawienie koloru do rysowania piksela i linii (0 lub 1)
OledClass::setDrawMode Ustawienie trybu nakładania (nadpisanie, AND, OR, XOR)
OledClass::setFillPattern Ustawienie wzorca wypełnienia
OledClass::getStdPattern Pobranie wskaźnika na jeden ze wzorców wypełnienia (0-7)
OledClass::moveTo Ustawienie punktu początkowego do rysowania
OledClass::drawPixel Rysowanie piksela
OledClass::drawLine Rysowanie linii
OledClass::drawRect Rysowanie niewypełnionego prostokąta
OledClass::drawFillRect Rysowanie prostokąta wypełnionego wybranym wzorcem
OledClass::putBmp Rysowanie bitmapy
OledClass::drawChar Rysowanie znaku
OledClass::drawString Rysowanie napisu
OledClass::setCursor Ustawienie kursora do pisania z wyrównaniem do linii i kolumny
OledClass::setCharUpdate Włączenie lub wyłączenie buforowania znaków i napisów
OledClass::putChar Rysowanie znaku z wyrównaniem do linii i kolumny
OledClass::putString Rysowanie napisu z wyrównaniem do linii i kolumny

Przykład obsługi modułu PmodOLED

W opisywanym przykładzie wykonywana jest inicjalizacja, a następnie cały wyświetlacz jest pokrywany wybranym wzorcem. Na środku umieszczane są dwa napisy: „Hello PmodOLED” i „KAmeleon board”. Efekt działania programu przedstawiono na fotografii 2.

Fotografia 2. PmodOLED podłączony do zestawu KAmeleon

Moduły PmodOLED, PmodGPS i Pmod8LD, a także zestaw KAmeleon oraz wiele innych płytek ewaluacyjnych i modułów rozszerzających można znaleźć w ofercie Kamami.pl