28 |
FM-7 ROM吸出し器の改版(10) |
実験&PICプログラムの修正
組み立てたボードを図265.1に示します。

実験したところ、リフレッシュがかかりっぱなし("L")となってしまいました。これはPICから出力する*REFCKが常にONになっていたためでした。本来はZ80W==Lの時のみ出力するようなトライステート制御を行う必要があります。PICにはトライステート出力は無いので、Z80W==Hの時に入力、Z80W==Lの時に出力とします。割込みハンドラを、この方向制御で挟むことにより次のように修正します。
void TMR2_DefaultInterruptHandler(void){ if (Z80W_GetValue() == 0) { XREFCK_SetDigitalOutput(); XREFCK_SetHigh(); RFREQ_SetHigh(); while (RFGNT_GetValue() == 0); XREFCK_SetLow(); XREFCK_SetHigh(); XREFCK_SetLow(); XREFCK_SetHigh(); XREFCK_SetLow(); XREFCK_SetHigh(); XREFCK_SetLow(); XREFCK_SetHigh(); RFREQ_SetLow(); XREFCK_SetDigitalInput(); } }
実験
62.5 usecに4発のリフレッシュを実験しました。リフレッシュ期間は3.8 usecであったので、Arduinoに割込みをかけた場合はほとんど100%がリフレッシュであったのに比べて、PICによるリフレッシュ時間の割合は6%に激減しました。
さらに125 usecに8発を試してみます。図265.2、3にその場合のリフレッシュの波形を示します。PICを用いることで125 usec(8発)ではリフレッシュの割合を4.6%まで下げる事ができました。

図265.2より、青色線で示されるRFREQの周期は125 usであることが読み取れます。このRFREQのH幅が約5.8 usecであることから、オーバヘッドは4.6%となります。

図265.3上より黄色線で示される*REFCKが8発観測されます。負のパルス幅は約240 nsであり、タイミング規格を満足しています。ArduinoとのDRAMアクセス競合が起きている場合に、通常約5.8 usecであるRFREQが時々伸びていることが分かります。
結論
実験結果としては、熱はかけていないものの、180 secまでノーエラーで経過しており、リフレッシュ回路は問題ないものと判断します。
表265.1にリフレッシュ回数とオーバヘッドを示します。
周期[usec] | リフレッシュ回数 | リフレッシュ時間[usec] | オーバヘッド[%] |
---|---|---|---|
15.625 | 1 | 2.3 | 14.72 |
31.25 | 2 | 2.8 | 8.96 |
62.5 | 4 | 3.8 | 6.08 |
125 | 8 | 5.8 | 4.64 |
250 | 16 | 9.8 | 3.92 |
500 | 32 | 17.8 | 3.56 |
1,000 | 64 | 33.8 | 3.38 |
2,000 | 128 | 65.8 | 3.29 |
Leave a Comment