Fórum Root.cz
Hlavní témata => Hardware => Téma založeno: mhi 04. 12. 2021, 23:10:26
-
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.
-
Stravil jsem v nedeli asi 2 hodiny temi displayi, abych to rozlousknul. Naportoval jsem to na nejakou arduino desticku, pro kterou jsou tyto modulky primarne delany. Kdyz jsem ten kod a zapojeni dal dohromady, maly 0.96" display normalne zafungoval bez uprav toho meho STM32 kodu. Pouzivam pro jistotu AVR TWI.
Vtipne je, ze na AVRku ten velky display zase ale chodi-nechodi :). Init sequence je stejna pro oba displaye, akorat maji jinak mapovane to LCDcko.
Uz dlouho jsem "nezavital do Arduino sveta". Musim rict, ze to pro mne byla celkem srazka s realitou. Opet. Zapomnel jsem.