Библиотечка для OLED дисплея SSD1322 4-wire SPI 256x64 16 оттенков серого
- Войдите на сайт для отправки комментариев
На днях получил очень интересный сабж.
Как сторонник минимализма, а также - делать все с нуля, скачал для проверки скетч от EastRising Technology Co.,LTD, который демонстрирует только инициализацию и основные функции.
Увы, скетч откровенно разочаровал скоростью работы, поэтому всю библиотеку (кроме инициализации дисплея) пришлось переписывать с нуля.
А сам дисплей очень понравился. На Arduino Due получается примерно 72 fps.
Дисплей поддерживает две экранные страницы, т.е. можно постепенно заполнять одну, а показывать другую, потом переключить страницы. При этом все происходит мгновенно и никаких дефектов на изображении не наблюдается.
Для начала выкладываю предварительную версию. Проверялась только на Arduino Due.
В дальнейшем планируется развитие:
1. Возможно, будет добавлена кириллица.
2. Возможно, будет добавлен экранный буфер*.
3. Возможно, будет добавлен вывод чисел - целых и с плавающей точкой.
4. Возможно, появится поддержка двух страниц видеопамяти.
5. Возможно, будут примеры с анимацией.
* Примечание:
Дисплей допускает отображение 16 градаций яркости каждого пикселя (строго говоря, контроллер дисплея позволяет настраивать уровни вручную, но вряд ли на практике может понадобиться что-либо кроме равномерной шкалы).
Соответственно, изображение требует по 4 бита на пиксель или в одном байте хранится два пикселя. У дисплея есть и еще одно [странное] ограничение: адресация ведется с точностью до 2 байтов, т.е. до 4 пикселей. Т.е. на дисплей может быть одномоментно выведен лишь фрагмент, с выравниванием на 4 пикселя по горизонтали (по вертикали такого ограничения нет).
Поэтому попиксельную графику возможно сделать лишь с применением экранного буфера. Размер экранного буфера для одной страницы составляет 8 КБайт. Вариант без буфера может быть использован для контроллеров AVR, а вот с буфером - только при использовании 32-разрядных МК. Впрочем, если попиксельная графика нужна лишь на части площади экрана, такое можно реализовать и на Меге.
А в целом дисплей произвел очень благоприятное впечатление.
Видео работы первоначального варианта: 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