Номер | Название | Конфигурация | Назначение |
---|---|---|---|
5-1, 41-40 | Y1-Y7 | Вход, Выход ОК | Матрица клавиатуры, в режиме ожидания нажатия работают как входы, при нажатой клавише активируется один из выходов ОК |
15-6 | nX0-nX9 | Вход | Матрица клавиатуры |
16 | nSHIFT | Вход | Модификатор нижнего регистра |
17 | nEC1 | Вход | Модификатор алфавита РУС/ЛАТ |
18 | nCTRL | Вход | Модификатор управляющего символа УС (Ctrl) |
19 | nINIT | Вход | Аппаратный сброс, приводит микросхему в исходное состояние, бит разрешения прерываний сбрасывается |
20 | RP1 | Вход, Выход ОК | Времязадающий конденсатор подавления дребезга нажатия клавиш |
21 | GND | Питание | Нулевой потенциал (земля) |
22 | nRP2 | Вход, Выход ОК | Времязадающий конденсатор подавления дребезга отжатия клавиш |
23 | nIRQ | Выход OK | Запрос на прерывание |
24 | nIAKO | Выход | Выход цепочки подтверждения прерывания |
25 | nIAKI | Вход | Вход цепочки подтверждения прерывания |
26 | nDIN | Вход | Строб чтения данных МПИ |
27 | nDOUT | Вход | Строб записи данных МПИ |
28 | nRPLY | Выход ОК | Строб подтверждения транзакции МПИ |
29 | nSYNC | Вход | Строб адреса МПИ |
30 | nCS | Вход | Выбор внутренних регистров микросхемы (регистр данных и управления), микросхема не декодирует самостоятельно nAD0-nAD7. Данный вход защелкивается по ниспадающему фронту nSYNC, низкий уровень разрешает обмен с внутренними регистрами и формирование nRPLY |
31 | EC2 | Вход | Модификатор АР2 |
39 | nAD0 | Вход, Выход-3 | Линия 0 шины данных/адреса МПИ, выдает вектор прерывания и регистры данных и управления при чтении |
32 | nAD1 | Вход, Выход-3 | Линия 1 шины данных/адреса МПИ, выдает вектор прерывания и регистры данных и управления при чтении |
37-33, 38 | nAD2-nAD7 | Вход, Выход-3 | Линии 2-7 шины данных/адреса МПИ, выдает вектор прерывания и регистры данных и управления при чтении |
42 | VCC | Питание | Потенциал +5В (источник питания) |
Микросхема 1801ВП1-014 представляет собой контроллер клавиатуры с интерфейсом МПИ. Из широкоизвестных изделий применялся в домашних компьютерах серии БК-001x. Особенностью 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-выводном корпусе - банально некуда было завести выводы ненужные собственно для работы контроллера входы nAD15-nAD8.
Также стоит отметить полное отсутствие тактирования микросхемы - нет никаких тактовых сигналов. Внутри обнаружился рудиментарный триггер переключателя регистров РУС-ЛАТ, который явно неработоспособен и в схеме БК-001х применяется аналогичный внешний триггер. Сложно сказать, это ошибка схемы или по каким-то соображениям разработчики намерено отказались от этого внутреннего триггера.
Несмотря на то что контроллер 1801ВП1-014 является достаточно простым, использует несколько необычный в наши дни алгоритм обработки клавиатурной матрицы и поддерживает одновременное нажатие только одной клавиши, основную свою задачу он выполнил - разгрузил и так не очень быстрый центральный процессор от функций непрерывного сканирования клавиатуры.