Использование ATMega16 timer0 для генерации звука - PullRequest
0 голосов
/ 18 марта 2012

Я пытаюсь использовать таймер ATMega16 для генерации импульсов ШИМ и вывода звука на базовый зуммер.

Но я сталкиваюсь с проблемой выяснения, как я могу изменить частотуволны, которые я создаю (для создания разных заметок)

Я видел на листе данных, что с помощью timer0 вы можете использовать ICR для значений TOP и таким образом вы можете изменять частоту, а с помощью OCR вы сможете изменятькоэффициент заполнения ..

Есть ли аналогичный способ, но на таймере 0 или таймере 2?

Я уже использую таймер1 для управления чем-то другим, поэтому мне интересно, нужно ли начинать сначала:(

Заранее спасибо,

Любая идея приветствуется

1 Ответ

1 голос
/ 18 мая 2012

Как правило, когда «заканчиваются» таймеры, простые программные процедуры, основанные на прерываниях по таймеру, уносят вас довольно далеко.

Например, используя одно из прерываний сравнения по таймеру, вы можете легко генерировать практически все частоты:

В таймере сравнения ISR просто переключите соответствующий выходной контакт и (пусть таймер будет) сброшен в 0. Установленное значение сравнения определяет сгенерированную частоту в виде долей частоты таймера.

Есть много более сложных способов использовать ограниченное количество доступных таймеров для одновременного выполнения множества задач таймера.В основном все это основано на вдумчиво используемых ISR.

...