「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



昨日の懸案だったC信号の出力データの件。
color burst信号とsub carrier信号に載せるデータを
計算してみました。
表計算ソフトで。というより、殆ど手計算ですけどね。
面倒くさい。


とりあえず、4ビットデータで出力することは既に
決めていたので、あとは具体的な値が出ればいい
わけですが、コンポジットのsub carrier信号は
色々やらないといけないことがあるんですよね。

(1)振幅のレンジ
  →単純にCb、Cr信号を変調するだけだと、
   C信号をY信号に重畳させたときの振幅が
   大きくなりすぎる(IRE単位でいうと上が
   180IREくらい、下が-80IREくらいに
   なっちゃう)ので、133IRE~-33IREの
   範囲に圧縮。

(2)位相のズレの再現方法
  →これは例のサイト
   http://www.geocities.jp/kwhr0/hard/pc8001.html
   に書いてあるとおりではありますが…


まず(1)についてですが、
  例によってビデオ信号のバイブルを取り出します。
  圧縮の計算式、書いてありました。さすがです。
  P42の計算式。Pbは2.03で、Prは1.14でそれぞれ
  割った値を使用するとのこと。(15KhzのNTSCでは
  PbはCbに、PrはCrに読み替えればOK)

  なぜCb、Crを割る数が異なっているかというと、
  多分I-Q軸にしたときに橙色系の方が高い解像度
  まで伝送する必要があって、一方直交する青系の
  色は低い解像度でも人の目には判らないという
  話に基づいているんだと思われます。
  よって、青系統のCbのレンジを小さくしちゃう。

  で、実際計算で求まったCb、Crの圧縮値から
  三平方の定理で振幅を算出して、Y信号に加算して
  みたら、見事なまでにピッタンコ133IRE~-33IREに
  収まるんですね。さすがバイブル。

  というわけで、出てきた数値を元にして4ビット幅の
  信号に丸めます。(抵抗計算は後回し)

そして(2)についてですが、
  V → U → -V → -U
  の順で出力してあげればOKですが、15Khzの
  コンポジットNTSCの場合、VはCb、UはCr
  が相当します。なおもっと周波数が高いテレビ信号
  (D4など)の場合はそれぞれPb、Prです。
  (1)で圧縮したCb、Crをこの順に出力して
  あげればいいはず。 Cb→Cr→-Cb→-Cr

  上で求めた4ビットデータをこの順番でVHDLに
  盛り込んで行きます。


ちなみにグラフ化するとこんな感じ。

左右が逆だったので水色の矢印を足してありますが、
右から順にV、U、-V、-Uと出力していけば
各色毎のsub carrier信号が出力されるという
寸法です。

図の各曲線の色が出力される色と相当しているの
ですが、黒い曲線が1本混じってます。
これはバースト信号の意味です。
バースト信号は±20IREの振幅なので、他の信号と
比べると小さい振幅ですが、多分これでOK。

各色の波形とburst信号の波形をご覧頂くと
なんとなくそれなりに位相のズレが実現できて
いるのがお判りいただけるかと。
(スプラインで繋いだだけなので、振幅は厳密に
 再現できているか判りませんが、参考程度に)

ただ、burst信号の波形はこの位相で本当にいいのか
が実は良く判ってません。本には位相180度と書いて
あるのですが、それがこの位相でいいのか、
それともこの逆になるのか…文章からではその
意味を掴みかねる…

まぁ、あとで実際にテレビに表示してみれば
判るでしょう。というわけでburst信号だけは
仮置き。


こんな感じでVHDLに定数を組み込んだので、
シミュレーションをかけてみました。
h-sync信号やRGB信号に合わせて、思ったとおり
のデータが出力されることが判りました。

あとは抵抗計算やっちゃえばゴールは間近。

入力に使うRGB信号の元ネタは…あれかな。
http://picavr.uunyan.com/avr_m_component.html
このTINY2313用カラーバー表示のプログラム。

このプログラムはシンクロ信号がc-syncなので、
ちょこっと弄ってh-sync,v-sync出力に変えてあげれば
そのまま使えるはず。

で、XC9536XLの入力は5Vトレラントなので
そのまま直結。XC9536XLからの出力は抵抗分圧
で75Ωをドライブすることにします。

ここまでくればあともうちょっとだな…。



コメント ( 0 )




昨日絵に描いたNTSCのカラーデコード処理のスキーム
をVHDLに書き出して見ました。

一部不要な機能があったり(burst信号用の内部カウンタ)、
必要な機能が書いてなかったり(クロック入力端子)と、
不備はあったものの、なんとなくそれっぽい感じに
できました。


水平同期信号については、その立下りからバースト信号の
開始までをカウントしないといけないんですが、
クロック入力のエッジと水平同期信号のエッジを
両方いっぺんに使うことはできないよ、と警告が出て
しまうので、仕方なく水平同期信号はひとまずHIGHか
LOWかを判別するような条件文に修正。
…タイミング計算がちょっとズレちゃうんですが、まぁ
その程度はあまり映像には影響しないはず。
要は、burst信号(の延長上)とsub-carrierの位相さえ
ずれてなければok。

シミュレーションかけてみた結果、タイミングのわずかな
ズレに目をつぶれば、あとは出力内容的におおよそ想定
どおりの動作をしてくれました。

ピンアサイン後のフィッティングも特に問題なし。
・Macrocells: 23 /36 ( 64%)
・Product Terms: 117 /180 ( 65%)
・Function Block: 34 /108 ( 31%)
・Registers: 10 /36 ( 28%)
・Pins: 15 /34 ( 44%)

といった感じ。XC9536XLでも十分入ってしまいます。

RGB各2ビットまで拡張できるかなぁ?どうだろう?
入力は3ビット、出力も数ビット増える程度なんだけど、
内部の回路が入りきるかどうか…


とりあえず、8色RGBならもうゴールは間近。

c-sync信号、Y信号の処理はもう完成したけど、
残作業はC信号。
処理内容・タイミング的にはもうsub-carrier÷4
の各出力タイミングで色に合わせたビットパターン
がきちんと出せるようになっていますが、その
ビットデータ自体は現状ロジックの機能確認用の
テストパターンなので、これから実際に使う信号の
アナログ値計算とビット値への変換をちゃんと
やらないと… 手計算で行列変換やらないと…

ここらへんは抵抗値とも絡む話になるので、
CPLDの外部の回路とも一緒に考える必要が
あるんですが、どうせ8色RGBだし、大雑把に
済ませようと思います。

要は、Cb、Crに変調かける角度(位相)が
ずれていなければ色はちゃんと出るはず。

そうそう。リソースは多少余っているから、
S信号だけじゃなくてコンポジット出力も
入れられるといいな。


あと、if文とcase文の巨大な塊になっている
ので、もう少し可読性を良くするために配列とか
つかって整理したいな。




コメント ( 0 )