3 実験方法

3.1 準備

3.1.1 機材

ここでの実験は,班で行うのではなく,ひとりひとりが個別にH8の動作を調べる.表 1に,ひとり当たり必要な実験器材を示す. 表を見て分かるとおり,パソコン(PC)を使うため,電気棟3FのPCルームで実験を行う.

表 1: 実験器材
装置 メーカー 型番/仕様 数量
パソコン     1
H8マイコンボード 秋月電子通商 AKI-H8/3664N 1
ブレッドボード     1
直流電源    3Vと5V出力が可能なもの 1
電池   9V(角形 066P) 1
赤色LED     6
トランジスター 東芝 2SC1815 2
抵抗   10 [k$ \Omega $] 8
セラミックコンデンサー   0.1 [$ \mu $F] 2
スピーカー     1
モーター     1
タクトスイッチ     2
ジャンパーピン     2
D-SUBコネクター     1
ブレッドボード配線材      

3.1.2 注意

実験をはじめる前に以下の注意を読み,正しく機器を使うこと.

図 2: LED外観と記号
\includegraphics[keepaspectratio, scale=0.7]{figure/H8/LED.eps}


図 3: トランジスターの外観と記号
\includegraphics[keepaspectratio, scale=0.7]{figure/H8/transistor.eps}
図 4: ブレッドボード上の配置

3.1.3 ブレッドボードについて

ここでは,回路をブレッドボード(bread bord)1上に作成する (図4).通常,回路の作成にはハンダ付の作業が伴う. しかし,ブレッドボードを使うとその作業が不要となり,回路の変更が容易である.学生 実験や回路のテストを行う場合,とても都合が良い.

ブレッドボードを見て分かるように,たくさんの小さな穴が開いている.穴の間隔は1/10 インチとなっており,それはIC(Integrated Circuit)の足の間隔に等しい.この穴にICを 差し込んで,回路を作成する.ICに限らず,抵抗やスイッチ,トランジスター等の半導体 部品も差し込むことができる.差し込んだ部品は配線材により接続して,回路とする.

ブレッドボードを使うためには,内部の配線を理解しなくてはならない.ここで使うブレッ ドボードは,主に4つのブロックからできあがっている.そのひとつの内部配線を図 5 にしめす.数個の穴が内部で,電気的に接続されてい る.この接続を理解して,ブレッドボードを上手に使おう.

図 5: ブレッドボードの内部配線
\includegraphics[keepaspectratio, scale=1.0]{figure/H8/bread_bord_block.eps}

3.2 ポート出力実験

3.2.1 実験内容

H8のI/Oポートの一つであるPort5を使って,LEDの点灯実験を行う.プログラムにより, Port5の電圧をH(5V)とL(0V)と変えて,その様子を調べる.Port5の電圧は, レジスターPDR5に設定する.PDR5とPort5の電圧の関係を図 6にしめす.
図 6: PDR5とPort5の電圧の関係
\includegraphics[keepaspectratio, scale=1.0]{figure/H8/port5.eps}

3.2.2 プログラムの内容

8の回路を見て分かるように,LEDはCN1の14番ピンに接続されてい る.14番ピンが5VだとLEDが点灯し,0Vだと消灯する.このピンの状態はレジスターPDR5 の第0ビットにより決まる(図6).すなわち,8ビットのレジスターで あるPDR5の第0ビットが1になるとLEDは点滅し,0になると消灯する.H8マイコンのPDR5レ ジスターにより,LEDを点灯/消灯できる.

リスト1のプログラムの8行目の

 
	PDR5 = (0x01 & 0x3f) | (PDR5 & 0xc0);
で,LEDを点灯させている.右辺の0x01により,PDR5レジスターの第0ビットに1を設 定している.もし,ここを0x00とすると,LEDは消灯する.右辺のそのほかの部分は, の役割がある.

3.2.3 1つのLED点灯実験の順序

