2020年5月26日火曜日

XPAC2解析(続き)

XPAC2解析の続き
パソピアの個体によっては、XPAC2のデータ化けが発生する場合があるとのこと。

うちにあるパソピア7と700達で試してみましたが再現できず...

XPAC2のコードと資料を追いかけてみたので、データ化けの可能性をまとめてみます。
結構、自分自身も忘れていたので備忘録も兼ねて。

パソピアのPAC SLOT2のピンと信号の関係を下の図にまとめました

パソピアでポート18h~1Bhに対してIN/OUT命令が実行されると、Pin#14(nCSEL2)がLowになります
IN命令の場合はPin#15(nCRD)がLow、OUT命令の場合はPin#16(nCWR)がLowです
Pin#12(CAD0)とPin#11(CAD1)の組み合わせでポート番号がわかります。(図左下の表を参照)
Pin#10,#9,#8,#6,#5,#4,#2,#1の8本のピンで、8bitデータを入出力します。

上画面のロジアナ波形は、左側のくぼみがOUT命令、右側がIN命令なので、
OUT &H19,&H00 ' 上位アドレスを00hに指定
IN &H1A ' 指定したアドレスのデータを読み込む
が実行され、&HAAが返答されている、という状況だと思われ

XPAC2はPollingしながらPin#14(nCSEL2)がLowになるのを待っています。
nCSEL2がLowになったら、Pin#15(nCRD) or Pin#16(nCWR)どちらがLowになっているかチェック。nCWRがLowだった場合はパソピアから8bitデータを読み込み、指定されたポート番号に応じて処理を行います。nCRDがLowだった場合はパソピアに対してデータを出力します

データ化けの可能性はいろいろ考えられますが、
nCRDでデータ要求が来た際にXPAC2はMRAM/SRAMの値を8bitデータで返答しますが、その返答がパソピアの読み込みまで間に合わない、という可能性を考えてみます。
その場合の対策としては、
・XPAC2のnCSEL2チェックのPolling間隔を短くしてみる
・nCSEL2とnCRDがLowになってから、XPAC2がデータを応答するまでの時間を短くする
とか。
多少パソピアのクロックが安定していない場合でも、追従できる効果が期待できます。

上記の対策を入れたテスト用ROMを用意してみましたが、再現環境がないと確認できないので、まったく効果ないかもしれません...
更に今回の修正はフラッシュROM側なので、フラッシュROM書き込み用のデバイスが必要になります。
(2020/5/31追記)
先日用意したテスト用ROMは、初代パソピアで動かなそうだったので見直してみました
(初代パソピア実機で確認してないですが、たぶん動作しなかったはず)

以下はパソピア700の波形で、nCSEL2(B5)とnCRD(B6)の差は10ns程度です
パソピア7/700はどちらも同じようなタイミングで、先日のテストROMは問題なかったのですが、以前とった初代パソピアの波形をみるとCWR(B0)、CRD(B1)とCSEL2(B2)のタイミングが200ns程度ずれています。
先日のテストROMではCSEL2チェックのPolling間隔を短くしたため、初代パソピアの200nsのタイミングずれには対応できなかったはずです...

方針を変えてテスト用ROMを作り直してみました
・パソピアからのデータ書き込み(out &H1A, xx)に対する処理の高速化(SRAM/MRAM)
・ポーリング間隔やIN命令に対するデータ応答時間は現状維持(高速化処理は入れましたが、以下の処理を入れたら同じになってしまいました...)
・AVR側データ入力をプルアップ指定(パソピア側の信号が弱い場合に効果があるか...?)それに伴い、応答データはAVRのレジスタに保持するように切り替え
・SRAMサイズ以上のアドレスが指定された場合に、データは明示的に0xFFを返答
・コードサイズが増えてROM領域オーバーしたので、Joystick周りのコード最適化
など

見直したテスト用ROM(2020/06/06更新)を置きました。 初代パソピア(T-BASIC1.1)、パソピア7、700で動作確認してます。
これで改善すると良いのですが...
(2020/06/14更新)改善しなかったということなので、別な対策を考えてみました。ブログに解析の続きをまとめてみました

2020年5月24日日曜日

XPAC2解析

CMDツールのlsコマンド(SDカードのファイル一覧表示)でファイルリストが化ける場合がある、と報告いただきましたので調べてみました。

CMDツールですが、SDカードの処理待ちが不十分そうだったので、待ち処理を増やしました。
1 'XPAC2 Command Prompt (C) 2015, 2020 zak
2 INPUT A$:B$=LEFT$(A$,1):IF B$="e" OR B$="E" THEN OUT 27,4:END
3 OUT 27,7:OUT 25,0:FOR I=0 TO 255:OUT 24,I:B$=MID$(A$,I+1,1):IF B$<>"" THEN OUT 26,ASC(B$):NEXT
4 OUT 26,0:OUT 24,0:OUT 27,15
5 FOR I=0 TO 15:OUT 24,0:IF INP(26)>223 GOTO 5 ELSE NEXT:FOR I=0 TO 255:OUT 24,I:C=INP(26):IF C<>0 THEN PRINT CHR$(C);:NEXT
6 PRINT"":GOTO 2

5行目を修正しています。

Pasopia700で動作確認してみましたが、大丈夫そうです。

CMDツールの使い方はこちら

修正したツールをXPAC2のEEPROMに書き込む場合は、ここから「eep_rev2.rom」ファイル(2020/6/7修正)をダウンロードしてSDカードに保存。
CMDツールで
ld 2 eep_rev2.rom
で書き込むことができます。(数十秒時間がかかります)
もしEEPROMに漢字ROMデータを書き込んでいる場合は、データが消えるのでご注意ください。

