После того, как стало понятно, как работать с ключами 1561КТ3, можно переходить к управлению ими в составе УНЧ приемника с помощью контроллера. Схема коммутатора с управлением от Arduino Pro Mini приведена на рис. 1.
Конечно, при питании 3 В контроллер уже не работает, поэтому минимальное напряжение питания составляет 4 В.
приемнике "Урал-авто-2" имеется один дополнительный вход для подключения внешнего источника звука. Поскольку есть мысль о подключении к усилителю еще одного источника, то желательно иметь три входа УНЧ, и для их коммутации можно обойтись тремя ключами из четырех, имеющихся в микросхеме КТ3 (на схеме рис. 1 "Вход 1"... "Вход 3"). Еще один ключ будет использован для управления подсветкой шкалы приемника (светодиод "Подсветка шкалы").
Плата Arduino Nano (с извлеченной из колодки микросхемой контроллера!!!) используется только для загрузки программы и на схеме приведена для справки.
В приемнике имеется отдельная кнопка для включения подсветки (рис. 2), эту кнопку и попробуем использовать для переключения режимов.
Сначала составим небольшую тестовую программку для проверки работы кнопки (здесь можно посмотреть полный текст тестовой программы), а наблюдать за ее работой будем с помощью светодиода подсветки (рис. 3). Ток через светодиод подсветки стабилизирован генератором тока на транзисторе VT1, а его величина устанавливается резистором R7.
На рис. 4 представлена часть программы, где определены рабочие ячейки и используемые константы.
В качестве входа кнопки будет использован вход INT1 (контакт 3 платы, вход 3 порта D контроллера). Обработка нажатия/отпускания кнопки будет производиться с помощью аппаратного прерывания INT1, а устранение дребезга — с помощью 8-разрядного таймера TIMER2.
В контроллере имеется два входа внешних прерываний — INT0 и INT1. Для управления ими используются общие регистры: регистр контроля внешних прерываний (EICRA — рис. 5), который определяет условие для вызова прерывания, и регистр маски внешних прерываний (EIMSK — рис. 6), который разрешает/запрещает прерывания. Список условий вызова внешнего прерывания приведен на рис. 7.
В соответствии с рис. 6 выберем режим вызова прерывания по изменению уровня на входе INT1, чтобы отслеживать как нажатие, так и отпускание кнопки.
Для таймера 2 регистров управления больше. Первый из них — это контрольный регистр А таймера (TCCR2A — рис. 8), который устанавливает режим его срабатывания.
Зависимость режима работы таймера от состояния битов WGM21 и WGM20 этого регистра приведена на рис. 9.
Чтобы имет возможность изменять задержку на дребезг, используем режим сравнения по регистру OCR2A (режим CTC). В этот регистр будем загружать значение, с которым будет сравниваться счетчик таймера.
Еще один регистр — контрольный регистр B таймера (TCCR2B — рис. 10), с помощью которого устанавливается предделитель тактовой частоты счетчика таймера.
Для установки коэффициента деления в этом регистре следует установить биты CS20...CS22 в соответствии с рис. 11.
И, наконец последний регистр таймера, который будет использован (но не последний регистр этого таймера) — регистр маски прерываний таймера (TIMSK2 — рис. 12).
Устанавливая/сбрасывая бит OCIE2A этого регистра будем разрешать/запрещать прерывания таймеру.
Подпрограммы прерываний ISR(INT1_vect) и ISR(TIMER2_COMPA_vect) приведены на рис. 13.
Для предотвращения вызова прерывания таймера в те моменты, когда состояние кнопки не изменилось, используем не сброс маски прерываний, а установку регистра предделителя TCCR2B в 0, т. е. попросту останавливаем таймер. В процессе проверки программы было обнаружено, что если таймер продолжает считать, то даже в случае запрета прерывания, иногда (возможно из-за срабатывания "отложенного" прерывания) происходит "лишнее" срабатывание кнопки. В то время как при остановленном таймере, даже если прерывания не запрещены, они не вырабатываются по чисто техническим причинам — из-за отсутствия на входе таймера тактовых импульсов.
Величина задержки записана в переменную KEY_delay (см. рис. 4). Это сделано для того, чтобы можно было изменять величину задержки в пределах от 1 до 255 (напомню, что таймер 2 — восьмиразрядный). Длительность задержки (в мкс), с учетом 4 МГц тактовой частоты контроллера, можно рассчитать по следующей формуле: T = 250 * N, где N — записанное в KEY_delay число.
В процессе работы выяснилось, что для кнопок с пружинным контактом (кнопка B на рис. 14 или наши кнопки типа MT) достаточно уже 5...10 мс, но вот кнопки нажимного действия (переключатель A на рис. 14), к сожалению, иногда дают ложное срабатывание даже при максимальной задержке в 65 мс. Кнопка приемника "Урал-авто-2" (см. рис. 2) относится примерно к такому типу, хотя пружинка там и присутствует.
Связано это с тем, что в кнопках с пружинным контактом небольшое ослабление нажатия не приводит к нарушению соединения, т. к. работает пружина, а в переключателе нажимного действия, где контакт обеспечивается только силой прижима, любое ослабление давления может приводить к нарушению контакта и, как следствие — к срабатыванию кнопки. Т. е. это уже не "дребезг", а именно ложное срабатывание. Насколько этот эффект будет сказываться на работе, и не придется ли менять кнопку в приемнике — покажут дальнейшие испытания.
Настройка всех параметров прерывания производится в разделе setup() программы. Там же произведена установка выхода 4 (линия PD4 порта ввода/вывода D контроллера) в высокое состояние, для включения входа 1 как источника для УНЧ.
Как выше указано, эта программа — тестовая, предназначенная для отладки подпрограмм прерываний. Далее займемся практическим применением возможностей контроллера для управления как подсветкой, так и аналоговым коммутатором.