Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

Шаг 5. Переходим непосредственно к разработке устройств и программ 255 ков для каждого разряда порта PD должны быть активизированы встро ­ енные резисторы нагрузки. Для подключения звукоизлучателя (динамика) применяется ключе ­ вой каскад на транзисторе VT1. Это самый простой способ получить звук достаточной громкости, учитывая, что наш сигнал — это прямоугольные импульсы с амплитудой, почти равной напряжению питания. Транзисторный каскад нужен лишь для повышения нагрузочной способности. Однако подобная схема имеет и свой недостаток. В отсутствие звуко ­ вого сигнала на выходе 15 микроконтроллера обязательно нужно уста ­ новить низкий логический уровень. Высокий логический уровень при ­ ведет к тому, что транзистор VT1 будет постоянно открыт. Это вызовет недопустимо большой ток через головку VF1. Постоянно протекающий ток через обмотку динамика вызовет излишнюю потерю мощности и может даже вызвать выход из строя как транзистора, так и динамика. При составлении программы мы должны учесть этот момент. Алгоритм На первый взгляд алгоритм такого устройства очень простой. При замыкании контактов любого из датчиков микроконтроллер должен загрузить в регистр совпадения нужный коэффициент и подключить выход таймера к выводу ОС1В. При размыкании контактов датчика микроконтроллер должен отключить сигнал от внешнего вывода ОС1В и подать на него низкий логический уровень. Если контакты всех датчиков разомкнуты, то внешний вывод должен оставаться отключенным. Однако схема построена таким образом, что ничто не мешает одновре ­ менно замкнуться сразу нескольким контактам. Возникает вопрос: что делать в этом случае? Самый правильный ответ — обеспечить систему приоритетов. При замыкании нескольких контактов программа должна реагировать лишь на один из них. На тот, приоритет которого выше. Обычно в таких случаях используется следующий прием. Программа поочередно проверяет состояние всех датчиков, например, справа налево. Обнаружив первый же замкнутый контакт, программа прекра ­ щает сканирование и выдает звуковой сигнал, соответствующий этому датчику. Договоримся, что датчику, подключенному к входу PD.0, будет соот ­ ветствовать нота «До». Следующему датчику — нота «Ре», и так далее до ноты «Си». Коэффициенты деления для каждой из нот выбираются по законам музыкального ряда. Подробнее о выборе коэффициентов деле ­ ния для синтезатора музыкального ряда можно узнать из [6].

RkJQdWJsaXNoZXIy MTExODQxMg==