PICでTVゲームという先達の作例を見ていると、あそこまでは出来ないにしても、テレビに縞模様くらいは描けるだろうと思ったのでやってみた。
結果から。
その反転。
出力をオシロスコープで拾ったもの。
カラー信号を基準にすると15.734kHzなので1ラインの長さは63.6μsだが、実測で63.0μsとなっている。
もちろんMPLAB X IDEのSimulationでのStopwatchの値でも同じ値となる。
コードはこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
void pattern01(void){ //-0.08V LATAbits.LATA2 = 0; LATAbits.LATA3 = 0; __delay32(78); //1.02V LATAbits.LATA2 = 0; LATAbits.LATA3 = 1; __delay32(292); //2.27V LATAbits.LATA2 = 1; LATAbits.LATA3 = 1; __delay32(292); //1.02V LATAbits.LATA2 = 0; LATAbits.LATA3 = 1; __delay32(320); } |
__delay32();に与える値の最小が12らしいのと、最適化の問題から、本気でやるならいずれアセンブラで書くしかないのは分っているが、まだ、このレベルではCで十分だ。
分圧用の抵抗値は「NTSCの白黒ビデオ信号をマイコンと分圧抵抗で作る。-抵抗値を求める-」でやったとおり3.3Vでの値をhandyCalcさんにお伺いした結果、575Ωと246Ωとなったが、手持ちでは510Ωと200Ωとした。
何が何でも__delay32();でやるとしたら、一番細かい縞模様がこんな程度だ。
もっと乱れてぐちゃぐちゃに表示されるとばかり思っていたので、ちょっと拍子抜けしてしまった。
さて、縦方向はどういう風にやるのかなというところだが、まだ何も知らない。
というか、たぶん私の手に負えるような物ではないと思う。