ユーザ用ツール

差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
デジタルrgb出力をvgaモニタに出力したい [2020/12/08 00:50] – [RGB15色対応] arakiデジタルrgb出力をvgaモニタに出力したい [2020/12/23 01:55] (現在) – [アップスキャンコンバータ] araki
行 51: 行 51:
 |電源用USB Micro Bコネクタ|1|5Vの電源入力が可能なら何でもいい| |電源用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ロジック速いな。
 ==== アップスキャンコンバータ ==== ==== アップスキャンコンバータ ====
  
行 64: 行 114:
 実際、製品に添付されていたケーブルは、RGBとS(H/V混合信号)とVのみが結線されており、これら信号を入力してやる必要があるようだ。 実際、製品に添付されていたケーブルは、RGBとS(H/V混合信号)とVのみが結線されており、これら信号を入力してやる必要があるようだ。
  
 +実験的に R, G, B, S(H/V混合信号), Vを入力したところうまく表示された。 
 +なお、散見される 3.3V動作だから、信号レベルを調整しないと不安定というのは、誤りであるように思う。 
 +TTL(5V)の信号を直接放り込んだが、特に動作が不安定になることはなかった。
  
  

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

More information