自分自身のための ものづくり / 自分自身のためのものづくりメモ

* アナログRGB21AVマルチ変換

#RGB #作例 #資料







材料


結線

21フレームGND
青入力20
19緑入力
GND(青)18
17GND(緑)
16
15赤入力
GND(Ys Ym)14
13GND(赤)
Ym入力12
11AV Ctrl入力
10
9映像入力
8
7GND(映像入力)
6
5音声入力R
4
3GND(音声入力)
2
1音声入力L

* デジタルRGB → アナログRGB 簡易変換

#電子工作 #メモ
 8bitパソコン黎明期のデジタルRGB出力をアナログRGBに。

5Vp-p → 0.7Vp-p @75オーム終端 簡易変換

 470Ωの抵抗を直列に入れる。

0.7[V]/75[Ω] = 9.33[mA]
4.3[V]/9.33e-3[A] = 461[Ω]
E24系列で近いのは、470Ω
#461Ωは±5%の範囲。470*0.95=447

5Vp-p → 0.3Vp-p @75オーム終端 簡易変換

 1.2kΩの抵抗を直列に入れる。

0.3V/75[Ω] = 4[mA]
4.7[V]/4e-3[A] = 1175
E24系列で近いのは、1.2kΩ


 XORでの同期合成に74ACT86を使う。4ゲート入りで、残り3ゲートをRGBのバッファに。

 デジタルRGBのは仕様に「TTLレベル」とあるから、74AC86より74ACT86の方が安心。ACでもちょいプルアップしておけばいいだろうけど。

 多めの電流を流すとV(OH)・V(OL)がVCC・GNDまで振り切れない。CD54ACT86のデータシートによれば、VCC=4.5Vにて、VOH=3.94V@IOH=-24mA,TA=25℃、VOL=0.36V@IOL=24mA。

 あくまで簡易変換。素直に、1.4Vp-pになるよう分圧して、150Ω負荷駆動のためのバッファを入れたほうがいいかな。

* Vista環境にて、PL-2303を使用したUSB接続COMポートで、TEXCELLのRubyシリアル通信ライブラリを用いてデータを受信できない。その原因と対処法

#プログラミング #Ruby #シリアルポート

事象

 Windows Vista の環境にて、USB接続のCOMポート(シリアルポート)を介して繋いだ機器のデータを、TEXCELLのRubyシリアル通信ライブラリ wincom.rb にて全く受信できない。teratermでは受信できる。。
 同じ接続対象機器・同じプログラムでも、レガシーな COM1 に繋いだならば受信できる。
 同じ接続対象機器・同じUSB接続シリアルポート・同じプログラムで、WindowsXP 環境では受信できる。

原因

 Vista環境にて、USB接続シリアルポートでは、ReadFileを実行した際、「読み取ったバイト数」として常にゼロが帰ってくるため。
 ドライバのバグか?

対処

 ReadFileの「読み取ったバイト数」は使わず、ClearCommErrorを実行した際に得られた COMSTAT構造体 の「受信バッファにあるデータのバイト数」を使う。
 ReadFileでそのバイト数読むと指示しているのだから、問題ない…と思う。問題あったとしても、常に0バイトよりはマシだ。
    def receive
(中略)
#                rcvchar = @wcrecv.unpack("a#{irlen[0]}")[0]
                rcvchar = @wcrecv.unpack("a#{ilen}")[0]

補足

 試したUSB接続シリアルポートアダプタは、以下2点。
 UC-232Aのドライバは、uc232a_windows_vista.rar (Ver._v1.0 2007-7-10)を使用。
 URS232GFは、Vista標準ドライバで利用できるとの事だが、できなかった。「URS232GFは一部ロットにて使用できません。」とのこと。チップ製造元であるProlificのサイトから、PL2303_Prolific_DriverInstaller_v10518.zip (2009/7/23 v1.0.5.18 )をダウンロードし、インストール。
 上記2点、チップ自体は同じか。ならば、ドライバもほぼ同一なのだろう。

あとがき

 今までTEXCELLのwincom.rbをありがたく便利なブラックボックスとして使わせて頂いていたのだが、中身を見て、色々と面倒な Win32API を隠蔽してくれていた事を実感した。今回必要に迫られてベールの下を覗いたけど、Win32APIは直接触らずに済むならそうしたい代物だ。


関連ページ

TEXCELL Rubyシリアル通信ライブラリ
http://www.texcell.co.jp/ruby/wincom/rubywincom.html

hirax.net::wincom.rbのCOM10以上対応
http://www.hirax.net/diaryweb/2009/07/29.html

Serial Communications in Win32
http://msdn.microsoft.com/en-us/library/ms810467.aspx

Windows/Vista/USB-RS232C(シリアル) - Tomocha WikiPlus
Windows Vista で動く、USB-RS232C変換ケーブル情報
http://wiki.tomocha.net/Windows_Vista_USB-RS232C.html

* DSC-UE4.3GのHDD換装

