Arduino勉強会/0E-GMC4をArduinoで作ってみる
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[Arduino勉強会]]
#contents
2014/12/29からのアクセス回数 &counter;
** GMC-4との出会い [#q5215626]
私が最初にマイコンを見たのが、「秋葉原のBIT-INN」に展示さ...
((Wikiペディアの画像を引用))
&ref(http://upload.wikimedia.org/wikipedia/commons/thumb/...
この基板の上にテンキーと7セグメントLEDが8個付いたのが、...
知れませんが、初期のマイコンはテンキーを使って直接マシン...
入力していました。
((友人の浜野君が、これからはマイコンの時代が来ると言った...
2009年6月に学研の[[「大人の科学Vol.24」>http://otonanoka...
にTK-80を思わせる4-bitマイコンGMC-4が付録に付いてきたので...
&ref(GMC-4.jpg);
そこで、GMC-4用にC言語ライクな簡易言語コンパイラーを作っ...
[[GMC-4コンパイラー]]
です。
この時は、アセンブラからマシン語に手で変換して、プログラ...
簡易言語のコンパイラーを1日仕事で作って公開しました。
** Arduinoを使ってGMC-4を作る [#sc72cd2f]
Arduino勉強会で何を作りたいかと聞かれ、とっさに「GMC-4をA...
のは、GMC-4を子供たちが作って、キーボードからプログラムを...
が変わるのではないかと思ったからです。
*** Arduino版GMC-4の部品 [#r5f40b68]
Arduino版GMC-4には、1個の7セグメントLEDと7個のLED、そし...
2個のトランジスタと10個の抵抗をユニバーサル基板に載せ...
後はArduinoのプログラムですべて処理します。
&ref(GMC4-Arduino.png);
*** 回路図 [#w78baf96]
7セグメントの接続が画像と異なりますが、KiCADの練習で回路...
- &ref(GMC-4_sch.pdf);
ついでに、プリント基板のパターンを作りました。
- &ref(GMC4-Keyboard_ptrn.png);
現バージョンのボードの配線は、以下の通りです。
&ref(GMC4-Brd.png);
*** キーボードは配線だけ [#d4a5ce54]
Arduinoのライブラリにkeypadがあり、これはタクトスイッチを...
マトリックスキーボードを作ることができる素晴らしいクラス...
&ref(Keypad_pattern.jpg);
** スケッチの作成 [#je4914e7]
ハードは下手くそでもソフトなら大丈夫ということで、以下の...
- キーボード: KeyBoard.h
- 7セグメントLED: LED7Seg.h
- LEDアレイ: LEDArray.h
*** KeyBoard.h [#we13c9c0]
KeyBoard.hでは、Keypadに渡す、キーマップと、入力文字から...
調べるisPressedメソッドを用意しました。
- &ref(KeyBoard.h);
*** LED7Seg.h [#r30c4a12]
7セグメントLEDとLEDアレイは、交互に表示するため、on、off...
用意しました。
- &ref(LED7Seg.h);
*** LEDArray.h [#ze9bbd64]
LEDアレイは、アドレスを表示するために使用するので、setAdd...
- &ref(LEDArray.h);
*** GMC4.h [#lb2082f7]
GMC4をシミュレーションしているのが、GMC4.hに定義されてい...
この中の、stepメソッドが1命令毎に処理するメソッドです。
GMC4.hの処理を理解するには、[[FX-マイコン・全マニュアル>h...
を参照してください。
((命令の簡単な説明は、[[GMC-4コンパイラー]]にもあります。))
- &ref(GMC4.h);
*** メインのスケッチ [#b4cd56ab]
メインのスケッチだけ、ソースをそのまま示します。
処理としては、キーボードからの入力に対する処理の切替をし...
一つだけオリジナルのGMC4と異なる点があります。
それは、Arduinoのシリアルモニターを使ってGMC4用の機械語を...
これによってプログラムの確認がとても簡単になりました!
#pre{{
#include <Keypad.h>
#include <SoftwareSerial.h>
#include "GMC4.h"
SoftwareSerial mySerial(0, 11); // RX, TX
LEDArray ledArray;
LED7Seg led7Seg;
KeyBoard keyBoard;
GMC4 gmc4(&keyBoard, &ledArray, &led7Seg);
byte lastCode;
byte addr;
byte mode;
byte key;
void setup() {
mySerial.begin(9600);
lastCode = gmc4.resetAll();
ledArray.setAddress(0);
led7Seg.setValue(0xF);
mode = PROGRAM;
}
void readProgram() {
while(mySerial.available()) {
key = mySerial.read();
if (key >= '0' && key <= '9')
lastCode = key - '0';
else if (key >= 'A' && key <= 'F')
lastCode = key - 'A' + 10;
else if (key == 'T') {
gmc4.longTone();
lastCode = gmc4.reset();
ledArray.setAddress(gmc4.getAddr());
led7Seg.setValue(lastCode);
mode = PROGRAM;
}
lastCode = gmc4.incr(lastCode);
ledArray.setAddress(gmc4.getAddr());
led7Seg.setValue(lastCode);
}
}
void loop() {
if (mode == PROGRAM || mode == STEP_LedOffBeepOff || mo...
if (mySerial.available())
readProgram();
else
key = gmc4.getKey();
if (key != NO_KEY) {
if ((key >= '0' && key <= '9') || (key >= 'A' && ke...
addr = (lastCode > 0) ? lastCode << 4 : 0;
lastCode = gmc4.getCode();
addr += lastCode;
led7Seg.setValue(lastCode);
}
else {
switch (key) {
case 'S': // A SET
lastCode = gmc4.addrSet(addr);
ledArray.setAddress(gmc4.getAddr());
led7Seg.setValue(lastCode);
break;
case 'I': // INCR
if(mode == PROGRAM) {
lastCode = gmc4.incr(lastCode);
ledArray.setAddress(gmc4.getAddr());
led7Seg.setValue(lastCode);
}
else if (mode == STEP_LedOffBeepOff || mode =...
mode = gmc4.step();
if (mode == STEP_LedOnBeepOn)
ledArray.setAddress(gmc4.getAddr());
}
break;
case 'R': // RUN
switch (lastCode) {
case 1:
mode = RUN_LedOffBeepOff;
break;
case 2:
mode = RUN_LedOnBeepOff;
break;
case 5:
mode = STEP_LedOffBeepOff;
break;
case 6:
mode = STEP_LedOnBeepOn;
break;
default:
mode = RUN_LedOnBeepOn;
}
gmc4.reset();
ledArray.setAddress(gmc4.getAddr());
gmc4.setMode(mode);
break;
case 'T': // RESET
gmc4.longTone();
lastCode = gmc4.reset();
ledArray.setAddress(gmc4.getAddr());
led7Seg.setValue(lastCode);
mode = PROGRAM;
break;
}
addr = 0;
}
}
}
else {
mode = gmc4.step();
}
gmc4.draw();
}
}}
GMC4のスケッチは、以下のファイルをダウンロードしてくださ...
- &ref(GMC4Main.zip);
*** デバッグの方法 [#zf9d8c67]
GMC4のようなシミュレータをArduinoで作る場合、デバッグがと...
GMC4.hのデバッグは、MacOSのEclipseでダミーのKeyBoard, LED...
行いました。
参考として以下にソースを置いておきます。
- &ref(GMC4_Mac.zip);
*** 動作確認 [#u03aec3d]
プログラムの動作を確認するため、FX-マイコン・全マニュアル...
- No. 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2...
- No. 43, 44, 45, 46, 47, 48, 49, 50, 67, 68, 69, 70, 71,...
以下に大人の科学のProgram1 15秒カウンタを動かしたときの...
示します。
GMC4のプログラムは、以下の通りです。
| アドレス | 命令記号 | 命令コード |h
| 01 | TIY | A |
| 01 | 1 | 1 |
| 02 | TIA | 8 |
| 03 | 9 | 9 |
| 04 | CAL | E |
| 05 | TIMR | C |
| 06 | CY | 3 |
| 07 | AO | 1 |
| 08 | CY | 3 |
| 09 | CAL | E |
| 0A | SHTS | 9 |
| 0B | AIY | B |
| 0C | 1 | 1 |
| 0D | JUMP | F |
| 0E | 1 | 1 |
| 0F | 3 | 3 |
| 10 | JUMP | F |
| 11 | 0 | 0 |
| 12 | 2 | 2 |
| 13 | CAL | E |
| 14 | ENDS | 7 |
| 15 | JUMP | F |
| 16 | 1 | 1 |
| 17 | 5 | 5 |
最後に、Resetボタンを押します。
Arduinoのシリアルモニターから入力する場合には、上記の命令...
#pre{{
A189EC313E9B1F13F02E7F15T
}}
実行するには、Runボタンを押します。
&ref(15秒タイマー.png);
URL
- https://www.facebook.com/video.php?v=721780911262271&pn...
** lbeDuinoを使った2号機 [#c609d56a]
lbeDuinoを使った2号機の記事を以下にまとめました。
- [[Arduino勉強会/0L-lbeDuinoで2代目GMC4を作ってみる]]
** コメント [#w9c4effa]
#vote(おもしろかった[12],そうでもない[0],わかりずらい[0])
皆様のご意見、ご希望をお待ちしております。勉強会で分から...
スパム防止に画像の文字列も入力してください。
- 回路図とプリント基板のパターンを追加しました。 -- [[竹...
#comment_kcaptcha
終了行:
[[Arduino勉強会]]
#contents
2014/12/29からのアクセス回数 &counter;
** GMC-4との出会い [#q5215626]
私が最初にマイコンを見たのが、「秋葉原のBIT-INN」に展示さ...
((Wikiペディアの画像を引用))
&ref(http://upload.wikimedia.org/wikipedia/commons/thumb/...
この基板の上にテンキーと7セグメントLEDが8個付いたのが、...
知れませんが、初期のマイコンはテンキーを使って直接マシン...
入力していました。
((友人の浜野君が、これからはマイコンの時代が来ると言った...
2009年6月に学研の[[「大人の科学Vol.24」>http://otonanoka...
にTK-80を思わせる4-bitマイコンGMC-4が付録に付いてきたので...
&ref(GMC-4.jpg);
そこで、GMC-4用にC言語ライクな簡易言語コンパイラーを作っ...
[[GMC-4コンパイラー]]
です。
この時は、アセンブラからマシン語に手で変換して、プログラ...
簡易言語のコンパイラーを1日仕事で作って公開しました。
** Arduinoを使ってGMC-4を作る [#sc72cd2f]
Arduino勉強会で何を作りたいかと聞かれ、とっさに「GMC-4をA...
のは、GMC-4を子供たちが作って、キーボードからプログラムを...
が変わるのではないかと思ったからです。
*** Arduino版GMC-4の部品 [#r5f40b68]
Arduino版GMC-4には、1個の7セグメントLEDと7個のLED、そし...
2個のトランジスタと10個の抵抗をユニバーサル基板に載せ...
後はArduinoのプログラムですべて処理します。
&ref(GMC4-Arduino.png);
*** 回路図 [#w78baf96]
7セグメントの接続が画像と異なりますが、KiCADの練習で回路...
- &ref(GMC-4_sch.pdf);
ついでに、プリント基板のパターンを作りました。
- &ref(GMC4-Keyboard_ptrn.png);
現バージョンのボードの配線は、以下の通りです。
&ref(GMC4-Brd.png);
*** キーボードは配線だけ [#d4a5ce54]
Arduinoのライブラリにkeypadがあり、これはタクトスイッチを...
マトリックスキーボードを作ることができる素晴らしいクラス...
&ref(Keypad_pattern.jpg);
** スケッチの作成 [#je4914e7]
ハードは下手くそでもソフトなら大丈夫ということで、以下の...
- キーボード: KeyBoard.h
- 7セグメントLED: LED7Seg.h
- LEDアレイ: LEDArray.h
*** KeyBoard.h [#we13c9c0]
KeyBoard.hでは、Keypadに渡す、キーマップと、入力文字から...
調べるisPressedメソッドを用意しました。
- &ref(KeyBoard.h);
*** LED7Seg.h [#r30c4a12]
7セグメントLEDとLEDアレイは、交互に表示するため、on、off...
用意しました。
- &ref(LED7Seg.h);
*** LEDArray.h [#ze9bbd64]
LEDアレイは、アドレスを表示するために使用するので、setAdd...
- &ref(LEDArray.h);
*** GMC4.h [#lb2082f7]
GMC4をシミュレーションしているのが、GMC4.hに定義されてい...
この中の、stepメソッドが1命令毎に処理するメソッドです。
GMC4.hの処理を理解するには、[[FX-マイコン・全マニュアル>h...
を参照してください。
((命令の簡単な説明は、[[GMC-4コンパイラー]]にもあります。))
- &ref(GMC4.h);
*** メインのスケッチ [#b4cd56ab]
メインのスケッチだけ、ソースをそのまま示します。
処理としては、キーボードからの入力に対する処理の切替をし...
一つだけオリジナルのGMC4と異なる点があります。
それは、Arduinoのシリアルモニターを使ってGMC4用の機械語を...
これによってプログラムの確認がとても簡単になりました!
#pre{{
#include <Keypad.h>
#include <SoftwareSerial.h>
#include "GMC4.h"
SoftwareSerial mySerial(0, 11); // RX, TX
LEDArray ledArray;
LED7Seg led7Seg;
KeyBoard keyBoard;
GMC4 gmc4(&keyBoard, &ledArray, &led7Seg);
byte lastCode;
byte addr;
byte mode;
byte key;
void setup() {
mySerial.begin(9600);
lastCode = gmc4.resetAll();
ledArray.setAddress(0);
led7Seg.setValue(0xF);
mode = PROGRAM;
}
void readProgram() {
while(mySerial.available()) {
key = mySerial.read();
if (key >= '0' && key <= '9')
lastCode = key - '0';
else if (key >= 'A' && key <= 'F')
lastCode = key - 'A' + 10;
else if (key == 'T') {
gmc4.longTone();
lastCode = gmc4.reset();
ledArray.setAddress(gmc4.getAddr());
led7Seg.setValue(lastCode);
mode = PROGRAM;
}
lastCode = gmc4.incr(lastCode);
ledArray.setAddress(gmc4.getAddr());
led7Seg.setValue(lastCode);
}
}
void loop() {
if (mode == PROGRAM || mode == STEP_LedOffBeepOff || mo...
if (mySerial.available())
readProgram();
else
key = gmc4.getKey();
if (key != NO_KEY) {
if ((key >= '0' && key <= '9') || (key >= 'A' && ke...
addr = (lastCode > 0) ? lastCode << 4 : 0;
lastCode = gmc4.getCode();
addr += lastCode;
led7Seg.setValue(lastCode);
}
else {
switch (key) {
case 'S': // A SET
lastCode = gmc4.addrSet(addr);
ledArray.setAddress(gmc4.getAddr());
led7Seg.setValue(lastCode);
break;
case 'I': // INCR
if(mode == PROGRAM) {
lastCode = gmc4.incr(lastCode);
ledArray.setAddress(gmc4.getAddr());
led7Seg.setValue(lastCode);
}
else if (mode == STEP_LedOffBeepOff || mode =...
mode = gmc4.step();
if (mode == STEP_LedOnBeepOn)
ledArray.setAddress(gmc4.getAddr());
}
break;
case 'R': // RUN
switch (lastCode) {
case 1:
mode = RUN_LedOffBeepOff;
break;
case 2:
mode = RUN_LedOnBeepOff;
break;
case 5:
mode = STEP_LedOffBeepOff;
break;
case 6:
mode = STEP_LedOnBeepOn;
break;
default:
mode = RUN_LedOnBeepOn;
}
gmc4.reset();
ledArray.setAddress(gmc4.getAddr());
gmc4.setMode(mode);
break;
case 'T': // RESET
gmc4.longTone();
lastCode = gmc4.reset();
ledArray.setAddress(gmc4.getAddr());
led7Seg.setValue(lastCode);
mode = PROGRAM;
break;
}
addr = 0;
}
}
}
else {
mode = gmc4.step();
}
gmc4.draw();
}
}}
GMC4のスケッチは、以下のファイルをダウンロードしてくださ...
- &ref(GMC4Main.zip);
*** デバッグの方法 [#zf9d8c67]
GMC4のようなシミュレータをArduinoで作る場合、デバッグがと...
GMC4.hのデバッグは、MacOSのEclipseでダミーのKeyBoard, LED...
行いました。
参考として以下にソースを置いておきます。
- &ref(GMC4_Mac.zip);
*** 動作確認 [#u03aec3d]
プログラムの動作を確認するため、FX-マイコン・全マニュアル...
- No. 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2...
- No. 43, 44, 45, 46, 47, 48, 49, 50, 67, 68, 69, 70, 71,...
以下に大人の科学のProgram1 15秒カウンタを動かしたときの...
示します。
GMC4のプログラムは、以下の通りです。
| アドレス | 命令記号 | 命令コード |h
| 01 | TIY | A |
| 01 | 1 | 1 |
| 02 | TIA | 8 |
| 03 | 9 | 9 |
| 04 | CAL | E |
| 05 | TIMR | C |
| 06 | CY | 3 |
| 07 | AO | 1 |
| 08 | CY | 3 |
| 09 | CAL | E |
| 0A | SHTS | 9 |
| 0B | AIY | B |
| 0C | 1 | 1 |
| 0D | JUMP | F |
| 0E | 1 | 1 |
| 0F | 3 | 3 |
| 10 | JUMP | F |
| 11 | 0 | 0 |
| 12 | 2 | 2 |
| 13 | CAL | E |
| 14 | ENDS | 7 |
| 15 | JUMP | F |
| 16 | 1 | 1 |
| 17 | 5 | 5 |
最後に、Resetボタンを押します。
Arduinoのシリアルモニターから入力する場合には、上記の命令...
#pre{{
A189EC313E9B1F13F02E7F15T
}}
実行するには、Runボタンを押します。
&ref(15秒タイマー.png);
URL
- https://www.facebook.com/video.php?v=721780911262271&pn...
** lbeDuinoを使った2号機 [#c609d56a]
lbeDuinoを使った2号機の記事を以下にまとめました。
- [[Arduino勉強会/0L-lbeDuinoで2代目GMC4を作ってみる]]
** コメント [#w9c4effa]
#vote(おもしろかった[12],そうでもない[0],わかりずらい[0])
皆様のご意見、ご希望をお待ちしております。勉強会で分から...
スパム防止に画像の文字列も入力してください。
- 回路図とプリント基板のパターンを追加しました。 -- [[竹...
#comment_kcaptcha
ページ名:
SmartDoc