人気ブログランキング |

体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ

2015年 03月 13日 ( 1 )

一旦ハードの工作は簡単な方へ戻って、前回入手したジャンク7セグLEDがちゃんと使えるか確認。ついでに数字を作ってみる。

【繋ぎ方】
ポケコン3~10番ピン(青い文字)で直接パラレル接続する。3番ピンはGND。抵抗は1KΩ。煩雑に描いてあるけど、単に抵抗を入れて繋いだだけ。赤い四角の所が、裏返しになった7セグのピンの刺さる所。(3と4が未結線)
a0034780_17553477.jpg
そして数字を作ってみる。Google Sheetで。
a0034780_1932065.jpg
【左の絵】
ポケコンの4番ピンが、7セグの右上のLEDに繋がっている事を示す

62H番地のポートに書込んだ数値のビット0が、4番ピンに相当する事から、

【右の絵】
ビット0が1になる数値だった場合、そこのLEDがONになるという事を示す

丁寧に書くとこういう感じ。そしてシートのような計算をして、数字のデータを作っているのだ。LEDやポケコンのピンが変われば値も変わるけど計算方法は同じ。ビットの考え方とか、一回こういうのをやって自分メモとして残しておけば応用が利く。まあ面倒だと感じるか、自由にコントロールできると考えるかは人による。(1ケタの7セグでルーレットのようにクルクル回す事もできるわけだし)

もしかして電子回路も、丁寧に電圧や抵抗値を計算すれば基本の法則でわかるはずなのかな。(→自分)

【BASICプログラム】
PC-E2系、PC-8系のZ80 CPUで共通に動くようにINP/OUT命令もパラレルコマンドも使わない。PC-E5系はREMをはずせばそのままで動くようにした。
2:REM GOTO *MAIN
3:'マシン語書込み
4:POKE &H100,&H3E,0,&HD3,0,&HC9:GOTO *MAIN
8:'マシン語サブルーチン
9:*PIO POKE &H101,V,&HD3,Z:CALL &H100:RETURN
10:*MAIN REM POKE &H60,1,0:GOTO *LOOP
15:Z=&H60:V=1:GOSUB *PIO:Z=&H61:V=0:GOSUB *PIO
20:*LOOP READ A
30:IF A=99 THEN RESTORE 70:GOTO *LOOP
40:REM POKE &H62,A:GOTO *SLEEP
45:Z=&H62:V=A:GOSUB *PIO
50:*SLEEP WAIT 60:PRINT
60:GOTO *LOOP
70:DATA 3,109,103,83,118,126,35,127,119,63,0,99

マシン語は以前のページのままで、E5系のPOKE文もそのまま。3,8行目はポケコンでは漢字は入らないし、打ち込む必要はない。Z80系のマシン語領域確保の手順も以前のページと同じ。*はラベルですが、使えない機種もあるのかな?その場合はPIOは9、MAINは10、LOOPは20、SLEEPは50にしてください。あとパラレルなのでポケコンの電池を食うので、実行しない時は3番ピン(GND)を抜いておくと節約になります。(ポケコンをOFFにしても常時流れているので使わない時も)+5の行がE5系になります。
動画は1,2,3,...とカウントアップし最後0になって一回消灯、を繰り返します。

Youtube:ポケコンLED表示
a0034780_19125810.jpg

あとブラウザはWindows8.1のgoogle chromeで確認しています。

ついでにこのプログラムを利用して、数字を好きな順に表示する処理を追加しておきます。

【追加プログラム(続けて打ち込む)】
100:RESTORE 70:ERASE B:DIM B(10)
110:FOR C=1 TO 10
120:READ A:B(C MOD 10)=A
130:NEXT
140:INPUT D$
150:FOR C=1 TO LEN(D$)
160:Y=ASC(MID$(D$,C,1))
162:H=Y-48:V=B(H)
170:REM POKE &H62,V:GOTO 180
175:Z=&H62:GOSUB *PIO
180:WAIT 20:PRINT
190:NEXT
200:GOTO 140

【実行】
最初にRUNで実行し、適当なタイミングでONキーでBREAKします。エラーをCLSキーで消して続けてGOTO 100と打ち、実行します。
?が表示されるので987654などと入力し、RETURNキーを押すと、数字がその順に表示され、入力待ちに戻ります。

【解説】
BREAK後にGOTO 100する事によって、マシン語書込みとパラレルポートの準備が実行されたままになります。
RESTORE命令は70行目のDATA文を先頭から読むよう設定するためです。
ERASE命令はGOTOだとDIMが再宣言になるので1度クリアするためです。
MODは余りを求める関数で、INPUTはこのBASICの制限で最大7文字です。
DIM命令は0から10までの11個確保されます。

WAIT時間はG850Vの時間ですので調整が必要です。170行目はE5系用の命令です。REMを外せば動くはず。またGOTOではなく前の部分を改造すればRUNで動くようにも出来ます。

【結論】
今回は汎用ロジックICを制御する前に、やっておくべきソフト屋さん側の7セグ制御処理(パラレルの場合)を書いた事になるのかな。
シリアルで送るのならビット列は数字123と表示する場合、シートのビットの総和の所を見て1100000,10110110,1110110(先頭ビットから送る)になるという事。
プログラムはその確認のため。追加プログラムはちょっと凝ってみた感じ?いやいや~キャラクタ表示時のサブルーチン処理でしょうね。
by k1segawa | 2015-03-13 19:05 | ポケコン | Comments(0)