Сопроцессор ввода — вывода

В известном русском руководстве по экранчикам на базе HD44780 всю последнюю страницу занимает назойливая реклама чудо-микросхемы CE110, которая призвана решить все проблемы начинающих, или чрезмерно занятых экрановодов.

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

Из тини 2313. Кроме самого экранчика и тиньки нужны будут диоды, по количеству строк в матричной клавиатуре, чтобы поддерживать множественные нажатия, транзистор, чтобы управлять подсветкой экрана, несколько резисторов и конденсаторов. Кварц, конечно же кварц! Если общение с основным процессором будет идти через последовательный порт с высокими скоростями, нужен кварц, потому что изменения частоты встроенного генератора на 5-10% в зависимости от температуры, я видел своими глазами.

Вот и вся схема. Лаконично вышло, и здесь особо нечего даже комментировать. Разве что вот такое уточнение: изображенная схема позволяет подключать сопроцессор, используя UART и I2C. Если отказаться от управления подсветкой экрана, и пересадить линию RS дисплея, и первую строку клавиатуры на 16 ножку процессора, то для коммуникации с сопроцессором можно будет использовать также и SPI. Это на случай, если у кого нет UART и I2C.
Если пожертвовать кварцем, то может заглючить (а может и не заглючить) UART, но при этом освободятся две ножки, на которые можно будет повесить более широкую клавиатуру, или бибикалку, или ещё какую радость.

Вся разводка на один слой не влезла, а второй слой делать было неохота, пришлось сделать три перемычки проводком (фууу какой колхоз, неужто постараться по одному все раскидать низя было? ,) Прим DI HALT), вот они, на монтажке синим нарисованы. Слева восьмиконтактный соединитель, которым сопроцессор подключается к материнскому устройству. Первые шесть контактов стандартный ISP соединитель, разводку которого можно подглядеть в хелпе от Студии, AVR Tools User Guide, а нижние две ножки выводы UART. Через этот соединитель подаётся питание на сопроцессор, и происходит обмен данными, через него же сопроцессор программируется после сборки.

Вид сопроцессора, приклеенного позади экранчика 164.

Программа сопроцессора также проста и незатейлива. Инициализируем экранчик, и ждём данные. В настоящий момент в наличии имеется только UART (38400,8n1) версия прошивки, если кому-нибудь нужна USRT, I2C или SPI версии вы можете изготовить их самостоятельно, доработав напильником прилагающийся исходный текст программы.

Данные от хоста принимаются, используя прерывание, и укладываются в 64-х байтный кольцевой буфер, откуда их извлекает основной цикл прораммы, и отправляет в экранчик по мере готовности. Работать с получившимся сопроцессором просто: всё, что пришло печатается, за исключением некоторых управляющих символов и последовательностей.

  • 0x10 Очистка экрана
  • 0x11 Установка позиции, вторым байтом идёт адрес в DDRAM экранчика, на который нужно переставить курсор
  • 0x12 Установка яркости, второй байт значение. 00 минимальная яркость, 0xFF максимальная яркость.
  • 0x13 Загрузка символа, следом идут 9 байт первый: адрес CGRAM, остальные образ символа.
  • 0x14 Зажечь курсор (по умолчанию включён)
  • 0x15 Погасить курсор

Каких либо ограничений по расположению управляющих последовательностей в выводимом потоке нет.

Вид на окошко терминала, и выведенную строку. Треугольнички самозалитые символы.

Клавиатура опрашивается приблизительно 120 раз в секунду, и имеет программный антидребезг. По обнаружению нажатия, работа клавиатуры запрещается на 0.2 секунды, в течении которых переходные процессы заканчиваются. Каждое нажатие клавиши отправляет хосту скан-код, отпускание ноль. Сканирование осуществляется до первой обнаруженной клавиши, затем прекращается. Поэтому, если на клавиатуре есть клавиша модификатор, нужно позаботится, чтобы она опрашивалась в последнюю очередь. Здесь есть маленькая хитрость выдача сканирующих импульсов в строки клавиатуры реализована записью шаблонов, которые находятся в специальной табличке. Меняя шаблоны местами, можно изменить очерёдность опроса строк клавиатуры. При подготовке шаблонов, нужно не забывать записывать единицы в разряды, соответствующие линиям ввода столбцов, чтобы активировать их подтяжку, иначе клавиатура будет работать со сбоями.

В моём случае клавиатура имеет размерность 6*3, и последним шаблоном указана строка, содержащая клавишу SHIFT, которой соответствует скан-код 04. Одиночное нажатие отпускание клавиши SHIFT выдаёт хосту последовательность 04 00, сначала код клавиши, а потом, при отпускании ноль. Клавиша 1 имеет код 09, и при нажатии SHIFT-1 хост получит последовательность 04 09 , а при отпускании 04 00. То есть: нажат SHIFT, затем Нажата 1, затем единицу отпустили, но SHIFT остаётся нажатым, о чём сопроцессор тут же и докладывает. И только при отпускании всех клавиш передаёт ноль. Напоминаю, что передача кодов происходит только при изменении состояния клавиатуры, автоповтора у неё нет.

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

Дополнения

Пост-процессор клавиатуры
В прилагаемом архиве файл vvsopr-postp.asm. Как он работает? В конце программы есть таблица перекодировки, по которой скан-код клавиши преобразуется в любой другой, например в стандартные коды символов необычайно удобное дополнение, если подключать сопроцессор к компьютеру. С зажатым шифтом уже выдаются коды из другой
половины таблицы. Код отпускания и код Shift тоже продолжают отдаваться, но лёгким движением скальпеля их можно вырезать, и получится занятный гаджет из цифровой клавиатуры и экранчика, подключаемый к COM-порту.

Микро-редактор
Да, да, девочки и мальчики, аппаратный редактор, чтобы было легко вводить всякие параметры для настройки микропроцессорных систем. Обращаться с микроредактором не просто, а очень просто в поток вывода надо поместить три байтика:

  • 0x16 это команда активации микроредактора, а после неё два байта параметров.
  • Первый байт это позиция вывода, такая же как и в команде установки позиции адрес в DDRAMе экранчика, с которого начнётся область строки ввода/редактирования.
  • Второй байт ограничение области ввода по ширине. В программе этот параметр дополнительно обрезается по младшим четырём битам, поэтому может принимать значения от 0 до 15. Нулевое значение, как вы сами понимаете, лишено смысла.

После того, как эти три байта будут переданы сопроцессору, он переходит в особое состояние нажатия клавиатуры передаются редактору. Можно вводить циферки, двигать курсором ничего не передаётся хосту до нажатия клавиши Enter (код определён в начале программы, а местоположение в матрице в таблице перекодировки) в этот момент хост получит готовую отредактированную строку. Или до нажатия
клавиши ESC хост получает только символ ESC, как извещение о том, что пользователь отказался от редактирования значения. После этого сопроцессор выходит из режима редактирования, и работает как обычно. У режима микроредактора есть интересная особенность для него нет разницы, поступил ли символ с клавиатуры, или же из входящего потока и символы, и коды управления обрабатываются одинаково, вне зависимости, как они попали в редактор. Это означает возможность после создания области редактирования, заполнить её неким начальным значением, которое можно исправить, и вернуть обратно хосту. Эта полезная модификация живёт в файле vvsopr-Me.asm. Правда, вы такого ещё не видели?

Файлы к статье

  • vvs.zip исходники и прошивки Все подробно прокомментировано, поэтому у человека мало мальски понимающего ассемблер проблем с подключением и модификацией возникнуть не должно.
  • vvsopr-me.zip дополнения
5 1 голос

Оцените статью!

guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии