Top.Mail.Ru
Уведомления
Очистить все

[Решено] Инициализация OLED128x64 (на ssd1306)

(@rodion-2)
Level 3

Здравствуйте! Начал разбираться с дисплеем на контроллере ssd1306, но столкнулся с непонятной строчкой кода в многих исходниках на этот дисплей. Приводится строка displayBuff[x + (y/8) * SSD1306_WIDTH] |= (1 << (y%8)) и говорится, что т.к. для отображения конкретного пикселя необходимо знать состояние остальных в сегменте, то нужно создать буфер в памяти контроллера и загружать его в память дисплея. Никак не могу понять следующее:

1) Что это за буфер, разве нельзя обратиться по странице и сегменту, а потом уже с помощью маски установить нужный бит,

2) Зачем умножать на длину (128 пикселей) страницы?

Цитата
Создатель темы Размещено : 16.09.2021 18:48
Метки темы
Aveal
(@aveal)
Top level Admin

Добрый день! А можете исходники скинуть?

ОтветитьЦитата
Размещено : 17.09.2021 11:31
(@rodion-2)
Level 3

https://habr.com/ru/post/514382/

https://github.com/edosedgar/stm32f0_ARM/blob/master/labs/12_i2c_oled_display/lib/oled_driver.c (строка 209)

ОтветитьЦитата
Создатель темы Размещено : 17.09.2021 12:26
Aveal
(@aveal)
Top level Admin

Навскидку по всей видимости адресация таким образом построена:

ssd1306 1

 

Относительно массива в памяти так (на примере 0-й страницы):

ssd1306 2

 

Выделенные вертикальные пиксели (8 штук) - это один элемент массива (8 бит). Для пикселя с x = 9 и y = 3 по картинке получаем, что это будет [9] элемент массива. По формуле получаем:

x + (y/8) * SSD1306_WIDTH = 9 + 0 * 128 = 9

Соответствует. Для страницы 1:

ssd1306 3

 

Если аналогично прикинуть, то все четко тоже.

Что это за буфер, разве нельзя обратиться по странице и сегменту, а потом уже с помощью маски установить нужный бит

Там запись идет целыми сегментами, то есть один конкретный пиксель нельзя изменить, только 8. Соответственно, надо считывать 8 бит, изменять один из них и записывать обратно (если у дисплея есть функция считывания). Даже если такой вариант есть, то по быстродействию видимо выгоднее целиком все перезаписывать.

ОтветитьЦитата
Размещено : 17.09.2021 16:50
(@rodion-2)
Level 3

Большое спасибо! Теперь стало ясно. 🙂 

ОтветитьЦитата
Создатель темы Размещено : 17.09.2021 17:22
Aveal
(@aveal)
Top level Admin

Хорошо 🙂 

ОтветитьЦитата
Размещено : 18.09.2021 11:37
Поделиться: