Ответить на тему  [ Сообщений: 4 ] 
 
Автор Сообщение

Зарегистрирован: 20 май 2013, 11:45
Сообщений: 18
Сообщение Цифровая археология 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]
Скачиваний: 1450
Комментарий к файлу: Проект Quartus и исходники на Verilog
014.rar [8.8 KiB]
Скачиваний: 1220
Комментарий к файлу: Схема матрицы клавиатуры БК-0011М
keybk.pdf [73.92 KiB]
Скачиваний: 1352


28 июн 2014, 16:47
Профиль

Зарегистрирован: 11 май 2013, 22:52
Сообщений: 4
Откуда: Минск
Сообщение Re: Цифровая археология 1801: одноклавишный 014
014 разрабатывалась вовсе не для БК-0010, возможно это наследство от прототипа-макета БК-0001 - явно видны черты от 7-битных терминалов и от клавиатур первых ДВК с кодом КОИ-7.


Последний раз редактировалось bk-m 17 май 2015, 07:47, всего редактировалось 2 раз(а).



28 июн 2014, 17:25
Профиль

Зарегистрирован: 20 май 2013, 11:45
Сообщений: 18
Сообщение Re: Цифровая археология 1801: одноклавишный 014
Возможно что и разрабатывался для терминала, я не в курсе. Если у Вас есть больше конкретной информации - отпишитесь, думаю это будет интересно. Мне что-то казалось что 014 применен в пишмашинке "Ромашка", но там обнаружился 8279. Возможности ВП1-014, конечно, скромные, но с учетом входа EC2 и двух векторов прерываний можно изловчится и получать 8-битный код при желании.


28 июн 2014, 21:54
Профиль

Зарегистрирован: 11 май 2013, 22:52
Сообщений: 4
Откуда: Минск
Сообщение Re: Цифровая археология 1801: одноклавишный 014
Vslav писал(а):
Возможно что и разрабатывался для терминала, я не в курсе. Если у Вас есть больше конкретной информации - отпишитесь, думаю это будет интересно. Мне что-то казалось что 014 применен в пишмашинке "Ромашка", но там обнаружился 8279. Возможности ВП1-014, конечно, скромные, но с учетом входа EC2 и двух векторов прерываний можно изловчится и получать 8-битный код при желании.

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


29 июн 2014, 02:03
Профиль
Показать сообщения за:  Сортировать по:  
Ответить на тему   [ Сообщений: 4 ] 

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000 - 2011 phpBB Group.
Design creat de Florea Cosmin Ionut | Translation by WebSok.Ru

закрыть

Советскому бытовому " БК-0011М" посвящается...


Вопреки всем скептикам и недоброжелателям, дело БК живет и развивается. Не за горами день, когда будет выпущен в свет "БК-0012 Pulsar" - расширенный FPGA-клон БК-0011М. Пока же на данном форуме Вы можете ознакомиться с репликами БК-0011М(-01), приставкой Booster-11, репликой контроллера SMK64 (а также его FPGA-клоном - SMK512), аппаратным эмулятором ПЗУ КР1801РЕ2Б, блоками расширения с процессорами ВМ2/ВМ3, и другими интересными материалами и работами.
Ведутся работы по отрисовке в 3D корпусов БК, МСТД, оригинальных клавиатуры, джойстика и мыши, но пока не удается найти их производство по приемлемой цене при малом тираже. Выполнено производство новодельных пленок для клавиатур БК-0011М.
Важным для возрождения БК и его сообщества является новый софт (игры и демо в особености), и они периодически появляются!
Удалось решить многие hard-задачи, но нет системных программистов, востребованных в проекте БК-0012, как минимум для тестирования. Требуется разработка полноценного Win32-компилятора Си в bin-файлы БК.
Релизован полноценный каталогизатор всего софта БК, с удобным интерфейсом. Осталось выполнить собственно большую задачу каталогизации.

Ждем ваших откликов, идей. Сообщайте о данном ресурсе всем, кто увлекался в прошлом БКшкой, присылайте их и свои e-mail для рассылки новостей из мира БК.

nimamov@mail.ru