Библиотечка для OLED дисплея SSD1322 4-wire SPI 256x64 16 оттенков серого

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

На днях получил очень интересный сабж.

Как сторонник минимализма, а также - делать все с нуля, скачал для проверки скетч от EastRising Technology Co.,LTD, который демонстрирует только инициализацию и основные функции.

Увы, скетч откровенно разочаровал скоростью работы, поэтому всю библиотеку (кроме инициализации дисплея) пришлось переписывать с нуля.

А сам дисплей очень понравился. На Arduino Due получается примерно 72 fps.

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

Для начала выкладываю предварительную версию. Проверялась только на Arduino Due.

В дальнейшем планируется развитие:

1. Возможно, будет добавлена кириллица.

2. Возможно, будет добавлен экранный буфер*.

3. Возможно, будет добавлен вывод чисел - целых и с плавающей точкой.

4. Возможно, появится поддержка двух страниц видеопамяти.

5. Возможно, будут примеры с анимацией.

 * Примечание:

Дисплей допускает отображение 16 градаций яркости каждого пикселя (строго говоря, контроллер дисплея позволяет настраивать уровни вручную, но вряд ли на практике может понадобиться что-либо кроме равномерной шкалы).

Соответственно, изображение требует по 4 бита на пиксель или в одном байте хранится два пикселя. У дисплея есть и еще одно [странное] ограничение: адресация ведется с точностью до 2 байтов, т.е. до 4 пикселей. Т.е. на дисплей может быть одномоментно выведен лишь фрагмент, с выравниванием на 4 пикселя по горизонтали (по вертикали такого ограничения нет).

Поэтому попиксельную графику возможно сделать лишь с применением экранного буфера. Размер экранного буфера для одной страницы составляет 8 КБайт. Вариант без буфера может быть использован для контроллеров AVR, а вот с буфером - только при использовании 32-разрядных МК. Впрочем, если попиксельная графика нужна лишь на части площади экрана, такое можно реализовать и на Меге.

А в целом дисплей произвел очень благоприятное впечатление.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Видео работы первоначального варианта: https://youtu.be/c7SvhwqGSiw

Следует отметить, что в реальности изображение намного лучше, чем на видео. На видео присутствуют артефакты: мерцание изображения и "плавающий" скроллинг текста. Первое вызвано несовпадением FPS видеокамеры с внутренней частотой сканирования дисплея, а второе - с несовпадением тех же FPS видеокамеры с программной частотой обновления изображения на экране. Ни того, ни другого глазом не наблюдается.

Исходники:

as_oled_SSD1322.ino

as_oled1322.h

as_oled1322.cpp

font_9x15.c

Pict4.h

Pict5.h

Pict6.h