dsPICでNTSC 制作日誌


 


2010/05/10(月)

dsPICを諦め、PIC24FJ64GA002を購入。メモリーは8KByteです。
その半分を画像バッファに使えばOK.

ピン配置が似ていたので少しの変更で そのままdsPICの回路を使えました。
変更点は以下の通り
・PGC、PGDの位置を変更
・1Kを2.2Kオームに
・7805をカット、単3電池2個でレギュレーターを介さずダイレクトに供給
・右下のVDDがVCAPになっているので、それに0.1を挟んでGNDへ(内蔵レギュレーター利用)

これで24Fに対応出来ます。

プログラム的には
・コンフィグレーション変更
・クロックの変更によりタイマーの値を変更しなければならない
・SPIのレジスタが違う。 そしてRP8にピン配置をしなきゃいけない。

 

こんなところでしょうか。3時間もしないうちに変更出来ました。
ささっと直しただけなので、無駄な所は沢山あると思います。
最初うまく動かなくて、困ってたので、しょうがなくタイマーをもう1つ使って 左のブラッキング区間をしのぐことにしました。
結局動かない原因は予想以上に横の解像度が落ちることと、最後のSPIのビットが1だと どうやらその後ずっと1になるらしい ということが原因でした。

描画関数をたくさん作って、ゲームをつくってみようと思います(^^
乞うご期待。

 

追記;

今、描画関数を作りました。
横に直線を引く関数。それを使って四角を表示する関数。
だけど 斜めに直線を引くのが出来てない。
ボタンを押したら四角が右に移動するプログラムを作りました。ある程度まで行くと表示がおかしくなったので、どうやら関数に何らかのミスが有るみたいです。
今日はこの辺で。

 

 


2010/04/29(木)

バッファ不足はしょうがないと思い、30行ぐらいだけTVに表示をするプログラムを作ろうとプログラムを改造してたら間違いを発見した。
ひどい文字化けの原因が分かったので、それを直したところ割とちゃんと表示されました(^^
しかし、バッファ不足は事実のようで、バッファが16ぐらいでも 上から60行ぐらい行くとバッファ不足に陥ってしまいます。
といっても本当にバッファ不足なのか、プログラムミスなのかは分かりませんけどね。その可能性はあります。
バッファを増やすほど文字化けは減って、とりあえず切りの良い32にしたところ、ほとんどなくなりました(といっても)
テトリスぐらいなら1行の生成に時間を食わないので、バッファを10にしたってうまく行くはずです。

参考のために、コレがプログラムです。
3つあるタイマーのうち2つを使用しています。工夫すれば1つにできますが、まぁタイマーに困ってるわけじゃないので2つ使ってます。
SPIによる文字表示は水平同期と同時に始まります。はじめは0x0000を3回出して(ブラッキング)、その後メモリーからの読み出しを始めてます。
こうすることでタイマーを使わずにすんでいます。


 


2010/04/28(水)

A とB が表示されています。

dsPIC2012のSRAMは1Kbyteです。 そして、この映像の解像度は240*221 です。 これは容量にして5.3kByteです。
したがって映像のデータをメモリーに保存して それを出す。文字などを出したいときには そのデータをメモリーに写す。といったことはできない。
工夫が必要になります。まず考えたのが、
1行分だけメモリーを用意して、1行表示するたびにその1行を生成すると言うもの。
1行だけメモリーがあればいいことになりますが、1行分の時間(約63μ秒)での1行の生成が間に合わないと映像が乱れます。
そこでバッファを用意することにしました。10行分ぐらいバッファを用意して。
例えば1行目を表示している時にはすでに10行目までのバッファに書き込んでおきます。
2行目に走査が移ったら1行目のバッファに11行目のデータを書きこみます。(SPIはバッファメモリーを1、2、3・・・・10、1、2、3、・・・ と読むようにしてある。)
これで理論的にはうまく行くのですが。
どの位バッファが実際の走査線より先を行っているのかを見てみたところ、すぐにバッファ不足になってることがわかりました。
どうやら1行の生成よりずっと1行の表示の方が早いようです。

結論は”お手上げ”

これ以上1024バイトのメモリーと戦う気はありません。
手元の余ったdsPICで始めたことですから、つきつめてやりたいことがあるわけじゃないし。
次にやるときには6kByte以上のメモリーのあるマイコンでやろうと思います。

ただ、これはこれでもったいないので、自由に絵を表示したりすることは難しいのですが、大体が決まったものなら楽なので
これでちょっと遊んでみようと思います。

 


2010/04/26(月)

原因は不明だけど、HDDレコーダー経由でレコーダーにつないで入力切替でテレビに表示させたらできた。
信号のレベルがいけないのか、カラーバーストが無いのがいけないのか分からないが、とにかくHDDレコーダー経由ならできる。



画面に四角を出して その四角を大きくして、表示できる範囲を調べた。

ここまではOK。
SPIでやろうとしたら、うまくいかない。。。
どうやらSPIそのものがうまくいってないみたい。実は初めて使うしね〜SPI。
まぁ、色々いじってみます。
早速見つけた問題としては 同期信号用のピンがSPIのSCKと同一ピンだったってこと。
コレじゃあいけないので、明日RF4に同期信号を繋ぎ直します。
ついでにボタンを追加しようと思います。あると便利だもんね。
ってか無いとなにもできないですよね(^^;


2010/04/25(日)

タイマー割り込みもできたので。早速画面に四角を表示するプログラムを書いてみました。
四角を表示する部分は1行なんですが、
問題は同期信号。以前もオシロスコープにお世話になったあれです。
しょうもないミスも有りましたが、それを直しても何故か計算値だと同期があわないみたいです。
オシロとPCをつなぐ線を昔なくしたので、それをなんとか工面して久々に使ってみたところ
同期信号はちょっとだけ短いだけで後は問題無し。
問題は波形です。あまりに汚い。
観察したら変なノイズが乗ってたから明日はそれを除去してみるつもり。
どうやら回路が発振してるっぽい。まるでダンスをするように 軸が上へ下へブレてる
綺麗な正弦波でね。
同期信号までもが影響を受けてて、こらあかん。

オシロがはじめつながらなくて、COMポート選択しようとおもったらCOM1〜COM4しか選べない。
つながってるのはCOM5です(おしいなぁ〜)
そこで
http://www.activecell.jp/download/index.htm
からダウンロードしたモノを使ってやるとちゃんと信号は来てるみたい。
そこでデバイスマネージャーからCOM5をCOM1に変更。
これで使えるようになりました
ついでに波形を載せて今日は寝ます。
明日はコンデンサーをトランジスターの周りに2つほど追加する予定です。
あと、同期信号をあと0.5μ秒長くね。


2010/04/23(金)

秋葉原に行って早速部品を買ってきて、作ってみました。回路図と写真はこちら




Webかめらに虫眼鏡をあてて撮影したので(距離が近いとピンぼけする)、きれいではないんですが、
まぁなんとか見えると思います。回路図では電源回路は省略してありますが、もちろん必要です。

PICKit2で接続したら「dsPIC2012」と出たので、通信は大丈夫そうですね。書き込みもおそらく出来るでしょう。
あんまりうまく行くとちょっと怖いですね。
これからMPLABでプログラムです。とりあえず動作確認用のLEDをつけてみます。

 

 


2010/04/22(木)

以前にPICでNTSCを作ったことはあったが、その時は文字を出したりしたわけではなかった。
今度は文字を出したりテレビゲームを作ったりしてみようと思う。
参考にするのは 電子工作の実験室の24F製作例のNTSC出力。
SPIをシフトレジスタとして使うってのが便利そうなのでやってみることにする。
最初18F4550を使おうと思ってたんだけど(USBもできるからそれもついでにと思って)、PIC16Fや18FのSPIだとダブルバッファじゃないんだな。
つまり連続してデータを送れないので、文字と文字の間が空いちゃうわけ、空いちゃうだけならいいけど、白い線とか黒い線とか入ると困るじゃん。
なので残念ながらUSBは別の機会に。今回はdsPIC2012を使うことにした。手元に10個以上あるので(^^;
回路自体は超簡単なので、今度写真とってUPします。
回路は前回と一緒。ただ電源が3Vから5Vになったので、そのへんは修正しました。


 

オヤブンの工作室へ