Графический OLED дисплей


Здравствуйте, MySku`вчане! Сегодня расскажу вам о графическом OLED дисплее на контроллере SSD1306. Похожий дисплей уже обозревался на муське, я постараюсь дополнить обзор, а также покажу, как его подключить к Digispark на базе ATtiny 85. Возможно, эта информация пригодится вам в ваших проектах.

Данный дисплей был куплен в магазине Gearbest за свои деньги.
Скрины заказа


Заказ был сделан 02.12.2015, посылка дошла на удивление быстро, перед самым новым годом я забрал её на почте. Сейчас данный лот стоит на 47 центов дороже.

Упаковка была стандартная для китайских магазинов, желтый пакет с пупырками внутри. Сам дисплей находился в запаянном антистатическом пакете.
Упаковка и внешний вид


На сам дисплей наклеена защитная пленка от царапин.

Тут видно, что отсутствует резистор с нулевым сопротивлением в качестве перемычки BS1. Когда перепаивал её в другое положение, спружинил пинцет, и потерялась такая красивая перемычка, запаял обычную проволочную.




Технические характеристики дисплея:
— Тип дисплея: OLED монохромный, в данном дисплее 2 цвета, желтый и голубой
— Драйвер дисплея: SSD1306
— Разрешение: 128 х 64 пикселей
— Размер дисплея: 0,96 дюйма
— Углы обзора: >160°
— Интерфейс подключения: 3-wire SPI, 4-wire SPI, I2C
— Напряжение питания: 3,3 В
— Потребляемый ток на пиксел: 100 мкА
— Размеры: 33 мм х 33.5 мм
Картинка с габаритами


Электрическая схема


Даташит на драйвер SSD1306.

Подключать данный дисплей будем к Digispark.


Что это такое и как его настроить на работу в Arduino IDE, можно прочитать в этом обзоре. От себя лишь сделаю ремарку. Настоятельно рекомендую использовать версию Arduino IDE 1.6.5. Сейчас на официальном сайте доступна версия 1.6.7, но с ней у меня постоянно сыпались ошибки. Теперь все собираем на одной макетке.

Подключается Digispark к дисплею следующим образом:
— Т.к. подключать будем по шине I2C, необходимо перепаять перемычку BS1 в положение «1».
— Vcc это питание дисплея, подаем 3,3В
— GND тут понятно, это земля
— DIN (SDA) подключаем к контакту P0 на Digispark (и подтягиваем к +5В резистором 4,7 К)
— CLK (SCL) подключаем к контакту P2 на Digispark (и подтягиваем к +5В резистором 4,7 К)
— CS подключаем к земле
— D/C тут нюанс, если на этот вывод подать «низкий» уровень, т.е. землю, то адрес дисплея будет 0x3C, если подать «высокий» уровень, т.е. подключить к 3,3В, то адрес дисплея будет 0x3D. Я подключил к земле.
— RES подтягиваем к питанию т.е. 3,3В

Теперь загружаем стандартный скетч DigisparkOLED из папки примеров. Тут замечание, при необходимости нужно изменить адрес дисплея в файле DigisparkOLED.h на ваш. Вносите изменения в строку:

#define SSD1306		0x3C // Slave address. 

По умолчанию там указан 0x3D.
При попытке загрузить данный пример в ATtiny 85 вываливалась ошибка о нехватке памяти мк. Закомментируйте или удалите «картинки» в скетче, т.е. строчки:

#include "img0_128x64c1.h"
#include "digistump_128x64c1.h"

и подправьте скетч, у меня получилось так:

В итоге на дисплее увидим


Как видно, вывод 2 строчек текста на экран занимает 4062 байт, что составляет 67% памяти мк. Библиотека довольно прожорливая, если даже пожертвовать загрузчиком, памяти мк останется процентов 50, маловато однако.
Решено было найти или написать библиотеку «полегче». На просторах интернета была найдена библиотека TinySSD1306. Скачивал с этого сайта. Распакуйте библиотеку в папку libraries ( если вы ставили Arduino IDE по умолчанию, то данная папка будет находится по такому пути: «C:\Users\имя_пользователя\AppData\Roaming\Arduino15\packages\digistump\hardware\avr\1.6.5\libraries» ). После перезапуска Arduino IDE, в папке примеров загружаете скетч ssd1306_demo.
Немного подправил данный скетч, чтобы просто вывести одну строку.

Как видно, вывод одной строки у нас занял 2 138 байт, что занимает 35% памяти мк. Это совсем другое дело :) Если убрать загрузчик и использовать «голый» мк, то остается уйма места.
Также я провел некоторые электрические тесты.
Потребляемый дисплеем ток составил 5,6 мА.

Совместно с Digispark потребляемый ток составил 28,2 мА.

Решил понизить частоту ATtiny до 1 Мгц. Потребляемый ток конструкции составил 16,5 мА.

Думаю, что уменьшить ток потребления можно еще раза в 2, если использовать «голый» мк, т.к. на плате Digispark есть еще и светодиод, потребляющий ток. А также можно понизить напряжение для ATtiny до 1,8В.
В итоге:
Дисплеем остался доволен. Высокие углы обзора, высокая контрастность, низкое энергопотребление. Для увеличения быстродействия есть возможность подключить по шине SPI.
Из минусов могу отметить отсутствие стабилизатора 3,3В на плате дисплея, хотя места там полно. В интернете читал, что данные дисплеи толерантны и к 5 Вольтам, но экспериментировать не стал, т.к. в даташит к контроллеру указано, что питание «логики» от 1,65 до 3,3В.
На этом все, постараюсь ответить на ваши вопросы, если будут таковые.
Еще раз всех с Новым годом и Рождеством!!


Планирую купить +46 Добавить в избранное +51 +99
+
avatar
  • ksiman
  • 07 января 2016, 09:58
+5
Самое главное — для чего всё это использовано или будет использовано?
+
avatar
  • R11
  • 07 января 2016, 10:05
+1
Тоже хотел спросить для проекта ли какого дисплейчик))

Плюсую.
+
avatar
  • A-Gugu
  • 07 января 2016, 10:40
+2
Я купил такой же, но с эмуляцией HD44780
+
avatar
+1
У меня один такой экранчик уже пол года трудится в самодельной паяльной станции.
+
avatar
+1
А где покупали? И что за модель?
+
avatar
+2
Модель дисплея (с эмуляцией HD44780) не подскажите?
+
avatar
  • A-Gugu
  • 07 января 2016, 14:52
0
вот:

ebay.com/itm/291186414560

есть как 8, так и 4 битный режим, поддержка i2c & SPI
+
avatar
+2
Круто стоит…
+
avatar
+1
Спасибо. Я думал что, размер дисплея будет как у обозреваемого… но нет.
+
avatar
  • A-Gugu
  • 07 января 2016, 22:56
+1
Бывают и по мельче, просто там буквы слишком мелкие получаются.
+
avatar
+1
Планировал собрать вот такие часы 3dtoday.ru/blogs/masterkit/wrist-watch-based-on-arduino-created-on-a-3d-printer-in-one-night/
Вместо Arduino micro использовать ATtiny. Поработать над энергопотреблением и т.д. В общем творчество.
+
avatar
+1
Спасибо за обзор. Сейчас едет и экран и диджиспарк ко мне, буду экспериментировать. Экран правда с ардуино нано хочу использовать. Только на али вроде дешевле.
+
avatar
  • Samman
  • 07 января 2016, 20:51
+2
Зачем мучаться с тинькой, в формате дигиспарка есть Леонардо:
aliexpress.com/item/FREE-SHIPPING-1PCS-ATMega-32U4-BS-PMicro-pro-micro-leonardo-For-Arduino-Compatible-pro-mini-usb/32566149449.html
Дороже, правда.
+
avatar
  • A-Gugu
  • 07 января 2016, 10:33
+3
Споилеры в топку!
+
avatar
  • tirarex
  • 07 января 2016, 10:35
+1
альт+клик по спойлеру (любому) — откроет их всех.
+
avatar
  • Sosedus
  • 07 января 2016, 11:44
+1
а с телефннами как быть?
+
avatar
  • jenya
  • 07 января 2016, 11:52
+1
Hackers keyboard или клавиатуру подключить? :)))
+
avatar
  • sav13
  • 07 января 2016, 11:52
+1
Если так уж нужно очень низкое потребление, то может лучше на TFT дисплеях остановиться?
OLED тут явно проигрывать будет.
Вот бы еще где-то дешевых E-INK дисплейчиков надыбать на 2-3 дюйма!
+
avatar
  • CTAHOK
  • 07 января 2016, 11:59
+3
А какже LCD5110 ?:)
+
avatar
+1
Угу, e-ink'ов дешевых не видел. Только они плохи в темноте, надо с подсветкой.
+
avatar
  • sav13
  • 07 января 2016, 12:42
+2
Ну никто не мешает внешнюю подсветку для темноты. Зато они в обычном состоянии показывают и не потребляют энергии. Совсем
+
avatar
+1
Так то, да, но у инков есть и другие «подводные камни». Тут надо смотреть, что за устройство будет и целесообразность его применения.
+
avatar
+1
del
+
avatar
  • alex323
  • 07 января 2016, 11:55
+1
Цена негуманная за такой крохотный дисплейчик, но если очень хочется именно OLED, то почему бы и нет.
За обзор плюс.
+
avatar
  • CTAHOK
  • 07 января 2016, 12:00
+3
Ещё в минусы OLED-дисплея можно отнести постепенное выгорание пикселей от статичного изображения/текста, чтобы уменьшить этот риск, нужно либо сделать постоянную смену информации на дисплее вроде заставки на плазме, когда строчка с текстом раз в минуту меняет свою позицию на экране, либо не включать его надолго.
+
avatar
+1
Эта проблема давно уже в прошлом. У меня смарт на OLED экране. За 2 года ничего не выгорело.
+
avatar
+2
У вас телефон показывает одну и ту же цифру в одном и том же месте 24 часа в сутки 7 дней в неделю?
+
avatar
  • maksimu
  • 08 января 2016, 03:40
+1
Еще как выгорают, у меня спустя пол года практически статичных значений на экране, когда эти значения изменились, я офигел просто, надпись практически не читается. Там где раньше пиксели горели они стали очень тусклыми, а там где не горели — щас горят очень ярко. В итоге прочесть практически невозможно(
+
avatar
+1
На телефоне или на таком экране?
+
avatar
  • maksimu
  • 09 января 2016, 02:58
+1
На таком же экранчике.
+
avatar
0
Давно, это сколько? Вот у меня один из телефонов Samsung линейки galaxy на андройде. Так вот очень хорошо видно как выгорел экран на верхнем баре.
Раньше стояла прошивка на андройд 2.3 где на верхнем баре всегда черный фон и статические иконки.
Если залить весь экран каким то цветом, то место верхнего бара выделяется и следы иконок :)
+
avatar
  • xopek
  • 07 января 2016, 12:01
+1
как-то плохо для одной строки 2кб памяти
+
avatar
  • ewavr
  • 07 января 2016, 12:33
+2
Надеюсь, что две строки будут занимать не 4, а 2.01 кбайта.
+
avatar
+1
Тут скорей не строка занимает 2 кб памяти, а подгружаемая библиотека. Выводимый текст на много меньше. Так то ewavr прав.
+
avatar
  • xopek
  • 07 января 2016, 15:23
+1
про это я и говорил. жирно сильно. такой экранчик к какой-нибудь тиньке13 прикручивать надо, но увы…
+
avatar
+1
Надо библиотеку ковырять, выпилить от туда лишнее, может и получится.
+
avatar
+3
Есть такие-же чуть побольше — 1.3" насколько помню.

Есть версии с SPI (гораздо бОльшая скорость обновления, 5 проводов) и I2C(малая скорость обновления, 2 провода).
Выпускается на двух чипах SSD1306 и SH1106 (нет горизонтальной адресации).
Цена на али (вчера как раз листал) от 500-750 рэ (примерно).

Очень неплохие дисплейчики. Я брал всегда белые — не двухцветные. Есть цветов Ж+Б, Ж+Г, Б, Г. Трудятся очень давно, ничего не выгорает.

Чтобы памяти не жрало, рекомендую библиотеку от Adafruit и переточить ее под себя.

Недостаток только один — sync сигнал не разведен — поймать и синхронизироваться с кадром невозможно. Быстрая анимация будет мерцать из-за этого. Для медленной — все равно.
+
avatar
  • Nickolik
  • 30 августа 2016, 16:51
0
Подскажите при подключении через SPI экран мерцает так же как и чрез I2C?
+
avatar
+1
по цене — для такой крутой цацки — низкая. Тока не нашел нигде в даташитах, а проверить стремаюсь — как у него с толерантностью на 5в?
+
avatar
  • Samman
  • 07 января 2016, 17:51
+2
+
avatar
+1
Клевый экран — нужно будет для zx spectrum собрать на таком для записи игр
+
avatar
  • lumaxy
  • 08 января 2016, 07:04
+1
Так, для саморазвития -для чего при подключении экрана нужны подтягивающие резисторы? Все обычно подключают без них.
+
avatar
+1
Подтягивающие резисторы нужны, как правило хорошего тона, воизбежание помех и наводок.
+
avatar
+1
ЕМНИП у атмег с хардварным I2C резисторы уже «встроены»
+
avatar
  • Denvi
  • 08 января 2016, 15:31
+1
Скорее всего речь про внутренние подтягивающие резисторы, которые висят чуть ли не на всех портах. Они есть и на «тиньках», но их сопротивление составляет около 50 кОм. Фронты у сигналов будут затянутыми. В принципе, на мелких скоростях может «прокатить» и без внешних резисторов.
+
avatar
  • xopek
  • 08 января 2016, 09:59
+1
чтобы низкий уровень был низким, а высокий высоким. а без них — поймал наводку и низкий стал почтивыскоминонесовсемноиненизким.
+
avatar
  • Denvi
  • 08 января 2016, 10:06
+1
I2C устройства имеют сигнальные линии с «открытым коллектором», без подтягивающих резисторов о логических уровнях можно забыть.

P.S. Лучше использовать слово «дисплей» все-таки, иначе можно подумать, что речь об экранировании от чего-либо.
+
avatar
  • Denvi
  • 08 января 2016, 10:37
+1
Насколько я понимаю, контроллер SSD1306 имеет логику на 3.3 В, почему в схеме автора линии DIN и CLK подтянуты к 5 В? Максимально допустимое значение входного напряжения составляет 3.6 В (при питании от 3.3 В).
+
avatar
0
Вчера собирал метеостанцию на esp8266. По своей невнимательности запитал dht22 и данный oled дисплей от 9 вольт (в обход стабилизатора). Как ни странно, но за 5 минут работы ничего не сгорело. Все работало стабильно. Как только заметил, сразу выключил. Но факт остался фактом: 5 минут отработало от 9 вольт. Может и дольше бы проработало, но я не рискнул.
+
avatar
  • cleric4
  • 08 августа 2018, 05:23
0
Дисплей очень яркий, за такие деньги просто отличный, я его к плате RW30 подключаю, только RW30 на STM32, а по размеру как дисплей, плата специально для смартчасов.