人気ブログランキング | 話題のタグを見る

体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ

ポケコン PC-G850Vで電子回路工作(5/31)

プログラム完成!

【BASICプログラム】
10:*MAIN
20:REM POKE &H60,1,1
30:OUT &H60,1
40:OUT &H61,1
50:*INIT C=10:D=0
60:*READ READ A
70:IF A=99 RESTORE *RESTORE:GOTO *INIT
80:REM POKE &H62,(A AND &HFE)
90:OUT &H62,(A AND &HFE)
100:IF (A AND 1)=0 GOTO *READ
110:REM A= PEEK &H62
120:A= INP &H62
130:REM NullBit SKIP
140:IF C=10 GOTO *NEXT
150:IF A=1 THEN D=D+(2^C)
160:IF C=0 PRINT D
170:*NEXT C=C-1
180:GOTO *READ
190:*RESTORE
200:DATA 8,0,2,6,2,6,0,4,2,6,0,5,0,5,0,5,0,5,0,
5,0,5,0,5,0,5,0,5,0,5,0,5,8,12,8,12,99

REM文のPOKE,PEEKはPC-E5,U系のためのもの。REM文をはずしたら対応するOUT/INPにREM文を付加すること。
Z80系 PC-E2,14系,G8,G85系がOUT/INP(システムバス入出力)命令を、11ピンに対してもサポートしている事(アドレス60H辺りも可能)を前提にしている。(ひょっとするとG8系はミニI/Oしかサポートしていない?そうならコマンド書式が違うし、そもそも入力3ピン、出力3ピンが異なる。もしくはE2系は命令自体がない可能性も)

まあそういう心配があるからずっと前のプログラムでは5バイト程度のマシン語を使ったのだが。それはたぶんG8系なら大丈夫と思いたい。

【解説】
10:メイン
20:E5系用
30:11ピンをパラレルポートに設定する
40:4ピン(最下位ビット)のみ入力、それ以外は出力に設定
50:初期化。Cは入力ビットのビット位置に合わせた重み(2のn乗)のカウンタ、
Dは最終入力データ(アナログ値):0-1023(2^10ビット)まで示す。
ここでは5V入れてるので5*(D/1024)Vを示す。まあ変化すれば何でもいいんだけど。
60:データリード(1CLK毎の各ピンへの出力設定値)
70:データ末尾を検出したらデータを先頭に戻して初期化へ
80:E5系用
90:4ピン用のデータの最下位ビットを除いたビットにしてから、4ピン以外へ出力。
100:4ピン用のデータの最下位ビットが立っていなければ以下の処理をスキップ
110:E5系用
以下4ピン用の処理(最下位ビットが立っていればそれは4ピンから読み込むタイミングなので)
120:パラレルポートから読込みAにセット
(設定で4ピンのみ入力に設定しているので実質4ピンのON/OFFしか読み込まれない)
130:次がNullBitの処理であることを示すコメント
140:重みのカウンタがまだ10ならそれはNullBitなのでNEXTへ飛ぶ(わざわざ10にした理由)
150:Aが1(ON)ならB9-B0のいずれかなので重みCで累乗して、Dへ加算。
160:重みCが0になったら10ビット全て処理したのでDを表示。
170:*NEXT 重みCを減算
180:データリードへ戻る
190:*RESTORE
200:データ列(末尾に99付加)

まあ自分でも読み返しづらいとは思うが、備忘録的なものとしてはこんなものかな。
最初4ピンと5ピンの結線を間違ったのは秘密だ。

これでCDSを手でさえぎったりすると800台から400台に変化するのでうまくいってるようだ。

youtube:ポケコンによるA/D変換
ポケコン PC-G850Vで電子回路工作(5/31)_a0034780_12225044.jpg

(6/8訂正:動画では修正していないが実体配線図(fritzing)のプルダウン抵抗を5→4ピンに直した)
【応用】
このA/D変換入力に赤外線センサーや超音波距離センサー、温度湿度気圧センサー、CH1も使って(コマンドをCH0/1変わりばんこに送って)2次元傾きセンサーやタッチパネル(電圧で測るもの)を繋いだりすれば夢は膨らむ。

まあREADが遅いので配列化したり、Cに置き換えればもうちょっと早くなるだろう。
早くし過ぎてもタイミングチャートのMINを越えなければいい。

それにラズパイやArduinoでは何でもシリアル通信やSPI通信のライブラリを使ってしまって、ブラックボックス化しているが、これなら素のGPIO制御だけで出来ているので、回路をどんなマイコンに持っていってもインプリメント可能。(ラズパイでもArduinoでもAVRだろうがライブラリは最低限のPIN OUTPUT/INPUTだけでいい)
by k1segawa | 2015-06-01 11:24 | ポケコン | Comments(0)

by k1segawa