Инструменты пользователя

Инструменты сайта


electronics:modules:oled-ssd1306

OLED экран на SSD1306

Общее описание

Контроллёр SSD1306 предназначен для управления OLED/PLED экранами, поддерживает 128 сегментов и 64 вывода.

SSD1306 обеспечивает управление контрастом (256 уровней) , оперативную память экрана и генератор, что уменьшает количество внешних компонентов и потребление энергии. Экран с данным контроллёром подходит для множества небольших приложений, таких как дополнительный экран мобильного телефона, MP3 плейер или калькулятор и так далее.

Интерфейс I2C

Адрес устройства 0x3C. Выводы SDA и SCL должны быть подтянуты к питанию. Сигнал #RESET используется для инициализации устройства.

Интерфейс позволяет отправлять команды и данные для контроллёра SSD1306 побайтно.

Формат команды: Co|Dc|0|0|0|0|0|0.

После передачи по I2C адреса устройства можно передать команду или данные. Если в команде Co=0, то далее должны передаваться байты данных. Если в команде Dc=0, то следующим байтом будет команда. Если же Dc=1, то следующий байт должен быть размещён в оперативной памяти экрана, причём указатель внутри оперативной памяти сдвигается автоматически при записи каждого байта.

Процесс инициализации

Если прижать вывод #RESET к земле, то будут выполнены следующие команды:

  • Отключить экран.
  • Перейти в режим 128×64.
  • Обнулить привязку строк и столбцов экрана, т.е. SEG0=0x00 и COM0=0x00.
  • Обнулить начальную строку отображения, т.е. отображение начинается с начала оперативной памяти.
  • Обнулить счётчик столбцов.
  • Перевести направление сканирования COM столбцов в нормальный режим.
  • Установить контраст в 0x7F.
  • Нормальный (неинверсный) режим отображения.

Оперативная память дисплея

Оперативная память дисплея состоит из 128х64 бит статической RAM и разделена на 8 страниц, от PAGE0 до PAGE7. Для удобства есть возможность програмно переопределить направление как строк, так и столбцов экрана.

При записи одного байта в память заполняются все строки одного столбца (т.е. байт размещается вертикально) в рамках одной страницы. Причём, младший бит будет размещён «выше» старшего.

Для вертикального сдвига изображения следует изменять регистр, содержащий начальную строку отображения, что позволяет выбрать нужную область памяти для отображения на экране.

Настройка железа

Установка начальной линии экрана

Код команды: 0x40 OR N, где N - индекс линии экрана в диапазоне 0x00~0x3F.

При сбросе SSD1306 выполняется команда 0x40 OR 0x00.

Команда устанавливает регистра начальной линии экрана, определяя начальный адрес в оперативной памяти, выбирая значение в диапазоне от 0 до 63. При использовании значения 0 нулевой ряд оперативной памяти соответствует COM0. При использовании значения 1 первый ряд оперативной памяти соответствует COM0 и так далее.

Пример с картинками смотрите на 38 странице SSD1306.pdf.

Установка направления сегментов

Код команды: 0xA0 OR N, где N - направление сегментов в диапазоне 0x00~0x01.

При сбросе SSD1306 выполняется команда 0xA0.

Команда изменяет привязку между адресом столбца экрана и сегментным драйвером. Это позволяет изменять направление столбцов при работе с OLED модулем.

Команда воздействует только на последующий ввод данных. Сохранённые ранее данные в оперативной памяти дисплея не изменяются.

Для установки прямого направления сегментов следует указывать 0x01, т.е. от SEG[0] к SEG[127].

Для установки обратного направления сегментов следует указывать 0x01, т.е. от SEG[127] к SEG[0].

Пропорция мультиплексирования

Код команды: 0xA8, N, где N может меняться в диапазоне 0x0F~0x3F.

Команда загружает в MUX значение N+1. Значения N в диапазоне от 0x00 до 0x0E не применять.

Установка направления сканирования COM выводов

Код команды: 0xС0 OR N, где N - индекс линии экрана в диапазоне 0x00~0x3F.

Команда 0xC0 задаёт прямой режим сканирования, т.е. от COM[0] к COM[N-1]. Состояние после сброса SSD1306.

