Причем я использовал разные библиотеки, и все время этот баг.
Код: Выделить всё
status += ssd1306_WriteCommand(hi2c, 0xAE); // Display off
status += ssd1306_WriteCommand(hi2c, 0x20); // Set Memory Addressing Mode
status += ssd1306_WriteCommand(hi2c, 0x10); // 00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
status += ssd1306_WriteCommand(hi2c, 0xB0); // Set Page Start Address for Page Addressing Mode,0-7
status += ssd1306_WriteCommand(hi2c, 0xC0); //Set COM Output Scan Direction //C0 or C8 mirror vertical
status += ssd1306_WriteCommand(hi2c, 0x00); // Set low column address
status += ssd1306_WriteCommand(hi2c, 0x10); // Set high column address
status += ssd1306_WriteCommand(hi2c, 0x40); // Set start line address
status += ssd1306_WriteCommand(hi2c, 0x81); // set contrast control register
status += ssd1306_WriteCommand(hi2c, 0xFF);
status += ssd1306_WriteCommand(hi2c, 0xA0); //--set segment re-map 0 to 127 // A1 or A0 mirror horizontal
status += ssd1306_WriteCommand(hi2c, 0xA6); // Set normal display
status += ssd1306_WriteCommand(hi2c, 0xA8); // Set multiplex ratio(1 to 64)
status += ssd1306_WriteCommand(hi2c, SSD1306_HEIGHT - 1); //0x3F
status += ssd1306_WriteCommand(hi2c, 0xA4); // 0xa4,Output follows RAM content;0xa5,Output ignores RAM content
status += ssd1306_WriteCommand(hi2c, 0xD3); // Set display offset
status += ssd1306_WriteCommand(hi2c, 0x00); // No offset
status += ssd1306_WriteCommand(hi2c, 0xD5); // Set display clock divide ratio/oscillator frequency
status += ssd1306_WriteCommand(hi2c, 0xF0); // Set divide ratio
status += ssd1306_WriteCommand(hi2c, 0xD9); // Set pre-charge period
status += ssd1306_WriteCommand(hi2c, 0x22);
status += ssd1306_WriteCommand(hi2c, 0xDA); // Set com pins hardware configuration
status += ssd1306_WriteCommand(hi2c, SSD1306_COM_LR_REMAP << 5 | SSD1306_COM_ALTERNATIVE_PIN_CONFIG << 4 | 0x02);
status += ssd1306_WriteCommand(hi2c, 0xDB); // Set vcomh
status += ssd1306_WriteCommand(hi2c, 0x20); // 0x20,0.77xVcc
status += ssd1306_WriteCommand(hi2c, 0x8D); // Set DC-DC enable
status += ssd1306_WriteCommand(hi2c, 0x14); //
status += ssd1306_WriteCommand(hi2c, 0xAF); // Turn on SSD1306 panelВ таком случае есть смещение на 2 пикселя по горизонтали влево.
То-есть по Х первые два ряда пикселей как бы за экраном.
Но зато справа по X два ряда дополнительных пикселей, но они мусорные, в них нельзя рисовать.
Мне приходится изголятся, пишу в настройках хеадера что у меня ширина дисплея 130 пикселей.
и рисую квадрат например вот так:
Draw_Rectangle(2, 0, 129, 63, NOFILL, White, SQUARE);
ну то-есть рисую по Х с 2 до 129 , а не с 0 по 127 как хотелось бы правильно.
Ну и текст соответственно тоже приходится размещать с учетом этого смещения.
Что за смещение? Кто сталкивался? В чем может быть косяк?


