ブログトップ

電子工作やってみたよ

HP15C石取りゲーム(ニムゲーム)
物置からHP25ミニのプログラム集(YHP発行)が出てきました。
その中で”石取りゲーム”がありましたので HP15C用に改造してみました。

c0335218_11114301.jpg



























HP25ミニはプログラム中にラベルが使えません。 GTOの飛び先はすべてステップNoで指定します。
このためプログラムの追加や削除を行うとすべてのGTOの行き先を修正する必要があります。
HP15Cでは飛び先をラベルで指定しますので今回25ミニのプログラムにラベルを付けることと多少使いやすくするための改造を行いました。
石取りゲームの説明
石取りゲームはN個の石の山(正の整数)から始めます。各競技者(コンヒュータと人間)は、残りが1個になるまで交互に1~3個を取っていきます。
最後の1個を取らされた競技者が負けです。  ゲームを始めるときの初期値Nはソフトで15を設定していますがプログラムのステップNo15,16の所で変更できます。
各自が石を取るたびに、残りの数が表示されます。 負の符号(-)が出ているときには、あなたが石を取ることを示し、正の整数の表示には15Cが石を取ることを示しています。 プログラムを起動したらまずあなたが挑戦者です。-15と表示されていますから先に石を取ってください。 1回に取る石は1個以上3個までです。

操作手順

1、下記のプログラムを入力して下さい。
2、f A と押してプログラムをスタートさせます。
3、最初 -15 と表示されます。 あなたの番ですので1~3の数値を入れて R/S を押します。
4、正の整数が表示されます。 15Cの番ですのでただ R/S と押します。
5、15Cが取った数を引いた残りの数が ー で表示されます。あなたの番ですのでまた1~3の数値を入れて R/S を押して下さい。
6、以上のことを最後 1をとるまで続けてください。あなたが勝つと I.LOSE(負けた)と表示され、あなたが負けるとBLISS(至福)と表示されます。
これは 15Cを上下逆さまにして読んでくださいね。

HP15Cはとても強いです。 最初はプログラムのムシがあって勝てないのじゃないかと思っていたのですが、ある法則を探せば勝つことが出来ます。
わずか49ステップの中にこれだけのことを入れたのに感心するばかりです。 アルゴリズムを解読しようと1日プログラムをいじりまわしていたのですがわからないので諦めました。 
下記リストは 左2桁がステップNoです 次がキー入力する命令 右側の数値がキーコードです。
入力後 キーコードとの対応を確認すればミスが検出できるとおもいます。


ステップ 命令 HP15C キーコード

01 LBL A ------42,21,11
02 5 ------------ 5
03 5 ------------ 5
04 1 -------------1
05 7 ------------ 7
06 8 ------------ 8
07 STO 3 ------- 44,3
08 3 ------------ 3
09 5 ------------ 5
10 0 ------------ 0
11 7 ------------ 7
12 . ------------ 48
13 1 ------------ 1
14 STO 4 ------ 44,4
15 1 ----------- 1
16 5 ----------- 5
17 STO 0 ------ 44,0
18 FIX 0 ------- 42,7,0
19 CHS -------- 16
20 R/S --------- 31
21 ENTER ------ 36
22 LBL B ------- 42,21,12
23 1 ------------ 1
24 STO 2 ------- 44,2
25 R↓ ----------- 33
26 LBL C --------- 42,21,13
27 STO -0 ------- 44,30,0
28 RCL 0 -------- 45,0
29 X=0? --------- 43,20
30 GTO 2 -------- 22,2
31 STO *2 ------- 44,20,2
32 RCL 2 --------- 45,2
33 R/S ------------ 31
34 X<<>>Y ------ 34 ---- X,Yチェンジ
35 TEST 3 ( X>=0? ) ---- 43,30,3
36 GTO D --------- 22,14
37 X<<>>Y ------ 34 X,Yチェンジ
38 GTO B --------- 22,12
39 LBL D ---------- 42,21,14
40 1 --------------- 1
41 CHS ------------ 16
42 STO 2 ---------- 44,2
43 0 --------------- 0
44 STO 1 ---------- 44,1
45 LBL E ----------- 42,21,15
46 RCL 1 ----------- 45,1
47 3 ---------------- 3
48 TEST 5 ( X=Y? ) ---- 43,30,5
49 GTO 1 ----------- 22,1
50 1 ----------------- 1
51 STO +1 ---------- 44,40,1
52 CHS -------------- 16
53 RCL 0 ------------ 45,0
54 + ----------------- 40
55 RCL 1 ------------ 45,1
56 - ----------------- 30
57 4 ----------------- 4
58 ÷ ---------------- 10
59 FRAC ------------ 42,44
60 TEST 0 ( X<>0? ) ---- 43,30,0
61 GOTO E --------- 22,15
62 RCL 1 ----------- 45,1
63 GTO C ---------- 22,13
64 LBL 1 ----------- 42,21,1
65 1 ---------------- 1
66 GTO C ---------- 22,13
67 LBL 2 ----------- 42,21,2
68 RCL 2 ----------- 45,2
69 TEST 2 ( X<0? ) ----- 43,30,2
70 GTO 3 ---------- 22,3
71 RCL 3 ----------- 45,3
72 GTO 5 ----------- 22,5
73 LBL 3 ------------ 42,21,3
74 RCL 4 ----------- 45,4
75 FIX 1 ------------ 42,7,1
76 LBL 5 ----------- 42,21,5
77 R/S --------------- 31

