[APLIKACJA] STM32 i monochromatyczny wyświetlacz OLED

Mając do dyspozycji procedurę wysyłania bajtów można napisać dwie funkcje służące do wysyłania kodów poleceń i pojedynczych danych do kontrolera wyświetlacza (pokazane odpowiednio na listingach 5 i 6).

List. 5. Funkcja wysyłająca kod polecenia do sterownika wyświetlacza

List. 6. Funkcja wysyłająca do sterownika wyświetlacza pojedynczą daną

Funkcja OledCmd jest przeznaczona tylko do wysyłania komend bez argumentu. Zgodnie z tym co powiedzieliśmy wcześniej, w bajcie kontrolnym przesyłanym po adresie slave bit Co=1 i bit D/C=0. Kiedy przesyłana jest dana przez funkcję OledData, to w bajcie kontrolnym Co=0 i D/C=1.

Każde przesłanie danej z wykorzystaniem funkcji OledData wymaga wysłania adresu slave, bajtu kontrolnego i bajtu danych. W przypadku przesyłania dużej ilości danych – na przykład przy wyświetlaniu całych bitmap – można skorzystać z procedury I2C_Master_BufferWrite, tylko należy pamiętać, że pierwszy bajt bufora wysyłany po adresie slave jest bajtem kontolnym o wartości 0x40.

Sterownik wyświetlacza graficznego przed rozpoczęciem pracy wymaga zainicjowania. Konieczność inicjalizacji wynika na przykład z możliwości ustalania współrzędnej początkowej (0,0) zależnie od mocowania mechanicznego panelu, różnych źródeł zasileń driverów matrycy (wewnętrzna przetwornica vs napięcie podawane zewnętrznie), poziomu kontrastu, częstotliwości odświeżania itp. Inicjalizacja polega na wysłaniu szeregu komend ustalających początkowe parametry pracy (szczegóły są dostępne w dokumentacji sterownika).

Ponieważ część komend wymaga podania argumentu, to nie użyłem do inicjowania funkcji OledCmd, tylko wszystkie bajty komend inicjalizacji łącznie z niezbędnymi argumentami umieściłem w buforze Buffer_Init. Zawartość bufora z pierwszym bajtem kontrolnym 0x80 jest wysyłana do sterownika wyświetlacza funkcją I2C_Master_BufferWrite. Zawartość tego bufora została pokazana na listingu 7.

 

List. 7. Bufor Buffer_Init z komendami inicjalizacji

Inicjalizację można podzielić na kilka etapów:

  • wyzerowanie liczników: kolumn, stron pamięci i linii początkowej,
  • Ustawienie powiązania zawartości pamięci RAM obrazu z pozycją na panelu OLED (orientacja wyświetlania),
  • Ustawienie kontrastu, przetwornicy DC/DC zasilającej drivery, i częstotliwości taktowania, oraz włączenie wyświetlenia.

Żeby prawidłowo zapisywać dane do zainicjalizowanego sterownika trzeba znać powiązanie zawartości pamięci obrazu z wyświetlanymi pikselami na matrycy OLED. Matryca w modOLED13 jest monochromatyczna, a w takim przypadku jednemu pikselowi odpowiada jeden bit w pamięci obrazu. Pomimo, że pamięć ma rozmiar 132×64 bity, to w rzeczywistości ma ona organizacje bajtową. Host wysyła kolejne bajty po magistrali I2C pod lokacje określone przez liczniki kolumn i stron.

 

Rys. 5. Adresowanie pamięci obrazu (pokazano jej fragment odpowiadający trzem pierwszym znakom)

 

Do pobrania

O autorze