目次

新プロセッサ調査

 これまでAVR、ARMをBrainコンピュータに、利用して
 きました。ARMは、AnalogDevicesのADuC7026を使った
 実績があります。



 雑誌付録だったので、手持ちの3基板を使い切って
 しまい、手頃なサイズの安価なプロセッサを探して
 いました。

 IchigoJamを実現しているLPC1114が有名かつ安価
 なので、入手して調査してみます。



 必要なソフトウエアは、ファームウエアダウンロード
 のためのFlash Magicです。



 最初にFlash Magicをダウンロードしてインストール。
 次にCコンパイラは、mbedでクラウドで使います。

 テスト基板の回路は、以下。



 この回路を組上げると、次のようになります。
 (IchigoJamの互換仕様)



 LPC1114は、H8と同じでフラッシュROMへの書込み回路を
 内蔵しているので、ダウンロード用ファームウエアを
 シリアルインタフェースで転送後、本体プログラムを
 書込みます。

 レガシータイプのシリアルインタフェースをもつWindows
 マシンなら、USB/シリアル変換器を使わずに、ファーム
 ウエアを転送できます。

 シリアルインタフェースは、抵抗と小信号トランジスタ
 を使いました。製品ではなく、実験なので手持ち部品を
 活用しました。

 Flash Magicを利用して、IchigoJamのファームウエアを
 書込みました。(書込み時は、ボタンをISP側に。)



 電源切断後、ボタンをISPではない方にして再度電源を入れると
 TeraTermの画面に、オープニングメッセージが表示されます。
 (TVでは、OKが左に表示されます。)



 TeraTermの端末設定は、以下。



 通信速度と遅延時間は、次のように設定しています。



 LEDの点灯、消灯をダイレクトコマンドで実行すると
 次のようになります。これで、LEDを点灯、消灯でき
 ました。



 通信には3線式のインタフェースコネクタを利用
 しました。



 IchigoJam互換で利用するには、BASICプログラムを
 たくさん保存できた方がよいので、手持ちのEEPROM
 (IICバスインタフェース)を、新たに接続しました。



 IchigoJam互換にした場合、入出力は入力、出力を各4
 ビット利用できます。EEPROMの接続でプログラム容量
 は増えますが、入力は3ビットに制限されます。

 IICバスを使っているので、ROMそのもののアドレスは
 シリアルで転送しますが、デバイスのアドレスには
 (A2,A1,A0)=(1,0,0)より4が割当てられています。

 IchigoJamのBASICであれば、コマンドのLOAD、SAVEを
 使うだけですが、ARMで使う場合にはデバイスアドレス
 が必要になります。

 動作試験には、次の2種類のBASICプログラムを
 使いました。

 シフト

  出力の4ビットを使い、下から上に1をずらします。

10 ' Knight Rider
20 CLS : A = 1 : B = 0
30 C = 0
40 IF C > 3 GOTO 30
50 GOSUB 100 : GOSUB 900 : GOSUB 120 : GOSUB 900
60 GOSUB 140 : GOSUB 900 : GOSUB 200 : GOSUB 900
70 GOSUB 200 : GOSUB 900 : GOSUB 220 : GOSUB 900
80 GOSUB 240 : GOSUB 900
90 C = C + 1 : GOTO 40
100 ' PATTERN 0001
110 OUT 4,B : OUT 3,B : OUT 2,B : OUT 1,A : RETURN
120 ' PATTERN 0010
130 OUT 4,B : OUT 3,B : OUT 2,A : OUT 1,B : RETURN
140 ' PATTERN 0100
150 OUT 4,B : OUT 3,A : OUT 2,B : OUT 1,B : RETURN
200 ' PATTERN 1000
210 OUT 4,A : OUT 3,B : OUT 2,B : OUT 1,B : RETURN
220 ' PATTERN 0100
230 OUT 4,B : OUT 3,A : OUT 2,B : OUT 1,B : RETURN
240 ' PATTERN 0010
250 OUT 4,B : OUT 3,B : OUT 2,A : OUT 1,B : RETURN
900 ' WAIT
910 WAIT 60 : RETURN
990 END

 テーブルルックアップで、LEDの点灯パターンを
 指定すると、見通しのよいコードになります。

