Pull to refresh

Обзор контроллера SSD1306 для OLED экранов

Level of difficultyEasy
Reading time5 min
Views15K

В этом тексте я представил обзор контроллера графических монохромных экранов SSD1306 в исполнении экранного модуля с диагональю 0,96 дюймов (24,38 мм). Я напишу с какой стороны следует подходить к этому ASIC.

Аппаратная часть

Вариантов конструктива для модулей SSD1306 я видел как минимум 4 варианта. Вот так выглядит экранчик с ssd1306 снаружи. Обычно это маленькие платочки расширения.

видно 30 пинов на шлейфе. Диагональ 0,96 дюймов или 24,38мм
видно 30 пинов на шлейфе. Диагональ 0,96 дюймов или 24,38мм

Габариты PCB модуля

Есть еще такой вариант исполнения 27x27.5мм

Есть еще квадратные SSD1306 модули в чёрном исполнении 26x26. У них габариты и монтажные отверстия другие.

Это блок-схема контроллера SSD1306 экранчика. Видно, что у него внутри есть свое тактирование, RAM память 1kByte, Декодер команд, контроллер дисплея, четыре интерфейса на выбор (SPI/I2C/6800/8080) и драйвер светодиодной матрицы 64x128 пикселей.

Распиновка самого чипа SSD1306 тут.
https://docs.google.com/spreadsheets/d/1LhDzoYykJnV6U96ambYs4EOCVWZcaruhf0pKGoBLOnc/edit#gid=0
У чипа SSD1306 очень много пинов: 281 штук.

