[PROJEKT] Wielokanałowy termometr i termostat z wyświetlaczem OLED [1]

Obsługa magistrali SPI została zrealizowana programowo – listing 1.

List. 1. Programowa obługa SPI

Dwie kolejne procedury to procedura zapisu danej do pamięci obrazu wyświetlacza OledData (listing 2) i zapisu danej do rejestru sterującego SH1106 OledCmd (listing 3).

List. 2. Zapis danej do pamięci obrazu

List. 3. Zapis danej do rejestru sterującego

Sterownik wyświetlacza graficznego 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.

W tabeli 1 pokazano zestawienie ważniejszych komend sterownika SH1106.

Tab. 1. Najważniejsze komendy sterownika SH1106

Komenda B7 B6 B5 B4 B3 B2 B1 B0 Funkcja
Adres kolumny 4 młodsze bity 0 0 0 0 Młodsza część licznika kolumn Ustawienie 4 młodszych bitów licznika kolumn
Adres kolumny 4 starsze bity 0 0 0 1 Starsza część licznika kolumn Ustawienie 4 starszych bitów licznika kolumn
Napięcie wyjściowe wbudowanej przetwornicy DC/DC 0 0 1 1 0 0 napięcie Ustawienie napięcia wyjściowego wbudowanej przetwornicy DC/DC
Linia początkowa wyświetlacza 0 1 Licznik linii początkowej wyświetlacza Przypisanie pozycji w pamięci obrazu do COM0
Ustawienie kontrastu 1 0 0 0 0 0 0 1 Kod komendy
Poziom kontrastu 0…255 Wartość kontrastu
Remapowanie segmentów 1 0 1 0 0 0 0 ADC

 

ADC=0
Włączenie całego wyświetlacza 1 0 1 0 0 1 0 D

 

D=0 wyświetlacz wyłączony

D=1 wyświetlacz włączony

Wyświetlanie w negatywie 1 0 1 0 0 1 1 D

 

D=0 wyświetlanie normalne

D=1 negatyw

Multiplex ration 1 0 1 0 1 0 0 0 Ilość aktywnych kolumn skanowanych w jednej ramce odświeżania
* * Ilość kolumn 1…64 (domyślnie 64)
Sterownie wewnętrzną przetwornicą DC/DC 1 0 1 0 1 1 0 1 D=0 DC/DC wyłączona

D=1 DC/DC wyłączona

1 0 0 0 1 0 1 D
Włączenie/wyłączenie wyświetlacza 1 0 1 0 1 1 1 D D=0 wyświetlacz wyłączony

D=1 wyświetlacz włączony

Ustawienie licznika stron 1 0 1 1 Licznik stron Ustawienie licznika stron
Kierunek skanowania kolumn 1 1 0 0 D * * * D=0 COM0->COM63

D=1 COM63->COM0

Offset wyświetlania 1 1 0 1 0 0 1 1 Ustawia pierwszą linię przypisaną początkowi pamięci obrazu
* * COMx
Częstotliwość wewnętrznego zegara 1 1 0 1 0 1 0 1 B3..B0 – dzielnik czestotliwości 1…16

B7…B4 regulacja częstotliwości -25%…_50%

Regulacja częstotliwości Dzielnik
Sprzętowa konfiguracja wyprowadzeń 1 1 0 1 1 0 1 0 Ustawia 2 sekwencje sterowania wyświetlaczem
0 0 0 D 0 0 1 0
Ustawienie napięcia VCOM 1 1 0 1 1 0 1 1 Ustawienie napięcia VCOM
VCOM=(B[7:0]Xv ref)

Na podstawie zestawu komend musimy tak zainicjować sterownik, żeby pracował poprawnie z panelem wyświetlacza. Ponieważ część komend wymaga oprócz samej komendy dodatkowego argumentu, to wszystkie bajty komend inicjalizacji łącznie z niezbędnymi argumentami zostały umieszczone 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 4, a procedura inicjalizacji na listingu 5.

List. 4. Bufor Buffer_Init z komendami inicjalizacji

List. 5. Inicjalizacja wyświetlacza

O autorze

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.