SSD1306: контроллер/драйвер для дисплеев OLED/PLED |
![]() |
Добавил(а) microsin | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SSD1306 это однокристальный CMOS драйвер матричных индикаторов OLED/PLED, совмещенный с графическим контроллером. Он обрабатывает матрицу из 128 сегментов и 64 общих сигналов. Эта микросхема разработана для OLED-панелей с общим катодом (Common Cathode type OLED). На основе SSD1306 наибольшее распространение получили монохромные индикаторы 96x16, 128x32 и 128x64 точек. Такие индикаторы можно купить на AliExpress и Ebay в виде готового модуля, снабженного интерфейсом I2C или SPI. SSD1306 имеет встроенное управление контрастностью, ОЗУ экрана и генератор. Все это уменьшает количество необходимых внешних компонентов и общее энергопотребление. Управление яркостью имеет 256 градаций. Данные и команды отправляются от MCU через аппаратно выбираемый интерфейс. Это может быть параллельный интерфейс, совместимый 6800/8080 MCU, I2C или SPI. Контроллер SSD1306 подходит для многих приложений портативных устройств, такие как дополнительный индикатор для телефона, MP3 плеер, калькулятор и т. п. Примечание: этот перевод даташита [1] был сделан для уточнения доступа к индикатору через последовательный интерфейс I2C. Поэтому некоторые разделы даташита, не представляющие интерес, не переведены. Это касается таблиц 10-1 (пример установки смещения экрана и начальной строки экрана без Remap), 10-2 (пример установки смещения экрана и начальной строки экрана с функцией Remap), 12-1 (DC-характеристики) и другие таблицы и рисунки, которые интересны только разработчикам OLED-модулей. Информацию по этим моментам см. в оригинальном даташите. Основные функции: • Матричная панель 128 x 64 точек Рис. 4-1. Блок-схема SSD1306. Таблица 6-1. Описание выводов. Система обозначений типа выводов для таблицы 6-1 (колонка "Тип"): I вход
[Функциональное описание] Интерфейс с внешним микроконтроллером (MCU) контроллера SSD1306 состоит из 8 выводов для сигналов данных и 5 выводов для сигналов управления. Назначение выводов в различных режимах интерфейса показана в таблице 8-1. Различные режимы интерфейса MCU может быть установлены уровнями на выводах BS[2:0] (см. таблицу 7-1). Таблица 7-1. Выводы для выбора типа интерфейса с MCU.
Примечание: 0 означает подключение к VSS, 1 подключение к VDD. Таблица 8-1. Назначение выводов интерфейса MCU в различных режимах. Примечание: "Лог. 0" означает подключение к земле (VSS), NC означает "никуда не подключено". Символ # обозначает сигнал с активным нулем, например D/C# означает, что данные передаются при D/C# = лог. 1, а команда передается при D/C# = лог. 0. Параллельный интерфейс шины MCU 6800. Этот параллельный интерфейс состоит из 8 двунаправленных сигналов данных (выводы D[7:0]) и сигналов управления R/W#, D/C#, E и CS#. Лог. 0 на выводе R/W# указывает операцию записи (WRITE), и лог. 1 операцию чтения (READ). Лог. 0 на выводе D/C# показывает чтение или запись команды (COMMAND read/write), и лог. 1 показывает чтение или запись данных (DATA read/write). Вход E обслуживает функцию сигнала защелки, когда сигнал выборки CS# находится в лог. 0. Данные защелкиваются по спаду уровня E. Таблица 8-2. Выводы управления интерфейса 6800.
Примечание: ↓ означает спад уровня. H обозначает лог. 1 сигнала, L означает лог. 0. Чтобы рабочая частота RAM экрана подходила к микроконтроллеру, внутри SSD1306 делается некоторая конвейерная обработка, которая требует вставки пустого чтения (dummy read) перед первым реальным чтением данных дисплея. Это показано на рис. 8-1. Рис. 8-1. Процедура обратного вычитывания данных из памяти дисплея - вставка dummy read. Параллельный интерфейс MCU стиля 8080. Этот параллельный интерфейс состоит из 8 выводов двунаправленных данных (D[7:0]) и сигналов управления RD#, WR#, D/C# и CS#. Лог. 0 сигнала D/C# показывает чтение/запись команды (COMMAND read/write), и лог. 1 показывает чтение/запись данных (DATA read/write). Фронт нарастания на входе RD# служит сигналом захвата данных операции чтения, когда сигнал выборки CS# удерживается в лог. 0. Фронт нарастания на входе WR# служит сигналом захвата записи, когда выборка CS# удерживается в лог. 0. Рис. 8-2. Пример процедуры записи в режиме параллельного интерфейса 8080. Рис. 8-3. Пример процедуры чтения в режиме параллельного интерфейса 8080. Таблица 8-3. Выводы управления интерфейса 8080.
Примечание: ↑ означает фронт нарастания сигнала. H обозначает лог. 1, L обозначает лог. 0. Чтобы рабочая частота RAM экрана подходила к микроконтроллеру, внутри SSD1306 делается некоторая конвейерная обработка, которая требует вставки пустого чтения (dummy read) перед первым реальным чтением данных дисплея. Это показано на рис. 8-4. Рис. 8-4. Процедура обратного вычитывания данных из памяти дисплея - вставка dummy read. 4-проводный SPI. Этот последовательный интерфейс состоит из сигналов SCLK (такты), SDIN (входные данные), D/C#, CS#. В 4-проводном режиме SPI ножка D0 действует как SCLK, D1 как SDIN. Для не используемых выводов данных D2 должна оставаться не подключенной, ножки D3..D7, E и R/W# (WR#) можно подключить к земле. Таблица 8-4. Выводы управления 4-проводного SPI.
Примечание: H означает лог. 1, L означает лог. 0. "Замкнуто на VSS" означает постоянную подачу лог. 0. Данные на SDIN вдвигаются в 8-битный регистр сдвига по каждому фронту нарастания SCLK, в следующем порядке: D7, D6, ... D0. Сигнал D/C# анализируется на каждом восьмом такте, и байт данных, накопленный в регистре сдвига, записывается либо в буфер Graphic Display Data RAM (GDDRAM) контроллера, либо в регистр команд на том же самом такте. В последовательном режиме разрешены только операции записи. Рис. 8-5. Процедура записи в режиме 4-проводного последовательного интерфейса (4-wire Serial interface mode). 3-проводный SPI. Этот последовательный интерфейс состоит из сигнала SCLK (такты последовательных данных), SDIN (последовательные данные) и CS#. В 3-проводном режиме SPI, ножка D0 функционирует как SCLK, D1 как SDIN. Для не используемых ножек данных D2 должна оставаться не подключенной, выводы D3 .. D7, R/W# (WR#)#, E и D/C# можно подключить к земле. Функционирование 3-проводного режима SPI подобно 4-проводному SPI с тем лишь отличием, что ножка D/C# не используется. В регистр сдвига вдвигаются 9-бит в следующей последовательности: бит D/C#, биты D7 .. D0. Бит D/C# первый бит в последовательных данных будет определять назначение следующих 8 бит (байт данных) - он должен быть записан в буфер экрана Display Data RAM (D/C# = 1) или в регистр команд (D/C# = 0). В последовательном режиме разрешены только операции записи. Таблица 8-5. Выводы управления 3-проводного последовательного интерфейса.
Примечание: L означает лог. 0. "Замкнуто на VSS" означает постоянную подачу лог. 0. Рис. 8-6. Процедура записи в 3-проводном режиме SPI. [I2C] Коммуникационный интерфейс I2C состоит из ножки установки адреса подчиненного устройства SA0, сигнала данных SDA (SDAOUT/D2 для выхода и SDAIN/D1 для входа) и сигнала тактов SCL (D0). Сигналы SDAOUT и SDAIN обычно соединяются параллельно для получения одного сигнала SDA. Оба сигнала SDA и SCL должны быть подтянуты к лог. 1 с помощью внешних резисторов (pull-up) типичным номиналом от 4.7 кОм до 10 кОм. Сигнал RES# используется для инициализации устройства (в реальности его использование не обязательно, достаточно RES# подтянуть резистором к лог. 1). Ножка бита адреса подчиненного устройства SA0. SSD1306 распознает адрес подчиненного устройства перед передачей или приемом какой-либо информации по шине I2C. Устройство будет отвечать на адрес подчиненного устройства (slave address), где присутствует бит SA0 и бит выбора операции чтение/запись (read/write, бит R/W#). Этот адрес имеет следующий формат: b7 b6 b5 b4 b3 b2 b1 b0 SA0 предоставляет возможность расширения slave-адреса. Таким образом, для коммуникации с SSD1306 можно выбрать адрес 0111100 (0x3C) или 0111101 (0x3D), позволяя тем самым к одной шине I2C параллельно подключить два контроллера SSD1306. Ножка D/C# работает как бит SA0. Бит R/W# в slave-адресе используется для определения рабочего режима шины I2C. Если R/W#=1, то это режим чтения (read mode). Если R/W#=0, то это режим записи (write mode). Сигнал данных SDA. SDA функционирует как канал обмена данными между передатчиком и приемником. Данные и сигнал подтверждения (acknowledgement, ACK) посылается через SDA. Следует отметить, что сопротивление дорожки ITO (Indium tin oxide, материал анода) и сопротивление подтяжки SDA становятся делителем потенциала напряжения. В результате подтверждение было бы невозможным для достижения допустимого уровня лог. 0 на SDA. Сигналы SDAIN и SDAOUT соединяются вместе, создавая один двунаправленный сигнал SDA. Ножка SDAIN должна быть подключена к SDA обязательно, а ножку SDAOUT можно не подключать. Когда ножка SDAOUT отключена, то сигнал подтверждения будет игнорироваться шиной I2C. Сигнал тактов SCL. Передача информации по шине I2C осуществляется по сигналу тактов SCL. Каждая передача бита данных происходит за один период тактов SCL. Запись данных по шине I2C. Интерфейс I2C дает доступ к записи данных и команд в устройство. На рис. 8-7 показан режим записи (write mode) в хронометрическом порядке. Рис. 8-7. Формат данных шины I2C. Легенда мнемоник рисунка 8-7: Co Continuation, бит продолжения. Запись работает следующим образом: 1) Master-устройство (управляющий микроконтроллер, MCU) инициирует коммуникацию посылкой сигнала START (start condition). Определение START показано диаграммой рисунка 8-8. START устанавливается переводом SDA от лог. 1 к лог. 0 при постоянном лог. 1 на SCL. 2) За START передается slave-адрес, чтобы на него отреагировало подчиненное устройство. В нашем случае это SSD1306, для которого допустимым адресом может быть b0111100 или b0111101, что определяется уровнем на SA0 (ножка D/C# работает как SA0). 3) Режим записи устанавливается передачей лог. 0 в бите R/W# этого адреса. 4) Сигнал подтверждения ACK будет генерироваться каждый раз после приема одного байта данных, включая slave-адрес и бит R/W#. На рис. 8-9 показаны диаграммы сигнала подтверждения ACK. ACK определяется как подтяжка SDA к лог. 0 во время уровня лог. 1 импульса SCL, связанного с выдачей подтверждения. 5) После передачи slave-адреса передается либо байт управления, либо байт данных SDA. Байт управления состоит главным образом из бит Co и D/C#, за которыми идут шесть нулевых бит. a. Если бит Co установлен в лог. 0, то следующие передачи будут содержать только байты данных. 6) Бит подтверждения ACK будет генерироваться после каждого приема байта управления или байта данных. 7) Режим записи завершается, когда выдается сигнал STOP (stop condition). Сигнал STOP также показан на рис. 8-8. STOP устанавливается путем перевода SDA из лог. 0 в лог. 1, когда сигнал SCL находится на уровне лог. 1. Рис. 8-8. Определение событий сигналов START и STOP (START condition, STOP condition). Рис. 8-9. Определение ACK (подтверждение, acknowledgement condition). Обратите внимание на некоторые важные особенности протокола шины I2C: 1. Бит данных, передаваемый с каждым импульсом SCL, должен оставаться в стабильном уровне, пока SCL находится в лог. 1. Это показано диаграммами на рис. 8-10. Кроме передачи сигналов START или STOP, сигнал SDA должен переключаться только тогда, когда SCL находится в лог. 0. 2. Оба сигнала, SDA и SCL, должны получать верхнюю подтяжку к лог. 1 с помощью внешних резисторов. Рис. 8-10. Как передаются биты данных. Декодер команды. Этот блок определяет, как интерпретировать входные данные - либо как данные графики, либо как команду. Данные интерпретируются на основе бита D/C# (либо передаваемого через интерфейс, либо с помощью отдельного вывода D/C#). Если D/C# в лог. 1, то D[7:0] интерпретируются как данные графики, записываемые в буфер Graphic Display Data RAM (GDDRAM). Если D/C# в лог. 0, то данные D[7:0] интерпретируются как команда. После поступления команды данные будут декодироваться, и записываться в соответствующий регистр команд. Схема генератора и генератор интервалов времени (Oscillator Circuit и Display Time Generator). Этот блок содержит внутренний RC-генератор с малым энергопотреблением. Рабочая частота тактов (CLK) может генерироваться либо от внутреннего генератора, либо подаваться на вход CL от внешнего источника. Выбор источника тактирования делается ножкой CLS. Если на CLS лог. 1, то выбирается внутренний генератор, тогда ножка CL должна оставаться не подключенной. Если на CLS лог. 0, то внутренний генератор запрещается, и внешний тактовый сигнал должен быть подан на вывод CL. Когда выбран внутренний генератор, его выходная частота может быть изменена битами A[7:4] команды 0xD5. Рис. 8-11. Oscillator Circuit и Display Time Generator. Такты экрана (display clock, DCLK) для Display Timing Generator получаются из сигнала CLK. Команда 0xD5 программирует коэффициент деления D значением от 1 до 16: DCLK = FOSC / D Частота кадров экрана определяется по следующей формуле: FFRM = FOSC / (D · K · NoOfMux) Здесь: • D обозначает коэффициент деления тактов. Он устанавливается битами A[3:0] команды 0xD5. Коэффициент деления должен быть в диапазоне 1 .. 16. • K это количество тактов на строку экрана. Значение K вычисляется по формуле: K = Phase 1 period + Phase 2 period + BANK0 pulse width, и после включения питания или сброса K = 2 + 2 + 50 = 54. Подробнее см. секцию "Segment Drivers / Common Drivers", где дано определение для Phase (фаза сигнала управления сегментами). • NoOfMux (Number of multiplex ratio, коэффициент умножения) устанавливается командой 0xA8. Значение по умолчанию 63 (т. е. 64MUX). • FOSC это частота генератора. Её можно поменять битами A[7:4] команды 0xD5. Чем больше значение, тем выше частота. Синхронизация FR. Сигнал синхронизации фрейма (кадра) FR может использоваться для предотвращения эффекта разрыва изображения (tearing effect). Время момента начала записи нового изображения в драйвер OLED зависит от скорости записи управляющего MCU. Если MCU может завершить запись образа экрана за один период фрейма, то это классифицируется как быстро записывающий MCU (fast write MCU). Для MCU, которому нужно больше времени для завершения записи (больше, чем один фрейм, но в пределах двух фреймов), это классифицируется как медленно записывающий MCU (slow write MCU). Для fast write MCU: MCU должен запустить запись данных нового фрейма сразу после нарастания уровня импульса FR, и он должен завершить запись перед следующим нарастанием уровня импульса FR. Для slow write MCU: MCU должен запустить запись данных нового фрейма после спада уровня первого импульса FR и должен завершить запись данных перед фронтом нарастания уровня третьего импульса FR. Схема сброса (Reset Circuit). Когда на вход RES# подан лог. 0, то SSD1306 инициирует следующее состояние: 1. Экран выключается. Segment Drivers / Common Drivers (SEGx/COMx). Драйверы сегмента SEG поставляют 128 источников тока для управления матрицей панели OLED. Управляющий ток может быть настроен в диапазоне от 0 до 100 мкА, всего 256 уровней настройки тока. Драйверы COM генерируют импульсы сканирования напряжения. Процесс генерации сигнала управления сегментом делится на три фазы: 1. На phase 1, точка OLED, получившая заряд от предыдущего изображения, разряжается, чтобы подготовиться к отображению следующего содержимого экрана. 2. На phase 2, точка OLED устанавливается на целевое напряжение. На точку подается импульс тока, чтобы она достигла соответствующего уровня от напряжения VSS. Длительность периода phase 2 можно запрограммировать в значениями длины в диапазоне от 1 до 15 интервалов тактов DCLK. Если значение емкости точки панели OLED больше, то требуется больший период времени для заряда конденсатора точки, чтобы она достигла желаемого напряжения. 3. На phase 3, драйвер OLED переключается на использование источника тока для питания точек OLED, поэтому такая фаза называется фазой управляющего тока. Рис. 8-12. Форма сигнала выхода управления сегмента (SEG), состоящего из 3 фаз. После завершения phase 3 драйвер микросхемы SSD1306 переходит обратно к phase 1, чтобы отобразить следующую строку данных изображения. Этот трехфазный цикл непрерывно работает для обновления изображения на панели OLED. На phase 3 если ширина длительности импульса тока установлена на 50, то после завершения 50 периодов DCLK в фазе управляющего тока микросхема драйвера перейдет обратно к phase, чтобы отобразить следующую строку экрана. [Graphic Display Data RAM (GDDRAM)] GDDRAM это статическое ОЗУ (RAM), каждый бит которого соответствует точке на экране (буфер данных экрана). Размер этого RAM 128 x 64 бит, и RAM поделена на 8 страниц, от PAGE0 до PAGE7, что используется для монохромного матричного экрана 128x64 точек, как показано на рис. 8-13. Рис. 8-13. Структура страниц GDDRAM контроллера SSD1306. Примечание: "Column re-mapping" означает переназначение столбцов, "Row re-mapping" переназначение строк. PageX обозначает страницу памяти GDDRAM. Когда один байт данных записывается в GDDRAM, то заполняются все данные на строках изображения этой страницы текущего столбца, т. е. весь столбец (8 точек), на который указывает текущий адрес столбца. Бит данных D0 записывается в верхнюю строку страницы, и так далее (бит D7 записывается в нижнюю строку страницы), как показано на рис. 8-14. Рис. 8-14. Организация GDDRAM по умолчанию, нет переназначения строк (без row re-mapping) и столбцов (без column-remapping). Чтобы достичь гибкости в формировании изображения и разводки сигналов SEG и COM, можно программно изменить их привязку (Segment re-mapping, Common outputs re-mapping), как показано на рис. 8-13. Для вертикального сдвига картинки на экране можно записать внутренний регистр, который хранит начальную строку экрана, что управляет порцией данных RAM, привязанных к экрану (см. команду 0xD3). Этот блок используется для распределения поступающего питания на разные внутренние уровни напряжения и тока. • VCC это положительное напряжение питания. ISEG = Contrast / 256 · IREF · scalefactor Значение Contrast (0 .. 255) устанавливается командой установки контраста (Set Contrast 0x81), и значение scalefactor по умолчанию равно 8. Величина IREF управляется значением резистора, который подключен между ножкой IREF и VSS, как показано на рис. 8-15. Рекомендуется установить IREF в значение 12.5 ± 2 мкА, чтобы ISEG = 100 мкА был при максимальной контрастности 255. Рис. 8-15. Настройка резистором тока IREF. Поскольку напряжение на выводе IREF равно VCC – 2.5V, то значение резистора при условиях IREF = 12.5 мкА, VCC = 12V можно вычислить по формуле: R1 = (Напряжение на IREF – VSS) / IREF = (12 – 2.5) / 12.5 мкА = 760 кОм На следующих картинках показана рекомендуемая последовательность включения (power ON) и выключения (power OFF) для SSD1306. Последовательность Power ON: 1. Подача питания на VDD. Рис. 8-16. Последовательность включения (Power ON). Последовательность Power OFF: 1. Послать команду 0xAE для выключения дисплея. Рис. 8-17. Последовательность выключения (Power OFF). Примечания: (1) Поскольку между VDD и VCC подключена схема защиты от ESD (статическое электричество), VCC становится ниже VDD всякий раз, когда на VDD подается питание и на VCC питания нет, что показано пунктирной линией VCC на рис. 8-16 и рис. 8-17. [Таблица команд SSD1306] Таблица 9-1. Таблица команд при D/C#=0, R/W#(WR#) = 0, E(RD#=1), если не указано нечто другое.
Примечание: * означает "Don’t care", т. е. "не имеет значения". Таблица 9-2. Команда чтения (Read Command).
Примечание: данные команд, не присутствующие в таблицах, запрещены для ввода команды в чип SSD1306, иначе могут быть получены неожиданные результаты. Чтение / запись данных. Чтобы прочитать данные из GDDRAM, установите лог. 1 для сигнала R/W# (WR#) и сигнала D/C# для режима параллельного интерфейса стиля 6800, и выберите лог. 0 для вывода E (RD#) и лог. 1 для вывода D/C# для параллельного интерфейса стиля 8080. В последовательных режимах работы интерфейса чтение данных не предоставляется. В нормальном режиме чтения данных адрес столбца GDDRAM автоматически увеличивается при каждом чтении данных. Также перед первым чтением требуется пустое чтение (dummy read). Чтобы записать данные в GDDRAM, установите лог.0 на выводе R/W# (WR#) и лог. 1 на выводе D/C# для режима параллельного интерфейса стиля 6800 и стиля 8080. Последовательные режимы интерфейса всегда работают в режиме записи. Адрес столбца GDDRAM автоматически увеличивается после каждой записи данных. Таблица 9-3. Автоматический инкремент адреса.
[Описание команд] Основные команды Эта команда задает младший ниббл 8-битного адреса столбца для буфера RAM экрана в режиме адресации страницы (Page Addressing Mode). Адрес столбца будет инкрементироваться при каждом доступе к данным. Обратитесь а таблице 9-1 и описанию команды Set Memory Addressing Mode (0x20). Эта команда задает старший ниббл 8-битного адреса столбца для буфера RAM экрана в режиме адресации страницы (Page Addressing Mode). Адрес столбца будет инкрементироваться с каждым доступом к данным. Пожалуйста обратитесь к таблице 9-1 и описанию команды Set Memory Addressing Mode (0x20). Имеется 3 разных режима адресации памяти SSD1306: page addressing mode, horizontal addressing mode и vertical addressing mode. Эта команда устанавливает способ адресации памяти в один из этих трех режимов. Здесь COL означает столбец данных RAM графического дисплея. Page addressing mode (A[1:0] = 10) В этом режиме адресации после того, как был осуществлен доступ к RAM (на чтение или запись), указатель адреса столбца автоматически увеличивается на 1. Если адрес столбца достигает конечного столбца, то указатель адреса столбца сбрасывается к адресу начального столбца, и адрес указателя на страницу не меняется. Пользователи должны установить адрес новой страницы и адрес нового столбца, чтобы получить доступ к содержимому другой страницы RAM. Последовательность перемещения указателя адреса PAGE и COL для page addressing mode показана на рис. 10-1. Рис. 10-1. Перемещение указателя адреса в Page Addressing Mode. Для нормального чтения или записи данных RAM экрана в page addressing mode требуются следующие шаги для определения начального адреса доступа к RAM: • Установите начальный адрес страницы целевой области дисплея командами от 0xB0 до 0xB7. Например, если адрес страницы установлен на 0xB2, нижний адрес столбца 0x03 и верхний адрес столбца 0x10, то это означает начальный столбец SEG3 страницы PAGE2. Указатель доступа к RAM находится в месте, показанном на рис. 10-2. Входной байт данных будет записан в позицию RAM столбца 3. Рис. 10-2. Пример установки указателя доступа GDDRAM в Page Addressing Mode (без переназначений строк и столбцов). Horizontal addressing mode (A[1:0]=00) В режиме горизонтальной адресации после каждого доступа к данным RAM экрана адрес указателя столбца автоматически увеличивается на 1. Если адрес столбца достиг последнего столбца, то адрес сбрасывается к начальному столбцу, и указатель на адрес страницы увеличивается на 1. Последовательность изменения адресов страницы и столбца в этом режиме показана на рис. 10-3. Когда оба адреса, и адрес столбца, и адрес страницы, достигают конца, то эти указатели сбрасываются в адрес начального столбца и адрес начальной страницы (пунктирная линия на рис. 10-3). Рис. 10-3. Перемещение указателя адреса в Horizontal Addressing Mode. Vertical addressing mode: (A[1:0]=01) В режиме вертикальной адресации после доступа к RAM дисплея указатель адреса страницы автоматически увеличивается на 1. Если указатель адреса страницы достиг последней страницы, то адрес страницы сбрасывается в адрес начальной страницы, и адрес начального столбца увеличивается на 1. Последовательность изменения адресов страницы и столбца в этом режиме показана на рис. 10-4. Когда оба адреса, и адрес столбца, и адрес страницы, достигают конца, то эти указатели сбрасываются в адрес начального столбца и адрес начальной страницы (пунктирная линия на рис. 10-4). Рис. 10-4. Перемещение указателя адреса в Vertical Addressing Mode. Чтобы осуществить обычный доступ к данным RAM экрана для чтения или записи в режимах адресации Horizontal / Vertical, требуются следующие шаги для определения места указателя доступа к RAM: • Установите начальный и конечный адреса столбца места на экране командой 0x21. Пример показан на рис. 10-5 в описании команды Set Page Address (0x22). Эта команда из трех байт задает начальный и конечный адреса данных RAM экрана. Эта команда также устанавливает указатель адреса столбца на начальный адрес столбца. Этот указатель используется для определения текущего адреса столбца для чтения/записи данных RAM экрана. Если командой 0x20 разрешен horizontal address increment mode, то после завершения чтения/записи одного столбца данных указатель автоматически инкрементируется на следующий адрес столбца. Всякий раз, когда адрес столбца завершает доступ к адресу последнего столбца, он сбрасывается обратно к начальному адресу столбца, и адрес строки увеличивается для доступа к следующей строке. Эта команда из трех байт задает начальный адрес страницы и конечный адрес страницы данных RAM экрана. Эта команда также устанавливает указатель адреса страницы на начальный адрес страницы. Этот указатель используется для определения текущей позиции чтения/записи данных RAM экрана. Если командой 0x20 разрешен vertical address increment mode, то после завершения чтения/записи одной страницы данных адрес автоматически инкрементируется на адрес следующей страницы. Всякий раз, когда указатель адреса страницы завершает доступ к последнему адресу страницы, то он сбрасывается обратно к начальному адресу страницы. Рис. 10-5 показывает на примере, как меняются адреса столбца и страницы: начальный адрес столбца устанавливается на 2, конечный адрес столбца устанавливается на 125, начальный адрес страницы устанавливается на 1 и конечный адрес страницы устанавливается на 6. Командой 0x20 разрешается horizontal address increment mode. В этом случае допустимый диапазон доступа к столбцам устанавливается между 2 и 125 столбцами, и допустимый диапазон доступа к страницам устанавливается между 1 и 6. Дополнительно указатель адреса столбца устанавливается на 2, и указатель адреса страницы устанавливается на 1. После завершения чтения/записи одной точки данных адрес столбца автоматически увеличивается на 1 для доступа к следующей ячейке RAM на следующей операции (сплошная линия на рис. 10-5). Всякий раз, когда указатель адреса столбца достигает конечного столбца 125, он сбрасывается обратно с столбцу 2, и адрес страницы автоматически увеличивается на 1 (сплошная линия на рис. 10-5). Когда осуществлен доступ на последней странице 6 и последнему столбцу 125, адрес страницы сбрасывается обратно к 1, и адрес столбца сбрасывается обратно к 2 (пунктирная линия на рис. 10-5). Рис. 10-5. Пример перемещения указателя адреса столбца и строки. Эта команда устанавливает регистр начальной строки (Display Start Line), чтобы определить начальный адрес RAM экрана, путем выбора значения от 0 до 63. Когда значение равно 0, строка 0 RAM отображается на COM0. Когда значение равно 1, строка 1 RAM отображается на COM0, и так далее. Для дополнительной информации обратитесь к таблице 10-1 в описании команды Set Display Offset (0xD3). Эта команда устанавливает настройку контрастности экрана. Имеется 256 шагов настройки контрастности от 0x00 до 0xFF. Выходной ток сегмента увеличивается при увеличении значения контрастности. Эта команда меняет привязку данных адреса столбца и драйвера сегмента. Это добавляет гибкости в разработке модуля OLED. См. таблицу команд 9-1. Эта команда влияет только на последующий ввод данных. Данные, уже сохраненные в GDDRAM, не меняются. Команда 0xA4 разрешает отображение на экране в соответствии с содержимым GDDRAM. Если выдана команда 0xA5 и затем выдана команда 0xA4, то продолжится отображение содержимого GDDRAM. Другими словами, команда 0xA4 возобновляет отображение экрана всего экрана от стадии включения. Команда 0xA5 принудительно включает отображение, независимо от содержимого данных RAM экрана. Эта команда устанавливает отображение данных в нормальном или инверсном виде. При нормальном отображении лог. 1 данных RAM соответствует включенному (засвеченному) пикселю экрана. В инверсном режиме все наоборот, значение бита в лог. 0 соответствует включенному пикселю экрана. Эта команда переключает режим мультиплексирования по умолчанию 63 на любой коэффициент мультиплексирования в диапазоне от 16 до 63. Выходные выводы COM0 .. COM63 будут переключать соответствующий сигнал COM. Эти однобайтные команды используются для включения и выключения панели экрана OLED. Когда экран включен, то выбранные командой Set Master Configuration схемы будут включены. Когда экран выключен, то эти схемы будут выключены, и выходы SEG и COM будут соответственно в состоянии VSS и высокого сопротивления. Эти команды устанавливают экран в одно из двух состояний: 0xAE: Display OFF (экран выключен) Рис. 10-6. Переход между разными режимами. Эта команда устанавливает начальный адрес страницы GDDRAM в значение от 0 до 7 в режиме Page Addressing Mode. См. таблицу 9-1 и описание команды Set Memory Addressing Mode (0x20). Эта команда устанавливает направление сканирования выхода COM, добавляя гибкость для дизайна модуля OLED. Дополнительно на экране отобразятся изменения при выдаче этой команды. Например, если эта команда была отправлена во время нормального отображения графики на экране, то изображение немедленно будет перевернуто по вертикали. Подробности см. в таблице 10-3 из описания команды Set COM Pins Hardware Configuration (0xDA). Это двухбайтная команда. Второй байт задает привязку начальной строки дисплея к одному из выходов драйвера COM0 .. COM63 (предполагается, что если COM0 соответствует начальной строке экрана, тогда значение регистра начальной строки экрана равно 0). Например, чтобы переместить строку COM16 в направлении COM0 на 16 строк, то 6-битные данные во втором байте должны быть b010000. Чтобы переместить картинку в противоположном направлении на 16 строк, эти 6-битные данные должны быть равны 64 – 16, что соответствует второму байту b100000. Следующие две таблицы (таблица 10-1, таблица 10-2) показывают пример установки команд 0xC0/0xC8 и 0xD3. Таблица 10-1. Пример Set Display Offset и Display Start Line без переназначения (no Remap). [] Таблица 10-2. Пример Set Display Offset и Display Start Line с переназначением (Remap). [] Примечание: таблицы 10-1 и 10-2 здесь не приведены из-за своего большого размера, см. оригинальный документ [1]. Эта команда состоит из двух функций: • Display Clock Divide Ratio (установка D, биты A[3:0]). Это установит коэффициент деления для генерации DCLK (Display Clock) из CLK. Коэффициент деления может быть в диапазоне от 1 до 16, значение сброса = 1. Подробнее про соотношение между DCLK и CLK см. в секции "Схема генератора и генератор интервалов времени". Эта команда используется для установки длительности периода pre-charge. Устанавливаемый интервал измеряется в количестве DCLK, где RESET эквивалентен 2 периодам DCLK. Эта команда устанавливает конфигурацию сигналов COM, чтобы она соответствовала аппаратной разводке сигналов панели OLED. Таблица ниже показывает конфигурацию выводов COM при разных условиях (для коэффициента MUX = 64): Таблица 10-3. Аппаратная конфигурация выводов COM.
Примечание: строки на картинках, помеченные желтыми пунктирными линиями, расширяют размеры экрана. Эта команда настраивает выход регулятора напряжения VCOMH. No Operation Command, команда пустой операции. Чтение регистра состояния (Status register Read). Эта команда выдается путем установки D/C# в лог. 0 на время чтения данных (см. рис. 13-1 и рис. 13-2, где показаны сигналы параллельного интерфейса). Это позволяет MCU мониторить внутреннее состояние чипа SSD1306. В режиме последовательных интерфейсов чтение состояния не предоставляется. Команды управления графикой (Graphic Acceleration Command) Эта команда состоит из последующих байт для установки параметров горизонтального скроллинга (прокрутки изображения), и определяет начальную страницу скроллинга, конечную страницу скроллинга и скорость скроллинга. Перед выдачей этой команды горизонтальный скроллинг должен быть деактивирован (командой 0x2E). Иначе содержимое RAM может быть повреждено. Горизонтальный скроллинг SSD1306 разработан для прокрутки 128 столбцов. Рисунки 10-7, 10-8, 10-9 даташита [1] показывают примеры использования горизонтального скроллинга. Эта команда состоит из 6 последующих байт, предназначенных для установки параметров вертикального скроллинга (прокрутки изображения). Параметры определяют начальную, конечную страницу скроллинга, скорость скроллинга и смещение вертикального скроллинга. Байты B[2:0], C[2:0] и D[2:0] команд 0x29/0x2A предназначены для установки непрерывного горизонтального скроллинга. Байт E[5:0] предназначен для установки смещения непрерывного вертикального скроллинга. Все эти байты вместе используются для установки непрерывного диагонального (прокрутка по горизонтали + прокрутка по вертикали) скроллинга. Если байт смещения вертикального скроллинга E[5:0] установлен в 0, то выполняется только горизонтальный скроллинг (наподобие действия команд 0x26/0x27). Перед выдачей этой команды скроллинг должен быть деактивирован (0x2E). Иначе содержимое RAM может быть повреждено. Рис. 10-10 даташита [1] показывает пример использования вертикальной и горизонтальной прокрутки. Эта команда останавливает прокрутку. После того, как отправка команды 0x2E деактивирует действие прокрутки, данные RAM должны быть перезаписаны. Эта команда запускает движение скроллинга, и она должна выдаваться только после того, как настроены параметры прокрутки командами 0x26/0x27/0x29/0x2A. Установка последней команды настройки скроллинга перезаписывает установки предыдущих команд настройки скроллинга. После активации скроллинга запрещены следующие действия: 1. Доступ к RAM (на чтение и запись). Эта команда состоит из 3 последующих байт, предназначенных для настройки области вертикальной прокрутки. Для функции непрерывной прокрутки по вертикали (команда 0x29/0x2A), количество строк прокрутки по вертикали может быть меньше или равно коэффициенту MUX. [Предельные параметры] Таблица 11-1. Предельно допустимые параметры (напряжения измерены относительно VSS).
Предельные параметры это значения, эксплуатация изделия возле которых может его повредить. Функционирование должно быть ограничено пределами, указанными в таблицах электрических характеристик или в секции описания выводов. Это устройство может быть чувствительно к действию света. Следует избегать облучение устройства источниками света во время его нормальной работы. Это устройство не защищено от радиации. [Характеристики постоянного тока] Даны параметры для следующих условий (если не указано что-то другое): напряжения измерены относительно VSS, VDD = 1.65V .. 3.3V, TA = 25°C. Таблица 12-1. DC-характеристики (постоянный ток). [] Примечание: таблицу 12-1 см. в даташите [1]. [Характеристики переменного тока] Даны параметры для следующих условий: напряжения измерены относительно VSS, VDD = 1.65V .. 3.3V, TA = 25°C. Таблица 13-1. AC-характеристики (переменный ток).
Примечания: (1) FOSC означает значение частоты внутреннего генератора, и это значение было измерено, когда командой 0xD5 (биты A[7:4]) установлено значение по умолчанию. Обратитесь к таблице 9-1 (описание команды Set Display Clock Divide Ratio / Oscillator Frequency, 0xD5) для получения подробного описания. Значения интервалов времени и временные диаграммы для параллельного интерфейса стиля 6800 см. в таблице 13-2 и на рис. 13-1 даташита [1]. Значения интервалов времени и временные диаграммы для параллельного интерфейса стиля 8080 см. в таблице 13-3 и на рис. 13-2 даташита [1]. Значения интервалов времени и временные диаграммы для 4-проводного SPI см. в таблице 13-4 и на рис. 13-3. Значения интервалов времени и временные диаграммы для 3-проводного SPI см. в таблице 13-5 и на рис. 13-4. Таблица 13-6. Характеристики интервалов времени интерфейса I2C.
Рис. 13-5. Характеристики интервалов времени интерфейса I2C. [Программное конфигурирование] У контроллера SSD1306 имеется внутренние регистры команд, которые используются для конфигурирования работы узлов драйвера OLED. После сброса или включения питания эти регистры должны быть установлены в нужные параметры, чтобы дисплей OLED функционировал правильно. К регистрам можно получить доступ через один из вариантов интерфейса MCU (типа 6800, 8080, SPI с выводом D/C#, подтянутым к лог. 0, или через интерфейс I2C). Ниже дан пример алгоритма инициализации SSD1306. Значения регистров зависят от разных условий и требований приложения. Рис. 2. Последовательность программной инициализации SSD1306. [Ссылки] 1. 128 x 64 Dot Matrix OLED/PLED Segment/Common Driver with Controller. |