Интерфейс связи с Host MCU выбирается пинами BS[2...0]. I2C адрес можно варьировать между двумя адресами, если подать нужное напряжение на пин SA0 (D/C#). Поэтому на одной I2C шине может быть только 2 экрана SSD1306.

Размер пикселя можно вычислить прибегнув к теореме Пифагора, решив уравнение (1)

Получается x=0.17 мм. И в каждом пикселе реализована вот такая электрическая цепь. В сущности, светодиод. Светодиодная матрица это 8192 LED(ов).

Терминология

Чтобы работать с этим контроллером надо освоить эти определения

Ниббл  (nibble) - 4х битое число

Страница- кусок SRAM памяти экрана размером 128 байт или 127 сегментов.

Сегмент - вертикальная полоска 8 пикселей. В каждой странице 128 сегментов. Всего в памяти дисплея 1024 сегментов

Колонка (Column)- вертикальный массив пикселей. Всего 128 колонок. Счет от нуля до 127. В каждой колонке 8 сегментов.

Программная часть

Чип может работать по 5ти интерфейсам. Выбор интерфейса выбирается тремя пинами с префиксом BS.

В случае с I2C. На шине I2C ASIC ssd1306 отображается c I2C адресом 0x3C

Сканирование на STM32
Сканирование на STM32

То же сканирование только на NRF5340. Появился какой-то непонятный 0xBC.

Сканирование на NRF5340
Сканирование на NRF5340

Вот I2C адреса ssd1306

В этот модуль можно посылать либо команды либо данные. Биты передаются старшим битом вперед. Минимальная команда состоит из 3 байт в шине I2C. Вот бинарная структура пакета.

Можно заметить, что в протоколе экранчика в control byte всегда впустую посылается 6 бит.

Можно также посылать несколько команд в одном I2C пакете.

Можно проинициализировать весь экран одним I2C пакетом.

Вся память 1024 байт поделена на 8 страниц. Каждая страница получается 128 байт. Это как раз равно разрешению по ширине. Каждая страница захватывает полоску шириной 8 пикселей по высоте.

Какие есть конфиги внутри SSD1306?

У чипа SSD1306 аж 25 параметров, которые надо конфигурировать по I2C. Поэтому для чипа нужен отдельный драйвер. Это выбор интерфейса, выбор режима отрисовки пикселей, контрастности, прокрутки, настройки тактирования.

https://docs.google.com/spreadsheets/d/1LhDzoYykJnV6U96ambYs4EOCVWZcaruhf0pKGoBLOnc/edit#gid=496971865

Разрешение экрана 64x128 пикселей. Начало координат обычно делают в верхнем правом углу. X - вправо Y - вниз

Для отладки сложной графики типа меню или экранная клавиатура вам точно понадобится PC утилита имитатор экранчика для отрисовки графики на конве 64x128. Это поможет сократить количество итераций пере прошивки микроконтроллера. Причем эту утилиту надо писать на том же языке, что и прошивку микроконтроллера чтобы бесшовно переносить софт на разные платформы.

Вся система команд это 26 команд

Экран не работает сразу как только на него подать напряжение. Чтобы включить экран надо выполнить последовательность из 12ти команд.

Сам по себе экран бесполезный, если нет программного компонента шрифтов. Каждая буква закодирована массивом. Вот например кодировка цифры девять.

   {0x1C, 0x00, 0x22, 0xC0, 0x22, 0x40, 0x22, 0x40, 0x1F, 0x80, 0x00, 0x00}, /*"9", 25*/

Каждый бит соответствует пикселю. В кодировке по 2 байта на каждую вертикальную линию шрифта.

пример кодировки шрифта 6x12 для цифры 9
пример кодировки шрифта 6x12 для цифры 9

Стоит замерить, что в кодировках каждого символа по 4 избыточных бита.

или

Как покрыть тестами драйвер графического дисплея?

Отобразить на дисплее QR код или DataMatrix Code и прочитать его модулем считывания qr кодов c UART интерфейсом, типа этого. https://aliexpress.ru/item/1005004518238188.html?spm=a2g2w.orderdetail.0.0.73094aa6DXpXiK&sku_id=12000029447005809

Если установленный код на графическом дисплее совпал с прочитанным из UART модуля GM67, значит драйвер графического дисплея работает корректно.

Достоинства контроллера SSD1306

++1 Легко подключать. Всего 2 провода в I2C режиме.

++2 Можно отображать графику: круги, линии, прямоугольники.

++3 угол обзора пикселей - 160+ градусов

++4 Светятся сами пиксели а не подсветка экрана. Подсветки экрана тут вообще нет.

Недостатки SSD1306

--1 Отсутствует пин Reset. Когда I2C шина зависает, то единственный способ восстановить link с экраном это пере сброс питания.

--2 Невозможно читать память дисплея в режиме I2C/SPI

--3 Отсутствует встроенный аппаратный генератор шрифтов

--4 На этом контроллере SSD1306 только экраны с малой диагональю 1 и 2 дюйма.

--5 OLED пиксели выгорают за год непрерывной работы.

--6 Можно подключить всего только 2 экрана на одну I2C шину.

Приложения графических OLED экранов

1--Отладка прошивок. Показывать на экране основные параметры.

2--Электронная линейка. Можно отображать шкалу в миллиметрах или дюймах учитывая что габариты пикселя 0,17 мм.

3-- Одним своим видом экран излучает максимум 1 килобайт данных. Поэтому на экране можно сделать генератор QR кодов для QR сканеров.

Тем самым можно передавать на смартфон конфиги, серийный номер для регистрации устройства в мобильном приложении, код Pairing(a) для BLE или просто автоматические протестировать драйвер экрана.

4--Экран наручных часов. Показывать время.

5--Отладка файловых систем. Каждый бит это пиксель. Можно визуально смотреть на состояние памяти. Можно буквально смотреть на память под микроскопом. Скроллингом проматывать вперед-назад.

6--Мигать куском экрана и тем самым передавать бинарные данные в фотодиод наклеенный на экран.

7--Организация древовидных меню. Однако для этого надо хотя бы 4 кнопки.

8--Если оснастить MEMS акселерометром, то можно сделать электронный уровень горизонтали, вертикали или 45 градусов. А на экране показывать "пузырек" в перекрестии.

9--В режиме интерфейса 6800/8080 чип SSD1306 можно использовать как внешнюю SRAM память на 1kByte.

Вывод

SSD1306 это простой монохромный графический дисплей. Его внешний вид, конечно, так себе, зато подойдет для прототипирования и отладки прошивок. Можно встраивать его в измерительные и тестировочные приборы. На основе дисплея можно отрисовывать приборную панель состояния прошивки, запустить древовидное меню или просто отображать курсор консоли.

Если вам нужен драйвер SSD1306 и шрифты написанные на С, то пишите в личку.

Словарь

Для понимания datasheet(а) SSD1306 вам понадобится распознавать эти акронимы:

Акроним

Расшифровка

RAM

random-access memory

SDA

Serial DAta

SCL

Serial CLock

GDDRAM

Graphic Display Data RAM

OLED

organic light-emitting diode

VSS

пин заземления

NC

No Connect

CMOS

Complementary metal–oxide–semiconductor

AC

Alternation Current

SRAM

static RAM

IC

integrated circuit

VCC

voltage collector collector

VDD

voltage drain drain

PLED

Polymer OLEDs

DC

direct current

I2C

Inter-Integrated Circuit

SPI

Serial Peripheral Interface

NOP

No Operation

MCU

microcontroller unit

SSD

SOLOMON SYSTECH Driver

Links

https://cxem.net/arduino/arduino227.php

https://habr.com/ru/articles/313490/

http://microsin.net/adminstuff/hardware/ssd1306-oled-controller.html

https://docs.google.com/spreadsheets/d/1MgjQzLS2Y3HLCgWMkDIx7D0_2wM3KnemX3UaHwuyEvM/edit#gid=642298457

https://www.youtube.com/watch?v=GWOFF5tMv_A&t=1s

Only registered users can participate in poll. Log in, please.
Вы программировали графические дисплеи?
86.96% да40
13.04% нет6
46 users voted. Nobody abstained.
Only registered users can participate in poll. Log in, please.
Вы программировали дисплеи на основе SSD1306?
78.26% да36
21.74% нет10
46 users voted. Nobody abstained.
Only registered users can participate in poll. Log in, please.
Вы программировали символьные дисплей?
86.67% да39
13.33% нет6
45 users voted. 1 user abstained.
Only registered users can participate in poll. Log in, please.
Вы программировали цветные дисплеи?
63.04% да29
36.96% нет17
46 users voted. Nobody abstained.
Only registered users can participate in poll. Log in, please.
Вы писали PC утилиту-имитатор для отладки графики для графических экранов?
13.95% да6
86.05% нет37
43 users voted. 2 users abstained.
Tags:
Hubs:
Total votes 11: ↑11 and ↓0+11
Comments18

Articles