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

* RP2C02Bのパレット

#RGB #ファミコン #解析 #資料 #パレット
(ReadMore...)

* 電子部品Web通販比較 (2010初頭)

#電子工作 #部品調達
名称送料他手数料送料無料閾値決済方法補足
RSオンライン460円-8000円クレカ・銀行振込・代引(*)*:代引手数料無料
チップワンストップ450円-5000円クレカ・銀行振込・代引(*)・コンビニ決済*:代引手数料無料
Digi-Key2000円-7500円クレカ・銀行振込-
秋月電子通商500円300円(*)代引・銀行振込・クレカ(**)*:代引手数料 **:1万円以上購入
千石電商420円-10000円代引(現金)(*)・佐川e-コレクト・銀行振込・コンビニ払い(前金)・Edy決済*手数料315円
共立エレショップ380円7500円クレカ・銀行振込(*)・郵便振替・代引*:JNB・りそな銀行
マルツパーツ館450円-5000円クレカ・銀行振込・代引(*)*代引手数料無料
若松通商504円(*)370円(**)クレカ・銀行振込・代引*:ゆうパック5kg以内 **:ゆうパック代引手数料

更新

http://www.sengoku.co.jp/info/shipping.html
>送料などの改定に関して (2010/04/19)
>■ 当社発送分の送料ほかを改定いたしました
 690〜1090円 → 全国一律420円

* RGB21ピンコネクタ

#RGB #部品調達 #メモ
マル信無線電機株式会社 / 製品カタログ
http://www.ab.auone-net.jp/~est/pg-menu.htm
http://www.ab.auone-net.jp/~est/pdf/M-CN.pdf

SCART(RGB)PLUGS
オス MRS-670M
メス MRS-671J


 通販で扱っているところは、共立エレショップしか知らない。共立エレショップ自体では扱っていないが、シリコンハウスの店頭の品を未登録商品として注文できる。

シリコンハウス4F在庫品リスト
http://www.siliconhouse.jp/floor/4f-list.html
ROC アナログRGBコネクタ 21PソケットL型 ¥155
ROC アナログRGBコネクタ 21Pソケット縦型 ¥155
マル信 アナログRGBコネクタ 中継ソケット MRS-671J  ¥315
マル信 アナログRGBコネクタ 中継プラグ MRS-670M  ¥315

 秋葉原だとガード下で売っている。千石にもあるかもしれないが、無かったような気もする。日本橋には行ったことがないが、シリコンハウス共立の店頭で買えるのだろう。

* サターン用RGBケーブル, 音声ノイズ, GNDの接触改善

#電子工作 #RGB #メモ
 だいぶ前に組んだサターン用RGBケーブル(純正ケーブル HSS-0109 のサターン側約15cmとSFC用純正RGBケーブル SHVC-010 を継いだもの)と、XRGB-2plusを繋いで、久々にサターンを起動した。すると、音声にずいぶんノイズが乗っていた。

 サターン側のミニDIN10ピンコネクタのフレームが曇っていたので、コンタクトZで接点を磨いたところ、ノイズは解消された。


 サターンの映像出力端子は、GNDがピンに割り当てられておらず、ミニDIN10ピンのフレームにGNDが割り当てられている。で、そのフレームはピンよりも接触が不安定だし、メッキ部が曇ったりもする。その結果、サターン・モニタ間のGNDの抵抗が増える。

 75Ω終端の映像信号は、比較的大電流の信号だ。終端抵抗に0.7Vの電圧を発生させている間は、9.3mAの電流が流れる。RGB接続なら、R,G,B,複合同期(コンポジットビデオ信号)の4本で、計37mA

 というわけで、仮にサターン側コネクタのGNDに1Ωの抵抗が挿入された場合、映像信号がフルにスイングするとそのリターン電流のために、相互のGNDレベルに37mVの変動が生じる。


 その点、プレステのAVマルチ出力は、GNDがRGB,Video,Audioで分けられているので安心。でも、実際には機器側のコネクタでいきなり共通になっていたりして、意図どおりに機能することはあまりない気もする。

