OLED LCD 1.3" chodí, 0.96" nechodí

mhi

  • ****
  • 406
    • Zobrazit profil
OLED LCD 1.3" chodí, 0.96" nechodí
« kdy: 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:

Kód: [Vybrat]
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.
« Poslední změna: 05. 12. 2021, 09:07:54 od Petr Krčmář »


mhi

  • ****
  • 406
    • Zobrazit profil
Re:OLED LCD 1.3" chodí, 0.96" nechodí
« Odpověď #1 kdy: 06. 12. 2021, 00:49:57 »
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.