電子工作の課題でスペアナ作ってみた
ソフトウェア
概要
VisualStudio2005で作成。waveInAddBuffer()あたりのAPIで録音。DFTでスペクトル解析する。解析したデータをパラレルポートから出力する。データは4bit(0〜15)×32列である。
パラレルポートからの出力
Windowsでやる場合はこのサイトを参考にする。やることとしては
- GIVEIOアクセスライブラリを使えるようにする。
- パラレルポートのモードの設定を確認する。
- パラレルポートのBase I/Oアドレスを調べる。
ぐらいだろうか。1,2は上記サイトに載ってる。3は上記サイトのBIOS画面にちらっと映っているとおり、BIOSの設定画面で確認できる。当たり前だが機種によって異なるので上記サイトのコピペではいけない。
GIVEIOアクセスライブラリの使い方は全部上記サイトに丁寧に書かれているのでもはや言うことはないだろう。
データの出力
15行(4bit)のデータをdata_portから2列分同時に送信する。デジタルデータなので、ただ単に出力しても、回路側は何がデータなのか認識できない。そこで、ストローブ(control_port)でタイミングを制御する。
- ストローブを下げる
- データを出力する
- ストローブを上げる
ということを繰り返す。回路側はストローブの立ち上がりを検出したときにデータを読み込めばよい。もう少し厳密にやりたければハンドシェイク通信をしてもいいのかもしれない。
また、この作品の場合、列の同期を取るためにもう一本出力線を用意しておく必要がある。
ハードウェア
主材料
部品 | 購入店 | 価格 | 個数 |
---|---|---|---|
16x16 Dual Color LEDマトリックス(LM1256) | 秋月 | \500 | 2個 |
サンハヤト2mmピッチ基板 | 千石 | \700 | 1枚 |
ユニバーサル基板 | 千石 | \300 | 1枚 |
25pin雄コネクタ+専用基板 | 千石 | \700 | 1セット |
2.1mm標準DCジャック(基板取り付けタイプ) | 秋月 | \30 | 1個 |
ピンヘッダ&ソケット2x13 | 秋月 | \50+\50 | 4組 |
PIC16F690 | 秋月 | \210 | 1個 |
TC74HC595(シフトレジスタ) | 千石 | \170 | 4個 |
TC74HC154(4to16デコーダ) | 千石 | \140 | 1個 |
TC74HC161(4bitカウンタ) | 千石 | \100 | 1個 |
ICソケット | 千石・秋月 | --- | 必要分 |
抵抗(1/6W)330Ω | 秋月 | \1 | 40本 |
抵抗(1/6W)1000Ω | 秋月 | \1 | 16本 |
2SA1015GR | 秋月 | \3 | 16個 |
LM1256
ググったらデータシートが出てくるのでピンの配置を調べる。このLEDマトリックスは地雷。ピンが2mmピッチだから。オリジナルの基板に作るならいいけど、2.54mmピッチのユニバーサル基板で回路を自作する場合はおすすめしない。悲惨なことになる。
回路の概要
PIC16F690で処理を行う。パラレルポートからの出力はすべてPIC16F690に入力する。
LEDマトリックスのダイナミックドライブはその他のICをPIC16F690でせいぎょして行う。
列は4bitカウンタの161でカウントし、154でデコードする。カウントアップのための線と、0行目を同期するためのクリアの線が必要。
行は各LEDマトリックスごとに1本のデータ線を用意する。3-stateの8bitシフトレジスタに流し込んでいく。流し込むためのカウンタ線、流し終わった後のラッチを行うラッチ線が必要。
PIC16F690の処理
main関数はLEDマトリックスのダイナミックドライブを行う。
- カウンタのクリアオフ
- 各列について
- ラッチをオフ
- 各行について
- クロックをオフ
- 点灯させるなら0を、点灯させないなら1を各データ線に出力
- クロックをオン
- ラッチをオンしてLEDMに出力
- カウンタのクリア
パソコンからのデータの読み込みは割り込み処理で行う。
動作
データ読み込みの割り込み処理の速度が遅いのか、でーたが左から右に読み込まれているのがはきりとわかる。スペアナとしては使い物になっていない……。通信のプログラムをうまい方法で改善できればもうちょっとちゃんとしたものにできるかもしれない。
感想
ハードウェアって難しい(;´Д`)