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



VHDLでカラーコンポジット信号を生成する実験の
続き。シミュレーション結果から出力データを拾って、
グラフ化してみました。

まずは、Y信号を5ビットで、C信号を5ビットでそれぞれ
出力した時の結果。


青い線はY信号のイメージ。左端がシンクロレベル、
その右側はblackレベル(もしくはペデスタルレベル)。
そこから右に順に青、赤、紫、緑、水色、黄色、白と
並んでいます。

赤い線はC信号で、一番左のギザギザがバースト信号
(blackレベルに重畳される)。そこから右に順に
青、赤、紫、緑、水色、黄色のサブキャリア信号と
なっています。ちなみに黒と白はサブキャリア信号は
ありません(輝度だけ)。

で、この2つがそれぞれSビデオ信号になるわけですが、
グラフのy軸は約0.05V単位で書かれているので、
25なら1.25V程度でしょうか。

(追記:C信号は中心を0.8V付近においています。
 これをコンデンサーで直流カットして、中心を
 0V付近にシフトさせて使います)


なんとなく合っているような…微妙な数値っぽいですが、
いい事にします。あ、ちなみにx軸はかなり適当に
拾ってます。

次、コンポジット信号。


VHDL内でYとCを合算した値を出力しています。
そうすると、さっきのYとCを個別に出してから
足し合わせた数値と同じ結果が出てきます。
(当然ですが)

というわけで、これをテレビに入力すればカラー
でビデオ信号が表示されるはずです。

ちうわけで、あとはCPLDに流し込んで、配線して、
テレビに繋げば表示されるはずなんですが、昨日の
お疲れと今日のお疲れが残ってて眠くて仕方ない
ので、今日はもう寝ます。



コメント ( 0 )




昨日、お仕事の帰り道に千石に寄って抵抗その他を
買い込んできました。CPLDに繋いでNTSC
コンポジット信号の生成に使うためです。

実験のために金属皮膜抵抗を買ってきました。
どうせバラだし、店頭は1本10円だし。実験が
上手くいったら、カーボン抵抗に変えてもいいかな、と。

で、今日これを使ってビデオ信号を生成してみようと
思ったのですが、そこで問題発覚!


RGBからビデオ信号を生成するVHDLは
規模に合わせて2種類書いたのですが、一つは
S信号生成用でXC9536XLに入っちゃう大きさ。
もう一つはコンポジット信号生成用でXCR3064
かXC9572XLじゃないと入りきらないもの。

で、実験としてはまずコンポジットタイプの方が
配線も少なくて楽なので、XCR3064使ってコンポジット
の表示をしてみようと思ったんですが…

この間作った自作のダウンロードケーブル↓

と、それと繋いで使うPLCC-ブレッドボード用
変換ボード↓


これにXCR3064XLを載せて書き込んでみようかなぁ
なんて思ってたんだけど、XC9536XL/XC9573XLとは
pin配置が全然違うんですねぇ。あぁ…うかつだった…。

同じPLCC44ピン形状だから、てっきりピン互換
だと思ってたのに…。AVRみたいに同じ足の数なら
基本ピン互換ってことじゃぁ無いのね…。


さぁ、困った。
いま買い置きがあるのはXC9536XLとXCR3064の2個だけ。

ひとまずXC9536XLに収まるSビデオ出力の方を
実験してみようかな。一応S端子のメスコネクタは
買って来たので、接続は出来るはず。


もう一つの方法としては、トラ技2006年4月の付録、
altera MAX2登載のボードで代用しちゃうこと。
VHDLの機能確認って言う意味ならそれでも
十分なのかも…。
ただ、このボードは2列+2列だから直接ブレッド
ボードに挿して使うことが出来ないんだよな…。

そこらへんが何とかなればいいんだけどなぁ
アレ使えばいけるかな?

この間のブレッドボードアクセサリの写真ですが、
この右下の方にある「2列→1列変換ボード」。

これなら、纏まった20ピンを1列に変換することが
出来ちゃう。
トラ技付録ボード上にはもともと電源とかクロック
とかの回路は組まれているから、その他のI/O
ピンだけ引っ張り出せば済むはずだし、電圧も
3.3Vだし。
ただ、5Vトレラントではないのが要注意かな。
5VのPICやAVRには直接つなげません…。

CoolRunner用のPLCC-ブレッドボード変換ボード
も作ろうかな。



コメント ( 0 )




この間見つけたREDUINO-VALKYRIE。発売開始で
いま特価セール中ですね。かなり安くなってます。
どうするか悩ましいところ。

そうそう。REDUINO-VALKYRIEのピン配置は
ブレッドボードで使いやすい1列配置になっていて、
しかも他のarduinoよりも機能がたくさん載って
いるのでいい感じなわけですが、同じような
コンセプトのmega644版arduino互換機
(Sanguino互換機)も出るようです。

http://www.microfan.jp/reduino-ghost
詳細はまだ書かれてませんが、ボードのレイアウトを
見るに、このREDUINO-GHOSTもピンが1列配列に
なってますね。mega644はもともと600mil幅あるので、
Sanguinoみたいに2列にしちゃうとブレッドボードで
使うのは厳しそうですが、このREDUINO-GHOSTみたいに
1列にしちゃえば関係ないですからね。これはよさげ。
このコンセプトが活きてきます。


ただ、arduinoのIDEはシミュレータが使えないのが
難点だと思うんですよね。
mega644ベースならますます大規模なスケッチが
書けるようになるわけですが、書いたスケッチが
ちゃんと動くかどうかを確かめる手段がちゃんと
してないと、手におえなくなるケースが出てきそう
な気がするしなぁ…

シミュレータが上手く使えればいいんだけど、
gccのシミュレータが上手い具合に利用
できないかなぁ?
メモリやレジスタが全部見れなくてもいいんだけど、
せめていくつかの変数をウォッチリストに入れておいて、
シミュレーション中に中身を眺める…みたいなことが
出来ればひとまず十分なんだけどな…

シリアルコンソール上で変数をプリントしながら
デバッグするのも限度があるでしょうし…



コメント ( 0 )




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 )



« 前ページ 次ページ »