0

ATMega16 の timer0 を利用して、PWM パルスを生成し、基本的なブザーでサウンドを出力しようとしています。

しかし、作成する波の周波数を変更する方法を理解するという問題に直面しています (異なるノートを生成するため)。

データシートで、timer0 を使用すると ICR を TOP 値に使用でき、その方法で周波数を変更でき、OCR を使用するとデューティ サイクルを変更できることがわかりました。

同様の方法がありますが、 timer0 または timer2 ですか?

私はすでにタイマー1を使用して何かを制御しているので、最初からやり直す必要があるかどうか疑問に思っています:(

前もって感謝します、

どんなアイデアでも大歓迎です

4

1 に答える 1

1

一般に、タイマーが「使い果たされた」ときは、タイマー割り込みに基づく単純なソフトウェア ルーチンで十分に処理できます。

たとえば、タイマー比較割り込みの 1 つを使用すると、ほぼすべての周波数を簡単に生成できます。

タイマー比較 ISR では、それぞれの出力ピンをトグルし、(タイマーを) 0 にリセットするだけです。設定された比較値は、タイマーの周波数の分数で生成された周波数を決定します。

限られた数の使用可能なタイマーを使用して、多数のタイマー タスクを同時に実行するためのより複雑な方法が多数あります。基本的には、すべて慎重に使用された ISR に基づいています。

于 2012-05-18T18:21:09.720 に答える