はじめに,ひとつのLEDの点灯と消灯の実験を行う.プログラムを変えることにより,LED の制御を行う.
  1. 8のような回路をブレッドボード上に作成する.ただし,電 源は,接続しない.図4の配置に従い,H8マイコ ンやLED,スイッチ類を配線すること.
    1. ブレッドボード上に電源ラインを作成する.H8を駆動させるための9Vのラインと,スピーカーやモーターを駆動させるラインがある.両方のラインのグランドは同一とする.
    2. ブレッドボード上にH8を取り付ける.ブレッドボードに取り付けた場合のH8の ピン番号は,図7のとおりである.
    3. 残りの配線を行う.LEDには正負があるので間違えないこと.
  2. 配線に間違いの無いことをチェックする.
  3. プログラムに必要なファイルをダウンロードする.
  4. リスト1のとおりH8マイコンのプログラムを作成する.
    • ファイル名は,「experiment.c」とする.
    • コメント文は,記述しなくてもよい.
    • ダウンロードしたファイルは,変更してはならない.
  5. コンパイルする.コマンドは,「make」である.
  6. makeの結果,できあがったプログラムをH8マイコンへ転送する.
    1. H8マイコン基板のJP2とJP3をジャンパーピンでショートする.
    2. 回路に9Vを供給する.
    3. コマンド「make write」をタイプし,プログラムを転送する.転送 がはじまると,「H8/3664F is ready! 2001/2/1 Yukio Mituiwa.」と 表示される.もし失敗したならば,[Ctrl][c]を押して,プ ログラムを止める.
    4. 転送には,20秒くらい必要である.「EEPROM Writing is successed.」と表示されるまで待つ.
  7. H8マイコンを実行させる.
    • ブレッドボードから,9[V]の電池を取り外す.
    • H8マイコン基板のJP2とJP3のジャンパーピンを取り外し,オープンにする.
    • ブレッドボードに,9[V]の電池を取り付ける
    • プログラムを最初から実行させたければ,RESスイッチを押す.このプロ グラムでは状態の変化は分からない.

   1 #include "3664.h"
   2 
   3 int main()
   4 {
   5 
   6   init_led();
   7 
   8   PDR5 = (0x01 & 0x3f) | (PDR5 & 0xc0);      /* PDR5は,port5のデータレジスタ */
   9   
  10   while(1){
  11     SLEEP();
  12   }
  13 }
  14 
図 7: ブレッドボード上でのH8のピン番号
\includegraphics[keepaspectratio, scale=0.78]{figure/H8/H8_on_bread_bord.eps}
図 8: LED点灯実験回路
\includegraphics[keepaspectratio, scale=1.0]{figure/H8/LED_1.eps}

3.2.4 複数のLED点灯実験の順序

次に,複数のLEDの点灯と消灯の実験を行う.先の実験で使ったプログラムを改良して, 複数のLEDの制御を行う.

リスト2のプログラムでは,レジスターPDR5の下位6ビットの値 は,0x2aから101010となる.このレジスターの値がCN1の14〜19番ピン-- P50-P55--の出力を決めている.したがって,この回路を動作させると,LED が交互に点灯する.レジスターPDR5とポートの出力の関係は図6を見よ.

  1. 9のような回路をブレッドボード上に 作成する.ただし,電源は,まだ接続しない.
  2. 配線に間違いの無いことをチェックする.
  3. 先のプログラムを書き直して,リスト2のとおりH8マイコン のプログラムを作成する.
    • ファイル名は,「experiment.c」とする.
    • コメント文は,記述しなくてもよい.
    • 他のファイルは,変更してはならない.
  4. コンパイルする.コマンドは,「make」である.
  5. makeの結果,できあがったプログラムをH8マイコンへ転送する.
    1. H8マイコン基板のJP2とJP3をジャンパーピンでショートする.
    2. 回路に9Vを供給する.
    3. コマンド「make write」をタイプし,プログラムを転送する.転送 がはじまると,「H8/3664F is ready! 2001/2/1 Yukio Mituiwa.」と 表示される.もし失敗したならば,[Ctrl][c]を押して,プ ログラムを止める.
    4. 転送には,20秒くらい必要である.「EEPROM Writing is successed.」 と表示されるまで待つ.
  6. H8マイコンを実行させる.
    • ブレッドボードから,9[V]の電池を取り外す.
    • H8マイコン基板のJP2とJP3のジャンパーピンを取り外し,オープンにする.
    • ブレッドボードに,9[V]の電池を取り付ける.
    • プログラムを最初から実行させたければ,RESスイッチを押す.このプロ グラムでは状態の変化は分からない.

   1 #include "3664.h"
   2 
   3 int main()
   4 {
   5 
   6   init_led();
   7 
   8   PDR5 = (0x2a & 0x3f) | (PDR5 & 0xc0);      /* PDR5は,port5のデータレジスタ */
   9   
  10   while(1){
  11     SLEEP();
  12   }
  13 }
  14 