EEPROMデータは8KBのSRAMエリアに展開されるので、パソピア7で使う場合は、
slot 5
run"5:CMD"
で起動です。

-----
XPAC2はSDカードの読み書きをしている間、パソピアからのデータ要求に対して何も返答できません。パソピア本体・XPAC2のどちらもデータを出力しない間隔は約1usですが、通常はプルアップのため、ほぼ0xFFデータが返答されます。
しかし本体の個体差などで不定値が発生しやすくなるものがあるようで、今回の新しいCMDツールは、SDカード読み込み終了チェックを複数回行うようにしています。



2020年5月17日日曜日

CNC本体組み立て

1年ほど前ですが、Amazonで小型の中華CNC(CNC1208)を購入
ちょっと奮発して5.5Wレーザー付きです

注文してから2週間ちょっとで中国から到着
箱の中は2段になっていて、それぞれに部品が梱包されている
マニュアルやソフトは入っていなかったのでAmazonの購入サイトから問い合わせると、ダウンロード用のURLを教えてもらった
動画の組立てマニュアルもあったのですが、備忘録としてブログにまとめてみます。

まずはネジ類の取り出し。大きさ別に並べておくと便利

まずは作業テーブルの作成
M3x12ネジ2本使って、プレートに銅ナットを取り付け

銅ナットが足りない場合は、モーター軸に付いている場合があるので、軸から取り外して使う

M3x35ネジとナット2セット、バネを使って裏側に銅ナットをもう一枚取り付け

M4x8ネジ4本ずつ使って、2枚のプレートにフランジベアリング2個ずつ取り付け。

M5x20ネジ8本使って、アルミプレートを取り付け

ベアリングに棒を通して、スムーズに動くかチェック。
棒の動きが渋い場合は、ベアリングのネジを一旦緩めて締めなおす。
これで作業テーブルは完了。

次に土台

M3x9ネジ4本で、モーター取り付け。(コネクタの向きに注意)

土台に作業プレートを取り付け。
軸を手でぐるぐる回して、作業プレートの銅ナットを通す。

バネ側の銅ナットは手で少し押し込んで、少し遊びができるように取り付け

M5x16ネジを6本使って、内側の棒2本と外側のアルミプレート2枚を取り付け

M4スクエアナットを外側のアルミプレートに2つずつ通しておく。(ゴム足の取り付け用)

5x16ネジを6本使って、反対側のプレートも取り付け

ベアリングを軸にはめ込んだ後、ハンドルを取り付け。
ハンドルにネジが2つ付いているので、軸に取り付けた後、ボルトで締め付けておく

M4x14ネジを使って、スクエアナットにゴム足4つ取り付け
これで土台は完成

次にモーター台の組み立て
M3x12ネジ2本使って、プレートに銅ナットを取り付け
M3x35ネジとナット2セット、バネを使って裏側に銅ナットをもう一枚取り付け

M4x8ネジ4本ずつ使って、2枚のプレートにフランジベアリング2個ずつ取り付け。

M5x16ネジを使って、4本の短い棒(柱)を取り付け。
ベアリングに棒を通して、スムーズに動くかチェック。 
棒の動きが渋い場合は、ベアリングのネジを一旦緩めて締めなおす。

M3x9ネジ4本で、モーター取り付け。(コネクタの向きに注意)
ハンドルも取り付けて、ネジ締め固定

軸を手でぐるぐる回して、作業プレートの銅ナットを通す。
バネ側の銅ナットは手で少し押し込んで、少し遊びができるように取り付け
M5x16ネジを使って、2本の棒を取り付け。

モーターは、回転部の先に付いていた黒いナットと、本体外側のカバーを取り外しておく
回転部にネジが付いているので締めておく。

M4x14ネジ2本で、モーターを台に取り付け

M5x16ネジ2本で、アルミプレートを取り付け

次にモータ台を支えるパネルの組み立て
M3x12ネジ2本使って、プレートに銅ナットを取り付け

M3x35ネジとナット2セット、バネを使って裏側に銅ナットをもう一枚取り付け

M4x8ネジ4本ずつ使って、2枚のプレートにフランジベアリング2個ずつ取り付け。



M5x20ネジを使って、モーター台のアルミプレートにパネル2枚を取り付け。

ベアリングに棒を通して、スムーズに動くかチェック。 
棒の動きが渋い場合は、ベアリングのネジを一旦緩めて締めなおす。

M5x20ネジを使って、モーター台の下にアルミプレート取り付け

土台に横プレートを組み付け
M3x9ネジで、右側のプレートにモーター取り付け

モーターのコネクターが後ろになるように取り付け

M5x20ネジ6本で、土台に右側プレート取り付け

軸を手でぐるぐる回して、作業プレートの銅ナットを通す。
バネ側の銅ナットは手で少し押し込んで、少し遊びができるように取り付け

M5x16ネジ2本で、棒2本を取り付け
モーター台は結構重いので、マウスで支えた

M5x16ネジ2本で、背面アルミプレートを取り付け

M4スクエアナットを背面アルミプレートに通しておく
写真では上側に2つ付けているが、後で下側にも2つ付けた。4つ付けておいた方がいろいろ便利

上はM5x16ネジ4本、下はM5x20ネジ6本で、左側のプレートを取り付け

ベアリングを軸にはめ込んだ後、ハンドルを取り付け。
ハンドルを回して引っかかりがあるようなら、ベアリングの取り付けネジを一旦緩めて締めなおす

これで本体の組み立ては完了

ネジは2本ずつ余るようになっているっぽい