LABA 120 - Программируем Oled Дисплей ssd1306_128x64 В BasCom AVR

LABA 120 - Программируем Oled Дисплей
ssd1306_128x64 В BasCom AVR




Замечательная вещица, подключается по квадратной шине
т.е. I2C. У нас в Омске стоит 280 рябчиков
На картинках в интернете может показаться большим
но не обольщайтесь. Он размером с почтовую марку




При разрешении 128 на 64 пикселя может вывести
шрифтом 8х8 - 8 строк по 16 символов в каждой.

С данным шрифтом
две верхние строки могут отличаться цветом от остальных
Цвета бывают разные. У меня например желтый.
Шрифтов имеется несколько разных.

В самом BasCom AVR есть редактор шрифтов.



Menu Tools - Font editor
Но у меня оказалось несколько вполне приличных
С размерами 6х8 8х8 12х16 16х16 пикселей. Русские буквы имеются!

Также на экран можно выгрузить монохромную картинку и не одну,
соответственно 128х64 пикселя, Картинки занимают место в памяти программ.
Так что количество их не безгранично

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



Есть уменьшенный вариант ssd1306_128x32
Функционирует почти также, но есть нюансы



Для работы в BasCom AVR понадобится подключить
библиотеку glcdSSD1306-I2C.lib

Тут легкая печалька, библиотека крайне аскетична
из операторов удалось найти

CLS - стирание всего экрана
Setfont font6x8 - Установить шрифт

Lcdat 1 , 1 , "HTTP://AEHA.NAROD.RU/" - Вывести строку в позицию



если набрать Lcdat 1 , 1 , "HTTP://AEHA.NAROD.RU/" , 1 (в конце ",1")строка отобразится инверсно



Showpic 0 ,0 , P2 - загрузить картинку в позицию
Р2 - метка картинки



P2 :
$bgf "pic2.bgf" ' include the picture data

картинка хранится в каком то своем формате
в BasCom AVR есть встроенный редактор изображений



Menu - Tools - Graphic converter
В который методом копипаста (кнопка Paste) можно добавить любую
картинку, И затем сохранить (кнопка Save)
в формате понятном для BasCom AVR . Как я понял сохранять нужно
в папке программы

В низу окна конвертера графики, нужно указать размер вашего
графического дисплея, ssp1306_128x64 или ssp1306_128x32
поставить птицу в чекбокс SED series . тогда изображение
займет весь экран



В противном случае, оно выведется на дисплей в восьми уменьшенных
копиях, видимо что то связано с организацией памяти контролера дисплея



Загружаемые в программу шрифты и картинки, занимают место в
памяти программ, Картинка сожрет около килобайта, шрифт тоже



А в контролерах имеется

Attiny85 - 8K
ATmega48 - 4K
ATmega88 - 8K
ATmega168 - 16K
ATmega328 - 32K


памяти программ, ATTINY2313 с его 2К тут делать нечего

В общем и целом программа для контроллера Mega328p

начинается так, а дальше по своему усмотрению

$regfile = "M328pdef.DAT"
$crystal = 8000000

Config Scl = Portc.5 ' Здесь настройки I2c ардуиновские, но можно любые
Config Sda = Portc.4

$lib glcdSSD1306-I2C.lib"

$include "font6x8.font"
$include "font8x8.font"

Waitms 200
Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1306"

I2cinit
Setfont font8x8
Lcdat 4 , 1 , "HTTP://AEHA.NAROD.RU/*"

wait 3

Showpic 0 , 0 , P1

P1 :
$bgf "pic1.bgf" ' Это картинка