図 9: 複数LED点滅実験回路
\includegraphics[keepaspectratio, scale=1.0]{figure/H8/LED_6.eps}

3.3 割り込み制御実験

3.3.1 実験内容

外部の信号により動作中のプログラムを止めて,他のプログラムを実行させることを割り込み処理 という.割り込み処理の実験を行う.

3.3.2 タイマー割り込み実験

タイマー割り込みを使って,複数のLEDの制御を行う.リスト3のプ ログラムでは,0.5秒毎に割り込みがかかり,int_timera()関数が実行される.する とPDR5の値がひとつずつ増加するので,LEDの点灯状況が変わる.0.5秒毎に2進数の を表すLEDのパターンがひとつずつ増える.もし,TMAレジスターを0x99から 0x98にすると1秒毎になる.0x9aにすると0.25秒毎,0x9bにすると 0.03125秒毎になる.
  1. 実験に使う回路は,先の「複数のLEDの点灯実験」と同一(図 9)なので,変更の必要はない.
  2. 先のプログラムを書き直して,H8マイコンのプログラムを作成する.
    • 書き直すファイルは「experiment.c」のみである.これをリスト 3のとおりにする.
    • コメント文は,記述しなくてもよい.
    • 他のファイルは,変更してはならない.
  3. コンパイルする.コマンドは,「make」である.
  4. makeの結果,できあがったプログラムをH8マイコンへ転送する.
    1. H8マイコン基板のJP2とJP3をジャンパーピンでショートする.
    2. 回路に9Vを供給する.
    3. コマンド「make write」をタイプし,プログラムを転送する.転送 がはじまると,「H8/3664F is ready! 2001/2/1 Yukio Mituiwa.」と 表示される.もし失敗したならば,[Ctrl][c]を押して,プ ログラムを止める.
    4. 転送には,20秒くらい必要である.「EEPROM Writing is successed.」 と表示されるまで待つ.
  5. H8マイコンを実行させる.
    • ブレッドボードから,9[V]の電池を取り外す.
    • H8マイコン基板のJP2とJP3のジャンパーピンを取り外し,オープンにする.
    • ブレッドボードに,9[V]の電池を取り付ける.
    • プログラムを最初から実行させたければ,RESスイッチを押す.

   1 #include "3664.h"
   2 
   3 #pragma interrupt
   4 void int_timera(void)
   5 {
   6   CLI();
   7   IRR1 &= 0xbf;
   8   PDR5 = (PDR5++)&0x3f | (PDR5 & 0xc0);		/* カウントアップ */
   9   STI();
  10 }
  11 
  12 int main()
  13 {
  14 
  15   init_led();                                /* port5を使うときの初期化 */
  16   init_timer();                              /* timer割り込みを使うときの初期化 */
  17 
  18   PDR5 = (0x00 & 0x3f) | (PDR5 & 0xc0);      /* PDR5は,port5のデータレジスタ */
  19 
  20   TMA = 0x99;
  21   
  22   while(1){
  23     SLEEP();
  24   }
  25 }
  26 

3.3.3 IRQ割り込み実験