* XRGB-2plusのドットクロックをファミコンに合わせる

#RGB #ファミコン
 スーパーモードを有効にして、DTC_TYP を[USER]に、USR_DTCを1023に設定。

 SCAN は [SVGA](47kHz) に設定しておく。VGA(31kHz)では、スキャンライン毎に表示されるドットがずれる。また、SVGAモードの方がPPUの動作に伴う(?)「縦線」ノイズが目立ちにくい。
(というか、XRGB-2plusの31kHzモードでやたら縦線ノイズが目立つ。サンプリング周期/2以上の周波数のノイズが突き抜けているのか? 出力がVGAかSVGAかで変わるのが謎だ。出力が違っても入力のサンプリングは変わらないだろうに…。)

http://nesdev.parodius.com/2C02%20technical%20reference.TXT
+---------------+
|PPU base timing|
+---------------+
(中略)
  • Pixels are rendered at the same rate as the base PPU clock. In other
words, 1 clock cycle= 1 pixel.

  • 341 PPU cc's make up the time of a typical scanline (or 341/3 CPU cc's).
341*3 = 1023

* これは ひどい D2FC-F-7N(MS) のチャタリング

#電子工作 #実験 #メモ
 IntelliMouse Explorer 3.0 のダブルクリック暴発が多発するボタンのマイクロスイッチ D2FC-F-7N(MS) のチャタリングの様子を観測した。









 これは ひどい
 手持ちの他のマイクロスイッチに比べて、明らかにチャタリングの持続時間が長い。最大で2msに達しそうだし、1msでは安定しない場合が多い。

 マイクロスイッチを交換してもダブルクリック暴発が発生するのでプログラム的な問題が大きいと思っていたが、スイッチ自体の品質の問題もかなり大きいようだ。
 質が悪いのか、他とはひと味違う軽い感触を得るための代償か。(いずれにしても、それで意図しない動作をしてしまうファームはダメだと思うが。)

* マイクロスイッチのチャタリングの様子の観測

#電子工作 #実験 #メモ

はじめに

 チャタリングによるダブルクリックが頻発する IntelliMouse Explorer 3.0 を、Windows上で動くフリーソフトの ChatteringCanceler を用いて騙し騙し使っている。
 色々不毛で不便。ハードウェア的にパッチをあてるために、まずは、マイクロスイッチのチャタリングの挙動を観測してみた

機材

 PICkit2のソフトに簡易ロジアナ機能があるので、それを利用。3chまでしか観測できないけど、1chあれば十分。

 PICkit2の1ch,2chには内蔵の4.7kΩプルダウンがある。なので、マイクロスイッチのコモンを1chに接続。NO接点にPICkit2のVDDを接続し、VDD出力にチェックを入れる。
 トリガを1chの立ち上がりに設定し、RUNして、スイッチを押す。

結果

 0.5msでだいたい安定するが、1.5ms程度まではチャタリングが時折発生する。

 IME3.0のチャタリングは、こんなパルスを拾った結果なのだろうか。

対策

 色々な手法はあるけど、はて、どうしたものか…。
 H/Lで+1/-1してカウンタを増減させて、上下の閾値に達したら論理確定、ってあたりが確実か。
 パラメータは、500μ秒の連続ON/OFFで切り替わるぐらいで。マウスのボタンなら、0.5ms遅延したところで全く問題ない。

 マイコンを使うことを考えていたが、素直に積分+シュミットトリガゲートの方が…いや、5ch分のCRは場所食いだ。無駄に集積回路を使うけどマイコンの方が部品点数は少なくて済む。

* デジタル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Ω負荷駆動のためのバッファを入れたほうがいいかな。

* Bad Apple!! PV-FC (2) がファミコン実機で映像が乱れる。原因は黒より暗い黒

#ファミコン
※最新版では問題は修正済

発端

Bad Apple!! PVをファミコンで再現してみた。(その2)
http://www.nicovideo.jp/watch/sm9170895
に感動した。
 エミュレータでの再生では満足できず、実機で再生するためにMMC3搭載カセットのROMを剥いでEP-ROMを載せたカセットを作成した。