使用レジスタ
R 0 現在の残数
R 1 HP15Cの手
R 2 ±合計
R 3 55178
R 4 3507.1


by telmic-gunma | 2014-10-29 11:58 | HP電卓 | Trackback | Comments(2)

物置を片付けていたら 昔作ったアナログ計算機が出てきました。

上の列 5個は加算器  
下の列 左から微分器 1個 積分器 3個 大きさ比較のHP15C電卓

c0335218_15491617.jpg


















デジタル計算機のスピードが遅い頃はよくアナログ計算機が使われていたそうです。
直流のアナログ電圧を信号として加算減算積分微分などを行います。
構造は直流アンプを使い 増幅率をパネルのショートピンで任意に設定できるようになっています。
積分器や微分器はパネルで時定数をかえられるようになっています。
内部にはOPアンプとアナログスイッチの組み合わせで出来ています。
この加算器や積分器などいろいろ組み合わせて、答えは(出力)レコーダーでチャート紙に記録します。
言ってみれば パソコン上で動く回路シュミレーターをハードで作ったようなものですね。
いまならブレッドボードがありますので 同じことが簡単に出来るでしょう。
この装置を作るにあたって知恵を出したところは各要素にメーターを付けて途中スケールアウトのチェックを
一目で分るようにしたことです。
これを作ること自体が楽しみだったので これを使っての成果 何があったのかよくおぼえていません。
(恥ずかしながら こういうこと多いみたいです。)



by telmic-gunma | 2014-10-21 20:33 | シュミレータ | Trackback | Comments(2)

フィードバック制御の動作をパソコン上でシュミレートするには制御対象の応答特性が数式化されていないと出来ません。
先日書いたブログ ”PID制御 オートチューニングとシュミレーション”を出したあと気づいたのですが、この時やったことは、まさしく応答特性の数式化そのものですね。  あるブラックボックスに様々な入力を加えて、その時の出力を測定しておきます。 
次にブラックボックスの代わりに数式をいれ、同じ入力を入れて出力が前回と一致するように数式を設定すればその数式がブラックボックスの中身である。 何かの証明方法でこんなのありましたよね。
しかし 数式化しなくても 回路シュミレータ上でやる限りそのままですべて完了するようですね
なんか 頭が混乱してきましたが 回路図にちゃんと置き換えられるなら数式はなくてもすむということですよね

前回オートチューニングで定数を求めた電気炉の等価回路
c0335218_20364137.jpg






回路を数式化したもの、一次遅れが3個直列になっている
c0335218_20245203.jpg








以前 まったく逆のことを経験した事があります。 ある分析装置で化学反応をさせながらフィードバック制御をするというものです。 すでに量産されているものでコストダウンとCPUのワンチップ化を行いました。最後PID定数の調整になってどうしてもうまく合わないのです。化学反応に時間がかかるため一回の動作確認に3時間ほどかかります。装置の性質上 オーバーシュートは絶対許されず且つ応答時間は短くないといけないのです。
以前の装置では きれいに応答していたのですが、そのPID定数がわかりません。
プログラムを作った人はすでにこの世におらず、リストは断片的で何度見てもよくわかりません。調整のため徹夜もやりました。
そんな時 フッと思いついたのが、”うまく動いているものが目の前にあるのだからそれを測ればいいじゃないか”、 と言うことです。 PID制御回路にステップ入力を与えその時の出力を記録しました。あとは新型も同じ出力が出るようにソフトをいじればいいだけの話でした。
修正後 動作させたら一発でうまく行ったのは本当にうれしかったです。 
このPID定数自体がひとつの価値ある商品ですね。
そしてデジタルでのPID制御は再現性抜群だなと思いました。

