Перейти к содержанию

Чем настройка OLED 128×32 на SSD1306 отличается от 128×64?

Обновлено Редакция GAW

Контроллер SSD1306 рассчитан на панель 128 × 64 точки, а модули 128 × 32 используют только часть его выходов. Если инициализировать такой модуль кодом для 128 × 64, изображение выходит растянутым, через строку или только наполовину. Общее описание контроллера и команд — на странице OLED-дисплей на SSD1306.

Что меняется

Параметр128 × 64128 × 32
A8h, мультиплексирование3Fh (64 строки, значение после сброса)1Fh (32 строки)
DAh, конфигурация COM12h — альтернативная (после сброса)под разводку панели: 02h или 12h
Страницы памяти0–70–3
Буфер кадра128 × 64 / 8 = 1024 байт128 × 32 / 8 = 512 байт
Команда 22h (диапазон страниц)0, 70, 3

Размеры буфера — наш расчёт: в памяти GDDRAM каждая страница — 8 строк по 128 столбцов, по байту на столбец. Значение для DAh зависит от того, как выводы COM разведены на шлейфе конкретной панели: по даташиту это настройка под панель, а не под размер. Если изображение идёт через строку или растянуто, переключите 02h на 12h или обратно.

// SSD1306 128x32 differences from a 128x64 init (SSD1306 Rev 1.1, 10.1.5, 10.1.11, 10.1.18)
static const uint8_t init_128x32[] = {
    0xA8, 0x1F,        // multiplex ratio: 32 rows
    0xDA, 0x02,        // COM pins: sequential, no left/right remap (panel dependent)
    0x22, 0x00, 0x03,  // page range 0..3 for horizontal addressing
};

Остальное — как у 128×64

Адрес I2C, включение умножителя напряжения и команда включения дисплея те же, что у модулей 128 × 64, — они описаны на странице SSD1306; про адреса на шине — термин «Адрес I2C». Почему одни и те же модули бывают с разными контроллерами и разводкой, объясняет термин «Контроллер дисплея». Если нужен монохромный экран крупнее при том же числе выводов, сравните с Nokia 5110 на PCD8544 и другими моделями в разделе «Дисплеи».

Похожие вопросы

Какой адрес I2C у OLED 128×32?

Такой же, как у 128×64: 0x3C или 0x3D в 7-битной записи, в зависимости от уровня на выводе выбора адреса модуля. Если сканер шины находит устройство, а изображения нет, адрес уже ни при чём — проверяйте настройку A8h и DAh.

Почему на экране 128×32 видна только верхняя половина картинки?

Скорее всего, программа рисует для 128×64 и выводит все 8 страниц, а панель показывает только 32 строки. Нужно выводить страницы 0–3 и рисовать в буфере размером 128 × 32: так изображение займёт весь экран.

Можно ли развернуть изображение на 180 градусов?

Да, без перерисовки буфера: команда A1h переставляет столбцы, а C8h меняет направление обхода строк COM. Вместе они дают поворот на 180 градусов.

Источники

  1. Solomon Systech. SSD1306: 128 x 64 Dot Matrix OLED/PLED Segment/Common Driver with Controller, Rev 1.1, апрель 2008 (копия Adafruit) — разд. 8.7: GDDRAM 128 × 64 бит, восемь страниц PAGE0–PAGE7 по 8 строк COM; табл. 9-1 и разд. 10.1.11: A8h — коэффициент мультиплексирования N + 1 от 16 до 64, значения 0–14 недопустимы, после сброса 3Fh (64); разд. 10.1.18 и табл. 10-3: DAh — A[4] = 0 последовательная, 1 альтернативная конфигурация COM (после сброса), A[5] — перестановка COM слева и справа, конфигурацию выбирают под разводку панели; разд. 10.1.5: 22h — начальная и конечная страница для горизонтальной и вертикальной адресации; разд. 10.1.14: C0h/C8h — направление обхода COM; разд. 10.1.15: D3h — вертикальный сдвиг
  2. Solomon Systech. SSD1306 Rev 1.1 (копия из библиотеки контроллеров Crystalfontz) — та же редакция даташита; источник страницы SSD1306 на сайте

Нашли ошибку?