Команда 0xC8 задаёт обратный режим сканирования, т.е. от COM[N-1] к COM[0].

Причём, N равен пропорции мультиплексирования, т.е. содержимому MUX.

Установка смещения изображения

Код команды: 0xD3, N, где N может меняться в диапазоне от 0x00 до 0x3F. Значение при сбросе: 0x00.

Команда выполняет вертикальный сдвиг COM выводов. Предположим, что COM0 является первой отображаемой строкой, значит был передан 0.

Например, чтобы передвинуть COM16 в сторону COM0 на 16 строк, то аргумент команды должен быть 0b010000. Чтобы вернуть строку обратно надо вычислить 64 - 16, т.е. аргумент будет 0b100000. Обратитесь к таблицам 10-1 и 10-2 даташита.

Установка конфигурации COM выводов

Код команды: 0xDA, 0x02 OR B5 OR B4, где:

  • B4=0 для последовательной конфигурации COM выводов;
  • B4=1 для альтернативной конфигурации COM выводов, значение после сброса SSD1306;
  • B5=0 для отключения смены направления COM, значение после сброса SSD1306;
  • B5=1 для включения смены направления COM.

Настройка управления и частот

Установка пропорции делителя частоты

Код команды: 0xD5, (F & 0x0F) « 4 | (D & 0x0F) , где:

  • D - младшие четыре бита, которые определяют пропорцию делителя частоты DCLK (Display CLock) относительно CLK.. Делитель устанавливается в (D & 0x0F) + 1. При сбросе SSD1306 D=0x00, поэтому в делителе будет единица. Обратитесь к разделу 8.3 даташита.
  • F - старшие четыре бита, которые определяют частоту Fosc. Разрешённый диапазон 0x00~0x0F. При сброме SSD1306 в F заносится 0x08. При увеличении этого значения, увеличивается частота и наоборот.

Установка периода предварительной зарядки

Код команды: 0xD9, (P1 & 0x0F) « 4 | (P2 & 0x0F) , где:

  • P2 - младшие четыре бита, которые определяют период фазы 1 (см. даташит) до 15 DCLK, значение 0x00 запрещено. При сбросе SSD1306 P2=0x02.
  • P1 - старшие четыре бита, которые определяют период фазы 2 (см. даташит) до 15 DCLK, значение 0x00 запрещено. При сбросе SSD1306 P2=0x02.

Команда используется для установки длительности периода предварительной зарядки. Интервал считается в DCLK, где RESET равен двум DCLK.

Установка уровня Vcomh

Код команды: 0xDB, N « 4, где:

  • N=0x00 - ~0.65 x VCC;
  • N=0x20 - ~0.77 x VCC (после сброса SSD1306);
  • N=0x30 - ~0.83 x VCC.

Пустая операция

Код команды: 0xE3.

Режимы адресации памяти

Код команды: 0x20, N, где:

  • N=0x00 - режим горизонтальной адресации;
  • N=0x01 - режим вертикальной адресации;
  • N=0x02 - режим постраничной адресации, при сбросе SSD1306.

Режим страничной адресации

Значение для установки режима: N=0x02.

В режиме страничной адресации после выполнения операции чтения или записи в оперативную память дисплея выполняется автоматическое увеличение указателя столбца на единицу. Когда указатель столбца достигает адреса последнего столбца, то указатель столбца сбрасывается на адрес первого столбца, а указатель страницы не изменяется. Необходимо явно указать другую страницу и адреса столбцов на ней для получения доступа к другой области экрана. Работа указателей столбца и страницы показана на рисунке ниже.

При записи или чтении из оперативной памяти дисплея в режиме страничной адресации необходимо выполнить следующие действия для определения начальной позиции указателя:

  • Установить начальный адрес страницы для целевой области экрана с помощью команд 0xB0~0xB7.
  • Установить младшую часть адреса первого столбца с помощью команд 0x00~0x0F.
  • Установить старшую часть адреса первого столбца с помощью команд 0x10~0x1F.

Например, если адрес страницы установлен в 0xB2, младшая часть адреса столбца установлена в 0x03, а старшая - в 0x10, то это означает, что начальным столбцом будет SEG3 страницы PAGE2. Указатель в оперативной памяти будет установлен как показано на рисунке ниже. Переданный байт данных будет записан в оперативную память в позицию третьего столбца.

