Сообщения без ответов | Активные темы
Текущее время: 22 дек 2024, 12:16
|
Страница 1 из 1
|
[ Сообщений: 4 ] |
|
Автор |
Сообщение |
Vslav
Зарегистрирован: 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 |
|
|
bk-m
Зарегистрирован: 11 май 2013, 22:52 Сообщений: 4 Откуда: Минск
|
Re: Цифровая археология 1801: одноклавишный 014
014 разрабатывалась вовсе не для БК-0010, возможно это наследство от прототипа-макета БК-0001 - явно видны черты от 7-битных терминалов и от клавиатур первых ДВК с кодом КОИ-7.
Последний раз редактировалось bk-m 17 май 2015, 07:47, всего редактировалось 2 раз(а).
|
28 июн 2014, 17:25 |
|
|
Vslav
Зарегистрирован: 20 май 2013, 11:45 Сообщений: 18
|
Re: Цифровая археология 1801: одноклавишный 014
Возможно что и разрабатывался для терминала, я не в курсе. Если у Вас есть больше конкретной информации - отпишитесь, думаю это будет интересно. Мне что-то казалось что 014 применен в пишмашинке "Ромашка", но там обнаружился 8279. Возможности ВП1-014, конечно, скромные, но с учетом входа EC2 и двух векторов прерываний можно изловчится и получать 8-битный код при желании.
|
28 июн 2014, 21:54 |
|
|
bk-m
Зарегистрирован: 11 май 2013, 22:52 Сообщений: 4 Откуда: Минск
|
Re: Цифровая археология 1801: одноклавишный 014
- (изловчились с плохим итоговым результатом ...) В БК используется версия КОИ-8 с псевдографикой, соответственно пришлось его формировать из 7-битного кода выдаваемого ВП1-014 в драйвере клавиатуры со всякими извращениями по двум векторам прерываний. Если-бы этот контроллер клавиатуры делали именно для БК он был бы восьмибитным и более простые драйвера с одним вектором прерывания занимали меньше места, соответственно в Мониторе РЕ2-017 хватило бы места на команды записи на магнитофон и передачи на линию. Там есть соответствующие ЕМТ для записи-передачи но не хватило буквально сотни байт на оформление в виде внешних команд.
|
29 июн 2014, 02:03 |
|
|
|
Страница 1 из 1
|
[ Сообщений: 4 ] |
|
Кто сейчас на форуме |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2 |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
|
закрыть
Советскому бытовому " БК-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
|