#PC #PC-98
 IDEのHDDをSCSIに変換するSDATを搭載のDSC-UE4.3G…の殻をヤフオク経由で入手した。早速、手持ちの6.4GBのHDDを入れたら無事認識された。

 しかし、他のHDDに変えると認識しなかった。
 手持ちのHDDで試した結果は以下の通り。
○Quantum Fireball CR 6.4G
×SAMSUNG SV0844A
×DK-238A-43
×MK2103MAV

 情報を求めてWebを彷徨うと
DSC-UE3.2Gを改造する
http://www11.cds.ne.jp/~youkan/y2k700/DSC-UE32.html
に、以下の記述があった。
ATAコマンドのIDENTIFY DEVICEを投げているとおぼしきところから追っていくと、怪しい部分が2つ見つかりました。
・Multiword DMA Capability を見て Mode 2 supported でなければエラーとしている。ここで該当ビットを見るのではなく即値の 0x04 と比較しているが、ATAPI-6のスペックを読むと「Mode 2 supported なら Mode1,0 のビットも立ててね」と書いてあるような気がする。0x07を返すHDDだとまずいっぽい。
・HDDから取得した総セクタ数をあらかじめ用意したテーブルのデータと順次比較し、「総セクタ数以下で一番近い容量のエントリ」を選択している。このとき実際の総セクタ数と決めうちで持っているセクタ数の差が0x100000(≒537MB)以上あるとエラーになる。つまり、このファームウェアはあらかじめ決められた数パターンの容量(9.1G/8.3G/6.4G/4.3G/3.2G/2.1G/1.2G + 0~0.5G)しかサポートしていないのであった。これが20Gでも4Gでもダメだった原因っぽい。

 8.4Gのも4.3Gのも2.1Gのもダメだったのは、最初の条件に当てはまったっぽい。
 Interface 2000年7月号の「ATA(IDE)/ATAPIの徹底活用研究」を見てみたところ、ビット0,1,2が「マルチワードDMAモード0をサポートする」「(ryモード1又はそれ以下をサポートする」「(ryモード2または(ry」だそうだ。

#同じ悩みの人用の検索ホイホイ:DSC-UE4.3G, DSC-UE4.3G, DSC-UE8.3G,

* シリアルマウス

PC mouse info
http://www.tkk.fi/Misc/Electronics/then/mytexts/mouse.html
更新:リンク変更

PIC K iT PS/2⇔シリアル マウスインターフェイス
http://members.jcom.home.ne.jp/irv/documents/sermouse/0511123_SirialMouse_manualB0.pdf
スクロールマウスのデータフォーマットの情報あり。その他にも色々参考になる。


 比較的簡単なハードウェアとソフトウェアでWindows機(等)にマウス扱いされる自作ハードを繋げるのは魅力だが、Windows2000, XPでは電源ON時にしか認識されない(?)等、微妙に面倒が多いのが難点。
 あと、近頃はシリアルポート搭載率が減少傾向。USB<->シリアル変換はシリアルマウスには対応していないのが多い。

#電子工作

* HTMLをXHTMLに変換してREXMLで処理

プログラム(抜粋)
h = Html2xhtml.new
h.read_array(readlines)

require "rexml/document"
y = REXML::Document.new(h.body.to_s)

y.elements["/html/body"].elements[6, 'table'].elements['tr/td'].elements.each('a') do |a|
    p a.attributes['href']
    print a.text.strip + "\n"
end
結果
"http://auctions.yahoo.co.jp/jp/0-category.html?"
オークション
"http://list3.auctions.yahoo.co.jp/jp/23336-category.html?"
コンピュータ
"http://list3.auctions.yahoo.co.jp/jp/2084039759-category.html?"
パーソナルコンピュータ
楽だ…めっちゃ楽だ…

#Web #ヤフオク

* 電気用品の範囲等の解釈について


電気用品の範囲等の解釈について(PDF)
(2)交流を電源とする機械器具であって、器体の外部にある小形単相変圧器
(2次電圧が100ボルト未満のものに限る。)によって変換された電気をさらに接続器(容易に取り外しのできるものに限る。)を介することにより電源として用いるものは、100ボルト未満の電路に用いるものと解釈し、対象外として取り扱う。ただし、電圧等を制御するための特定の信号線を有するもの等限定された用途のために小形単相変圧器と当該機械器具とを一体不可分の状態で用いる構造であるときは、負荷としての当該電気用品の電気用品名をもって当該機械器具の電気用品名とする。
ニ 次のいずれかに該当するときは、「その他の特殊な構造のもの」と解釈し、対象外として取り扱う。
(イ)ラジオ・テレビ等の修理又は調整等に用いられるサービス業者専用の測定用計器が内蔵されるとき。
(ロ)電子計算機、無線通信機、自動制御機器等に組み込むために特別に設計・製作されるとき。この場合において、「特別に設計・製作される」とは、専ら当該機械器具に取り付けることを前提として設計・製作され、当該機械器具に内蔵されるときに限る。(このことは、以下同様とする。)

電気用品安全法