目次

Brainマイコン

 Brainマイコンは、R8C/Tinyを利用します。



 2005年のトランジスタ技術誌付録として入手し
 現在まで使わずにいました。死蔵品とするには
 忍びないので、今回利用します。

 スタートトリガーを判定し、3つの下位マイコン
 に起動信号を送信します。



 スタートトリガーは、距離センサーでスタート
 ゲートが開いたことで発生すると仮定します。

 idel、runの2つのモードを用意し、トリガー
 信号で切り換えます。



 ファームウエアは、次のシーケンスで
 動かします。
  1. I/O初期化
  2. トリガー待ち
  3. モード変更
  4. 下位マイコンに信号送信
  5. 2に戻る
 スタートトリガーは、外部割込みで入力し  下位マイコンへの信号は、3ビットレベル  トリガーとします。  信号は、ポート1に次のように割当てます。  モニタLEDは、ユーザーがマシンの状態を  把握するために利用します。  モニタLEDの点滅 → idel状態  モニタLEDの点灯 → run l状態  ソースコードは、以下です。 #include "sfr_r815.h" typedef unsigned char UBYTE ; volatile UBYTE mode ; #define OFF 0 #define ON OFF+1 #define SW_ON 0 #define SW_OFF SW_ON+1 #define IDLE 0 #define RUN IDLE+1 #define P1 p1 #define PD1 pd1 #define SUB_TRG p1_0 #define GBC_TRG p1_1 #define BCS_TRG p1_2 void user_initilize(void); void set_trg(UBYTE x); void main(void) { /* initialize */ user_initilize(); /* endless loop */ while ( ON ) { /* judge switch state */ if ( p1_7 == SW_ON ) { p1_6 = ON ; /* turn on LED */ if ( mode == IDLE ) { mode = RUN ; } else { mode = IDLE ; } } else { p1_6 = OFF ; /* turn off LED */ } /* set mode */ if ( mode == RUN ) { set_trg(ON) ; } else { set_trg(OFF); } } } void user_initilize(void) { /* clock */ prc0 = ON ; /* enable CM access */ cm13 = ON ; /* select Xin - Xout */ cm05 = OFF ; /* enable external clock */ cm06 = OFF ; /* not 1/8 */ asm("NOP") ; /* wait stable state */ asm("NOP") ; asm("NOP") ; asm("NOP") ; ocd2 = OFF ; /* select main clock */ prc0 = OFF ; /* disable CM access */ /* initialize port 1 */ P1 = 0x00 ; /* 0000 0000 */ PD1 = 0x7f ; /* iooo oooo */ /* set mode */ mode = IDLE ; } void set_trg(UBYTE x) { SUB_TRG = x ; GBC_TRG = x ; SBC_TRG = x ; }  ボード全体は、次のようになります。  R8C/Tiny周辺回路は、極力部品が少なく  なるようにしました。
目次

inserted by FC2 system