PIC16F648AでDTMFを生成してみる


【初心者】PICでBEEP音を作りたい!!2【親切に】より



112109 [sage] :2007/12/30(日) 23:35:03 ID:4A5AOXki
同じようなものばかり多数作るのも何なんだが、PIC16F648A用も作ってみた。

http://xcrosgs2wy.web.fc2.com/dtmf_648a/src/main.c    ソース(CCS C v3.249向け)
http://xcrosgs2wy.web.fc2.com/dtmf_648a/src/main.hex   HEXファイル

PIC16F648Aを使ってDTMFを生成。クロックは内蔵オシレータの4MHz。出力は内蔵
リファレンス電圧を使ってアナログ出力している(実はこれを一度試してみたかった)。
そのまま見ても(ガクガクに角張ってはいるが)それなりの波形に見えるので、
PWM出力よりも出力品位はいくらか高いのではないかと思う。フィルタを通せば
かなり奇麗。出力周期は約38kHz。

出力周波数は、クロックが正確に4MHzの場合、誤差±0.8%以内。内蔵オシレータの
クロックは誤差±2.0%なので、このままだと最大±2.8%の誤差が出てCCITT DTMFの
スペック(±1.5%以内)を外れる可能性がある。微調整の機能を追加するのは容易だと
思われるが、面倒なので省略。

出力ピンはRA2に固定。入力は>>32>>90のDTMFジェネレータと同じキーパッドを
使用。>>32ではダイオードが入っているが、不要。A/B/C/Dの列はRB3を使用。
キーパッドのキーを押しているあいだ発音し、キーを離すと発音停止。

HEXファイルは、プログラムFLASHが4096ワードのうち887ワード、RAMが256バイトの
うち143バイトを使用。おそらくPIC16F627AやPIC16F628Aでも入ると思う。
PIC16F648Aであれば、まだかなり余裕があるので、シリアル入出力を追加するのも
容易だと思う。


戻る
inserted by FC2 system