Doublerを使う--工事中

2002/9/15 製作例、リンクを追加
2001/10/10 製作例、リンクを追加
2001/10/06 232C汎用版の製作例とPCBEによるパターン図を追加。

はじめに

WonderSwanは9600bpsと38400bpsしか使えないので4800bpsが標準のNMEAフォーマットを出力するGPSとはそのままでは接続できません。
そこでDoublerを使って4800->9600bpsに変換します。
Doubler
Doublerは4800/9600bps付近の入力を自動判別して9600bps付近で出力します。
2秒間入力が無い場合は節電のためsleepします。
IrTx出力もあります。負論理、吸い込みでONです。WonderWaveと通信できます。

DoublerはPIC12C509Aを使用しています。
・8pinで小指の爪程度とかなり小さい。
・秋月電子で1個150円、10個1200円と安価。

#ここではWonderSwanに限定していますが、TxDはPCのRxDで、IRはPCのIRポートで受信できます。

232C汎用(Garmin GPSなど)

232C対応のGPSと接続できます。
電源をWonderSwanからもらっているので入力を供給される電源電圧3.3V以下になるようにクランプしないとWonderSwanの電源に流れ込んで誤動作します。

ピン配置

12C509A WonderSwan
1
3.3V WS 4 Pin -> Vdd 1 8 Vss GND 8 768KHz out
NC OSC1 2 7 GP0 (-> IrPhy NC) <-Tx 2 7 24KHz out
NC OSC2 3 6 GP1 <- Rx Garmin Tx ->Rx 3 6 Digital out
(button -> NC) GP3/MCLR 4 5 GP2/TOCKI -> Tx WS 3 Vout(3.3V) 4 5 Detect

上(入力):GARMIN GPS III+の出力を680Ω、2.2V ZDiで受けた例。
下(出力):

Doublerの動作が良く分かりますね。

FirmWareはDBLGPS2WS.ZIP

wsdoubler.zip
 PCBEで引いたパターン図です。一応、確認しましたがこれを元に手配線した実績しかありません。
一応、セラロック用のパターンもありますが未使用です。
基板を起こす機会がありましたらついでにすみっこにでも埋めてみてください。^-^;

製作例
秋月で売っているジェンダーチェンジャーのケースに組み込んでみました。
これはオスーメスなのでコネクタは手持ちを使いました。オスーオスとメスーメスを一個ずつ買って二個作るのも良いかもしれませんね。

スワンケーブルは電源が出ていないのでカッターで切開してマウスケーブルと交換し、黒のホットメルトで封じてあります。
切開する時、決して基板の上下に刃が入らないように注意してください。
コネクタの足が細いので抵抗無くすぱっと切れてしまいます。基板とコネクタハウジングの間なので気付きません。
切れてしまっているのですが導通確認のためテスタ棒で触ると押されて導通、時間とともに接触が悪くなってあたかも抵抗があるかのように誤動作するのでかなり困惑してしまいました。修復も大変なので気をつけてください。
基板のふちを探り当ててそれをなぞるように切ると良いと思います。

あと、何度も書いていますがホットメルトが収縮する時、かなりの強さで引っ張られるので確実に半田付けしておかないと取れてしまって冷えてから導通不良に泣くことになります。

これは交換しやすいようにソケットを使いハウジングに穴をあけていますが、普通は特にいじる予定も無いでしょうからソケット無しで直に付ければ穴をあける必要も無くても良いと思います。スワンへいくケープルは爪を一本折りとってその隙間からだしました。これはスズめっき線で抜けないようにケープルを縛ってありますが同様にホットメルトで固めてしまっても良いかと思います。


前作の出来が今ひとつだったのでもう一つ作ってしまいました。
ソケットを使ってもはみ出さないように基板をコネクタ端子列の間ではなく下になるようにしたのが改良点です。

手前のコネクタがGPS接続用、奥がPC接続(IPS出力)用。

Doublerは起動時にボーレートの自動判定を行うのでこのままstflogやpnrlog(垂れ流し設定時)にも使えます。
途中で切り替えた時はWonderSwanの電源を一度切り、確実に再起動するよう少し待ってから再度、電源を入れてください。

リクエストがあったのでケーブルコネクタの写真を取っておきました。ちょっと見にくいですが黒がGND,赤が3.3V,オレンジがTx,黄色がRxです。

関連URL
Doublerを作ろう!! TOWNYさんのページ。コンパクトにまとまっています。
Doublerを使ってみる 中澤さんのページ。
doubler 霊石フライトエリア管理人さんのページ。
WonderWitchでWonderSwanをGPS Loggerに(製作中) Doublerによるジュピター光無線化の項があります。


Summitと繋ぐ