PID回路にステップ入力を加えた時のシュミレート波形

c0335218_19020028.jpg









ステップ入力を加えた時のPID出力波形
c0335218_20251457.jpg









以上 説明べたですいませんが実際にうまくいったはなしです



by telmic-gunma | 2014-10-18 21:44 | PID制御 オートチューニング | Trackback | Comments(0)

H68TRとGAME言語

H68TR と GAME言語

土蔵の中を片付けていたら,以前夢中になってやっていたH68TRが出てきました
日立が出した6800CPUのトレーニングキットです.

左から  モニタ  ティアック デジタルカセットMT2  H68カードケージ

c0335218_15415338.jpg























H68TR CPUボード と フルキー電卓型コンソール

c0335218_15414362.jpg

























左 メモリーボード     右 ビデオRAMボード

c0335218_15420194.jpg




























ようやく8ビットのマイコンが世の中に出始めのころ、NECはインテル8080を使ったTK-80というトレーニングキットを出しました。
もちろん即買いましたよ。ところがこのTK-80の勉強を始めて1週間目ぐらいのとき ”我が社はモトローラの6800を使用する”という天の声が降りてきて”アチャー”となりました。 そんなこんなで6800を使って製品のモデルチェンジが始まりました。
世の中でよく言われている言葉で”必要な人や物は必要なときに合わせてやってくる”というのが在ったと思いますが このときもまさしくその通りで、東京国立にある日立中央研究所を定年?になったという方が顧問ということでやってきました。結局その人と一緒にというよりその人に"おんぶにだっこ状態"で半年かかって製品が完成しました。3ヶ月くらいでだいたい仕様を満足するものは完成したのですがハードでのROMの容量は4kByteしかないのに作ったソフトは7kByteの大きさになってしまいました。今の1チップCPUより小さなサイズですね。 そんなわけで ソフト作りの残りあとの3ヶ月は、ひたすらプログラムサイズを小さくすることをやってました。このときが一番勉強になった気がします。まだフロピーは無く紙テープの時代でした。

そのころ会社の電子工作大好き人間の先輩が ”面白いものがある”と言ってH68TR用のGAME言語のカセットテープをくれました。これでGAME病に感染してしまいました。 ASCII誌を見ると6800オリジナルは大西さんが作りそれが6502(アップルⅡ)や8080に移植され さらにコンパイラも動いているということでした。6800用のコンパイラはまだ誰も作っていませんでした。
最初のGAMEコンパイラは8080用を中島聡さん(Win95,Win98の開発チーフをやった人)が高校生の時に作ったそうです。やはりすごい人は若いときからすごいのですね。(ということを今回調べていて知りました)

アッセンブラでのソフト作りにほとほと嫌気が差していた私は、”これは使える”と考えて6502と8080のコンパイラのソースを調べて6800用のコンパイラを作り始めました。 ROM化することを前提にしていたので掛け算などの基本演算ルーチンはインタープリタとは独立してリロケータブルな形で作りました。  外部メモリーはオーデオカセットを使いモニターには画面がチラチラする白黒テレビを使っていました。毎日会社から帰るとカセットテープからGAMEインタープリタと前日までに作ったコンパイラを20分位かけて読み込んで作業が始まりました。ソフトが暴走して壊れるとまた時間をかけて最初の読み込みからの繰り返しです。 こんなこと繰り返して完成までに半年程かかりました。 ASCIIの編集部にテープを送ったあと掲載してもらうまで、この時ほどワクワクしていたことは今でも有りません。 掲載されたASCII誌 今見たら 1981年5月号 定価500円となっていました。 ウワー 30年以上昔だ。

GAMEのカセットをくれた電子工作大好き人間の先輩をネットで検索したら、今でもアマチュア無線やブログなど現役バリバリでやってました。もう70歳は、はるかに超えたはずなのに 見習わなくちゃ。  この人 CQ誌やトラ技によく投稿してました。

肝心の"H68TR"ですが 30年もたったせいか最初は動作しなかったのですがコネクタやスイッチの接点など磨いたら動くようになりました。 まだ読み書きできないメモリもあるのですが おいおい整備していきます。

