LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

[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

//wysłanie komendy
Status OledCmd(uint8_t cmd){
	uint8_t BufCmd[3];
	 
	BufCmd[0]=0x80;//bajt kontrolny
	BufCmd[1]=cmd;
	return(I2C_Master_BufferWrite(I2C1, BufCmd,2,DMA, 0x78));
}

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

Status OledData(uint8_t data){
	uint8_t BufData[3];
	BufData[0]=0x40;
	BufData[1]=data;
	return(I2C_Master_BufferWrite(I2C1, BufData,2,DMA, 0x78));
}

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

uint8_t Buffer_Init[255]={0x80,	//control byte
0xae,//Display OFF
0x00,//Low Column
0x10,//High Column
0xB0,//Page 
0x40,//Start line
	
0xA1,//remap 
0xDA,//com pins 
0x12,
0xD3, //display offset
0x00,//NO offset
0xc0,//scan direction
0xc8,
0xA6,//normal display
0xA4,//display ON 
	
0x81,//set contrast
0x50,//contrast DATA
	
0xa8,//multiplex ratio 
0x3f,//1/64 duty 
		
0xD5,//Display clock divide
0x80,
	
0xd9,//precharge period
0xF1,
0xDB,//VCOM deselect
0x40,
0x8d,//charge pump 
0x14,

0xAF,//display ON
};

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)

 

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.