事象

 RF接続した赤白ファミコン(HVC-001)では映像が乱れる。RP2C03を載せたRGB出力AV仕様ファミコン+XRGB-2plusでは乱れない。

↑MTV-2000にRF接続し、キャプチャ

調査とわかった事

 後期型ファミコンの裏蓋を外し、オシロスコープでPPUの出力を眺めた。その結果、映像の黒部分に、バースト直後の黒レベルよりも低いレベルの信号が出ていた。

↑はAV仕様ファミコン(無改造)の映像出力

黒より暗い黒

http://nesdev.parodius.com/2C02%20technical%20reference.TXT
+-----------------------+
|Video signal generation|
+-----------------------+
(中略)
Luminance value 0, mixed with chrominance value 13 yield a "blacker than 
black" pixel color. This super black pixel has an output voltage level close 
to the vertical/horizontal syncronization pulses. Because of this, some 
video monitors will display warped/distorted screens for games which use 
this color for black (Game Genie is the best example of this). Essentially 
what is happening is the video monitor's horizontal timing is compromised by 
what it thinks are extra syncronization pulses in the scanline. This is not 
damaging to the monitors which are effected by it, but use of the super 
black color should be avoided, due to the graphical distortion it causes.

 パレットについての関連参考資料。
ファミコンの詳しい話
http://www.wizforest.com/OldGood/FamiCom/FamiMisc.html

 Bad Apple!! PV-FC では、黒として 'Luminance value 0, mixed with chrominance value 13' つまり 0x0D を使っているのだろう。(未確認。VirturalNESのパレットビューアでは、どのパレットを使っているかが数値では表示されない)
 作者の門真なむさんは実機で動かしているが、RP2C05-99を積んだツインファミコンで動かしたために、普通のファミコンで映像が乱れる(モニタにもよるだろう)ことに気づかなかったのかな。

追記

 問題が出る環境はかなり限られている模様。悪条件に相当弱い機器でなければ、はっきりした問題にはならないのかも。
 うちでは、MTV-2000にRF接続でノイズだらけになる。(MTV-2000はノンスタンダード信号に弱いので、blacker than black 以前の問題もあるかも)LGの安物VHSビデオデッキにチューナが死んだテレビデオ(普通のテレビ放送でも同期外れがたまに出るほど、同期周りが弱い)にて、同期外れが頻発。

* NEO GEO 用メモリカード(等)のSRAMの、FRAM化の検討

#NEOGEO #メモ
MCS48(8048)マイコンのページ(2007-05)
http://www.protom.org/micon/?date=200705
通常のSRAMのように扱えるので乗せ変えるだけと思いきや、これが全く動かず。しばしデータシートを眺めると、/CS(チップセレクト)端子を動かしてアドレスを内部にラッチさせないとダメとありました。この8048ボードは/CS線はGNDに繋がっているので原因究明。空きスペースにTTLの74LS08を置いて、8048からのPSEN,RD,WRでNegative-ORして/CS線に繋いであげると動き出しました。

  • FRAM Design Considerations
When designing with FRAM for the first time, users of SRAM will recognize a few minor differences. First, bytewide FRAM memories latch each address on the falling edge of chip enable. This allows the address bus to change after starting the memory access. Since every access latches the memory address on the falling edge of /CE, users cannot ground it as they might with SRAM.

 富士通の場合は、/CEがLにて/WEか/OEの↓でラッチアドレス?
 非同期SRAMと置き換えるだけでは、ダメか…。

* 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

* Windows環境にて、USB接続COMポートを、個体識別する

#メモ #プログラミング #シリアルポート #Ruby
 Windows環境(少なくともWindows XP)では、USB接続のRS-232C(正確にはEIA-574)アダプタのCOMポート番号は、差すUSBポートを変えるとコロコロ変わる。COM19になったりCOM6になったり…。とても困る。
 一方、USB接続のその手の機器は、デバイスマネージャ上で個体識別できる。ならば当然、自作プログラムでも個体識別し、COMポート番号を自動設定できる。
 WMIを介して情報を得る。Win32_SerialPortではUSB接続の情報が得られない(場合が多い?)ので、Win32_PnPEntity からCOMポートを抜き出すのが確実。

