Skocz do zawartości

[STM32][SSD1306] OLED 128x32 - brak części linii poziomych


hagop

Pomocna odpowiedź

witam

mam wyświetlacz oled na SSD1306 0.9" 128x32 (http://allegro.pl/wyswietlacz-oled-0-91-i2c-3-5v-ssd1306-biale-i6759120126.html)

inicjalizacja wyświetlacza wygląda tak:

//wyłącz wyświetlacz
dane = 0xAE;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
//częstotliwość oscylatora
dane = 0xD5;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
dane = 0x80;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
//multiplex ratio
dane = 0xA8;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
dane = 63;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
//offset vertical
dane = 0xD3;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
dane = 0x00;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
//set display start line
dane = 0x40;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
//tryb adresowania
dane = 0x20;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
dane = 0x02; //00 horizontal; 01 vertical; 02 pagges
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
//start page adresing
dane = 0xB0;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
//remap portów
dane = 0xA1;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
//skanowanie com
dane = 0xC8;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
//konfiguracja pinów
dane = 0xDA;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
dane = 0x12;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
//kontrast
dane = 0x81;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
dane = 0xFF;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
//pre-charge period
dane = 0xD9;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
dane = 0xF1;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
//set v comm deselect
dane = 0xDB;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
dane = 0x00;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
//podłączenie ram do oledu
dane = 0xA4;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
//wyłączenie inwersji wyswietlania
dane = 0xA6;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
//wyłącz scrolling
dane = 0x2E; //0x2F włącz scrolling
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
//włącz charge pump
dane = 0x8D;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, ,0x00, 1, &dane, 1, 100);
dane = 0x14;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
//włącz wyświetlacz
dane = 0xAF;
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);

Zgodnie z dokumentacją, RAM wyświetlacza jest zbudowany z 8 stron po 128 segmentów (kolumn) więc zapisuje

dane=0xB0; //wybierz stronę 1
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
dane=0x00;//ustaw się w 0 kolumnie 
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
dane=0x10;//ustaw się w 0 kolumnie
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x00, 1, &dane, 1, 100);
dane=0xFF; // włącz wszystkie pixele pierwszej kolumny pierwszej strony
HAL_I2C_Mem_Write(&hi2c1, LCD_ADDR, 0x40, 1, &dane, 1, 100);

Wynikiem powinna być pionowa linia o początku (0,0) długości 8px, a otrzymuję linię o długości 4px. Pixele zapalają się dla wartości 0x02, 0x08, 0x20, 0x80. Próbowałem zmienić mux ratio na 32, ale zmienia mi to rozmiar użytecznym matrycy o połowę.

Czy źle zainicjowałem wyświetlacz czy może ten wyświetlacz tak działa?

----------------------------

Problem rozwiązany. Znalazłem innego datasheet'a niż miałem i postąpiłem zgodnie z przedstawioną tam metodą

to link: https://cdn-shop.adafruit.com/datasheets/UG-2832HSWEG04.pdf

  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.