V supliku jsem nasel par cinskych OLED LCD modulku. Napsal jsem kratky kod do STM32F103, ktery pres I2C inicializuje ten 1.3" display. Funguje to jak ma, pouzivam tuto inicializaci:
void OLED_Init(void) { // cmd: send START, 8bitSLA, D/C sentinal=0x00, command_value, STOP
ssd1306_command(SSD1306_DISPLAY_OFF); // 0xAE
ssd1306_command(SSD1306_SET_CLOCK_DIV_RATIO); // 0xD5
ssd1306_command(0x80); // 0x80
ssd1306_command(SSD1306_SET_MULTIPLEX_RATIO); // 0xA8
ssd1306_command(0x3F); // 0x3F
ssd1306_command(SSD1306_SET_DISPLAY_OFFSET); // 0xD3
ssd1306_command(0x0); // 0x00
ssd1306_command(SSD1306_SET_START_LINE | 0x00); // 0x40
ssd1306_command(SSD1306_CHARGE_PUMP); // 0x8D
ssd1306_command(0x14); // 0x14
ssd1306_command(SSD1306_MEMORY_ADDR_MODE); // 0x20
ssd1306_command(0x00); // 0x00
ssd1306_command(SSD1306_SET_SEGMENT_REMAP | 0x01);// 0xA1
ssd1306_command(SSD1306_COM_SCAN_DIR_DEC); // 0xC8
ssd1306_command(SSD1306_SET_COM_PINS); // 0xDA
ssd1306_command(0x12); // 0x12
ssd1306_command(SSD1306_SET_CONTRAST_CONTROL); // 0x81
ssd1306_command(0xCF); // 0xCF
ssd1306_command(SSD1306_SET_PRECHARGE_PERIOD); // 0xD9
ssd1306_command(0xF1); // 0xF1
ssd1306_command(SSD1306_SET_VCOM_DESELECT); // 0xDB
ssd1306_command(0x40); // 0x40
ssd1306_command(SSD1306_DISPLAY_ALL_ON_RESUME);// 0xA4
ssd1306_command(SSD1306_NORMAL_DISPLAY); // 0xA6
ssd1306_command(SSD1306_DISPLAY_ON); // 0xAF
//OLED_clear();
}//~~~~~~~~~~~~~~~~~~~~~~ LOW-level OLED_I2C ~~~~~~~~~~~~~~~~~~~~~
Na displayi se objevi random data, kdyz tam zapisuju pres jinou fci data, tak se to chova korektne.
Problem nastava v 0.96" OLED modulku, je to presne tento, i kdyz kupovany kdysi davno od cinana:
https://www.laskarduino.cz/oled-displej-bily-128x64-0-96--i2c/protoze at zkousim co zkousim, nedari se mi ho inicializovat, display je neustale cerny.
Vim, ze je asi blbost se takhle ptat, cinan lepi ty moduly jak se mu zachce, kdyz jsem delal neco s barevnymi LCD displayi, vlastne kazdy modul ktery z eBaye prisel byl tak trochu unikat
. No ale treba jste nekdo na neco takoveho narazil a vyresil.
Napajim to 5V, na modulu je stabilizator na 3.3V, I/O mam 3.3V CMOS, softwarove resene I2C.
Muzu mit teda i chybu v tom I2C, pripadne nekde v timingu (ten jsem zkousel menit na opravdu pomaly). Nekde jsem taky cetl, ze ty 0.96" pouzivaji nejaky controller, ktery nema uplne korektni I2C.