2007年8月頃~2008年1月ぐらいまでの週報に載せていた情報+αです。
Last Update : 2009/01/02


CQ dsPICで遊ぶ ( トランジスタ技術2007年8月号付録 )

MPLAB IDE SIMULATORを使用してみる


ブロック図はこちら --> block_diagram.pdf
回路図はこちら --> circuit.pdf


2008.01.09

PICマイコンを使用するのは初めてだったのですが、CQ dsPICマイコン基板搭載のdsPIC302F12のスペックからすればNTSC信号の生成、PS/2キーボード信号の取りこみはできそうだと思い、トランジスタ技術8月号102頁に記載されています「図3付録基板も立派なマイコンピュータになる」を作ってみることにしました。
幸いdsPIC302F12はタイマ3本と、一般的にいうところのクロック同期シリアルを内蔵していますので、外付け機能を付加することなく20文字×20行ぐらいの表示はできそうです。ただしRAMが1kBしかないので、表示イメージをドット単位でV-RAMに保持することはできそうもありません。例えば縦、横200ドットで表示しようとしますと必要なRAM容量は200×200/8 = 5000byteも必要とします。そこで20文字×20行の400byteのテキストデータを1ライン毎にリアルタイムに表示データに変換することで実現させることができました。
次に入力装置ですが、本体が手の平どころか、指に乗るサイズなのに、30cmを超えるPS/2キーボードは似合いません。手の平サイズのキーボードの製作も考えたのですが面倒なので、ここは今や死語?になっているライトペンを試してみました。CRT画面を光センサーで触ることで画面の座標位置を検出する方法です。CRTコントローラは画面のどこを走査しているかは把握できます。よって画面にキーパッドを表示し、光素子の反応した位置がわかればキーパッドのどこを触っているかわかるはずと。
しかしながら、ライトペンに関しては話しに聞いたことがあるだけで、この方法にはかなり高速に反応する光素子を必要とするはずです。PINフォトダイオードというのが良さそうなのですが、可視光に反応するPINフォトダイオードの入手性がよくなかったのと、それなりの回路を必要としそうでしたので、CdSセルで挑戦してみました。
Cdsセルの応答速度が遅いのはわかっていました。Cdsセルでは輝点の走査に合わせて画面の座標の検出は無理でしょう。そこでx - yではなく、画面の垂直方向、画面の光り方に変調をかけることでキーの文字そのものを検出しています。点滅の仕方は7bitのASCIIコードそのものを用いています。例えば’1’のASCIIコードは0x31で、LSBファーストにしましたので「明、暗、暗、暗、明、明、暗」という具合です。実際にはこれにスタートビットとして「明」を2ビット付けてあります。
実際に作ってみますとライトペンを近づける前に反応したり、常に画面が点滅しているのが気になりましたので、スイッチを追加し、ライトペンを画面に触れスイッチを押したところで点滅、読み込み開始としました。また読み込み終了の合図として圧電ブザーを追加しました。

A/Dコンバータが内蔵されていますのでオシロスコープのような表示機能を作製しました。表示を行うにあたりましては、前述のように画像イメージをデータで持てるほどのRAM容量はありませんので工夫が必要でした。オシロスコープは横軸が時間で、縦軸が入力値となります。今回の作品ではCRT画面の輝点が上から下方向に水平に走査されていることを利用し、CRT画面の縦方向を時間、横方向を入力値としています。
具体的には画面の左端、水平ブランキング期間の終わった所から入力値( 入力電圧 - A/D変換値 )をタイマ値に変換し、タイマをスタートさせます。そしてタイマ割り込みで輝点の表示を行うことで入力値の大きさに応じた位置に輝点をおくことができました。

これで入出力装置、キャラクタ表示、アナログ信号表示ができましたので、何か機能をということで、音声信号を画面表示できる機能を作りました。他にも、ロジックアナライザのような表示、経過時間の表示、RAMモニタの表示などもCQ dsPICのマイコンだけで十分行うことができました。
dsPICマイコンにはFFT関数が用意されていますので、今回は間に合わなかった、音声信号のFFT解析表示機能等を今後作っていきたいと思います。

1) 本体概観


手の指サイズのはずが、まだまだ機能拡大中ということでブレッドボード上です。
右側に載っていますプリント基板はトランジスタ技術2006年1月号に付属の実験用基板です。
今回はマイクアンプとして使用しています。

2) ライトぺン部


バナナチップ端子の樹脂部をケースとして使用しています。ちなみにこのCdSセルの単価は\40です。PINフォトダイオードですとアンプ回路も含めて\1,000程度にはなると思います。

3) ライトペンでの読み込み

 
このような感じで取りこみます。画面は表示位置にカーソルを点滅させているのですが撮れていません。

4) キーパッド

 
下三段に表示されていますのがキーパッドです。当初右の画像のよう四角のマスを表示させてみたのですが、ガラス面が厚いのか隣のマスの点滅の影響を受けます。実験の結果マスの表示は必要無いことがわかりましたので、文字だけにし、文字間を空けることにしました。
左上の02:11:21は2時間11分21秒の経過を表しています。

隣との干渉を受けている時のCdsセルと抵抗の分圧電圧です。

5) RAMモニタ


CQ dsPICマイコン基板は開発ツールも含めて、トランジスタ技術付属のものだけを使用しています。当初3584命令の壁に気付かず、暴走などしていました。スタックエリアをどこまで使用しているのか気になり、RAMエリアの表示機能を入れました。
 最初横26文字としてしまいましたので、アドレス表示を4桁にできませんでした。A0:はアドレスBFA0であり、BFA0 – BFFFを表示しています。このエリアの初期値には0x5Aを書き込んであります。アドレスBFFFのRAM値を定期的にカウントアップすることで、動作確認をしています。またアドレスBFE0 – BFEDはデバッグ用に点滅キーパッドのA/D変換値をストアしています。

6) ロジックアナライザ表字


200byteのサンプリングデータをリアルタイムに1ラインの表示データに変換しています。波形の表示が左端から出ないのは変換に多少時間がかかるためです。それでも横方向に8チャンネルの200サンプリングデータのHigh/Low表示を行うことができました。本当はきれいな矩形波の表示をしたかったのですが、そのためにはかなり多量の変換データをROM上に持たなくてはならため今回はこのような表示で妥協しています。

7) オシロスコープ表示


正弦波のサンプル表示です。
ノンインターレス表示ですので、点間をつなぐ処理をしていませんので、左の画像のような積分表示モードと切り替えができるようにしてあります。


ライトペンの確認画面です。上部に表示している文字は、人の目ではわかりませんが、実は時間経過とともにこのように明るさが変化していることがわかります。

8) 音声信号表示


「 あ 」と短く発声した時のサンプリング波形です。


口笛を吹いた時のサンプリング波形です。



TOPページ