Установка младшей части начального адреса

Код команды: 0x00~0x0F.

Данная команда указывает младшую часть 8-ми битного адреса начального столбца в оперативной памяти дисплея для режима страничной адресации. Данный адрес будет автоматически увеличиваться при каждом доступе к данным. При сбросе SSD1306 используется значение 0x00.

Установка старшей части начального адреса

Код команды: 0x10~0x1F.

Данная команда указывает старшую часть 8-ми битного адреса начального столбца в оперативной памяти дисплея для режима страничной адресации. Данный адрес будет автоматически увеличиваться при каждом доступе к данным. При сбросе SSD1306 используется значение 0x10.

Установка стартового адреса страницы

Код команды: 0xB0 | (N & 0x07).

Команда устанавливает стартовый адрес страницы в диапазоне от 0 до 7. Подробности надо смотреть в таблице 9-1 и глянуть в раздел 10.1.3 даташита.

Режим горизонтальной адресации

Значение для установки режима: N=0x00.

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

Режим вертикальной адресации

Значение для установки режима: N=0x01.

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

При записи или чтении из оперативной памяти дисплея в режимах горизонтальной или вертикальной адресации необходимо выполнить следующие действия для определения начальной позиции указателя:

  • Установить начальный и конечный адреса целевой области экрана с помощью команды 0x21.
  • Установить начальный и конечный адреса страниц целевой области экрана с помощью команды 0x22.

Пример показан на картинке далее.

Установка адреса столбца

Код команды: 0x21.

Данная команда, состоящая из трёх байт, указывает начальный и конечный адреса столбцов области отображения. Эта команда также устанавливает указатель столбца на начальный адрес столбца. Этот указатель используется для определения адреса текущего столбца внутри оперативной памяти дисплея. В режиме горизонтальной адресации после завершения операции чтения или записи одного столбца, указатель перемещается на следующий адрес. При покидании указателем адреса конечного столбца, он устанавливается на адрес начального столбца, а адрес ряда увеличивается на единицу.

Установка адреса страницы

Код команды: 0x22.

Данная команда, состоящая из трёх байт, указывает начальный и конечный адреса страницы в области отображения. Эта команда также устанавливает указатель страницы на начальный адрес страницы. Этот указатель используется для определения адреса текущей страницы внутри оперативной памяти дисплея. В режиме вертикальной адресации после завершения операции чтения или записи одного байта, указатель перемещается на адрес следующей страницы. При покидании указателем адреса последней страницы, он устанавливается на адрес первой страницы.

Нижеприведённый рисунок показывает путь движения указателя по столбцам и страницам для случая, когда начальный адрес столбца установлен в 2, а конечный адрес в 125, начальный адрес страницы установлен в 1, а конечный в 6. Активирован режим горизонтальной адресации. В этом случае становится доступна область отображения между столбцами 2~125 и страницами 1~6. Причём, указатель адреса столбца устанавливается в 2, а указатель адреса страницы в 1.

Управление экраном

Выключение и включение экрана

Код команды: 0xAE~0xAF.

Команда переключает состояние экрана между обычным режимом и спящим. Команда 0xAE переводит экран в спящий режим. Команда 0xAF переводит экран в активный режим.

Включение дисплея

Код команды: 0xA4h/0xA5h.

Команда 0xA4 активирует пиксели дисплея в соответствии с содержимым его оперативной памяти. Команда 0xA5 зажигает все пиксели экрана. Последующая команда 0xA4 возвращает отображение содержимого оперативной памяти.

Установка контраста

Код команды: 0x81, N, где N лежит в диапазоне 0x00~0xFF, значение после сброса 0x7F.

Команда устанавливает уровень контраста для экрана. Ток, требуемый сегментам экрана, увеличивается по мере увеличения контраста.

Инверсное отображение

Код команды: 0xA6h/0xA7h.

Команда определяет каким будет вывод на экран: обычным или инверсным. При нормально выводе единица в оперативной памяти представляется включенным пикселем. В инверсном режиме ноль в оперативной памяти представляется включенным пикселем.

electronics/modules/oled-ssd1306.txt · Последние изменения: 2015/10/08 09:08 — Ruslan Popov