ここでの実験は,班で行うのではなく,ひとりひとりが個別にH8の動作を調べる.表
1に,ひとり当たり必要な実験器材を示す.
表を見て分かるとおり,パソコン(PC)を使うため,電気棟3FのPCルームで実験を行う.
実験をはじめる前に以下の注意を読み,正しく機器を使うこと.
- 指定以上の電圧を加えないこと.高い電圧を加えると,半導体は簡単に壊れる.
- LEDやトランジスター,H8マイコンの出力端子には電流制限抵抗を付けて,グラン
ドと接続している.直接電圧を印加すると最大定格以上の電流がながれ,半導体
が破壊される.回路図のとおり,抵抗を接続すること.
- LEDやトランジスターには極性があり,正しく接続する必要がある.図
2や図3に,それぞれの極性を表す.
- H8マイコンへのプログラム転送の手順を間違えないこと.
- プログラムが暴走したら,[Ctrl]に続けて[c]を押すことにより,強制
終了させる.
- ここでの実験は,順を追って回路を組み上げる.回路のレイアウトをきちんとし
ないと,最後の方で配線が大変になる.図4で示
すようにブレッドボードに回路を配置すれば,きれいに仕上る.
ここでは,回路をブレッドボード(bread bord)
1上に作成する
(図
4).通常,回路の作成にはハンダ付の作業が伴う.
しかし,ブレッドボードを使うとその作業が不要となり,回路の変更が容易である.学生
実験や回路のテストを行う場合,とても都合が良い.
ブレッドボードを見て分かるように,たくさんの小さな穴が開いている.穴の間隔は1/10
インチとなっており,それはIC(Integrated Circuit)の足の間隔に等しい.この穴にICを
差し込んで,回路を作成する.ICに限らず,抵抗やスイッチ,トランジスター等の半導体
部品も差し込むことができる.差し込んだ部品は配線材により接続して,回路とする.
ブレッドボードを使うためには,内部の配線を理解しなくてはならない.ここで使うブレッ
ドボードは,主に4つのブロックからできあがっている.そのひとつの内部配線を図
5 にしめす.数個の穴が内部で,電気的に接続されてい
る.この接続を理解して,ブレッドボードを上手に使おう.
H8のI/Oポートの一つであるPort5を使って,LEDの点灯実験を行う.プログラムにより,
Port5の電圧をH(5V)とL(0V)と変えて,その様子を調べる.Port5の電圧は,
レジスター
PDR5に設定する.
PDR5とPort5の電圧の関係を図
6にしめす.
図
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は消灯する.右辺のそのほかの部分は,
- 0x3fは,下位6ビットのみ変更可能としている.0x3fはマスクと呼ばれ
るもので,そのビットパターンは00111111となる.&は論理積(AND)で
ある.0x01 & 0x3fは,下位6ビットを設定しているのである.
- PDR5 & 0xc0で,上位2ビットのビットパターンはそのままで,下位6ビット
をゼロにしている.PDR5 & 0xc0は,上位2ビットを設定しているのである.
- 最終的に,これらのビットの論理和(OR)をとることにより,8ビットの設定ができ
る.|が論理和の演算である.
の役割がある.
はじめに,ひとつのLEDの点灯と消灯の実験を行う.プログラムを変えることにより,LED
の制御を行う.
- 図8のような回路をブレッドボード上に作成する.ただし,電
源は,接続しない.図4の配置に従い,H8マイコ
ンやLED,スイッチ類を配線すること.
- ブレッドボード上に電源ラインを作成する.H8を駆動させるための9Vのラインと,スピーカーやモーターを駆動させるラインがある.両方のラインのグランドは同一とする.
- ブレッドボード上にH8を取り付ける.ブレッドボードに取り付けた場合のH8の
ピン番号は,図7のとおりである.
- 残りの配線を行う.LEDには正負があるので間違えないこと.
- 配線に間違いの無いことをチェックする.
- プログラムに必要なファイルをダウンロードする.
- リスト1のとおりH8マイコンのプログラムを作成する.
- ファイル名は,「experiment.c」とする.
- コメント文は,記述しなくてもよい.
- ダウンロードしたファイルは,変更してはならない.
- コンパイルする.コマンドは,「make」である.
- makeの結果,できあがったプログラムをH8マイコンへ転送する.
- H8マイコン基板のJP2とJP3をジャンパーピンでショートする.
- 回路に9Vを供給する.
- コマンド「make write」をタイプし,プログラムを転送する.転送
がはじまると,「H8/3664F is ready! 2001/2/1 Yukio Mituiwa.」と
表示される.もし失敗したならば,[Ctrl]と[c]を押して,プ
ログラムを止める.
- 転送には,20秒くらい必要である.「EEPROM Writing is successed.」と表示されるまで待つ.
- 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
次に,複数のLEDの点灯と消灯の実験を行う.先の実験で使ったプログラムを改良して,
複数のLEDの制御を行う.
リスト2のプログラムでは,レジスターPDR5の下位6ビットの値
は,0x2aから101010となる.このレジスターの値がCN1の14〜19番ピン--
P50-P55--の出力を決めている.したがって,この回路を動作させると,LED
が交互に点灯する.レジスターPDR5とポートの出力の関係は図6を見よ.
- 図9のような回路をブレッドボード上に
作成する.ただし,電源は,まだ接続しない.
- 配線に間違いの無いことをチェックする.
- 先のプログラムを書き直して,リスト2のとおりH8マイコン
のプログラムを作成する.
- ファイル名は,「experiment.c」とする.
- コメント文は,記述しなくてもよい.
- 他のファイルは,変更してはならない.
- コンパイルする.コマンドは,「make」である.
- makeの結果,できあがったプログラムをH8マイコンへ転送する.
- H8マイコン基板のJP2とJP3をジャンパーピンでショートする.
- 回路に9Vを供給する.
- コマンド「make write」をタイプし,プログラムを転送する.転送
がはじまると,「H8/3664F is ready! 2001/2/1 Yukio Mituiwa.」と
表示される.もし失敗したならば,[Ctrl]と[c]を押して,プ
ログラムを止める.
- 転送には,20秒くらい必要である.「EEPROM Writing is successed.」
と表示されるまで待つ.
- 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
外部の信号により動作中のプログラムを止めて,他のプログラムを実行させることを割り込み処理
という.割り込み処理の実験を行う.
タイマー割り込みを使って,複数のLEDの制御を行う.リスト
3のプ
ログラムでは,0.5秒毎に割り込みがかかり,
int_timera()関数が実行される.する
と
PDR5の値がひとつずつ増加するので,LEDの点灯状況が変わる.0.5秒毎に2進数の
を表すLEDのパターンがひとつずつ増える.もし,
TMAレジスターを
0x99から
0x98にすると1秒毎になる.
0x9aにすると0.25秒毎,
0x9bにすると
0.03125秒毎になる.
- 実験に使う回路は,先の「複数のLEDの点灯実験」と同一(図
9)なので,変更の必要はない.
- 先のプログラムを書き直して,H8マイコンのプログラムを作成する.
- 書き直すファイルは「experiment.c」のみである.これをリスト
3のとおりにする.
- コメント文は,記述しなくてもよい.
- 他のファイルは,変更してはならない.
- コンパイルする.コマンドは,「make」である.
- makeの結果,できあがったプログラムをH8マイコンへ転送する.
- H8マイコン基板のJP2とJP3をジャンパーピンでショートする.
- 回路に9Vを供給する.
- コマンド「make write」をタイプし,プログラムを転送する.転送
がはじまると,「H8/3664F is ready! 2001/2/1 Yukio Mituiwa.」と
表示される.もし失敗したならば,[Ctrl]と[c]を押して,プ
ログラムを止める.
- 転送には,20秒くらい必要である.「EEPROM Writing is successed.」
と表示されるまで待つ.
- 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
IRQ割り込みを使って,複数のLEDの制御を行う.リスト
4のプログラ
ムでは,CN2の20番ピン(IRQ0)に接続したタクトスイッチを押すごとに,
int_irq0()関数が実行される.すると
PDR5の値がひとつずつ増加するので,
LEDの点灯状況が変わる.スイッチを押すごとに2進数のを表すLEDのパターンがひとつず
つ増える.
- 図10のような回路をブレッドボード上に作成する.ただし,電
源は,接続しない.
- 先のプログラムを書き直して,H8マイコンのプログラムを作成する.
- 書き直すファイルは「experiment.c」のみである.これをリスト
4のとおりにする.
- コメント文は,記述しなくてもよい.
- 他のファイルは,変更してはならない.
- コンパイルする.コマンドは,「make」である.
- makeの結果,できあがったプログラムをH8マイコンへ転送する.
- H8マイコン基板のJP2とJP3をジャンパーピンでショートする.
- 回路に9Vを供給する.
- コマンド「make write」をタイプし,プログラムを転送する.転送
がはじまると,「H8/3664F is ready! 2001/2/1 Yukio Mituiwa.」と
表示される.もし失敗したならば,[Ctrl]と[c]を押して,プ
ログラムを止める.
- 転送には,20秒くらい必要である.「EEPROM Writing is successed.」
と表示されるまで待つ.
- 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)実験回路
|
パルスの繰り返しやデューティ比--図
11Hの時間の割合--を変化させる
ことにより,機器を制御することができる.パルスを変化させて制御することを,PWM制
御(Pulse Width Modulation)と言う.ここでは,H8マイコンのレジスター
GRAと
GRDを変えることにより,PWM制御の実験を行う.
PWMの波形を使って,音を鳴らす.リスト
5のプログラムでは,
IRQ0に接続されたスイッチを押すごとに,
PDR5の値が増加して,LEDのビット
がひとつずつ変化--2進数のビットパターンで+1増加--する.それとともに,
GRA
の周期が
ずつ短くなる.ただし,デューティ比はいつも50%である.そのため,音
の周波数が,スイッチを押すごとに
倍と高くなる.
H8マイコンで作られたPWM波形は,CN2の13番ピン(FTIOD)から出力される.その出力
をトランジスターで増幅し,スピーカーをならしている.
- 図12のような回路をブレッドボード上
に作成する.ただし,電源は,接続しない.トランジスターの極性を間違えない
こと.
- 先のプログラムを書き直して,H8マイコンのプログラムを作成する.
- 書き直すファイルは「experiment.c」のみである.これをリスト
5のとおりにする.
- コメント文は,記述しなくてもよい.
- 他のファイルは,変更してはならない.
- コンパイルする.コマンドは,「make」である.
- makeの結果,できあがったプログラムをH8マイコンへ転送する.
- H8マイコン基板のJP2とJP3をジャンパーピンでショートする.
- 回路に9Vを供給する.
- コマンド「make write」をタイプし,プログラムを転送する.転送
がはじまると,「H8/3664F is ready! 2001/2/1 Yukio Mituiwa.」と
表示される.もし失敗したならば,[Ctrl]と[c]を押して,プ
ログラムを止める.
- 転送には,20秒くらい必要である.「EEPROM Writing is successed.」
と表示されるまで待つ.
- 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を使ったスピーカーを鳴らす実験回路
|
PWMを使って,DCモーターの速度制御を行う.DCモーターの回転数は平均電流に,大体,比例す
る.PWMのデューティ比は,平均電流に比例する.そのため,デューティ比を変化させる
ことによりDCモーターの速度を制御することが可能となる.リスト
6のプログラムでは,
GRDレジスターの値を
ずつ増加させ
ている.16回ボタンを押すとデューティ比が100%となる.
H8マイコンで作られたPWM波形は,CN2の13番ピン(FTIOD)から出力される.その出力
をダーリントン接続したトランジスターで増幅し,モーターを回している.
- 図13のような回路をブレッドボード上に
作成する.ただし,電源は,接続しない.トランジスターの極性を間違えないこと.
- 先のプログラムを書き直して,H8マイコンのプログラムを作成する.
- 書き直すファイルは「experiment.c」のみである.これをリスト
6のとおりにする.
- コメント文は,記述しなくてもよい.
- 他のファイルは,変更してはならない.
- コンパイルする.コマンドは,「make」である.
- makeの結果,できあがったプログラムをH8マイコンへ転送する.
- H8マイコン基板のJP2とJP3をジャンパーピンでショートする.
- 回路に9Vを供給する.
- コマンド「make write」をタイプし,プログラムを転送する.転送
がはじまると,「H8/3664F is ready! 2001/2/1 Yukio Mituiwa.」と
表示される.もし失敗したならば,[Ctrl]と[c]を押して,プ
ログラムを止める.
- 転送には,20秒くらい必要である.「EEPROM Writing is successed.」
と表示されるまで待つ.
- 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
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成18年7月3日