GAME68のコンパイラを作った以後ですがソフトの仕事は圧倒的に楽になりました。パソコン上のBASICでソフトを作る感覚でやってOKならばコンパイルして動作確認をしてそれをROMに焼けば終わり。 CPUボードはH68TRとメモリーマップを合せてあるのでそのまま動きました。 またGAMEは治具などちょっとした使い捨てソフトを作るのが楽でした。アッセンブラやリロケータ,逆アッセンブラなどみなこれで作って使いました。メモリーサイズが一番大きなものでは 板金用のNCコントローラを作りましたが、さすがこのときはONメモリーだけではコンパイルできなくてRAMデスクを作ってそこからソースを流し込むようにしました。 これなども自作したコンパイラだからすぐ対応できたのでしょうね。 また お遊びで頑張ってみちゃおうかな。



by telmic-gunma | 2014-10-13 17:54 | H68TR GAME言語 | Trackback | Comments(2)

昔 電気炉の温度制御をやっていて そのPID定数の設定に四苦八苦していました。
その後PID制御もアナログ回路からマイコンの演算でやり PID制御定数も制御機自身でオートチューニングで求めることが出来るようになりました。
いまインターネットで ”PID制御 オートチューニング” で検索するとたくさん出てきますね。
メーカーのものや大学のレポートなどみな難しい数式などでていねいに(?)説明してあり私には理解することが難しいです。

今回 回路シュミレータに置き換えてオートチューニング から PID制御まで遊んでみます。
定性的だったり現実とかけ離れた数値でやっても役に立たないので 最初は実際の電気炉をオートチューニング動作させて種データを取ります。 方法は目標温度を設定しておいてON-OFF制御を行い発信周期と温度の振れ幅を求めます。
実物電気炉は 100V 1kW 1000℃まで 熱電対はK(CA)というものを使用しました。 制御回路が何も無いので人力(じんりき)で実験をしました。  目標温度以下ではコンセントを入れ目標を超えたらコンセントを抜くという方法を何回か繰り返してデータを取りました。 
目標温度 350℃ 周期は28秒  ハンチング幅は7.5℃でした。

c0335218_21514939.jpgc0335218_21512352.jpg























c0335218_21511715.jpg



























使用した回路シュミレータはマイクロネットのサーキットビュアVer4.0を使いました。  ちょっと制約のあるものが ただでダウンロードできます。  回路シュミレータはいくつも発売されていますが これが最高だと思います。 とにかく使い方が簡単で必要な部品は必要最小限に揃っています。 ライブラリーなどの下準備に時間をとられること無くちょっと疑問に思ったことはすぐ回路図を描いて試すことができます。
電気炉の応答特性は3次遅れときめて 実際の応答に近づくように定数を変えては試すことをくりかえします。 
1000℃を10Vとしたのでハンチング幅7.5℃は0.075Vとなります。
なぜ3次遅れにしたかというと 2次遅れでは位相遅れは180度しかならず発信が持続せず現実とは合いません。 4次以上では変数が多くなって手間が大変です。 そこで横着してかつ現実的な必要最小限ということで3次遅れに当てはめてやってみました。 得られた定数は 50秒 50秒 0.5秒 でした。  これで実物の実験で得られた値にほぼ近い形になりました。  コツとしては 大きい値は2つ一緒に変えて周期を設定し 一つだけ小さい値でハンチング幅を調整するのがやりやすいように思います。

c0335218_21513957.jpg







c0335218_21513093.jpg

オートチューニング動作から得られた値からPID定数をきめます。 以下のことはあくまで私流のやり方です。 自分流のやり方を作るのがよいと思います。  
(ハンチング幅/制御機のフルスパン)*3*100 = 最適Gain
現実の値を代入してみます。
(7.5 / 1000) * 3 * 100 = 2.25
PID制御回路部の入力は 熱電対で1000℃=10V  です。  出力はヒーターパワー1000とします。  入力偏差1℃のとき出力2.2%を出すのを制御回路のGainとして上の数式を作りましたので
1/1000 かける ある値 = 2.25/100
0.001 X = 0.025 となり X=22.5  これがP定数のGainとなります。
次 積分定数はハンチング周期の半分が具合良かったので 28秒*0.5 = 14秒とします
次 微分定数は積分定数の4分の1として3.5秒としました。

以上の値入れて回路を構成したのが上記の回路図です。 オシロ画面では一番上(緑)が 目標値を0V(0℃) 1V(100度)の間で繰り返したものです。   
その次(紫)が電気炉の熱電対の出力です。  動作させてみて25%減衰でうまく動作しているのが分ります。

今回の反省点
ブログ上で回路図が小さくなって数値定数がまったく見えない またブログ上での数式の表示 いい方法ありませんか。
ヒータによる加熱はプラス方向には行くけれどマイナス方向には行かないはずなのでその条件を加味する。

