ユーザ用ツール

サイト用ツール


デジタルrgb出力をvgaモニタに出力したい

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
デジタルrgb出力をvgaモニタに出力したい [2020/12/07 14:56] – 作成 arakiデジタルrgb出力をvgaモニタに出力したい [2020/12/23 10:55] (現在) – [アップスキャンコンバータ] araki
行 20: 行 20:
  
 === TTLロジック版 === === TTLロジック版 ===
 +
 +== 部品 ==
 +
 +^部品^点数^メモ^
 +|74LS02|3|2入力NORゲートx4|
 +|74LS08|2|2入力ANDゲートx4|
 +|74LS125|1|Tri-State Bufferx4|
 +|74LS86|1|2入力XORゲートx4 H-Sync/V-Sync混合用。なければNORとANDの空いている回路で代替可能|
 +|抵抗100Ω|6||
 +|電解コンデンサ 100uF 16V|3||
 +|半固定抵抗(500Ω)|6||
 +|VGAコネクタ|1|D-SUB 15pin メス|
 +|DIN 8pinプラグ|1|基板用ソケットがあればそれでも可|
 +|8芯ケーブル|1||
 +|電源用USB Micro Bコネクタ|1|5Vの電源入力が可能なら何でもいい|
  
  
 === PIC版 === === PIC版 ===
  
 +== 部品 ==
 +
 +^部品^点数^メモ^
 +|PIC16F1827|1|PIC16アーキテクチャ/16GPIO/DIP18ピンなら何でもいい|
 +|抵抗100Ω|6||
 +|電解コンデンサ 100uF 16V|3||
 +|半固定抵抗(500Ω)|6||
 +|VGAコネクタ|1|D-SUB 15pin メス|
 +|DIN 8pinプラグ|1|基板用ソケットがあればそれでも可|
 +|8芯ケーブル|1||
 +|電源用USB Micro Bコネクタ|1|5Vの電源入力が可能なら何でもいい|
 +
 +PIC版とか書いたが、どうもPIC版は動かないかもしれない。
 +というのも、PICが思ったより遅いから。
 +
 +15KHzの水平回帰だと、320ドットを描くには、ドット当たり4.8MHzくらい(1/15000/320)で描いていかないと間に合わない。
 +
 +が、PIC16F1827をフルスピードで動かしても32MHz。
 +となれば、構成する命令が全部1サイクルで終わるものだとしても、わずか6ステップですべてを終わらせる必要がある。
 +ま、ポートから値を読んで、テーブル引いて出すとかなら間に合うだろうと思っていた、実は。
 +
 +が、ここでPIC16のアーキテクチャの罠があったのを今更知った。
 +
 +**なんかするたびに、Wレジスタを経由せざるを得ない。**
 +
 +最初、Cでコード吐かせてみて絶望した。
 +最適化を''-O3''とか''-Os''とか指定してみたが、芳しくなかった。
 +とりあえず、ごりごり、アセンブラで書いてみた。
 +
 +<code>
 +loop:
 +        movlb         ; BANK 0に切り替える
 +        clrf    0x76    ; レジスタ 0x76 をクリアする
 +        ; HV混合信号を生成する (C = H ^ V ^ 1)
 +        movlw         ; Wレジスタに8 (b00001000)をセットする
 +        btfsc   12,   ; RA6が1ならレジスタ0x76にb00001000を設定する
 +        movwf   0x76
 +        btfsc   12,   ; RA7が1ならWをクリアする (W=RA7 ^ 1)
 +        clrw
 +        xorwf   0x76, ; レジスタ0x76 = W ^ レジスタ0x76
 +        ; RB - xxxxCBGR で出力する
 +        movf    12,w    ; W=PORTA & 7 (RGBコードだけ取り出す)
 +        andlw   7
 +        iorwf   0x76    ; W=W | レジスタ0x76
 +        movwf   13      ; PORTB = W
 +        ; TRISBにハイインピーダンスにするポートを出力する(IN にセットすると出力としてはハイインピーダンスになる)
 +        movf    12,w    ; W=PORTA & 0x0f
 +        andlw   15
 +        addlw   0x20    ; FSR1 に 0x20 + W (0-15に対応する出力値を書いたテーブル)をセット
 +        movwf   6
 +        movf    1,w     ; W = INDX1 (W = ds[PORTA & 0x0f])
 +        movlb         ; BANK 1に切り替える
 +        movwf   13      ; TRISB = W
 +        goto    loop
 +</code>
 +
 +頑張って、20命令まで減らせたが、これでも予定より3.5倍くらい多い感じになるので、もうクロックを100MHzくらいにおーばくロックするしかないような気がしている。
 +多分、このまま実装すると、色が3ドットごとにしか変わらない、PC-8001みたいなことになりそうな気がする。
 +
 +無念。
 +
 +そう考えると、TTLロジック速いな。
 ==== アップスキャンコンバータ ==== ==== アップスキャンコンバータ ====
  
行 30: 行 107:
 アマゾンで、GBS 8200 Ver 4.0のボードを見つけ、これを利用することにした。 アマゾンで、GBS 8200 Ver 4.0のボードを見つけ、これを利用することにした。
  
-===== GBS 8200 Ver 4.0 =====+=== GBS 8200 Ver 4.0 ===
  
 アップスキャンコンバータであるが、癖が強いので注意が必要。 アップスキャンコンバータであるが、癖が強いので注意が必要。
行 37: 行 114:
 実際、製品に添付されていたケーブルは、RGBとS(H/V混合信号)とVのみが結線されており、これら信号を入力してやる必要があるようだ。 実際、製品に添付されていたケーブルは、RGBとS(H/V混合信号)とVのみが結線されており、これら信号を入力してやる必要があるようだ。
  
 +実験的に R, G, B, S(H/V混合信号), Vを入力したところうまく表示された。 
 +なお、散見される 3.3V動作だから、信号レベルを調整しないと不安定というのは、誤りであるように思う。 
 +TTL(5V)の信号を直接放り込んだが、特に動作が不安定になることはなかった。
  
  
デジタルrgb出力をvgaモニタに出力したい.1607320560.txt.gz · 最終更新: 2020/12/07 14:56 by araki