require 'win32ole'

def ports
    locator = WIN32OLE.new("WbemScripting.SWbemLocator")
    services = locator.ConnectServer(".","root/cimv2")
    ports = services.ExecQuery "Select * From Win32_SerialPort"
    ports.each do |port|
        p port.Caption
        p port.Description
        print "\n"
    end
end

def ports_pnp
    ps = []
    locator = WIN32OLE.new("WbemScripting.SWbemLocator")
    services = locator.ConnectServer(".","root/cimv2")
    ports = services.ExecQuery "Select * From Win32_PnPEntity"
    ports.each do |port|
        if /\(COM\d+\)$/ =~ port.Caption
            p port.Caption
            p port.Description
            p port.Manufacturer
            print "\n"
        end
    end
end
   


print "Select * From Win32_SerialPort\n"
ports

print "Select * From Win32_PnPEntity\n"
ports_pnp

ruby -Ks comports.rb

Select * From Win32_SerialPort
"通信ポート (COM1)"
"通信ポート"

"通信ポート (COM2)"
"通信ポート"

Select * From Win32_PnPEntity
"Prolific USB-to-Serial Comm Port (COM19)"
"Prolific USB-to-Serial Comm Port"
"Prolific"

"USB-to-Serial Comm. Port (COM6)"
"USB-to-Serial Comm. Port"
"Aten"

"通信ポート (COM1)"
"通信ポート"
"(標準ポート)"

"通信ポート (COM2)"
"通信ポート"
"(標準ポート)"


参考文献:

Kick4 BBS
USBシリアルのポート名を知る方法?
http://www.kick4.net/bbs/c-board.cgi?cmd=ntr;tree=4;id=

Win32_SerialPort Class (Windows)
http://msdn.microsoft.com/en-us/library/aa394413(VS.85).aspx
Win32_PnPDevice Class (Windows)
http://msdn.microsoft.com/en-us/library/aa394352(VS.85).aspx

* RandomNoteWiki記法 - TextFormat

* OR-216 16KB増設RAMカートリッジ の主要部品

#資料 #部品取り
 CASIOのMSX KB-7 用の増設RAM

HM48416AP-15DRAM (16K*4 = 64Kbit)日立
HM48416AP-15DRAM (16K*4 = 64Kbit)日立
M74LS157P三菱
M74LS157P三菱
M74LS04P三菱
M74LS010P三菱
M74LS074AP三菱

 80年代の香り漂う構成だ。

* TURBO FILE TWIN、他 の主要部品

#資料 #部品取り

TURBO FILE TWIN の主要部品

番号型番機能メーカー備考
U1uPD431000AGW-85LSRAM (128K*8 = 1Mbit)NEC
U2-カスタムチップASCII
U3HM62256LFP-10TSRAM(32K*8 = 256Kbit)日立
U4HC04ゲート日立
U5MB3790バッテリバックアップ制御富士通
C15.5V 0.047F電気二重層コンデンサ?

 1MbitのSRAM目当てにターボファイルツインを捜すのもいいかも。

サウンドノベルツクールの主要部品

番号型番機能メーカー備考
U1SHVC-ZSNJ-0MASK ROM不明
U2LH512NF-10TTLSRAM (64K*8 = 512Kbit)SHARP
U3MAD-1 XLU2230不明不明
U4F411B不明Nintendo

サテラビュー8Mメモリーパックの主要部品

番号型番機能メーカー備考
U1LH28F800SUT-Z1Flash Memory (8Mbit 512K*8|1M*8)SHARPピン間隔 0.5mm

ターボファイルGB の主要部品

番号型番機能メーカー備考
U1LH28F800BVE-TL10Flash Memory (8Mbit)SHARP
U4BS62LV1024TCSRAM (128K*8 = 1Mbit)Brilliance SemiconductorTSOP-32 (ピン間隔 0.5mm)