NHD-2.7-12864

Немного допилил и решил положить сюда.
Итак, экранчик NHD-2.7-12864 с контроллером SSD1325.

Общие впечатления — дорого и так себе по качеству. Яркость отдельного пикселя сильно зависит от того, сколько ещё пикселей светится в этой же строке. Поэтому оттенки серого можно считать условными.
ПЗУ с шрифтами, которая идёт в комплекте, электрически непрочная. Выход меги гораздо прочнее… Поэтому, никогда не подключайте пзу напрямую к контроллеру, в разрыв линии SDO (ножка 22) всегда ставьте резистор номиналом 1к. Иначе будет, как у меня: один раз неправильно сконфигурируете порт и больше никогда не будет у вас шрифтов.
Поехали дальше. Узнать, занят ли контроллер — невозможно. Если верить даташиту, при параллельном включении в слове состояния отдаётся только включен экран или нет. При подключении через SPI слово состояния вообще не читается. Поэтому, после использования команд ускорителя надо делать паузу, величину которой можно определить опытным путём. Если появляется мусор на экране — надо делать паузу дольше.
Но в любом случае экранчик очень быстрый, это радует.
Инструкция по использованию SPI. Настройка — mode0, скорость 8 мегабит, быстрее не пробовал.
Пишем данные: Притягиваем к земле CS, отправляем байт, отпускаем CS. Байт падает прямиком в видеопамять, и зажигает два соседних пикселя. Каждые 4 бита определяют яркость одного пикселя. 0 — выключен, 0xF — 100% яркости. После записи байта указатель внутри экранчика приращивается, и следующий записанный байт зажжёт соседние два пикселя. В зависимости от настройки — либо соседние по горизонтали, либо по вертикали. Причём происходит это в окошке выбранного размера. Очень удобно. Можно просто задать окошко размером со знакоместо, или размером с выводимый битмап, а потом просто вылить туда образ, не заботясь об адресах строк, переносе и прочей ботве. Безумно удобно. Круто.
Пишем команду: Притягиваем к земле D/C (pin4), потом CS, пишем байт, отпускаем CS, отпускаем D/C. Именно так, каждый раз посылая байт дёргаем все сигналы. Удивительно, но код команды от параметра оно там как-то само различает.
Инит: дёргаем ему ресет, после запихиваем туда строчку команд 0xae,0xa1,0xc4,0xaf,0x86,0x81,0x7f,0xa0,0x42,0x24,0x00,0x00,63,79,0
Расшифровывается это так:
0xae — погасить экранчик
0xa1,0xc4 — Set Display Start Line 0xC4. Почему 0xC4? Хрен знает, волшебная циферка была подобрана вручную, чтобы попасть первым пикселем в первую строку.
0xaf — включить экранчик
0x86 — установить ток 100% (после сброса он 25%, очень тускло)
0x81,0x7f — установить контрастность 100%
0xa0,0x42 set remap: Enable COM Split Odd Even | Enable Nibble Re-map
0x24,0x00,0x00,63,79,0 — акселератор: заполнение прямоугольника (0,0)(63,79) значением 0 (CLS)

Плохокомментированый код в аттаче. Там типа недоделанный драйвер с функцией Print, с переносом строки и скроллингом экрана. И со шрифтом типа «Здравствуйте восьмидесятые» от синклера.

UPD:
Снедаемый муками совести, немного разбыдлокодил и раскомментировал код.
Теперь почти полноценный драйвер экрана. Умеет тот же жуткий шрифт 8*8, при достижении конца строки сам переносит.
Понимает CR и LF.
Понимает в строке команды позиционирования и управления цветом. То есть в любом месте строки 0x01,xx,yy — переход к позиции XX YY (в знакоместах), а 0x02,XX — управление цветом. Старшие 4 бита = цвет фона для вновь выводимых символов, младшие 4 бита = цвет символа.
Симулятор, а напрямую измерять было лень, какбы говорит нам, что вывод одной буковки занимает 3100 тактов, или 194 мкс при частоте 16МГц.
  • +5
  • 08 апреля 2016, 13:06
  • Gornist
  • 1
Файлы в топике: screen2.zip

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