Summitの信号線から電源を取る様にしてIrを使ってWonderWaveで受信する様にするとワイヤレスに出来て面白そうです。
WonderSwanコネクタが不要というメリットがあります。

上:IrPhy出力。
下:TxD


データは0x33->'3'


Jupiter(TTLレベル)と繋ぐ

Jupiterに供給する5V電源を分けて貰います。
5V電源、TTLレベルなので直結できます。但し論理が逆なのでFirmWareが違います
WonderWaveで受信する場合はIrLEDを付けます。動作確認用として普通のLEDを付ける事もできます。
省略しても動作には関係ありません。
WonderWaveで受信する場合はWonderSwanコネクタが不要というメリットがあります。

ピン配置

12C509A WonderSwan
1
+5Vへ Vdd 1 8 Vss GND 8 768KHz out
NC OSC1 2 7 GP0 (-> IrPhy NC) <-Tx 2 7 24KHz out
NC OSC2 3 6 GP1 <- Rx Jupiter 6 ->Rx 3 6 Digital out
(button -> NC) GP3/MCLR 4 5 GP2/TOCKI -> Tx WS 3 Vout(3.3V) 4 5 Detect

Jupiter

+--+
|12|
|11|
|10|Reserve
| 9|TM-10KHz
| 8|TM-1PPS
| 7|RD1
| 6|SD1 12C509 7Pinへ
| 5|+5V +5Vへ
| 4|RD2
| 3|SD2
| 2|BACK-UP
| 1|GND GNDへ
|  |
~  ~
~  ~
|  |
+--+
Jupiterの出力、ビット幅は208μS=4800bps

動作のおかしいJupiter。178.5μS、ほぼ5600bps

Doublerの動作
入力:0 0 0 1 0 0 1 0 0 1 (0x24 = '$')
出力:         1110110110 (0xdb = ~0x24)

JupiterはTTLレベルなので入力側は反転しています。


FirmWareはDBLJUP2WS.ZIP(入力TTL)

製作例

Ozeki君作

左上がDoubler,右下がJupiter,左下は1.5V電源です。
セラロックが見えますが未使用です。


Doublerの詳しい説明。
ここは興味のある人だけ読んでください。

V0.12では入力に対してクロックが低すぎる場合はOSCCALレジスタを操作してクロックを引き上げます。
誤差レベルの消費電力の増加を除いてクロックが高い方は問題ないのでなにもしません。
入力が規格外のレートの場合、出力しなかったV0.11と異なり、V0.12は近傍であれば規定外になっても出力します。
もちろん読み取れるかどうかはDoublerの出力を受け取る側に依存します。

通常、自動同期ルーチンに任せて問題ありませんが問題が起こった場合、特殊な使い方をする場合は以下を参考にしてください。

安定しない場合、内蔵RC->外部XTに焼き直し可能。(One-TimeでもBitを落とすことはできる)
RCOSC==1のままConfigだけXT OSCに変更しても動作には支障ありません。

DEBUGオプション付きでアセンブルされている場合は、GP3をLowに落とすことで内部パラメータを0x102-ビット幅/4、9600フラグ、OSCCALの順に出力します。

例:
CE 00 88
ビット幅 (0x102-0xCE)*4 = 208μS
9600フラグ 0:4800bps, 27:9600bps
OSCCALは0x88

先頭部分のOSCCALを増減している命令をNOPに書き換えることでOSCCALの初期値を変更可能。

値については上記デバッグ出力を参考にしてください。チップ自身の初期値はPIC Writerで読み取れます。

ADDWF OSCCAL,F ; speed up clock. これをNOPにすると結果的にOSCCALが-4されクロックが下がる
SUBWF OSCCAL,F ; speed down clock. これをNOPにすると結果的にOSCCALが+4されクロックが上がる

4800/9600判別、同期を行うため最初の数ビットは出力に反映されません。
これが問題になる場合は、自動判別ルーチンへの分岐命令をNOPにすることで回避できます。

GOTO ChkBaud ;(can't call quick as not Page 0) これをNOPにする。

このルーチンを使わない場合、環境で変動する内蔵RC発振での実用性には大きな疑問符がつくので外部XTでの使用を推奨します。

その他、出力を入力に対して反転する/しないもNOPへの書き換えで変更できます。
入力がMark=1かMark=0かは部分的な書き換えでは切り替えられません。

V0.13ではREUSEというラベルをセットすると0x200以降を使用するコードになります。このコードは0x000-0x1FFを使用する通常のコードに重ね書きできます。

12C509A使用上の注意
割り込みはありません。
サブルーチンは2レベルまで。
0ページ(0-255)の外のサブルーチンは直接呼べません。
値を返さないRET命令はありません。
GP3は入力専用です。