Аппаратные таймеры/счетчики микроконтроллеров AVR ценный и ходовой ресурс. Чаще всего при их использовании возникает две проблемы – нехватка количества таймеров и невозможность получить временные интервалы большой длительности. Обе эти проблемы можно решить с помощью программных таймеров. Вариантов реализации программных таймеров существует довольно много. Один из них описан в этой статье.

   Память программ микроконтроллеров AVR, помимо своего прямого предназначения может быть использована для хранения константных данных. Для этого в AVR ассемблере есть специальные директивы .db и .dw. Первая определяет константный байт или несколько байтов, вторая константное слово или несколько слов. (слово - это 2 байта). Для того чтобы указать, что заданные константы расположены во flash памяти микроконтроллера,  используется директива .cseg 

   Таймеры/счетчики микроконтроллеров AVR имеют несколько режимов работы. Один из них, СТС  - сброс при совпадении, мы уже использовали. Давайте разберемся  с другим режимом - Fast PWM.
   PWM (Pulse-width modulation или по-русски широтно-импульсная модуляция) – это вид модуляции цифровых сигналов, при котором частота сигнала остается  постоянной, а длительность меняется. С помощью ШИМ можно регулировать мощность в нагрузке, а также генерировать аналоговые сигналы. 

   Один из наиболее частых способов применения директивы #define –  создание макроопределений замаскированных под функции. Для макросов состоящих из одной инструкции, это легко. Просто определяем макрос без  точки с запятой.

   Начальный код мы разобрали, самое время приступить ко второй части нашей задачи -  распознаванию нажатой кнопки. Разберемся, какие напряжения будут на входе АЦП при нажатии кнопок, и какой цифровой код получится после аналого-цифрового преобразования.

Страница 17 из 19