RSS свернуть / развернуть
а исполнение с нейтрально белым светом есть у данной модели?
0
Не, не видел.
0
Плохокомментированый код в аттаче
Аттач не найден. Алсо, для экранчиков тут есть специальный блог, мона перекинуть туда.
0
  • avatar
  • Vga
  • 08 апреля 2016, 18:12
Поправил аттач.
0
После записи байта указатель внутри экранчика приращивается, и следующий записанный байт зажжёт соседние два пикселя. В зависимости от настройки — либо соседние по горизонтали, либо по вертикали. Причём происходит это в окошке выбранного размера. Очень удобно. Можно просто задать окошко размером со знакоместо, или размером с выводимый битмап, а потом просто вылить туда образ, не заботясь об адресах строк, переносе и прочей ботве. Безумно удобно. Круто.
Это действительно очень удобно, чем обычно все и пользуются. Но не так уж и круто — подобное свойство есть практически во всех TFT дисплейчиках, по крайней мере во всех, с которыми я имел дело. Даешь команду открыть окно с нужными координатами (например для знакоместа или для картинки в нужном месте экрана), потом команду для записи пикселя (обычно это команда 0х22) и заливаешь все пиксели потоком (только для 65К-цветного TFT это два байта на пиксель). При этом скорость вывода картинки или символа вырастает в разы по сравнению с адресным попиксельным выводом. Особенно быстро и удобно, если у процессора есть контроллер внешней памяти, там скорость вывода еще выше.
0
Я тоже авто движение указателя во всех видел с коими работал… Правда не во всех настраивалось в произвольную сторону.
0
Тут самый изюм не только в автосмещении указателя, но и в том, что указатель болтается в пределах определяемого пользователем окна любого размера, а направление перемещения не так уж и важно — нужно его просто учитывать при определении массива выводимых пикселей.
0
И со шрифтом типа «Здравствуйте восьмидесятые» от синклера.
Можете запилить свой шрифт.
0
  • avatar
  • rius
  • 13 апреля 2016, 07:27
Можно-то можно. Скорее всего, так и поступлю.
Наверное, я брюзжу, но в середине девяностых были отличные фонтоварки, которые вытаскивали шрифты из видеокарт, вливали туда временные, и шли в комплекте с целой горой растровых шрифтов. Как-то вот в этом GLCD вот чего-то не хватает…
0
В SSD1325 не хватает?
Всё, что может понадобиться, на все случаи жизни, никто не встраивает. Потому что нельзя объять необъятное.
Но есть попытки — специализированные микросхемы памяти со шрифтами.
0
Не, в программе по ссылке не хватает.
0
Чего не хватает?
0
Ну вот, например, хочу я замутить шрифт размером 6*8 точек. Желательно взять что-нибудь и смасштабировать до этого размера. Какие будут мои действия?
0
Взять наиболее подходящий мелкий шрифт и довести его руками при необходимости. В Windows 10 это Consolas или Lucida Console. Или установить внешние.
0
О! Именно это я имел в виду, когда говорил, что в программе не хватает. А так же возможности вытащить шрифт из бинарника.
0
Чего именно этого-то?
И из какого бинарника? Сейчас шрифты OpenType и TrueType.
0
Этого — значит возможности начать с того, что мне нужно.
Грубо говоря — запустили программку, говорим ей — новый шрифт.
Она такая спрашивает — а вам какой замер надо?
А я такой — а сделай мне, милая — 6 на 13.
Она говорит — ну ништяк, держи набор пустых примитивов. Заполнять чем будем?
А я такой — а вот давай этот шрифт попробуем…
А она такая — блин, там символы больше. Чё делать станем? Отсечь белое, или может отресайзить? Есть типа три алгорима, покажи мышой, как делать.
А я тут такой — милая, а превью мона?

А что имеем сейчас?
Файл — новый — импорт.
Берём Lucida Console, размер 8.
И до тех пор, пока не импортируем — хрен же известно, что получится 7*11. А импортировать по очереди все установленные шрифты, чтобы посмотреть — блин, устаю я от этого геморроя, злюсь и нервничаю.
0
Ага, ясно.
0
А бинарник — это, например, образ ПЗУ, снятый программатором. *.bin, *.hex
Раньше под досом такое все программы умели. Ну это я придираюсь…
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.