PIC32MXでビデオゲームマシン作成4(DAコンバータの作成)

昨日までで、PIC32MXのIOポートに対して、RGB信号をデジタルで出力できるようになりました。
赤が3ビット、緑が3ビット、青が2ビットで、合計8ビットのRGB信号です。



こいつを抵抗数本の簡単な回路で、D/A変換しました。
D/A変換してアナログ信号になったので、VGAコネクタでディスプレイに接続しました。



で、あっさり映ったんですが、なんか変です。



縦に黒い隙間があります。
ほんとはベタ塗りになってる想定だったんですがが。


PIC32MXのPMP(パラレルマスタポート)の「バッファ付きパラレルスレーブ」モードを使用して、RGB信号を出力するようにしました。
このモードは、出力用に1バイトのバッファが4段ついていて、DMAから4バイトまとめて書き込みができます。
こうすることにより、1バイトごとにDMA転送するより高速化できるわけです。


しかし、このモードは「スレーブ」なのでRD、WR、CSの制御信号を外から与える必要があります。
そのため、ドットクロックに相当する信号をタイマモジュールで作り、出力コンペアモジュールでIOポートへ出力し、その出力を配線でPMPのRDとCSの端子に接続して、PMPのRDとCSを一定周期(10MHz)でパタパタさせてやっています。
PIC32MXに自作自演させているわけです。


CSはアクティブな状態で固定して、RDだけパタパタ変化させる使いかたができればよかったんですが、
どうもCSをアクティブ固定にすると、信号がまったく出力されないっぽいです。
しょうがないのでCSもパタパタさせると、信号は出力されるようになりますが、当然、CSがアクティブではないタイミングでは、信号が出なくなります。
これがディスプレイ表示の黒い縦線の部分に相当します。


回避策としては、データラッチのICを追加するしかないかな。。。