PIC16F648AでDTMFを生成してみる
【初心者】PICでBEEP音を作りたい!!2【親切に】より
- 112 :109 [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であれば、まだかなり余裕があるので、シリアル入出力を追加するのも
容易だと思う。
戻る