この回路シュミレータ 物理や機械 政治などあらゆるものに使えるのでないですか?。
こころの問題などこんなのでシュミレートできたら面白いとおもいます。 どなたかトライしている人いますか。
ブログ作り始めて一週間 見にくくてすいませんでした。
私のやり方 おかしなところが有りましたら御意見 よろしくお願いします。




by telmic-gunma | 2014-10-09 10:19 | PID制御 オートチューニング | Trackback | Comments(5)

オリジナルマインドのキットミル CIP100(基板加工機の組み立てキット) 一年がかりでやっと動きました。
メカの組み立ては仕事の合間にやり一週間で完成したのですが、電気CADソフトの勉強でつまずいてしまいました。
キットミル対応の電気CADは5種類ほど用意されており その中でEAGLEが安いし(ただでダウンロード)いろいろなところで使っているひとの話がでているので選びました。

ゼロから勉強するため秋葉原に参考書を買いに行きCQ出版で出している”EAGLEでボード作り” \2500 を購入しました。
ところがいくら読んでもチンプンカンプン 俺こんななに頭悪かったのかなと思いつつアマゾンで別の本を検索しました。
ちょっと古いけど後閑哲也さんの”EAGLEによるプリント基板製作の素”が出ていました。
カスタマーレビューも11件とたくさん出ており どれも初心者には解りやすく最適と書かれていたので注文しました。
実際やってみると延べ時間は1日+α程度で理解できました。
いままでやったのは、何だったの という感じです。

良い上司、良い仲間、良い本というのはお金にはかえられませんね。
この逆を引いてうつになったりして人生リタイアしていった人、私の周りにたくさんいます。
とにかく 本を買うときは、”著者名とアマゾンのカスタマーレビュー調べ” を怠り無くが今回の勉強したことでした。

特に後閑さんの本で最高に良かったのは 添付されてきたパーツライブラリーです。
EAGLEに標準で付いてきたものはものすごく巨大で自分に必要なものはどれであるか探すのが不可能に近いのですが
後閑さんのライブラリは必要最小限にまとめられており通常の物はこれだけで回路図から基板まで完成できます。

このあと CADデータからキットミルで動作させるためのガーバーデータに変換させる必要があるのですが
ここでまた 二週間ほど四苦八苦してしてしまいました。
一度やり始めたら完成まで一気にやるのがいいですね。途中何ヶ月もブランクあると忘れちゃってるので、またゼロから
やり直しということを何度もやりました。 まあこんなものなんでしょうね。
また 使い込んでみて報告します。

c0335218_21332084.jpgc0335218_21332725.jpg
by telmic-gunma | 2014-10-03 11:26 | 基板製作 | Trackback | Comments(4)

2014-10-02
むかし電子計算機のプログラムというものにずっとあこがれていたけれど 
なかなか いじくれるチャンスがありませんでした。
まだ マイコンやパソコンが世の中に出てくる前です。
そんな時 YHPから HP25ミニ プログラム電卓が発売されました。
当時 東京池袋駅のそばにあった三越デパートの文房具売り場で購入した覚えがあります。
確か7万円ぐらいだったかな 月給が10万円にも満たないころだと思います。
49ステップ 電源OFFにするとプログラムは消えてしまうものでした。
プログラムは手計算と同じ手順で 逆ポーランド法で入力します。
データメモリは4段のスタックと呼ばれるところに入り 少ないメモリーで
大きな計算ができるということでした。
今思えば、このわずかなメモリ空間でゲームを楽しんだり仕事に使ってました。
そんなことで 皆さんがかかるという”HP電卓病”になってしまいました。
それ以来 HP97、HP48GX、HP42S、HP15Cなど使ってきました。
最近になってHP15Cの復刻版が出てきて 非常に高速ということなので
さっそく購入して比較してみました。
テストプログラムは 掛け算を900回繰り返すというものです。
結果は
  旧HP15C  430秒
  新HP15C  3秒  
約 150倍でした 
瞬間に結果が出るので通常の使い方ならプログラムが動いているという感覚は無いですね。
ただし "PSE" 命令(演算の途中経過を1秒ほど表示する機能)もそのまま高速化されてしまい
目で確認できず使えません。

写真は左からHP48GX、HP35s、上 新HP15C 下 旧HP15C
c0335218_15263858.jpg
by telmic-gunma | 2014-10-02 08:28 | HP電卓 | Trackback(1) | Comments(6)