Клавиатуру пришлось подвергнуть мелкому ремонту - внутри отвалились 3 проводка: болталась земля от разъема наушников, отвалился провод от общей шины и отвалился разряд D0. Чтобы последний припаять пришлось разобрать всю клавиатуру полностью, а потом медленно и печально все 36 контактов от обеих плат просовывать в направляющие, а потом в рычаги клавиш.
Пока я проверил клавиатуру автономно (только питание на нее подал), но мне этого хватило, чтобы понять, как она работает. Кстати, неплохо бы номера элементов подписать на схеме.
====
Клавиатура работает следующим образом. На элементах D9.2 и D9.3 собран тактовый генератор с частотой примерно 33 кГц. Импульсы с него поступают на формирователь фаз D7.1. Тактирование может быть в любой момент остановлено при подаче логической "1" на вывод 1 D9.1.
На триггере D7.2 сделан делитель на 2. Импульсы с частотой 8,3 кГц с него поступают на схему сканирования клавиатуры на счетчиках D1.1, D1.2, дешифраторах D2, D3 и мультиплексоре D5.
Для музыкальной клавиатуры необходимо точно фиксировать не только момент нажатия клавиш, но и их отпускания. В связи с этим нужно хранить состояние каждой клавиши в момент предыдущего опроса. Для этого используется ОЗУ D6.
Сканер клавиатуры имеет два цикла работы:
1) сравнение текущего состояния клавиши с ранее сохраненным в D6;
2) запись текущего состояния клавиши в D6.
Первый цикл выполняется при низком уровне на выводе 3 D1.1. Состояние текущей сканируемой клавиши запоминается в триггере D8.1, одновременно из ячейки ОЗУ D6 с номером текущей клавиши считывается ранее записанное состояние, после чего элементом D4.2 выполняется сравнение текущего и ранее записанного состояний. После этого результат сравнения запоминается в триггере D8.2. Если состояние клавиши изменилось, в триггер записывается логическая "1". Это приводит к остановке тактирования схемы и подаче высокого уровня на выход IRQ.
Схема остается в этом состоянии до тех пор, пока на вход !DREQ не будет подан низкий уровень. В это время номер клавиши и ее состояние могут быть считаны на выходах D0-D7. Разряды номера клавиши выдаются на выходы D0-D6 в инвертированном виде. Состояние клавиши выдается на выход D7 ("1" - нажата, "0" - отпущена).
Подача низкого уровня на вход !DREQ приводит к сбросу триггера D8.2, переводу сигнала IRQ в низкий уровень и возобновлению опроса клавиатуры. Данные на выходах D0-D7 при этом сохраняются еще примерно 120 мкс.
Второй цикл выполняется при высоком уровне на выводе 3 D1.1. Этот уровень поступает на вход разрешения записи D6. При этом в ячейку ОЗУ D6 с номером текущей клавиши записывается ее состояние, зафиксированное в первом цикле в триггере D8.1. Во время второго цикла элемент D9.4 блокирует запись в триггер D8.1.
После завершения двух циклов происходит переход к следующей клавише. Сканер клавиатуры поддерживает до 128 клавиш в матрице. Период сканирования составляет примерно 31 мс. Наличие этого интервала между записью предыдущего состояния клавиатуры и проверкой текущего обеспечивает защиту от дребезга контактов.