10 ' Knight Rider
20 CLS : LET C,0
30 IF BTN() THEN GOTO 70
40 GOSUB 100
50 LET C,C+1 : LET C,(C % 6)
60 GOTO 30
70 END
100 ' flashing
110 IF C=0 THEN LET [1],1,0,0,0
120 IF C=1 THEN LET [1],0,1,0,0
130 IF C=2 THEN LET [1],0,0,1,0
140 IF C=3 THEN LET [1],0,0,0,1
150 IF C=4 THEN LET [1],0,0,1,0
160 IF C=5 THEN LET [1],0,1,0,0
170 FOR I=1 TO 4 : OUT I,[I] : NEXT
180 WAIT 60
190 RETURN

 スイッチ入力LED点灯

  入力0チャネルから論理値を取得し、LEDチャネルに出力。

10 ' input and output
20 CLS : C = 0
30 A=IN(C)
40 LED A
50 GOTO 30
60 END

 TeraTermで、LED点滅プログラムを入力して
 動かしてみると、次のようになりました。
 (TVでは、左側に行番号が揃えられます。)



 プログラムは、以下です。

10 ' flashing
20 A = 1 : LED A : WAIT 60
30 A = 0 : LED A : WAIT 60
40 IF BTN() THEN GOTO 60
50 GOTO 20
60 PRINT "exit"
70 END

 サブルーチンを使えば、もう少し短くできます。

10 ' flashing
20 A = 1 : GOSUB 100
30 A = 0 : GOSUB 100
40 IF BTN() GOTO 60
50 GOTO 20
60 PRINT "exit"
70 END
100 ' 
110 LED A
120 WAIT 60
130 RETURN

 上のプログラムを入力し、動かしてみたところ
 1秒周期で点滅しました。



 EEPROMを実装した場合、基板は以下となります。



 NTSC信号を、アナログTVに出力できるよう、ケーブルをつけました。
 地デジTVでも、黄のRCAコネクタがあれば、表示できます。

 FlashMagicでファームウエアをダウンロードできたことと
 BASICを利用してプログラムを記述できたので、使えると
 判断できました。

 コンパイル、リンクをmbedにすると、ネット環境のある
 場所でないといけません。

 Keilの開発環境は、ARM専用なので、もしやと思い調べて
 みると、チップのデータベースを更新してLPC1114に関連
 する情報をいれると、mbed環境が不要に。



 ルネサスでもARMコアを入れたプロセッサを出して
 いるので、ARM+FPGAでMCRの大会規定に合致させる
 ことができそう。

 アナログTVとPS/2キーボードを利用した、実験環境を
 作ってみると、次のようになりました。



 アナログTVは、自宅の防犯カメラに接続していたのを
 省エネでLCDタイプに交換したので、余ったモノ。
 大きな画面とPS/2キーボードにIchigoJamが不釣合い
 ですが、見やすいです。

 IchigoJamの出力を、2ビット使うとスタートゲート
 の開閉ができます。

 スタートゲートは、サーボモータを利用すれば
 すぐに出来上がります。



 乱数でゲートを開閉する周期を変えます。

 MCR_VCマシンは、スタートゲートの開閉を判断する
 ので、スタート位置においておけば、勝手に走行を
 始めることができ、走行をカメラで動画撮影できる
 環境を用意できます。

 IchigoJamを端末接続で処理する場合、端末設定で改行コードを
 受信と送信とで以下とすると、左端に揃えた表示ができました。



 プログラムリストを表示すると、次のように左端に揃います。




目次

inserted by FC2 system