Передовица » Hardware » МУАРМ » Блок фортепианной клавиатуры

Блок фортепианной клавиатуры (БФК)

Существовало несколько вариантов клавиатур для ячейки звукосинтеза: 3, 4, 5 или 7 октав, возможно были и другие. В корпусе клавиатуры находятся две платы, основная и дополнительная.

Основная плата. Соединяется кабелем с ЯЗС и является универсальной для всех вариантов клавиатур. Плата может обслуживать 128 клавиш, но её физические размеры (295х45) умещают только 24 (2 октавы). Все необходимые сигналы для остальных клавиш выведены на внутренний разъем XS2.

Дополнительная плата. Представляет собой просто набор дорожек. Служит для размещения дополнительных клавиш и их диодов. Длина платы и количество клавиш на ней зависят от варианта клавиатуры.

* * *

На рисунке изображено общее устройство клавиатуры (версия в три октавы).

Часть 1. Основная плата. Логика, разъем подключениия к ячейке звукосинтеза.

Часть 2. Основная плата, продолжение. Мультиплексор, клавиши, питание.

Часть 3. Дополнительная плата. Показаны соединения для 3 и 4 октав.

* * *

Клавиатура работает следующим образом. На элементах 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" - отпущена).

Но в ЯЗС-то порт с инверсией. Поэтому при чтении из порта инверсный номер клавиши становится прямым. А состояние старшего бита меняется на противоположное: 0 - нажата, 1 - не нажата.

Подача низкого уровня на вход !DREQ приводит к сбросу триггера D8.2, переводу сигнала IRQ в низкий уровень и возобновлению опроса клавиатуры. Данные на выходах D0-D7 при этом сохраняются еще примерно 120 мкс.

Второй цикл выполняется при высоком уровне на выводе 3 D1.1. Этот уровень поступает на вход разрешения записи D6. При этом в ячейку ОЗУ D6 с номером текущей клавиши записывается ее состояние, зафиксированное в первом цикле в триггере D8.1. Во время второго цикла элемент D9.4 блокирует запись в триггер D8.1.

После завершения двух циклов происходит переход к следующей клавише. Сканер клавиатуры поддерживает до 128 клавиш в матрице. Период сканирования составляет примерно 31 мс. Наличие этого интервала между записью предыдущего состояния клавиатуры и проверкой текущего обеспечивает защиту от дребезга контактов.

* * *

Использование материалов проекта agatcomp без получения предварительного письменного разрешения agatcomp запрещено.


Почта для обратной связи: mail@agatcomp.ru


Живое общение по теме Агата: Telegram группа Agatcomp.


Накопленные знания и проекты: тематический ФОРУМ.


© 2004-2024 agatcomp.su / agatcomp.ru

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *