定価：本体2,400円（税別）このＰＤＦは，ＣＱ出版社発売の「はじめてのH8マイコン」の一部分の見本です．
内容・購入方法などにつきましては以下のホームページをご覧下さい．
http://shop.cqpub.co.jp/hanbai/books/41/41641.htm

目次

はじめに････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････

2

第1章 さあ，H8マイコンをはじめよう ････････････････････････････････････････････････････････････････････････ 13
はじめに ･･････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 14

f 1-1

マイコン学習に最適なH8マイコン・ボード ･････････････････････････････････････････････････････････････････････････････ 15
手軽にC言語プログラミングの学習ができるマイコン・ボードである ･････････････････････････････････････････････ 15
パソコンで開発したプログラムはUSBケーブル1本でマイコンに書き込める ･･････････････････････････････････ 15
USB接続で電源給電が簡単である ･･･････････････････････････････････････････････････････････････････････････････････････････ 16

f 1-2

充実したプログラム開発環境 ･･･････････････････････････････････････････････････････････････････････････････････････････････････ 16
フローチャート形式で簡単なプログラム作成ができるビュート・ビルダー・ネオ ･･････････････････････････････ 16
マイコン用のプログラムを効率良く開発できる“HEW” ･････････････････････････････････････････････････････････････････ 16
マイコンにプログラムを書き込むツール“FDT” ････････････････････････････････････････････････････････････････････････････ 17
マイコンをパソコン上で監視/制御できる“Hterm” ･･･････････････････････････････････････････････････････････････････････ 18

f 1-3

H8マイコン・ボードの回路について ･･･････････････････････････････････････････････････････････････････････････････････････ 20
USB接続で電源給電が簡単なH8マイコン・ボード･････････････････････････････････････････････････････････････････････ 20
H8マイコン周辺の回路構成 ･････････････････････････････････････････････････････････････････････････････････････････････････････ 22
外付け部品が少ないUSBシリアル変換IC（CP2102） ･･･････････････････････････････････････････････････････････････ 24
H8マイコン・ボードの全回路図はWebページから入手できる ･･･････････････････････････････････････････････････････ 25

f 1-4

ビュート ローバー搭載H8マイコン・ボード（VS-WRC003LV）の紹介 ････････････････････････････ 25
モータ出力のパワーアップ化 ･････････････････････････････････････････････････････････････････････････････････････････････････････ 28
HIDシリアル変換IC搭載 ･･････････････････････････････････････････････････････････････････････････････････････････････････････････ 28
低電圧動作化･･････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 28
ビュート ローバー用H8マイコン・ボードの回路図やピン配置はWebから入手できる ･･････････････････････ 28

第2章 H8マイコン・ボードのLEDを点灯させてみよう ･･････････････････････････････････ 29
f 2-1

H8マイコンとLEDの接続について･････････････････････････････････････････････････････････････････････････････････････････ 30

f 2-2

モニタのコマンドを使って二つのLEDを点灯/消灯してみよう ･･･････････････････････････････････････････････ 30

f 2-3

H8マイコンの構造 ･･･････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 32
アドレスって何？ ･･････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 32
H8マイコンのアドレス空間とメモリ・マップ ････････････････････････････････････････････････････････････････････････････････ 32
H8マイコンのI/Oポートの構造 ･････････････････････････････････････････････････････････････････････････････････････････････････ 33
H8マイコンの内部I/Oレジスタ ･････････････････････････････････････････････････････････････････････････････････････････････････ 33

f 2-4 C言語プログラミングを始めてみよう ･･････････････････････････････････････････････････････････････････････････････････････ 35
プログラミングとは，行いたい操作を記述することである ････････････････････････････････････････････････････････････ 35
新規プロジェクトワークスペースの作成からはじめます ･･･････････････････････････････････････････････････････････････ 36

もくじ

3

目

次

実行するプログラムにふさわしいワークスペース名をつけておこう ････････････････････････････････････････････････ 36
使うマイコンを選択しておこう ･･･････････････････････････････････････････････････････････････････････････････････････････････････ 36
HEWのメイン画面を見てみよう ････････････････････････････････････････････････････････････････････････････････････････････････ 37
ワークスペース・ウィンドウに表示されているファイルを見てみよう････････････････････････････････････････････････ 37
LEDを点滅させるプログラムをmain関数に書いてみよう ･････････････････････････････････････････････････････････････ 38
HEWが自動生成したファイルを改変する･･･････････････････････････････････････････････････････････････････････････････････ 39

f 2-5 プログラムはマイコンのどこに格納するの？ ･･･････････････････････････････････････････････････････････････････････････ 41
H8マイコンのアドレス空間とメモリ・マップ ････････････････････････････････････････････････････････････････････････････････ 41
プログラムの配置指定 ･････････････････････････････････････････････････････････････････････････････････････････････････････････････ 42

f 2-6 プログラムをビルドしてみよう ･････････････････････････････････････････････････････････････････････････････････････････････････ 43
ビルド実行前に割り込み関数ファイル“intprg.c”をビルドから除外する ････････････････････････････････････ 43
ビルドを実行する ･････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 44

f 2-7

H8マイコンへプログラムをダウンロードしてみよう ･･･････････････････････････････････････････････････････････････ 44
プログラムのダウンロード方法 ･･････････････････････････････････････････････････････････････････････････････････････････････････ 44
ソース・リストとメモリ・マップの表示 ･････････････････････････････････････････････････････････････････････････････････････････ 45

f 2-8 プログラムを実行してLEDを点滅させてみよう ･･････････････････････････････････････････････････････････････････････ 46
f 2-9 ビュート ローバー用H8マイコン・ボード（VS-WRC003LV）の場合 ････････････････････････････････ 46

第3章 C言語プログラムのデバッグをしてみよう ･･････････････････････････････････････････････････ 49
f 3-1

モニタの便利な機能（コマンド）の紹介 ･･･････････････････････････････････････････････････････････････････････････････････ 50

f 3-2 Htermの便利な機能の紹介 ･･･････････････････････････････････････････････････････････････････････････････････････････････････ 50
f 3-3 Htermの主要な機能の使い方 ････････････････････････････････････････････････････････････････････････････････････････････････ 53
ソース・リストの表示 ････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 53
周辺機能のレジスタ表示と変更 ････････････････････････････････････････････････････････････････････････････････････････････････ 53
メモリ内容の表示と変更 ･･････････････････････････････････････････････････････････････････････････････････････････････････････････ 54
コマンドのヒストリ機能 ････････････････････････････････････････････････････････････････････････････････････････････････････････････ 55
ブレーク・ポイントの設定/解除と確認 ･･･････････････････････････････････････････････････････････････････････････････････････ 55
ソース・レベルのステップの実行（Pstep） ･････････････････････････････････････････････････････････････････････････････････ 56

f 3-4 C言語プログラムのデバッグをしてみよう････････････････････････････････････････････････････････････････････････････････ 56
まずはバグを含んだプログラムを準備しよう ･･･････････････････････････････････････････････････････････････････････････････ 57
バグを含んだプログラムを実行してみてLEDの状態を確認する ････････････････････････････････････････････････････ 57
ブレーク・ポイントを設定する ･･･････････････････････････････････････････････････････････････････････････････････････････････････ 59
メモリやレジスタの値を確認する ･･････････････････････････････････････････････････････････････････････････････････････････････ 59
最初のブレーク・ポイントまでプログラムを実行する････････････････････････････････････････････････････････････････････ 59
続いてPstepコマンドでステップ実行する･･･････････････････････････････････････････････････････････････････････････････････ 60
Gコマンドで次のブレーク・ポイントまでプログラムを実行する ･････････････････････････････････････････････････････ 60
続いてPstepコマンドをステップ実行する…レジスタの値やLEDが発光するようすを見てバグを発見する･･････ 60

4

もくじ

目

次

同じようにしてブレーク・ポイントまでの実行とPstepコマンドによるステップ実行を繰り返す ･････････ 61
続いてGコマンドで次のブレーク・ポイントまでプログラムを実行するはずが … 無限ループに突入 ･･････････････ 61

第4章 C言語プログラムをROM化してみよう････････････････････････････････････････････････････････ 63
f 4-1

プログラムをROMに書き込むための準備 ･･････････････････････････････････････････････････････････････････････････････ 64
まずはHEWを起動する ････････････････････････････････････････････････････････････････････････････････････････････････････････････ 64
ビルドコンフィグレーションを選択する ･･････････････････････････････････････････････････････････････････････････････････････ 64
プログラムをROM領域に配置指定する ･････････････････････････････････････････････････････････････････････････････････････ 65
プログラムをビルドする ････････････････････････････････････････････････････････････････････････････････････････････････････････････ 65

f 4-2 FDTを起動してプログラムをROMへ書き込もう ･･･････････････････････････････････････････････････････････････････ 66
プログラムを実行してLEDを点滅させてみよう ･･･････････････････････････････････････････････････････････････････････････ 67

f 4-3 新規からROM化用のC言語プログラムを作成する手順 ････････････････････････････････････････････････････････ 67
HEWのプロジェクトワークスペースの作成からはじめる･･････････････････････････････････････････････････････････････ 67
LEDを点滅させるプログラムをmain関数に記述する ･････････････････････････････････････････････････････････････････ 67
リセット・プログラム・ファイル“resetprg.c”を改変する ･･･････････････････････････････････････････････････････････ 67
ビルドコンフィグレーションを選択する ･･････････････････････････････････････････････････････････････････････････････････････ 69
プログラムの格納領域を確認する ･････････････････････････････････････････････････････････････････････････････････････････････ 69
プログラムをビルドしたあとで書き込んで実行する ･････････････････････････････････････････････････････････････････････ 69

第5章 C言語プログラミングの基礎知識 ････････････････････････････････････････････････････････････････････ 71
f 5-1

変数を理解しよう ･････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 72
変数は使う前に宣言をしておく必要がある ･････････････････････････････････････････････････････････････････････････････････ 72
変数の名前はキーワード以外なら自由に付けられる ････････････････････････････････････････････････････････････････････ 73
変数のデータ型の種類 ･････････････････････････････････････････････････････････････････････････････････････････････････････････････ 73
符号付きか，符号なしかを明示する型修飾子･･････････････････････････････････････････････････････････････････････････････ 74
変数とは値を入れて（記憶させて）おく箱のようなもの ････････････････････････････････････････････････････････････････ 74
H8マイコンを使って実際にオーバフローを体験してみよう ･･････････････････････････････････････････････････････････ 75

f 5-2 volatile修飾子の存在意義を理解しよう ･･･････････････････････････････････････････････････････････････････････････････ 76
HEWのコンパイラはプログラムを最適化して実行形式のファイルを作ってくれる･･･････････････････････････ 76
LEDの点滅動作が非常に速くなる？ ･･････････････････････････････････････････････････････････････････････････････････････････ 76
ループを回してウェイト（待ち時間）を作るときには“volatile”を使おう ････････････････････････････････････ 76
内部I/Oレジスタの宣言には必ずvolatileをつけよう ･･････････････････････････････････････････････････････････････ 77
まずはvolatile宣言したプログラムの動作を確認してみる･･･････････････････････････････････････････････････････ 78
volatileがないとH8マイコンが動いてくれない？ ･･･････････････････････････････････････････････････････････････････ 79
コンパイラの最適化は設定により回避できる ･････････････････････････････････････････････････････････････････････････････ 80

f 5-3 ポインタを理解しよう･･･････････････････････････････････････････････････････････････････････････････････････････････････････････････ 80
ポインタとは？ ･････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 81

もくじ

5

目

次

ポインタを「デスクトップ上におくショート・カット・アイコン」としてイメージする･････････････････････････････ 81
H8マイコンにおけるポインタの主な用途････････････････････････････････････････････････････････････････････････････････････ 82
I/Oレジスタにわかりやすい定義名をつけよう ････････････････････････････････････････････････････････････････････････････ 83

f 5-4 I/Oレジスタ定義ファイルを活用しよう ･･･････････････････････････････････････････････････････････････････････････････････ 84
I/Oレジスタ定義ファイルの中身を覗いてみよう ･････････････････････････････････････････････････････････････････････････ 85
構造体（struct）について･･････････････････････････････････････････････････････････････････････････････････････････････････････ 85
共用体（union）について ････････････････････････････････････････････････････････････････････････････････････････････････････････ 87
内部I/Oレジスタを参照する場合の記述方法 ･････････････････････････････････････････････････････････････････････････････ 87
I/Oレジスタ定義ファイルを活用してスマートなプログラムにしてみよう ･････････････････････････････････････････ 88

第6章 スイッチを使ってLEDを制御してみよう ･････････････････････････････････････････････････････ 89
f 6-1

プッシュ・スイッチ周辺のマイコン・ボードの回路構成 ････････････････････････････････････････････････････････････ 90

f 6-2 C言語プログラムを作成してみよう･･････････････････････････････････････････････････････････････････････････････････････････ 90
プログラムの実行･････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 90

f 6-3 プログラムの概要 ･････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 92
プログラム全体の概要 ･････････････････････････････････････････････････････････････････････････････････････････････････････････････ 92
初期設定関数（portINIT）の概要･･････････････････････････････････････････････････････････････････････････････････････････ 92
スイッチ読込関数（getSW）の概要 ･･･････････････････････････････････････････････････････････････････････････････････････････ 93
LED制御関数（LED）の概要 ････････････････････････････････････････････････････････････････････････････････････････････････････ 93

f 6-4 C言語のプログラムは関数の集まりである ･･････････････････････････････････････････････････････････････････････････････ 94
関数の概念とその必要性 ･････････････････････････････････････････････････････････････････････････････････････････････････････････ 95
関数のプロトタイプ宣言 ･･･････････････････････････････････････････････････････････････････････････････････････････････････････････ 95
関数の定義 ･････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 95
引数や戻り値がない場合の関数の書式 ･････････････････････････････････････････････････････････････････････････････････････ 96

f 6-5 変数のスコープ ･････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 97
ローカル変数とグローバル変数 ･････････････････････････････････････････････････････････････････････････････････････････････････ 97
関数の呼び出しと引数の引渡し ････････････････････････････････････････････････････････････････････････････････････････････････ 98

f 6-6 ビュート ローバー用H8マイコン・ボード（VS-WRC003LV）の場合 ････････････････････････････････ 99

第7章 タイマ機能を使って圧電ブザーを鳴らしてみよう ･････････････････････････････････ 101
f 7-1

まずはLED点灯/消灯の知識で圧電ブザーを鳴らしてみよう ･････････････････････････････････････････････････ 102
圧電ブザーを簡易的に鳴らすC言語プログラムを作成する ･･････････････････････････････････････････････････････････ 102
プログラムを実行し簡易的に圧電ブザーを鳴らしてみる ･･････････････････････････････････････････････････････････････ 104
タイマ機能を使って圧電ブザーを正確に鳴らしてみよう･･･････････････････････････････････････････････････････････････ 104
H8/36064マイコンには5種類のタイマ・モジュールがある･････････････････････････････････････････････････････････ 104

f 7-2

6

もくじ

8ビット・タイマのタイマVの内部構造･････････････････････････････････････････････････････････････････････････････････････ 105

目

次

タイマV関連の主なレジスタ ･････････････････････････････････････････････････････････････････････････････････････････････････････ 105
TCNTV入力クロックとカウント条件･･････････････････････････････････････････････････････････････････････････････････････････ 108

f 7-3

タイマVの動作説明 ･･････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 108
各種レジスタ設定 ････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 109
7-1 圧電ブザーって何？･･･････････････････････････････････････････････････････････････････････････････････････ 110

f 7-4 タイマVで圧電ブザーを鳴らすC言語プログラムを作成する･･････････････････････････････････････････････････ 112
C言語プログラムを実行して圧電ブザーを鳴らしてみよう ･････････････････････････････････････････････････････････････ 112
7- 2 音階のちょっとした知識 ･･･････････････････････････････････････････････････････････････････････････････ 112

f 7-5

ビュート ローバー用H8マイコン・ボード（VS-WRC003LV）の場合 ････････････････････････････････ 114

第8章 タイマ機能を使ってLEDの明るさを自由に変えてみよう ･･･････････････ 115
f 8-1

LEDの明るさを変える調光のしくみ ･･･････････････････････････････････････････････････････････････････････････････････････ 116
H8/36064マイコンには5種類のタイマ・モジュールがある･････････････････････････････････････････････････････････ 117

f 8-2 タイマZの内部構造 ･･････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 117
チャネル共通の主なレジスタ ････････････････････････････････････････････････････････････････････････････････････････････････････ 118
各チャネル用の主なレジスタ ････････････････････････････････････････････････････････････････････････････････････････････････････ 120

f 8-3 タイマZによるPWMモードの動作 ･･････････････････････････････････････････････････････････････････････････････････････････ 121
各種レジスタの設定 ･････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 122

f 8-4 タイマZによるPWMモードでLEDの明るさを変えるC言語プログラムを作成する ･････････････ 122
プログラムの概要 ････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 123
リスト8-1のC言語プログラムを実行してLEDを光らせてみよう ････････････････････････････････････････････････････ 124

f 8-5 LEDを「ホタルの光」のように変化させるC言語プログラムを作成する ････････････････････････････････ 125
プログラムの概要 ････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 125

f 8-6 ビュート ローバー用H8マイコン・ボード（VS-WRC003LV）の場合 ････････････････････････････････ 127

第9章 A-D変換モジュール機能を使って電圧を測定してみよう ････････････････ 129
f 9-1

アナログからディジタルへの変換 ････････････････････････････････････････････････････････････････････････････････････････････ 130
A-D変換器のしくみ ･････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 131
逐次比較型A-D変換器の動作原理を天秤にたとえて考えてみよう ･･･････････････････････････････････････････････ 131

f 9-2 H8/36064マイコンのA-D変換器のブロック構成 ･･････････････････････････････････････････････････････････････ 133
A-D変換結果を格納するA-Dデータ・レジスタ（ADDRA〜ADDRD）･･････････････････････････････････････････････ 134
A-D変換を操作する制御レジスタ ･････････････････････････････････････････････････････････････････････････････････････････････ 134

もくじ

7

目

次

H8/36064マイコンのA-D変換の動作 ･････････････････････････････････････････････････････････････････････････････････････ 135

f 9-3 ブレッドボードを使ってA-D変換モジュール機能の動作確認をしてみよう ････････････････････････････ 136
A-D変換モジュール機能の動作確認回路･･･････････････････････････････････････････････････････････････････････････････････ 136
A-D変換モジュールの各種レジスタの設定 ･････････････････････････････････････････････････････････････････････････････････ 137

f 9-4 A-D変換の動作確認用のプログラムを書いてみよう ･･････････････････････････････････････････････････････････････ 137
プログラムの概要 ････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 138

f 9-5 モニタを使ってA-D変換モジュール機能の動作確認をしてみよう ･･････････････････････････････････････････ 139
ソース・リストを表示してブレーク・ポイントを設定する ･･･････････････････････････････････････････････････････････････ 139
A-Dモジュール関連のレジスタを表示する ･････････････････････････････････････････････････････････････････････････････････ 139
メモリ内容を表示する ･･････････････････････････････････････････････････････････････････････････････････････････････････････････････ 140
プログラムを実行してA-D変換する････････････････････････････････････････････････････････････････････････････････････････････ 140
9 -1 これだけは注意：A-D変換入力端子の電圧範囲 ････････････････････････････････････････････ 140
ステップ実行（Pstep）してRAMに格納されたデータを確かめる ･･････････････････････････････････････････････････ 141

f 9-6 A-D変換を使って光センサで圧電ブザーの音程を変えてみよう････････････････････････････････････････････ 142

第10章 ビュート チェイサー“Beauto Chaser”を組み立てよう ･････････････ 143
はじめに ･･････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 144
ビュート チェイサーのステップアップ ･････････････････････････････････････････････････････････････････････････････････････････ 144

f 10-1 ビュート チェイサーの梱包箱を開封してみよう ･･････････････････････････････････････････････････････････････････････ 145
ビュート チェイサーを構成する主な部品を見てみよう ･････････････････････････････････････････････････････････････････ 145
ダブル・ギヤボックスを構成する主な部品を見てみよう ････････････････････････････････････････････････････････････････ 146

f 10-2 ビュート チェイサーを組み立てる前に工具類を準備しよう ････････････････････････････････････････････････････ 147
サイズに合ったドライバを準備する ････････････････････････････････････････････････････････････････････････････････････････････ 147
ニッパーを準備する ･･････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 147

f 10-3 ダブル・ギヤって何？････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 147
ダブル・ギヤボックスは高速タイプ（A）
から低速タイプ（D）までの4種類の中から選んで組み立てる･････････ 148
高速/低速タイプを選択する上でのヒント ･･････････････････････････････････････････････････････････････････････････････････ 148

f 10-4 ギヤボックスの組み立て手順 ･･･････････････････････････････････････････････････････････････････････････････････････････････････ 149
まずはシャフト（車軸）から組み立てよう･････････････････････････････････････････････････････････････････････････････････････ 149
シャフトにギヤを取り付ける ･･････････････････････････････････････････････････････････････････････････････････････････････････････ 150組み立てたシャフトを本体に固定する ････････････････････････････････････････････････････････････････････････････････････････ 150
DCモータをダブル・ギヤボックスに取りつけてからベースに固定する･･･････････････････････････････････････････ 151

f 10-5 パーツの組み立て ･････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 152
タイヤ，ボール・キャスタをベースに取り付ける ････････････････････････････････････････････････････････････････････････････ 152
赤外線センサを前面に取り付ける ･････････････････････････････････････････････････････････････････････････････････････････････ 152

8

もくじ

目

次

ベースにH8マイコン・ボードを取り付ける ･･････････････････････････････････････････････････････････････････････････････････ 153

f 10-6 ビュート チェイサーの完成 ･･････････････････････････････････････････････････････････････････････････････････････････････････････ 153
ビュート チェイサーを動かしてみよう ･････････････････････････････････････････････････････････････････････････････････････････ 154

f 10-7 ビュート ローバーの紹介 ･････････････････････････････････････････････････････････････････････････････････････････････････････････ 154
ビュート ローバーを構成する主な部品を見てみよう ････････････････････････････････････････････････････････････････････ 156

第11章 Beauto Builder NEOでライントレース・ロボットを動かしてみよう ･･･････････････････････････････････････････････ 157
f 11-1 ライントレース・ロボットはどのようにして線を認識しているの？ ･･････････････････････････････････････････ 158
フォト・リフレクタと呼ばれる光センサを使う ･････････････････････････････････････････････････････････････････････････････ 158
光センサ（フォト・リフレクタ）の動作原理･･････････････････････････････････････････････････････････････････････････････････ 158
光の量の変化を出力電圧の変化として検出するしくみ ････････････････････････････････････････････････････････････････ 159
11-1 光センサ（フォト・リフレクタ）の発光のようすを確認する方法 ････････････････････ 159

f 11-2 ライントレース・ロボットがラインに沿って動く原理を考えてみよう ･･････････････････････････････････････ 160
f 11-3 ビュート チェイサーをライントレース・ロボットに変身させてみよう ･････････････････････････････････････ 161
f 11-4 車輪の回転の制御はどのように行うの？ ････････････････････････････････････････････････････････････････････････････････ 161
DCモータを駆動するモータ・ドライバIC（TB6552FN） ････････････････････････････････････････････････････････････ 162
モータ・ドライバICの動作を理解する ････････････････････････････････････････････････････････････････････････････････････････ 162

f 11-5 Beauto Builder NEOでプログラムをつくってみよう ･･･････････････････････････････････････････････････････ 164
Beauto Builder NEOを起動する ･･････････････････････････････････････････････････････････････････････････････････････････････ 164
アクション・ブロックをプログラム・エリアに配置する ･･････････････････････････････････････････････････････････････････ 165
アクション・ブロックの実行順序を矢印で接続する ･････････････････････････････････････････････････････････････････････ 166
左旋回前進と右旋回前進のアクション・ブロックの設定をする ････････････････････････････････････････････････････ 166
分岐のアクション・ブロックの設定をする ･･･････････････････････････････････････････････････････････････････････････････････ 167

f 11-6 プログラムをH8マイコンに書き込んでみよう ･････････････････････････････････････････････････････････････････････････ 168
H8マイコン・ボードと通信を開始する ････････････････････････････････････････････････････････････････････････････････････････ 168
プログラムを書き込んで実行 ･････････････････････････････････････････････････････････････････････････････････････････････････････ 169

f 11-7 ライントレース・ロボットの車輪（モータ）を調整しよう ･････････････････････････････････････････････････････････ 169
11- 2 Beauto Builder NEOの「テスト実行」方法 ･･････････････････････････････････････････････ 170
システム設定を変更する方法 ････････････････････････････････････････････････････････････････････････････････････････････････････ 171

f 11-8 光センサを調整しよう ･･････････････････････････････････････････････････････････････････････････････････････････････････････････････ 171
f 11-9 まずはライントレース・ロボットを動かしてみよう･･･････････････････････････････････････････････････････････････････ 172
分岐と直進を増やしてプログラムを改善する ･･････････････････････････････････････････････････････････････････････････････ 172
プログラム改善後の動作を確認してみよう･････････････････････････････････････････････････････････････････････････････････ 174

もくじ

9

目

次

第12章 ライントレース・ロボットの光センサを2個に増やして動作を改善しよう ･･･････････････････････････････････････････････････････････････････････････････････････････････････････ 177
f 12-1 光センサを2個搭載したライントレース・ロボットの動作について考えてみよう ･･･････････････････ 178
f 12-2 感度調整が容易にできる光センサ基板の回路設計 ････････････････････････････････････････････････････････････････ 179
光センサ基板の回路設計 ･････････････････････････････････････････････････････････････････････････････････････････････････････････ 179
ラインの検出状態を知る工夫 ･･･････････････････････････････････････････････････････････････････････････････････････････････････ 181
ラインの検出状態を知らせる動作原理 ･･････････････････････････････････････････････････････････････････････････････････････ 181

f 12-3 光センサ基板の使用部品 ･････････････････････････････････････････････････････････････････････････････････････････････････････････ 182
12 -1 MOSトランジスタの種類････････････････････････････････････････････････････････････････････････････ 182
両面に銅箔があるタイプのユニバーサル基板を使用する ････････････････････････････････････････････････････････････ 183

f 12-4 光センサ基板の部品配置と製作手順･･･････････････････････････････････････････････････････････････････････････････････････ 183
12 - 2 LEDに青/白色系を使用する場合の注意点 ･････････････････････････････････････････････････ 184
基板を切断・穴あけ加工する ････････････････････････････････････････････････････････････････････････････････････････････････････ 185
12 - 3 静電気に弱いCMOS-ICやMOSFETのはんだ付けにはセラミック・ヒータ・タイプのはんだゴテがよい･･･････････････････････････････････････････ 185

f 12-5 ユニバーサル基板への部品実装の手順 ･･･････････････････････････････････････････････････････････････････････････････････ 187
12 - 4 スルーホール基板などのはんだ付けには共晶はんだがよい ･････････････････････････ 188
配線ケーブルを取り付けよう ･････････････････････････････････････････････････････････････････････････････････････････････････････ 189
製作した光センサ基板を車体に取り付けよう ･････････････････････････････････････････････････････････････････････････････ 191

f 12-6 光センサの受光感度の調整方法 ･･････････････････････････････････････････････････････････････････････････････････････････････ 191
最初に表示用LEDの点灯状態を見ながら受光感度の粗調整を行う･････････････････････････････････････････････ 191
Beauto Builder NEOのセンサ数値を見ながら受光感度を微調整する ･････････････････････････････････････････ 192

f 12-7 センサを2個使用したライントレース・ロボットのプログラムを作成する ･･････････････････････････････ 192
f 12-8 ライントレース・ロボットを動かしてみよう･･････････････････････････････････････････････････････････････････････････････ 193
f 12-9 ビュート ローバーによるライントレース・ロボットを動かしてみよう ･････････････････････････････････････ 195
ビュート ローバー（Beauto Rover）の光センサの取り付け方 ･･････････････････････････････････････････････････････ 195
ビュート ローバー（Beauto Rover）の光センサの取り付け方による走行状態の違い ･････････････････････ 195

第13章 直角コースを曲がれるように
ライントレース・ロボットの動作を改善しよう ･････････････････････････････････････････ 197
f 13-1 直角コースを検出できるように光センサをさらに増設する ････････････････････････････････････････････････････ 198

10

もくじ

目

次

f 13-2 直角コース検出用の光センサ基板の回路設計 ････････････････････････････････････････････････････････････････････････ 199
直角コース検出用の光センサ基板の使用部品 ･･･････････････････････････････････････････････････････････････････････････ 200

f 13-3 直角コース検出用の光センサ基板の製作 ････････････････････････････････････････････････････････････････････････････････ 200
直角コース検出用の光センサ基板の部品配置 ･･･････････････････････････････････････････････････････････････････････････ 200
光センサの受光感度の調整方法 ･･･････････････････････････････････････････････････････････････････････････････････････････････ 202

f 13-4 直角コースを曲がるライントレース・ロボットのプログラムを作成する ･･････････････････････････････････ 203
プログラムの説明 ････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 203
右左折時の少し前進（位置補正）と一時停止の役割について ･･････････････････････････････････････････････････････ 204

f 13-5 ライントレース・ロボットを動かしてみよう･･････････････････････････････････････････････････････････････････････････････ 204
トラブルシューティング… 直角コースをうまく曲がれない場合の調整方法 ･････････････････････････････････････ 204

f 13-6 直角コースを検出するビュート ローバーを動かしてみよう･････････････････････････････････････････････････････ 206

第14章 C言語プログラムでライントレース・ロボットを動かしてみよう ･･･････････････････････････････････････････････ 209
f 14-1 C言語サンプル・ソースを入手する ･･･････････････････････････････････････････････････････････････････････････････････････････ 210
プログラム作成に必要なファイルを解凍する ･･････････････････････････････････････････････････････････････････････････････ 210

f 14-2 センサ1個搭載のライントレース・ロボットを制御するC言語プログラムの作成････････････････････ 210
新規プロジェクトワークスペースを作成する ･･･････････････････････････････････････････････････････････････････････････････ 211
関数定義ファイルをコピーする ･･････････････････････････････････････････････････････････････････････････････････････････････････ 211
C言語メイン・プログラムを作成する ･･････････････････････････････････････････････････････････････････････････････････････････ 211
割り込み関数ファイル“intprg.c”の改変 ･････････････････････････････････････････････････････････････････････････････････ 213
vs-wrc003関数ファイル“vs-wrc003.c”の改変 ････････････････････････････････････････････････････････････････････ 214
vs-wrc003関数ファイル“vs-wrc003.c”をビルドに追加する ･････････････････････････････････････････････････ 214
ビルドコンフィグレーションを選択する ･･････････････････････････････････････････････････････････････････････････････････････ 215
プログラムをビルドする ････････････････････････････････････････････････････････････････････････････････････････････････････････････ 215
FDTを起動してプログラムをROMへ書き込む ････････････････････････････････････････････････････････････････････････････ 216
ライントレース・ロボットを動かす ･･････････････････････････････････････････････････････････････････････････････････････････････ 216

f 14-3 センサ1個搭載のライントレース・ロボットに直進動作を入れたC言語プログラム････････････････ 216
f 14-4 センサ2個搭載のライントレース・ロボットを制御するC言語プログラムの作成 ･･･････････････････ 216
f 14-5 直角コースを曲がるライントレース・ロボットを制御するC言語プログラムの作成 ････････････････ 217
f 14-6 ビュート ローバー用H8マイコン・ボード（VS-WRC003LV）の場合 ････････････････････････････････ 218
H8マイコン・ボード（VS-WRC003LV）用のC言語サンプル・ソースを入手する ････････････････････････････ 218
プログラム作成に必要なファイルを解凍する ･･････････････････････････････････････････････････････････････････････････････ 220
割り込み関数ファイル“intprg.c”の改変 ･････････････････････････････････････････････････････････････････････････････････ 220
vs-wrc003lv関数ファイル“vs-wrc003lv.c”の改変 ････････････････････････････････････････････････････････････ 220
vs-wrc003lv関数ファイル“vs-wrc003lv.c”をビルドに追加する･･････････････････････････････････････････ 220

もくじ

11

目

次

ビュート ローバー（Beauto Rover）を動かす･･････････････････････････････････････････････････････････････････････････････ 220第15章 プログラムの開発環境を導入しよう！ ･･････････････････････････････････････････････････････････ 221
f 15-1 USBシリアル・ドライバの導入方法（チェイサーのみ） ･････････････････････････････････････････････････････････ 222
USBシリアル・ドライバの入手 ･･･････････････････････････････････････････････････････････････････････････････････････････････････ 222
USBシリアル・ドライバのインストール方法（Windows 2000/XP/Vista用の例） ･･･････････････････････ 222
H8マイコン・ボードの接続と認識（Windows 2000/XP/Vista用の例） ･････････････････････････････････････ 222

f 15-2 モニタとHtermを動作させる“VS-WRC003LVシリアルコンバータ”の導入と切り替え ･･･ 224
シリアルコンバータのインストール ･････････････････････････････････････････････････････････････････････････････････････････････ 224
シリアル通信への切り替え方法 ････････････････････････････････････････････････････････････････････････････････････････････････ 224

f 15-3 統合開発環境“HEW”の導入方法 ･･･････････････････････････････････････････････････････････････････････････････････････････ 225
無償評価版HEWの入手 ･･･････････････････････････････････････････････････････････････････････････････････････････････････････････ 225
無償評価版HEWのインストール方法 ････････････････････････････････････････････････････････････････････････････････････････ 225

f 15-4 フラッシュ開発ツールキット“FDT”の導入方法（チェイサーのみ） ･･･････････････････････････････････････ 226
無償評価版FDTの入手 ････････････････････････････････････････････････････････････････････････････････････････････････････････････ 226
無償評価版FDTのインストール方法 ･･････････････････････････････････････････････････････････････････････････････････････････ 226

f 15-5 VS-WRC003LVにプログラムを書き込むツール“H8 Writer”を導入（ローバー用） ･･････ 226
H8 Writerによるプログラムの書き込み方法 ･･･････････････････････････････････････････････････････････････････････････････ 227

f 15-6 モニタ・プログラムの導入方法 ･････････････････････････････････････････････････････････････････････････････････････････････････ 227
モニタ・プログラムの入手 ･･････････････････････････････････････････････････････････････････････････････････････････････････････････ 227
モニタ・プログラムのインストール方法 ･･･････････････････････････････････････････････････････････････････････････････････････ 228
モニタ・プログラムのカスタマイズ手順･･･････････････････････････････････････････････････････････････････････････････････････ 228
モニタ・プログラムの書き込み手順 ････････････････････････････････････････････････････････････････････････････････････････････ 230

f 15-7 モニタ・プログラム専用通信ソフトHtermの導入方法･･･････････････････････････････････････････････････････････ 232
Htermの入手 ･･･････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 232
Htermのインストール方法 ･････････････････････････････････････････････････････････････････････････････････････････････････････････ 233
Htermのプロパティ設定方法 ････････････････････････････････････････････････････････････････････････････････････････････････････ 233

f 15-8 ビュート チェイサー専用ソフトBeauto Builder NEOの導入方法 ･･･････････････････････････････････ 234
Beauto Builder NEOの入手 ･････････････････････････････････････････････････････････････････････････････････････････････････････ 234
Beauto Builder NEOのインストール方法 ･･････････････････････････････････････････････････････････････････････････････････ 235

f 15-9 ビュート ローバー専用ソフトBeauto Builder2の入手 ･･････････････････････････････････････････････････････ 235索

引 ････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 236

参考・引用＊文献 ････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････････ 238

12

もくじ

a ビュート チェイサーをベースに製作した例

写真1-1

b ビュート ローバーをベースに製作した例

製作したライントレース・ロボットの外観

はじめに電子機器を制御するうえで，マイコンはなくてはならない部品です．世の中で使われているマイコンには数多くの種類があり，各社特徴のあるマイコンを開発しています．中でもルネサス エレク
トロニクス（株）（ Renesas Electronics ）＊1 の H8 は，高性能なマイコンとしてアマチュアのロボットに使われる頻度が高く，ライントレース・ロボットの制御などにも広く利用されています．
H8 マイコン応用編ではライントレース・ロボット（写真 1-1 ）の製作を紹介していきます．写真
1-2 はライントレース・ロボットに搭載されている H8 マイコン・ボード “VS-WRC003” です．現在，ヴイストン（株）から C 言語でプログラミング学習ができるマイコン・ボードとしていろいろな機能が使え，2,982 円（ 2010 年 4 月現在）という比較的に安価な値段で販売されています．
ボードの中央部にあるのが，16 ビット・マイコン H8/36064 です．この H8 マイコンはルネサス
エレクトロニクス（株）が開発・製造している H8/300H Tiny シリーズのマイコンの一つで，一般的な制御を行うには十分な機能をもっています．H8 マイコンの基礎を学ぶにあたり，まずはプログラム開発環境を準備したあとで，ボードに実装されている二つの LED を点灯させることからはじめてみましょう．
2010 年8 月にビュート チェイサーの姉妹機としてビュート ローバー（ Beauto Rover ）が登場しました．価格は6,300 円（執筆時点）です．そこに搭載されているH8 マイコン・ボード（ VS-WRC003LV ）は3,465 円（執筆時点）と高めですが，モータ出力のパワーアップ化，HID シリアル変換IC 搭載，二つの赤外線センサを搭載，低電圧動作化などいろいろ機能が向上しています．本書ではビュート チ
ェイサーからビュート ローバーへ容易に移行して取り組めるように，ビュート ローバーに関する内
容も各章の末尾に記載しています．

＊1 ： 2010 年 4 月1 日に名称変更 ．それまではルネサス テクノロジ
（ 株）．

14

第1 章

さあ，H8 マイコンをはじめよう写真1-2

H8 マイコン・ボード（ VS -WRC0 03 ）
の外観

1-1

マイコン学習に最適なH8マイコン・ボード

これから使用するマイコン・ボードがどんなものであるのか，ここで簡単に紹介しておきましょう．これを見ると，きっと “ すぐにほしくなる ” と思います．

手軽にC 言語プログラミングの学習ができるマイコン・ボードである
H8 マイコン・ボードには，LED（ 2 個），ブザー，DC モータ出力（ 2 ポート），アナログ入力（ 4ポート）が標準で装備されているため，ボード単体で手軽に C 言語プログラミングの学習ができるでしょう．また，拡張ポートも備えており，ピン・ヘッダ追加で I / O 増設など H8 マイコンの機能をフルに活用することもできます．

パソコンで開発したプログラムはUSB ケーブル1 本でマイコンに書き込める
H8 マイコン・ボードには USB シリアル変換 IC が搭載されています．パソコン上で開発した制御プログラムを USB ケーブル 1 本で書き込むことができます．これは，特別な書き込み器が一切不要ということです．
また，H8 マイコン（ H8/36064 ）は 1 万回も書き換え可能なフラッシュ ROM ＊2 を内蔵しているので繰り返し学習に最適です．単純に考えて，毎日 3 回マイコンにプログラムを書き込んだとしても，なんと 9 年以上も使える計算です．

＊2 ： フラッシュROM は電源を切っても内容は消えません．

1-1

マイコン学習に最適な H8 マイコン・ボード

15

前章までは，モニタを使って自分の書いたプログラムを H8 マイコンの R A M に書き込んで実行してきました．モニタの機能を使うことで，プログラムを一時停止したり，レジスタやメモリの内容を確認できたりして，プログラムを開発する上でとても便利でした．
ところで，RAM は一度電源を切ると記録内容が消滅してしまうメモリです．そのため，電源をON するたびにパソコンからプログラムをRAM にダウンロードしなければなりません．これでは不便ですので，本章では自分の書いたプログラムを ROM ＊1 に書き込む（ ROM 化する）手法を説明します．
R O M は電源を切っても内容が消えない読み出し専用メモリです．R O M に書き込んだプログラ
ムは電源投入直後から動作します．また，パソコンと USB ケーブルを接続せずに，乾電池などの外部電源でマイコンを動かす（スタンドアロンで動かす）ことができるようになります．

4-1

プログラムをROMに書き込むための準備

まずはHEW を起動する
W i n d o w s の［スタート］メニューから［プログラム］>［ R e n e s a s ］>［ H i g h - p e r f o r m a n c e
Embedded Workshop ］>［ High-performance Embedded Workshop ］で HEW を起動します．
ここでは LED を点滅させるプログラム “led_blink” を ROM に書き込んでみましょう．図 4-1 に示すように「最近使用したプロジェクトワークスペースを開く」の d をクリックしてみてください．
もし，ここにファイルが該当しない場合は，「別のプロジェクトワークスペースを参照する」にチェックを入れてファイルを探してみてください．

ビルドコンフィグレーションを選択する
LED を点滅させるプログラム “led_blink” を読み込めたでしょうか．ここから ROM 化作業のはじまりです．まず，ビルドコンフィグレーションを選択します．図 4-2 に示すように，現状は「 Debug 」となっていると思います．ここで，ツールバーのドロップダウン / リスト・ボックスから「 Release 」を選んでください．

図 4 -1

最近使用したプロジェクトワークスペースを開く＊1 ： このマイコンROM はフラッシュROM なので，複数回の書き込みを行えます，

64

第4 章

C 言語プログラムを ROM 化してみよう

図 4 -2

図 4-3

ビルドコンフィグレーションで「 Release 」を選択

ROM および R AM への割り付けたアドレスとセクションの対応

プログラムをROM 領域に配置指定するプログラムの配置を指定する場合には，まずツールチェインを開きます．H E W 画面上側にある
メニューバーから［ビルド］［- H8S, H8/300 Standard Toolchain... ］を選択します．ツールチェイ
ンの画面が開いたら［最適化リンカ］のタブを選択し，［カテゴリ］の選択リストから［セクション］
を選択します．
図 4-3 に ROM および RAM へ割り付けたアドレスとセクションの対応を示します．比較のために
図 a 初期設定（ HEW のデフォルト設定）と，
図 b RAM 用に配置した例も掲載しておきます．ここでは，モニタを使って R A M 上で動作確認したあとのプログラムを，セクションのアドレス設定の変更により ROM 化してみます．手順としては，CV0（ CV は大文字のアルファベット，0 は数字のゼロ）をアドレスの先頭 0x0000 に配置します．また，PResetPRG や p 以下は初期設定と同
じ ROM 領域に配置します．PIntPRG は削除してください．配置した結果を図 c に示します．

プログラムをビルドする
H8 マイコンへ書き込むためのファイル［ロード・モジュール］をビルドすることにより作成します．メニューバーの［ビルド］メニューから［ビルド］をクリックするか，ツールバーからアイコンをクリックする方法などでビルドを実行してみてください．
4-1

プログラムを ROM に書き込むための準備

65

5-2

volatile修飾子の存在意義を理解しよう

H8 マイコンなどのハードウェアに近い分野の C 言語プログラミングでは “volatile” というキーワードをよく見かけます．volatile 修飾子はパソコン上で動かす C 言語プログラムを書く人だとあまり使わない（縁がない）かもしれません．しかし，H8 マイコンなどの C 言語プログラミン
グでは，volatile 修飾子の使い方や存在意義を知らないと予期せぬ不具合に見舞われることがあります．そこで，volatile 修飾子について解説しておきましょう．

HEW のコンパイラはプログラムを最適化して実行形式のファイルを作ってくれる
HEW でビルドを実行すると，コンパイラと呼ばれるソフトウェアが C 言語のソース・プログラム
を H8 マイコンが実行できる形式のファイル（ロード・モジュール）に変換してくれます．このとき，コンパイラはプログラムをできるだけコンパクトに最適化しようとします．つまり実行する命令が少なくなれば，それだけプログラムを格納するのに必要なメモリが節約でき，さらに実行する速さが向上するわけです．
v o l a t i l e 修飾子はコンパイラによる最適化を抑制するためのキーワードです．ではなぜ，この機能を使ってわざわざ抑制しなければならないのでしょうか？ 次に説明していきましょう．

LED の点滅動作が非常に速くなる？
LED 点滅プログラム “led_blink.c” を例にとり，volatile の有無で H8 マイコンの動作にどのような違いが現れるのかを試してみましょう．“ v o l a t i l e u n s i g n e d i n t i ; ” のvolatile をコメント・アウトして削除するか，もしくは単に “unsigned int i;” として記述してみます．
結果は L E D の点灯の よ う す を見れ ば はっき り と違い が わ か る と思い ま す．変数 i の宣言で
volitile を使わないプログラムでは，点灯 / 消灯しているようすがわからないほど点滅動作が非
常に速くなります．

ループを回してウェイト（待ち時間 ）を作るときには“volatile” を使おう
LED の点滅動作が非常に速くなるのは一体なぜでしょうか？ 図 5-6 に示すように，H8 マイコン
内部にはCPU（ Central Processing Unit ）と呼ばれるコンピュータの心臓部があります．そのCPUを中心として，外部入力，外部出力，そしてメモリがつながっています．CPU の内部には「レジスタ」と呼ばれる「一時的な記憶エリア」があります．H8 マイコンでは 16 ビット長のレジスタを 16 本
もっています（一般的にレジスタの数は，1 本，2 本と数えるようです）．
メモリはいろいろなデータ（プログラムの命令もデータの一種と考える）を蓄えるファイル・キャ
ビネットのようなものです．一方，CPU 内レジスタは，実際に CPU がデータを加工するときに一
時的に記憶する場所と考えてください．マイコンはメモリのデータを加工して書き換えているように思いますが，実際は CPU 内レジスタが一時的にデータを記憶し，それを CPU が加工して結果をメモリに戻しています．
76

第5 章

C 言語プログラミングの基礎知識

図5-6

CPU

CPU

（マイコンの心臓部）（マイコンの心臓部）

データ処理のイメージ

図 5 -7

最適化されたデータ処理のイメージ（ CPU 内レジスタが一時的にデータを記憶し，それをCPU が加工して結果をメモリに戻す）

LED 点滅プログラム “led_blink.c” では，次のような for 文で無意味なループを回してウェイト（待ち時間）を作っています．
for ( i = 0; i < 60000; i++);
マイコンとしては，このように変数 i の値を何度も何度も使って計算を繰り返していくようなプ
ログラムの場合，いちいちメモリの読み書きを行っているのは非常に効率が悪いことになります．
実行スピードはメモリより CPU 内レジスタのほうがはるかに速いのです．
そこで，図 5-7 に示すようにコンパイラは C P U 内レジスタの内容をメモリに書き出すことなく，どんどん使い回すという最適化を行います．
最適化は処理速度の向上にとって大変ありがたいのですが，ここではある程度の時間待ちをしてほしいわけです．メモリに 1 回 1 回，値の変化を書き込ませたらループ回数も少なく済みますから，そのために volatile を付けて最適化を抑制しています．
volatile をつけずにプログラムをビルドした場合，コンパイラは変数の利用頻度や範囲を元に，変数を CPU 内レジスタに割り当てるのか，それともメモリ（ RAM ）に割り当てるのかを自動的に決めます．繰り返し使われる変数は最適化によって優先的に C P U 内レジスタに割り当てられますが，レジスタの数が 16 本と限りがあるため，場合によってはメモリ（ RAM ）に割り当てられることがあります．そのため，v o l a t i l e を付けないとプログラムによってはウェイト（待ち時間）に差が生じてしまうことがあります．

内部 I/O レジスタの宣言には必ずvolatile をつけよう
プログラムをビルドすると，コンパイラは利用頻度の高い変数を優先的に CPU 内レジスタに割り当ててくれます．しかし，変数を C P U 内レジスタに割り当てられては困る場合があります．それ5-2volatile 修飾子の存在意義を理解しよう77

図 8 -1 LED（とH8 マイコンとの接続
2 橙）
ローバーの接続は図 8 -10 を参照 ．

図 8 -2

PWM 信号波形とLED の点灯/ 消灯の関係

マイコンにはわりと正確な時間を刻んでいる時計のようなもの「タイマ・モジュール」があります．
前章では汎用的な 8 ビット・タイマである「タイマ V 」を使って圧電ブザーを鳴らしてみました．こ
こでは本格的な 16 ビット・タイマである「タイマ Z 」を紹介します．そして，タイマ Z を使って LEDの明るさを自由に変えられる調光にチャレンジしてみましょう．

8-1

LEDの明るさを変える調光のしくみ

これまでモニタを使いながらLED を点灯 / 消灯させる実験をしましたね．今回は 38 番ピン（ P65 /FTIOB1 ）に接続されているLED（橙）の明るさを変化させてみましょう．図8-1 に示すようにLED
2のアノード側は +3.3V の電源に接続され，カソード側は 100 Ωの抵抗を介して H8 マイコンの入出力ポートに接続されています．このように接続すると，ポートに “L”（ ʻ0ʼ ）を出力すると LED が点灯し，逆にポートを “H”（ ʻ1ʼ ）にすると LED が消灯します．
ところで，H8 マイコンのポートは “L”（ ʻ0ʼ ）と “H”（ ʻ1ʼ ）の二つの状態しか出力することができません．しかし，この “L”（ ʻ0ʼ ）と “H”（ ʻ1ʼ ）の二つの状態をすばやく切り換えることで，人間の目には LED が連続して発光しているように見えるのです．
つまり，図 8-2 に示すように PWM（ Pulse Width Modulation ）と呼ばれる 1 周期に対する Highの時間比率（デューティ比）を変えた信号を使うことで，L E D の明るさを変えることができます．
LED は “L”（ ʻ0ʼ ）出力で点灯するため，図 a のようにデューティ比を小さくすると点灯している割り合が大きくなり，LED が明るく発光しているように見えます．逆に図 b のようにデューティ比を大きくすると消灯している割合が大きくなり，LED が暗く発光しているように見えます．
116

第8 章

タイマ機能を使って LED の明るさを自由に変えてみよう

図 8-3

タイマ Z の内部ブロック構造

H8/36064 マイコンには 5 種類のタイマ・モジュールがある
前章で説明したように，H8/36064 マイコンには，タイマ B1，タイマ V，タイマ Z，14 ビット
PWM，ウォッチ・ドッグ・タイマの五つのタイマ・モジュールが内蔵されています．本章の LEDの調光には，本格的な 16 ビット・タイマである「タイマ Z 」を使います．
タイマ Z の特徴として，「アウトプット・コンペア」，「インプット・キャプチャ」という機能があります．アウトプット・コンペアは，ある規則性をもった信号を出力してくれる機能です．一方，インプット・キャプチャはその反対の機能です．ある規則性をもつ信号の長さを計測してレジスタに格納するというものです．LED の調光にはアウトプット・コンペアの機能を使います．

8-2

タイマZの内部構造

タイマZ の内部構成は図8-3 のようになっています．FTIOA0 〜FTIOD0 端子，
FTIOA1 〜FTIOD1
端子の合計 8 端子がタイマ Z の入出力端子です．LED2（橙）は FTIOB1 端子に接続されています．
カウンタの入力クロックは 4 種類の内部クロック（φ，φ/2，φ/4，φ/8 ）もしくは外部クロックから選択可能です．タイマ Z はチャネル 0 とチャネル 1 の二つのタイマをもって，それぞれ独立して動作させることができます．
8-2

タイマZ の内部構造

117

図 11- 3

ライントレース・ロボットの動作パターン

11-2

図 11- 4 ライントレース・ロボットがラインに沿って進むようすの説明図

ライントレース・ロボットがラインに沿って動く原理を考えてみよう

ライントレース・ロボットはフォト・リフレクタと呼ばれる光センサ使って，床から反射した光の強さを検知することによって線を認識することがわかりました．まずは簡単のため，光センサを1 個搭載したライントレース・ロボットの動きを考えてみましょう．
ここでは，図 11-3 のようにライン左側の境界をセンサが検知する場合を考えてみたいと思います．動作のパターンは次の 2 通りになります．
Ⓐ 光センサがライン上にいると検知した場合：
右側の車輪の速度を速く回転させる（もしくは左側の車輪の速度を遅く回転させる）ようにモータを制御します．すると，車体は進行方向に対して左寄りに進みます．
Ⓑ 光センサがライン外にいると検知した場合：
左側の車輪の速度を速く回転させる（もしくは右側の車輪の速度を遅く回転させる）ようにモータを制御します．すると，車体は進行方向に対して右寄りに進みます．
この動作の繰り返すようすを図に示したのが図 11-4 です．線の上にいたら左寄りに進み，線の上にいなければ右寄りに進むという動作を繰り返していくと，ジグザグではありますがライントレース・ロボットはライン左側の境界に沿って蛇行しながら動くようになります．
なお，ライン右側の境界を光センサが検知する場合は，動作パターンはⒶとⒷが逆になります．
160

第11 章

Beauto Builder NEO でライントレース・ロボットを動かしてみよう基礎編

写真11-2 L 字金具に光センサを取り付けたようす

11-3

図 11- 5光センサ QRB1134 の出力特性

ビュート チェイサーをライントレース・ロボットに変身させてみよう

動作原理がわかったところで，ライントレース・ロボットの製作をしてみましょう．これまでビュート チェイサーの製作をしてきた方なら製作はそれほど難しくはありません．ビュート チェイサ
ーの前方に配置した光センサを，写真 11-2 に示すように床面に向けて固定するだけです．車高（ベース下面と床面間の距離）は約 30mm 程度ですので，これより短い L 字金具などを使って固定するとよいでしょう．光センサ面と床面間の距離は，図 11-5 に示す出力特性を参考に調整してくださ
い．約 3.8mm に調整するとコレクタ電流が最も大きくなります．これでハードの改造は終了です．

11-4

車輪の回転の制御はどのように行うの？

まずは，電池駆動用の小型 DC モータの回転速度を変える方法について考えてみましょう．一般的な方法として，電源電圧を変化させることが考えられます．たとえば，つなぐ電池の本数を変えて 1 本（ 1.5V ）よりも 2 本（ 3V ）のほうがモータは速く回り，2 本（ 3V ）よりも 3 本（ 4.5V ）のほうがより速く回るというわけです．
ところで，H8 マイコンの I/O ポートは，出力する電圧を増減する D-A コンバータの機能を持ち合わせておらず，High（ 3.3V ）と Low（ 0V ）の二つの状態しか出力することができません．このままでは，モータの回転を ON と OFF のどちらかにしか取り得ないということになります．
しかし，この High と Low をすばやく切り換えることで，中間量の電流が流れているときと同じ状態を作り出すことができます．このとき，図 11-6 に示すように，1 周期＊2 に対する High の時間比率（デューティ比）を変え る こ と で電流の平均が変わ り ま す．こ れ を P W M（ P u l s e W i d t h＊2 ： ON とOFF の1 組で1 周期となる．

11-4

車輪の回転の制御はどのように行うの？

161