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



CPLDでカラーコンポジットのビデオ信号を作っちゃおう
というお話のつづき。

まずはCPLDからの出力をDA変換する回路に
ついて。

こんな風に重み付け抵抗を使ってDA変換をします。

(後日訂正:R2Rラダー…×、重み付け抵抗…○
 R2Rについては以下の日記ご参照↓)
  http://brown.ap.teacup.com/nekosan0/410.html


ちなみに、図の一番上の「0」と「1」はCPLDから
出力するビットデータ。左側の抵抗が最上位、右側の
抵抗が最下位ビットを表します。

各抵抗の片方は1を出力すると3.3Vに、0を出力
するとGNDに繋げられることになります。で、もう
片方を一まとめに束ねておいて、変換後の出力電圧
を得ます。

そして出来上がるのが、赤い抵抗を全部あわせた
合成抵抗と、緑の抵抗を全部あわせた合成抵抗。
赤と緑で3.3Vを分圧した値が出力値ってわけです。

図では1200Ωまでしか書いてませんが、倍々…に抵抗を
増やしていくとある程度精度は増やせます。
(まぁ、最上位の抵抗の誤差がゼロクロス歪みを生じ
 させるので限度はありますが)


で、なぜ今回この抵抗値を使うのかというと、ポイント
になるのは75Ω抵抗。この75Ωがどこからきたのか
というと、
  「テレビ内部に入っている抵抗が75Ω」
ってことです。
この抵抗も含めてDAC回路全体を考えないと上手く
DA変換できないので、いっそのことこれもDAC
に含めてしまえ!という作戦です。(75Ω抵抗は
テレビ内部でGNDに繋がっているので、常時0を
入力しているのと同じことになります。念のため)

正確に言うと、75Ω抵抗はコンデンサーで直流が
絶縁されているんですが、交流で考えるとどうでも
いい話なので、うまいことDAC回路に含めちゃう
ことができるはず。
似たようなことを↓
http://picavr.uunyan.com/avr_m_testv1.html
こことかでも使っているので、大丈夫でしょう。

もし精度が足りない場合は75Ωまで含めて金属皮膜
抵抗でも使っておいて、ビデオアンプでも通してから
テレビに入れればなんとでもなるでしょうし。


ここまではお勉強の話。
さて、Y信号とC信号をVHDL上で合成しておいて、
シンクロ信号まで含めて5ビットDA変換したら
どうなるかな、って言うのが昨日の宿題。
full adderを5ビット分入れてあげないといけないので、
規模がねぇ…と。

ちょこちょこっとVHDLを修正して、コンパイル
してみました。そしたら…

XC9536XLではProduct Termsが容量オーバー。
203/180で10%くらいオーバーしちゃう。
XC9572XLなら入るんだけど、一気に部品単価が…

それにXC9572XLは買い置きがないので、家に買い置き
があるXCR3064XLにフィッティング。入った。
リポートを良く見ると、XCR3064XLならProduct Terms
の使用率は50%より微妙に少ない感じ。数値的には
93/192だって…。ってことはXCR3032XLにも入るん
じゃないか?っておもったら微妙にNGでした。
マイコンと違って、最後の1ビット、最後の1クロック
まで使い切るもんじゃないようです。

それにしても、同じCPLDでも、製品の新旧によって
消費するリソースとか大きく変わってくるんですねぇ。
驚き!

とりあえず、内部でY信号とC信号を合成することを
見送るとすると、出力ピンがいっぱい増えることには
なりますが、この線で別バージョンを作成してみる…。
すると、さすがに入りました。出力はSビデオに
なっちゃいますけど。

というわけで、ひとまずコンポジットとSビデオ。
両バージョンを並行して進めることにしましょうか。

枠組みは出来上がったので、あとは各色で出力する
ビットデータをVHDLに埋め込んで、抵抗器繋いで
実機で動かしてみるだけ。

うん。もうちょっとだ…。



コメント ( 0 )




CPLDでカラーコンポジット信号を作っちゃおう
という話の続き。

一応VHDLはそれっぽい形になったことはなったの
ですが、DA変換回路を色々考えていたらあまり
いい感じにならなかったので、ちょっと見直しを
することにしました。

Y信号4ビット、C信号4ビット、c-cyns1ビットで
考えていたんですが、テレビ側の75Ω抵抗と絡めて
考えると、オペアンプかDA変換ICかなにかを
使わないとダメそうで、外付け部品が多くなるのを
嫌ってみます。

で、一つの考え方としては、75Ωを最上位ビット
として150Ω、300Ω、600Ω、1200Ω、
2400Ωという感じで重み付け抵抗のDACを組んで
DA変換を行う方針で考えてみます。
(600Ωは市販されてないみたいなので620Ω
 で代用します)

(後日訂正:R2Rラダー…×、重み付け抵抗…○
 R2Rラダーについては以下の日記をご参照↓)
  http://brown.ap.teacup.com/nekosan0/410.html


なお、この場合の75Ω抵抗は片側が常時GNDに
繋いであるので、つまり最上位ビットが「0」という
回路と同義です。残りの150Ω以降の抵抗に
0か1を入力することでDA変換します。
出力されるレンジは0V~約1.65V程度ですね。

こうすると、2400Ωまでなら5ビットDA変換、
1200Ωまでなら4ビットDA変換ということに
なります。しかも、オペアンプもビデオアンプも
専用DA変換ICも要らず、数個の抵抗だけで
テレビに直結できます。

で、CPLDからの3.3V出力を各抵抗で分圧
するという前提で表計算ソフト使ってザックリ計算
してみたところ、4ビットDAでは微妙。5ビットDA
なら大体いい感じになってくれることがわかりました。

ちなみに5ビットDAなら最小分解能が約0.05V。
4ビットDAなら約0.1Vくらいになる計算です。

Y信号C信号を分けちゃった方がいいのか、それとも
CPLDの出力時点でYCを混ぜてしまった方が
良いのかが悩ましいところ…

CPLDのリソースは少し余裕があるので、混ぜて
しまってもいいかな、と思いつつあります。
どうせこの程度のビデオ信号ならS端子出力にする
意味はないしね…。


それにしても、シンクロ信号も電圧で表現しないと
いけなくなるので、VHDLの中身まで弄りなおさ
ないといけなくなるなぁ…。まぁ、外付け部品が
少ないに越したことはないと思うので、そっちを
選んでみます。

entity文から修正が入っちゃうな…


(追記)
そういえば、Y信号とC信号を合成するとしたら
加算回路が必要になるんだけど、目下算術ライブラリ
は組み込んでないから、規模の増加が心配だな。

多分5ビットのfull adderが必要になるんだけど、
残った回路に押し込めるのかどうか…
XC9536XLって、やっぱり小さいな…



コメント ( 0 )