0

私はちょっと新しいです。マイクロコントローラーを C でプログラムして、外部スピーカーからビープ音を出すようにしようとしています。C の標準ライブラリを使用できないため、beep() を使用できません。また、'\a' を使用したくない (または使用できない) のは、ビープ音の頻度と持続時間を決定できる必要があるためです。beep() 関数アルゴリズムに関するアルゴリズムや情報も見つかりませんでした。ありがとうございました。

4

1 に答える 1

3

これを行うには、使用しているマイクロコントローラーで使用できるハードウェアに (部分的に) 応じて、2 つの根本的に異なる方法があります。

一部のマイクロコントローラーには、外部世界との接続を可能にする出力ピンを備えた、ある種のプログラム可能なクロック/発振器があります。それを持っているなら、あなたはおそらくそれを使いたいと思うでしょう。基本的には、必要な周波数に合わせてプログラムし、オンにして、ビープ音が鳴ったらオフに戻します。後者の場合、通常、2 番目のタイマーをプログラムして、期間が経過したとき、または 1 ミリ秒などの設定間隔でプロセッサに割り込みます。これにより、適切な期間に達するまでミリ秒をカウントできます。詳細は、特定のマイクロコントローラーのハードウェアの詳細によって異なります。

2 番目の選択肢は、マイクロプロセッサ自体でトグルを行うことです (別名「ビット バンギング」)。出力ラインをハイに設定し、生成したい周波数の半サイクルを待ってから、再びローに設定します。繰り返しますが、好みにより、適切なタイミングで割り込みを生成するある種のクロックでその期間を設定します。それがない場合は、指定されたサイクル数の間、プロセッサをスピン ループに設定することができますバッテリー駆動のデバイスをプログラミングしている場合。

また、どちらの場合も、これらは出力として方形波を生成していることに注意してください。(たとえば)正弦波に近いものが必要な場合は、出力をフィルタリングするために追加の回路が必要になります。最小限のフィルタリングで、PWM を使用してより複雑な波形をシミュレートできる場合がありますが、指定された周波数と持続時間のビープ音を生成するよりもはるかに複雑になる可能性があります。

于 2013-09-28T16:02:05.613 に答える