仕事でDTMF信号を出力する装置の不具合原因を調査することになり、その調査に際して、あれば便利な、DTMF信号をデコードする装置を製作しました。 DTMF信号の生成や検出はマイコンのみでソフトウエアで行うことも出来ますが、今回は、専用のICを使ってデコードし、デコード結果は、マイコンでOLEDディスプレーに表示させてみました。
2.使用したパーツ 2-1.DTMFデコードIC
いつかは使うだろうと買いためておいた電子部品の中から、DTMF信号をデコードする専用のチップCM8870 を使いました。古いICですので+5V動作となっています。秋月電子から購入したものですが、現在は廃品種になっているようです。
2-2. PIC
CM8870の電源電圧が+5Vであることから、+5V動作のdsPIC30F2020を使いました。このPICはモーター制御用のマイコンです。今回の製作には勿体ないマイコンですが、手持ちの関係から使うことになりました。 2-3.OLEDグラフィックディスプレー
DTMF信号のデコード結果の表示用に、0.91インチサイズの128x32ドットのOLEDグラフィックディスプレーを使いました。1文字を8x16ドットで表示させますので、2行16文字のディスプレーとなります。
2-4.ACアダプタ 電源レギュレータなどを省略するために+5V出力のACアダプターを使い、その出力を直接マイコンやデコーダチップに接続しました。
3.製 作 3-1.回 路
マイコンのクロック精度に大きく依存するような処理は行いませんのでPIC内蔵のRCオシレータを使っています。OSC端子には何も接続していません。
OLEDグラフィックディスプレーはI2Cで接続しています。SCLとSDAのプルアップはディスプレー内部で行っています。 CM8870は、3.58Mhzの外付け発振子が必要です。コンデンサ内蔵のセラロックを使いました。デコード出力のQ0-Q4,StD端子は、マイコンに直結しています。
電源回路は、先に説明しましたACアダプタを使いますので、DCジャックのみです。
3-2.ユニバーサル基板での製作 回路図に従ってユニバーサル基板で製作し、冒頭の写真のとおり、プラケースに収納しました。
3−3.プログラム MPLAB IDEでC30コンパイラを使って開発しています。作った主なプログラムは次のとおりです。詳細はソースコードをご覧ください。
・oled.c ...128x32グラフィックディスプレーのドライバーです。 ・oled_font8x16.h ...ディスプレー用の文字フォントです。1文字を8x16ドットで表示しています。 ・pic_232.c ...デバッグ用シリアル通信処理です。割り込みは使っていません。 ・timer.c ...1msecのtimerです。割込みを使っています。 ・pic_delay.c ...msec,usec単位の遅延処理です。ソフトウエアループによる処理なので正確ではありません。 プロジェクトファイルはこちらです。DTMF_decorder.zip |