Здравствуйте, MySku`вчане! Сегодня расскажу вам о графическом OLED дисплее на контроллере SSD1306. Похожий дисплей уже
обозревался на муське, я постараюсь дополнить обзор, а также покажу, как его подключить к Digispark на базе ATtiny 85. Возможно, эта информация пригодится вам в ваших проектах.
Данный дисплей был куплен в магазине Gearbest за свои деньги.
Скрины заказа
Заказ был сделан 02.12.2015, посылка дошла на удивление быстро, перед самым новым годом я забрал её на почте. Сейчас данный лот стоит на 47 центов дороже.
Упаковка была стандартная для китайских магазинов, желтый пакет с пупырками внутри. Сам дисплей находился в запаянном антистатическом пакете.
Технические характеристики дисплея:
— Тип дисплея: 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В.
На этом все, постараюсь ответить на ваши вопросы, если будут таковые.
Еще раз всех с Новым годом и Рождеством!!
Плюсую.
ebay.com/itm/291186414560
есть как 8, так и 4 битный режим, поддержка i2c & SPI
Вместо Arduino micro использовать ATtiny. Поработать над энергопотреблением и т.д. В общем творчество.
aliexpress.com/item/Free-shipping-Pro-Micro-Module-ATMEGA32U4-3-3V-8MHZ-with-2-row-pin-header-For-Leonardo/32233587710.html
aliexpress.com/item/FREE-SHIPPING-1PCS-ATMega-32U4-BS-PMicro-pro-micro-leonardo-For-Arduino-Compatible-pro-mini-usb/32566149449.html
Дороже, правда.
OLED тут явно проигрывать будет.
Вот бы еще где-то дешевых E-INK дисплейчиков надыбать на 2-3 дюйма!
За обзор плюс.
Раньше стояла прошивка на андройд 2.3 где на верхнем баре всегда черный фон и статические иконки.
Если залить весь экран каким то цветом, то место верхнего бара выделяется и следы иконок :)
Есть версии с SPI (гораздо бОльшая скорость обновления, 5 проводов) и I2C(малая скорость обновления, 2 провода).
Выпускается на двух чипах SSD1306 и SH1106 (нет горизонтальной адресации).
Цена на али (вчера как раз листал) от 500-750 рэ (примерно).
Очень неплохие дисплейчики. Я брал всегда белые — не двухцветные. Есть цветов Ж+Б, Ж+Г, Б, Г. Трудятся очень давно, ничего не выгорает.
Чтобы памяти не жрало, рекомендую библиотеку от Adafruit и переточить ее под себя.
Недостаток только один — sync сигнал не разведен — поймать и синхронизироваться с кадром невозможно. Быстрая анимация будет мерцать из-за этого. Для медленной — все равно.
aliexpress.com/item/Free-shipping-Yellow-blue-double-color-128X64-OLED-LCD-LED-Display-Module-For-Arduino-0-96/32233367757.html
цеплял на Нано 3.0 на 3,3v
P.S. Лучше использовать слово «дисплей» все-таки, иначе можно подумать, что речь об экранировании от чего-либо.