Заказываю эти дисплейчики (1.3" OLED Module 1.3 inch Display Module White/Blue 128X64SPI/IIC I2C ) уже давно. Так же давно заметил толи баг, толи не правильно инициализирую. Причем я использовал разные библиотеки, и все время этот баг.
Код:
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 как хотелось бы правильно. Ну и текст соответственно тоже приходится размещать с учетом этого смещения. Что за смещение? Кто сталкивался? В чем может быть косяк?
Лень вникать, но вы уверены, что дисплей на SSD1306. Очень много в продаже именно 1.3" дисплеев на SH1106 а у них разводка сделана так, что первые 2 пикселя (и 2 последних, хотя это не имеет значения) не подключены. Поэтому самый левый пиксель имеет адрес не 0, а 2.
гуглите такой запрос: difference between ssd1306 and sh1106
Лень вникать, но вы уверены, что дисплей на SSD1306. Очень много в продаже именно 1.3" дисплеев на SH1106 а у них разводка сделана так, что первые 2 пикселя (и 2 последних, хотя это не имеет значения) не подключены. Поэтому самый левый пиксель имеет адрес не 0, а 2.
Ну конечно не уверен))) Как тут можно быть уверенным. В принципе ответ понятен. Либо SH1106 либо брак.
Цитата:
а я думал это только у меня фигня такая)) оказывается нет...
просто все как и я ленились об этом написать спросить ) думая что только у них такая фигня.
Из англоязычных ресурсов, через переводчик: - SSD1306 имеет расширенный набор команд по сравнению с SH1106 - SH1106 поддерживает только режим адресации страниц - В SSD1306 добавлены специальные режимы горизонтальной и вертикальной адресации - SSD1306 также поддерживает автоматическую прокрутку/scrolling
Если код/библиотека использует режим адресации страниц, то будет работать с любым из контроллеров (с разницей в длине строки - 128 против 132). Если код/библиотека использует режим горизонтальной или вертикальной адресации, он будет работать только на SSD1306
Отрегулируйте длину строки и используйте дисплей. Правда, есть трудность с многосерийное производство (нужен тест на каждом вложенном дисплее).
Что за смещение? Кто сталкивался? В чем может быть косяк?
Отвечая самому себе, дополняя: сейчас еще позаморачивался с этим дисплеем. Оказывается там 127 пикселей в ширину, а не 128 ) Причем там через китайский микроскоп видна маркировка у одного светодиода 125, и далее еще два светодиода. Итого 127. Ну и вручную посчитал внимательно. 127 их. Твердо и четко! Ну там когда фонариком светишь, граница светодиодов светится и видно где они заканчиваются.
Оказывается там 127 пикселей в ширину, а не 128... через китайский микроскоп видна маркировка...
не слушай этих старпёров)) они вечно всем недовольны... ты всё делаешь правильно. зато теперь мы знаем, что оказывается китайцы просто забыли добавить светодиодов...
Что за смещение? Кто сталкивался? В чем может быть косяк?
Отвечая самому себе, дополняя: сейчас еще позаморачивался с этим дисплеем. Оказывается там 127 пикселей в ширину, а не 128 ) Причем там через китайский микроскоп видна маркировка у одного светодиода 125, и далее еще два светодиода. Итого 127. Ну и вручную посчитал внимательно. 127 их. Твердо и четко! Ну там когда фонариком светишь, граница светодиодов светится и видно где они заканчиваются.
Что-то я ложанул. Перекомпилировал и тд и тп, пересчитал 128 пикселей)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения