OLED SSD1306

Заказал как-то раз — дисплей OLED из Китая...
В итогде всем остался доволен.
Решил написать пару строк и поделится результатом.

Начну с того, что подобных дисплеев на Aliexpress довольно много.
Отличаются друг о друга — выведенным наружу интерфейсом и небольшой разницей в цене.
Контроллер практически у всех один SSD1306, и сам по себе он поддерживает три вида интерфейса:
— 8-bit 6800/8080-series parallel interface
— 3 /4 wire Serial Peripheral Interface
— I2C Interface
На том что достался мне был только I2C, т.е. на шлейфе остальные интерфейсы конечно же есть, но шлейф хоть и с относительно крупным шагом — найти под него разъем задача не из простых.
Сам контроллер поддерживает питание от 1,65v до 3,3v, но как все разведено на плате переходнике известно одному производителю (в описании пишут 3-5 вольт, есть предположение о том, что SOT-23 с надписью «662k» есть LDO стабилизатор на 3,3).



Четко сфотографировать OLED весьма не просто, авто-фокус от свечения сходит с ума.

Библиотека
Она была в спешке собрана из трех готовых.
Получился обычный набор:

    - LCD_init(void);
    - LCD_Commmand(uint8_t ControByte, uint8_t DataByte);
    - LCD_Goto(uint8_t x, uint8_t y);
    - LCD_Print(char c);
    - LCD_Printf(char* buf);
    - LCD_Clear(void);
    - LCD_draw8x8(uint8_t * buffer, uint8_t x, uint8_t y);
    - LCD_WakeUp(void);    


Шрифт простой и некрасивый, в прочем никто не мешает через тот же "The Dot Factory" использовать свой
uint8_t LCD_Buffer[][ALL_FONTS] = { 
	{0x00, 0x00, 0x00, 0x00, 0x00},// (space)
	{0x00, 0x00, 0x5F, 0x00, 0x00},// !
	{0x00, 0x07, 0x00, 0x07, 0x00},// "
	{0x14, 0x7F, 0x14, 0x7F, 0x14},// #
	/// ......
};

На всякий случай записал сессию логическим анализатором (файл во вложении).


Из диаграммы все должно быть понятно (взята из даташита на SSD1306).
Сперва отсылается байт адреса, затем байт определяющий тип (команда или данные), далее следует — сам байт данных.
I2C используется аппаратный.
Адрес имеющегося I2C дисплея задается перемычкой на стороне Bottom (был выставлен производителем как 0x78 по умолчанию)
Последовательность чтения-записи следующая:
void LCD_Commmand(uint8_t ControByte, uint8_t DataByte)
{
    /*!< генерирем START на шине */
    I2C_GenerateSTART(SSD1306_I2C, ENABLE);
    /* пока мастер все отработает */
    while(!I2C_CheckEvent(SSD1306_I2C, I2C_EVENT_MASTER_MODE_SELECT)){};
    /* отправляем address */
    I2C_Send7bitAddress(SSD1306_I2C, SSD1306_I2C_ADDRESS, I2C_Direction_Transmitter);	
    /* пока ответит*/
    while(!I2C_CheckEvent(SSD1306_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)){};
    /* байт команды*/
    I2C_SendData(SSD1306_I2C, ControByte);
    /* готовность */
    while(!I2C_CheckEvent(SSD1306_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTED)){};
    I2C_SendData(SSD1306_I2C, DataByte);
    /* готовность */
    while(!I2C_CheckEvent(SSD1306_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTED)){};
    /* обязательно нужно сгенерировать STOP в конце операции */
    I2C_GenerateSTOP(SSD1306_I2C, ENABLE);
}
  • +9
  • 30 октября 2014, 14:46
  • khomin
  • 2
Файлы в топике: ssd1306_log.zip, ssd1306.zip

Комментарии (23)

RSS свернуть / развернуть
гыыы — то как их называют «OLED LCD LED» причем в одну строку )
0
Это для поиска трюки
+2
Насчёт разъёмов — мне один хороший человек рекомендовал посмотреть здесь.
+3
  • avatar
  • Selin
  • 30 октября 2014, 15:11
о спасиб хороший человек)
0
662k — действительно стабилизатор на 3,3 вольта, поэтому напряжение питания модуля 3,5...5 вольт

+1
Логично было бы закинуть в «детальку».
но шлейф хоть и с относительно крупным шагом — найти под него разъем задача не из простых
Насколько я вижу, китайцы его тупо припаяли. Можно отпаять и припаять к своей плате — все равно паяный шлейф в разьем может и не влезть. Или можно при помощи скальпеля и эмалированного провода переделать плату под требуемый интерфейс.
есть предположение о том, что SOT-23 с надписью «662k» есть LDO стабилизатор на 3,3)
Про него даже писали недавно в «детальке».
0
  • avatar
  • Vga
  • 30 октября 2014, 16:30
Брал такие дисплеи тутYour text to link... и где то еще, ссылка не сохранилась. Во втором случае дисплеи имели 27pin на шлейфе. Разница оказалась только в отсутствии внутри дисплея
преобразователя для подсветки и пришлось изгаляться делать 12в из 3.3
0
Подсветка? В OLED?..
Вроде как там пиксели сами по себе светятся. Или им для этого и нужны эти самые 12В?
0
им для этого и нужны эти самые 12В
+1
Вообще-то этот шлейф принципиально под пайку, у него специальные дырки на контактах «разъема» — аккурат посередине пада, для протекания припоя под шлейф при пропайке сверху, конец шлейфа не прямой, а с впадинами, опять же для лучшего припаивания.

Шлейф явно не предназначен для установки его в разъем. Я его припаивал не раз — на шлейфе выше есть два отверстия для правильного позиционирования его на плате, соответственно на плате можно предусмотреть или отверстия или колышки для этого, а паяется шлейф хорошо. Точно также припаиваются и TFT дисплеи с подобными разъмами, например PH12860.
+4
Паял как? Феном?
0
Такой шлейфик паяльником паяется, феном его как раз неудобно паять.
0
Прошу прощения за оффтоп, а как по-буржуйски правильно называется паябельный аналог FFC кабеля? Нужно несколько штук заказать, а как поисковик об этом спросить — не знаю…
0
То — чем было под рукой — обычным паялом с коническим жалом. Советую при разводке, если позволяет монтаж, закладывать в плате отверстия под дырки в шлейфе (см выше на фото — на наклонных «плечиках»). Потом перед началом монтажа взять тонкий одножильный провод в изоляции и «привязать» шлейф к плате, пропустив один из концов провода снизу платы вверх сквозь одно из отверстий в плате — потом в соответствующее отверстие в шлейфе — потом во второе отверстие в шлейфе — и через второе отверстие в плате вниз, а внизу связать/скрутить концы вот так:

пайку на той стороне показать не могу — там дисплей приклеен на двусторонний скотч ))

Эта «веревочка» позволит точно спозиционировать шлейф перед пайкой, а потом как-то защитит от случайного отрыва во время отладки платы.
0
Обычным ЭПСНом даже паяются, главное — не перегреть. Все что мне попадались были прекрасно облужены, а отверстия только способствуют затеканию припоя под шлейф и лучшей пропайке.
0
На ибее купил немного другой.
На пины выведены все интерфейсы, но отсутствует стабилизатор.
0
Дисплеи классные. Не знаю, как они в плане долговечности работы. Но по первым впечатлениям очень понравились. Обновляются через SPI быстро, вполне можно анимацию выводить, тем более инерционности нету. Выглядит красиво. Жаль только мелкие очень.

И для информации. Если кому удобнее, они есть на DX.com, как с платой, так и отдельно. Я взял один на плате, для макетирования, и 3 штуки голых, на припаивание.
0
  • avatar
  • ACE
  • 31 октября 2014, 22:18
Я о подобных дисплейчиках писал. Те, что в топике, отличаются только размером.
0
  • avatar
  • evsi
  • 03 ноября 2014, 08:44
Сколько он потребляет?
0
Вот даташит, там все подробности, включая потребление в разных режимах.
0
Спасибо.
0
хорошая штука, поднял его в uGFX+Chibios. Хочу для домашней метеостанции приспособить
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.