Бытовой ретро-компьютер своими руками
http://forum.pk-fpga.ru/

Цифровая археология 1801: одноклавишный 014
http://forum.pk-fpga.ru/viewtopic.php?f=43&t=5550
Страница 1 из 1

Автор:  Vslav [ 28 июн 2014, 16:47 ]
Заголовок сообщения:  Цифровая археология 1801: одноклавишный 014

Изображение


Микросхема 1801ВП1-014 представляет собой контроллер клавиатуры с интерфейсом МПИ. Из широкоизвестных изделий применялся в домашних компьютерах серии БК-001x. После многих лет разработки, применения и использования различных алгоритмов сканирования матриц клавиатуры (с цифровой фильтрацией дребезга контактов, с произвольным перекодированием, с поддержкой нажатия нескольких клавиш одновременно, с опросом в малопотребляющих режимах, в схемах совмещения сигналов матрицы с другими вспомогательными сигналами и прочими сегодняшними "плюшками") было довольно интересно познакомится с алгоритмом сканирования 1801ВП1-014. Но тут ждал сюрприз - никакого сканирования 1801ВП1-014 не производит! Рассмотрим процесс взаимодействия контроллера с матрицей подробнее.

Контроллер имеет набор входов "линейки" - условно называются X0-X9. И набор входов-выходов "столбцов" - условно называются Y1-Y7. Роль "столбца" Y0 играет шина "земли". Также имеется две времязадающих схемы, представляющих собой внешние кондесаторы, подключенные к выводам RP1 и RP2. Конденсаторы могут независисмо разряжаться на "землю" внутренним ключом контроллера (выводы RP1 и RP2 являются как входами так и выходами по схеме "открытый коллектор"), заряд конденсторов осуществляется через внешние резисторы. Номиналы RC определяют характерное время, в схеме БК-001х R обычно порядка 200 килоом, С порядка 300 нанофарад и характерное время составляет примерно 60 миллисекунд. Схема на RP1 отвечает за фильтрацию дребезга механических контактов при нажатии клавиш, схема на RP2 отвечает за фильтрацию дребезга при отжатии клавиш.

В исходном состоянии все клавиши отжаты, на входах X0-X9 присутствует высокий уровень, задаваемый внешними резисторам, в схеме БК-001х используется номинал 22 килоом. При этом на внутренней цепи ~XANY сформирован высокий уровень, сигнал на внутренней цепи LOCK также имеет высокий уровень. Ключ RP1 открыт и соответствующий конденсатор разряжен. Ключ RP2 закрыт и его конденсатор заряжен. Выводы Y1-Y7 в этот момент работают как входы, транзисторы "открытых коллекторов" закрыты. Через внешние резисторы на входы Y1-Y7 подается низкий уровень, в схеме БК-001х используется номинал 180 килоом.

При нажатии клавиши в некотором столбце Yi происходит следующее - на соответствующем входе Yi появляется высокий уровень - через делитель 22/180 килоом. На каждом входе Yi имеется отдельный RS-триггер, который сбрасывается при обнаружении высокого уровня на входе Yi и устанавливается низким уровнем сигнала LOCK (уже после того как клавиши будут обработаны). При сбросе триггера соответстующий выход типа "открытый коллектор" переходит в состояние низкого уровня и вывод Yi начинает работать как выход. Через замкнутую клавишу генерируемый выходом Yi низкий уровень поступает на соответствующий вход Xj. Если же клавиша замкнута в столбце Y0 (который виртуальный, вместо выхода Yn используется "земля") то низкий уровень на вход Xj поступает немедленно, а ни один из триггеров Yi не переходит в сброшенное состояние.
Таким образом контроллер по номеру сброшенного триггера Yi (или ни одному не сброшенному) может определеть номер столбца, а по номеру входа Xj может определить номер линии замкнутой клавиши.

По обнаружению низкого уровня на любом из входов Xj ключ на RP1 закрывается и конденсатор начинает заряжаться. Простая комбинационная схема формирует код клавиши в зависимости от номера столбца, линейки и состояния управляющих входов SHIFT, CTRL, EC2, EC1. Любопытно что формируемый код можно в этот момент наблюдать в регистре данных, но бит готовности еще не установлен. В момент окончания заряда конденсатора вычисленный код клавиши фиксируется во внутреннем регистре и выставляется запрос на векторное прерывание. В зависимости от кода клавиши при подтверждении прерывания формируется вектор 060 или 274. Любопытно что сформированный запрос на прерывание фиксируется во внутреннем триггере и может быть сброшен только циклом подтверждения прерывания. После считывания кода центральным процессором контроллер ожидает отпускания клавиши - пропадания низкого уровня на входах Xj. Когда клавиша отпущена, ключ RP2 закрывается и конденсатор начинает заряжаться. До момента окончания заряда контроллер игнорирует изменения состояний матрицы клавиатуры - таким нехитрым образом фильтруется дребезг при размыкании контактов.