IRQ割り込みを使って,複数のLEDの制御を行う.リスト4のプログラ ムでは,CN2の20番ピン(IRQ0)に接続したタクトスイッチを押すごとに, int_irq0()関数が実行される.するとPDR5の値がひとつずつ増加するので, LEDの点灯状況が変わる.スイッチを押すごとに2進数のを表すLEDのパターンがひとつず つ増える.
  1. 10のような回路をブレッドボード上に作成する.ただし,電 源は,接続しない.
  2. 先のプログラムを書き直して,H8マイコンのプログラムを作成する.
    • 書き直すファイルは「experiment.c」のみである.これをリスト 4のとおりにする.
    • コメント文は,記述しなくてもよい.
    • 他のファイルは,変更してはならない.
  3. コンパイルする.コマンドは,「make」である.
  4. makeの結果,できあがったプログラムをH8マイコンへ転送する.
    1. H8マイコン基板のJP2とJP3をジャンパーピンでショートする.
    2. 回路に9Vを供給する.
    3. コマンド「make write」をタイプし,プログラムを転送する.転送 がはじまると,「H8/3664F is ready! 2001/2/1 Yukio Mituiwa.」と 表示される.もし失敗したならば,[Ctrl][c]を押して,プ ログラムを止める.
    4. 転送には,20秒くらい必要である.「EEPROM Writing is successed.」 と表示されるまで待つ.
  5. H8マイコンを実行させる.
    • ブレッドボードから,9[V]の電池を取り外す.
    • H8マイコン基板のJP2とJP3のジャンパーピンを取り外し,オープンにする.
    • ブレッドボードに,9[V]の電池を取り付ける.
    • H8が動作をはじめる.IRQ0に接続したスイッチを押すとLEDの状態が 変化する.
    • プログラムを最初から実行させたければ,RESスイッチを押す.

   1 #include "3664.h"
   2 
   3 #pragma interrupt
   4 void int_irq0(void){
   5   CLI();
   6   IRR1 &= 0xfe;
   7   PDR5 = (PDR5++)&0x3f | (PDR5 & 0xc0);		/* カウントアップ */
   8   STI();
   9 }
  10 
  11 
  12 int main()
  13 {
  14 
  15   init_led();                                /* port5を使うときの初期化 */
  16   init_irq0();                               /* irq0割り込みを使うときの初期化 */
  17 
  18   PDR5 = (0x00 & 0x3f) | (PDR5 & 0xc0);      /* PDR5は,port5のデータレジスタ */
  19 
  20   while(1){
  21     SLEEP();
  22   }
  23 }
  24 
図 10: スイッチによる割り込み(IRQ0)実験回路
\includegraphics[keepaspectratio, scale=1.0]{figure/H8/interrupt.eps}

3.4 PWM実験

パルスの繰り返しやデューティ比--図11Hの時間の割合--を変化させる ことにより,機器を制御することができる.パルスを変化させて制御することを,PWM制 御(Pulse Width Modulation)と言う.ここでは,H8マイコンのレジスターGRAGRDを変えることにより,PWM制御の実験を行う.
図 11: PWMのパルス幅
\includegraphics[keepaspectratio, scale=1.0]{figure/H8/PWM.eps}

3.4.1 音を鳴らす

PWMの波形を使って,音を鳴らす.リスト5のプログラムでは, IRQ0に接続されたスイッチを押すごとに,PDR5の値が増加して,LEDのビット がひとつずつ変化--2進数のビットパターンで+1増加--する.それとともに,GRA の周期が$ 3/4$ずつ短くなる.ただし,デューティ比はいつも50%である.そのため,音 の周波数が,スイッチを押すごとに$ 4/3$倍と高くなる.

H8マイコンで作られたPWM波形は,CN2の13番ピン(FTIOD)から出力される.その出力 をトランジスターで増幅し,スピーカーをならしている.

  1. 12のような回路をブレッドボード上 に作成する.ただし,電源は,接続しない.トランジスターの極性を間違えない こと.
  2. 先のプログラムを書き直して,H8マイコンのプログラムを作成する.
    • 書き直すファイルは「experiment.c」のみである.これをリスト 5のとおりにする.
    • コメント文は,記述しなくてもよい.
    • 他のファイルは,変更してはならない.
  3. コンパイルする.コマンドは,「make」である.
  4. makeの結果,できあがったプログラムをH8マイコンへ転送する.
    1. H8マイコン基板のJP2とJP3をジャンパーピンでショートする.
    2. 回路に9Vを供給する.
    3. コマンド「make write」をタイプし,プログラムを転送する.転送 がはじまると,「H8/3664F is ready! 2001/2/1 Yukio Mituiwa.」と 表示される.もし失敗したならば,[Ctrl][c]を押して,プ ログラムを止める.
    4. 転送には,20秒くらい必要である.「EEPROM Writing is successed.」 と表示されるまで待つ.
  5. H8マイコンを実行させる.
    • ブレッドボードから,9[V]の電池を取り外す.
    • H8マイコン基板のJP2とJP3のジャンパーピンを取り外し,オープンにする.
    • ブレッドボードに,9[V]の電池を取り付ける.
    • スピーカーの回路の電源をONにする.
    • プログラムを最初から実行させたければ,RESスイッチを押す.

   1 #include "3664.h"
   2 
   3 #pragma interrupt
   4 void int_irq0(void){
   5   CLI();
   6   IRR1 &= 0xfe;
   7 
   8   PDR5 = (PDR5++)&0x3f | (PDR5 & 0xc0);		/* カウントアップ */
   9   
  10   GRA=GRA/4*3;                                  /* 音の周期を3/4に */
  11   GRD=GRA/2;
  12 
  13   STI();
  14 }
  15 
  16 
  17 int main()
  18 {
  19 
  20   init_led();                                /* port5を使うときの初期化 */
  21   init_irq0();                               /* irq0割り込みを使うときの初期化 */
  22   init_pwm();
  23 
  24   PDR5 = (0x00 & 0x3f) | (PDR5 & 0xc0);      /* PDR5は,port5のデータレジスタ */
  25 
  26   GRA=0xffff;                                /* 音の初期値 */
  27   GRD=GRA/2;
  28 
  29   start_pwm();                               /* pwm 信号スタート */
  30 
  31   while(1){
  32     SLEEP();
  33   }
  34 }
  35 
図 12: PWMを使ったスピーカーを鳴らす実験回路
\includegraphics[keepaspectratio, scale=1.0]{figure/H8/speaker.eps}

3.4.2 DCモーターの速度制御

PWMを使って,DCモーターの速度制御を行う.DCモーターの回転数は平均電流に,大体,比例す る.PWMのデューティ比は,平均電流に比例する.そのため,デューティ比を変化させる ことによりDCモーターの速度を制御することが可能となる.リスト 6のプログラムでは,GRDレジスターの値を$ 1/16$ずつ増加させ ている.16回ボタンを押すとデューティ比が100%となる.

H8マイコンで作られたPWM波形は,CN2の13番ピン(FTIOD)から出力される.その出力 をダーリントン接続したトランジスターで増幅し,モーターを回している.

  1. 13のような回路をブレッドボード上に 作成する.ただし,電源は,接続しない.トランジスターの極性を間違えないこと.
  2. 先のプログラムを書き直して,H8マイコンのプログラムを作成する.
    • 書き直すファイルは「experiment.c」のみである.これをリスト 6のとおりにする.
    • コメント文は,記述しなくてもよい.
    • 他のファイルは,変更してはならない.
  3. コンパイルする.コマンドは,「make」である.
  4. makeの結果,できあがったプログラムをH8マイコンへ転送する.
    1. H8マイコン基板のJP2とJP3をジャンパーピンでショートする.
    2. 回路に9Vを供給する.
    3. コマンド「make write」をタイプし,プログラムを転送する.転送 がはじまると,「H8/3664F is ready! 2001/2/1 Yukio Mituiwa.」と 表示される.もし失敗したならば,[Ctrl][c]を押して,プ ログラムを止める.
    4. 転送には,20秒くらい必要である.「EEPROM Writing is successed.」 と表示されるまで待つ.
  5. H8マイコンを実行させる.
    • ブレッドボードから,9[V]の電池を取り外す.
    • H8マイコン基板のJP2とJP3のジャンパーピンを取り外し,オープンにする.
    • ブレッドボードに,9[V]の電池を取り付ける.
    • モーター回路の電源をON(5V)にする.
    • プログラムを最初から実行させたければ,RESスイッチを押す.

   1 #include "3664.h"
   2 
   3 #pragma interrupt
   4 void int_irq0(void){
   5   CLI();
   6   IRR1 &= 0xfe;
   7 
   8   PDR5 = (PDR5++)&0x3f | (PDR5 & 0xc0);		/* カウントアップ */
   9   
  10   GRD+=0x1000;                                  /* PWMのHの幅を1/16ずつひろげる */
  11 
  12   STI();
  13 }
  14 
  15 
  16 int main()
  17 {
  18 
  19   init_led();                                /* port5を使うときの初期化 */
  20   init_irq0();                               /* irq0割り込みを使うときの初期化 */
  21   init_pwm();
  22 
  23   PDR5 = (0x00 & 0x3f) | (PDR5 & 0xc0);      /* PDR5は,port5のデータレジスタ */
  24 
  25   GRA=0xffff;                                /* モーターの初期速度 */
  26   GRD=0x0000;
  27 
  28   start_pwm();                               /* pwm 信号スタート */
  29 
  30   while(1){
  31     SLEEP();
  32   }
  33 }
  34 
図 13: PWMによるDCモーター動作実験回路
\includegraphics[keepaspectratio, scale=1.0]{figure/H8/motor.eps}

ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成18年7月3日


no counter