Notice: Memcache::get(): Server localhost (tcp 11211) failed with: Connection refused (111) in /home/a146/www/we.easyelectronics.ru/engine/lib/external/DklabCache/Zend/Cache/Backend/Memcached.php on line 134
И ещё раз SSD1306 / Работа с дисплеями и графикой / Сообщество EasyElectronics.ru

И ещё раз SSD1306

Китайский, IIC, 0,96 дюйма.
Общие впечатления — дёшево и сердито, только очень мало и относительно медленно.



Подключаем через IIC, 400 килобит вполне понимает. Судя по всему, оно не умеет притормаживать хост (Clock stretching using SCL), и на более высоких скоростях падает в ошибку, и утягивает оба сигнала шины в ноль. Так что за скоростью надо следить.

Инит простой:
  1. делаем START
  2. делаем SLAW (0x78)
  3. вливаем туда массив 0xa8, 0x3f, 0xd3, 0x00, 0x40, 0xA1, 0xC8, 0xDA, 0x12, 0x81, 0xFF, 0xA4, 0xA6, 0xD5, 0x80, 0x8D, 0x14, 0xAF, предваряя каждый элемент байтом 0x80
  4. Делаем STOP
PROFIT!!!!

Пара комментариев: Протокол обмена по I2C непонятно описан в даташите на странице 20. Попробую внести немного ясности — после старта и адреса слейва идёт Control Byte, который может принимать значения 0x80,0xC0,0x40, где
  • 0x80 — означает, что следом идёт один байт команды
  • 0xC0 — означает, что следом идёт один байт данных
  • 0x40 — следом идёт много байт данных
К сожалению ситуация, когда идёт сразу массив команд — не предусмотрена. Поэтому при ините приходится записывать перед каждой командой 0x80.
Суть волшебной строчки описана на странице 5 приложения к даташиту. После того, как экранчик скушал её, он готов принимать данные. Каждый записанный байт данных вызывает зажигание 8-ми вертикально расположенных точек на экране. (даташит, стр.25) Не совсем удобно, но что поделать.
Для простоты вывода пришлось положить шрифт на левый бок, вот кстати, весь массив шрифта просто выведен в память. На мелком экране шрифт из прошлого поста выглядит лучше.

Хотел было малость похачить этот экземпляр экранчика — активировать на нём SPI, чтобы работало побыстрее, но потерпел неудачу — не смог отключить вывод CS от земли. Перерезание дорожки не дало нужного результата, вывод продолжал звенеть на землю. А отпаивать шлейф от платы, чтобы посмотреть, где оно там под шлейфом соединено, стало неохота. Возможно, проще купить у Братьев Ляо более другой экранчик с выведенным на колодку SPI.

В аттаче абсолютно некомментированный исходник-демонстратор, нарисовавший весёлую картинку, и в комплекте шрифт, лежащий на боку. Знали бы вы, к какому извращению пришлось прибегнуть, чтобы его сконвертировать…
  • +1
  • 02 мая 2016, 17:40
  • Gornist
  • 1
Файлы в топике: screen2.zip

Комментарии (20)

RSS свернуть / развернуть
Знали бы вы, к какому извращению пришлось прибегнуть, чтобы его сконвертировать…
Неужели вручную?
0
Нет, контроллером. И вылить в виде текста через ком-порт.
0
А почему нельзя было то же самое сделать на ПК?
0
А нечем было на ПК.
0
Как это? На контроллере было чем, а на ПК нечем? Я может чего-то не понимаю, но программа на Си может и на ПК работать.
0
Для контроллера — студия. Оно не умеет екзешник для ПК делать.
0
На ПК программа, создающая массивы байт шрифта.
Массивы компилируются с исходниками программы МК.
В МК программа, обращающаяся к этому массиву для вывода нужного символа.
Ничего сложного. Разве что ассемблер выбран.
0
Лично для меня гораздо удобнее скомпилировать тот же код любым другим десктопным компилятором, убрав при этом платформозависимые части кода.
0
Эммм… А сам редактор шрифтов на ПК не умеет символы поворачивать?
Большинство монохромных экранчиков (вернее их контроллеры) выводят байт как раз в виде колонки пикселей.
0
Да я тут в прошлом посте распинался на тему, что редакторы шрифтов вообще ничего не умеют.
we.easyelectronics.ru/lcd_gfx/nhd-27-12864.html#comment170124
0
0
Надо будет попробовать.
0
Если Вы их не осилили или не поняли, это не значит, что они ничего не умеют.
Вот ещё пару попробуйте:
bitmap2lcd.com/
www.mikroe.com/glcd-font-creator/
Или напишите свой.
0
Для таких случаев может помочь TCC. Мелкий, не требует установки и умеет выполнять программу «в режиме скрипта» (ключ -run).
+2
А можно ткнуть носом с чего начать пользовать подобные штуки? Я совершенно не шарю в консольных компиляторах, сборках и т.п. Могу только наговнокодить в дельфях и визуал студии, с большим трудом.
0
В простейшем случае можно взять IDE для GCC и задать ей tcc.exe как компилятор и линкер и tiny_libmaker.exe как ar (static library linker). Также, вероятно, потребуется make от mingw и некоторые никсовые тулзы вроде rm. Code::Blocks вообще должен уметь TCC из коробки.
При желании работать из консоли — в минимальном случае достаточно указать компилятору список .c файлов, из которых надо скомпилировать exe. Также может потребоваться указать библиотеки, с которыми линковать, в формате -l.
Вот для примера батник для сборки ResGen'а:
tcc main.c series.c resgen.c -o ResGen.exe
windres -i ResistorGenerator_private.rc --input-format=rc -o ResistorGenerator_private.res -O coff
tcc -D_WIN32_IE=0x0400 winmain.c series.c resgen.c ResistorGenerator_private.res -lcomctl32 -o ResistorGenerator.exe

Первая строка собирает консольный ResGen.exe из трех файлов, вторая компилирует файл ресурсов при помощи windres из mingw, третья собирает виндовый ResistorGenerator.exe, ей помимо списка файлов передается имя библиотеки — comctl32.
При желании собирать пофайлово с генерацией объектных файлов — сперва компилируются .c файлы по отдельности командой tcc -c filename.c, затем линкуются — той же командой, что в предыдущем примере, только вместо списка .c файлов передается список .o файлов.
Ну и конечно можно собирать при помощи make. Но этот вариант изучай сам. Для сборки чужих мейкфайлов обычно достаточно поправить в них команды вызова компилятора и линкера — так же, как в случае с IDE.
0
Ох уж этот парсер.
Также может потребоваться указать библиотеки, с которыми линковать, в формате -l.
*в формате -l<libname>
0
Благодарю.
0
Для небольших задач есть Borland C++ 5.02 — старая, продуманная, добротно сделанная, маленькая, быстрая. Где всё сделано для людей, тщательно подогнано, настраивается. А пытаться что-то лепить из непойми каких кусков — только себе вредить…
0
Такие экранчики проще покупать без платы, обвязка там очень простая. И да, медленный он исключительно из-за интерфейса. У меня он и на 9МГц SPI работает аж бегом. И не тормозит, естественно.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.