Интересно что базовый адрес внутренних регистров контроллера на шине МПИ формируется внешней схемой (в БК-001х это чип-компаньон 1801ВП1-037), сам контроллер 1801ВП1-014 анализирует только низкий уровень на входе nCS. Для внутреннего декодирования адреса, видимо, оказалось недостаточно выводов в стандартном для 1801-ой серии 42-выводном корпусе - банально некуда было завести выводы ненужные собственно для работы контроллера входы AD15-AD8. Также стоит отметить полное отсутствие тактирования микросхемы - нет никаких тактовых сигналов. Внутри также обнаружился рудиментарный триггер переключателя регистров РУС-ЛАТ, который явно неработоспособен и в схеме БК-001х применяется аналогичный внешний триггер. Сложно сказать, это ошибка схемы или по каким-то соображениям разработчики намерено отказались от этого внутреннего триггера.

Несмотря на то что контроллер 1801ВП1-014 является достаточно простым, использует несколько необычный в наши дни алгоритм обработки клавиатурной матрицы и поддерживает одновременное нажатие только одной клавиши, основную свою задачу он выполнил - разгрузил и так не очень быстрый центральный процессор от функций непрерывного сканирования клавиатуры, за что ему следует сказать спасибо.

P.S. В приложении традиционно внутренняя схема контроллера, Верилог-описание и тестбенч. Также приложена схема матрицы клавиатуры БК-0011М. На схеме также приведена табличка аппаратных кодов клавиш, которые считываются непосредственно из регистра контроллера (скан-коды, до обработки подпрограммами ПЗУ).


Комментарий к файлу: Схема 1801ВП1-014
014.pdf [195.94 KiB]
Скачиваний: 605
Комментарий к файлу: Проект Quartus и исходники на Verilog
014.rar [8.8 KiB]
Скачиваний: 442
Комментарий к файлу: Схема матрицы клавиатуры БК-0011М
keybk.pdf [73.92 KiB]
Скачиваний: 555

Автор:  bk-m [ 28 июн 2014, 17:25 ]
Заголовок сообщения:  Re: Цифровая археология 1801: одноклавишный 014

014 разрабатывалась вовсе не для БК-0010, возможно это наследство от прототипа-макета БК-0001 - явно видны черты от 7-битных терминалов и от клавиатур первых ДВК с кодом КОИ-7.

Автор:  Vslav [ 28 июн 2014, 21:54 ]
Заголовок сообщения:  Re: Цифровая археология 1801: одноклавишный 014

Возможно что и разрабатывался для терминала, я не в курсе. Если у Вас есть больше конкретной информации - отпишитесь, думаю это будет интересно. Мне что-то казалось что 014 применен в пишмашинке "Ромашка", но там обнаружился 8279. Возможности ВП1-014, конечно, скромные, но с учетом входа EC2 и двух векторов прерываний можно изловчится и получать 8-битный код при желании.

Автор:  bk-m [ 29 июн 2014, 02:03 ]
Заголовок сообщения:  Re: Цифровая археология 1801: одноклавишный 014

Vslav писал(а):
Возможно что и разрабатывался для терминала, я не в курсе. Если у Вас есть больше конкретной информации - отпишитесь, думаю это будет интересно. Мне что-то казалось что 014 применен в пишмашинке "Ромашка", но там обнаружился 8279. Возможности ВП1-014, конечно, скромные, но с учетом входа EC2 и двух векторов прерываний можно изловчится и получать 8-битный код при желании.

-
(изловчились с плохим итоговым результатом ...)
В БК используется версия КОИ-8 с псевдографикой, соответственно пришлось его формировать из 7-битного кода выдаваемого ВП1-014 в драйвере клавиатуры со всякими извращениями по двум векторам прерываний. Если-бы этот контроллер клавиатуры делали именно для БК он был бы восьмибитным и более простые драйвера с одним вектором прерывания занимали меньше места, соответственно в Мониторе РЕ2-017 хватило бы места на команды записи на магнитофон и передачи на линию. Там есть соответствующие ЕМТ для записи-передачи но не хватило буквально сотни байт на оформление в виде внешних команд.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/