4J工学実験(後期) マイクロコンピュータH8プログラミング

Copyright(C) Oct2002 coskx

1.はじめに
この実験の目的は次の点である。
(1)マイクロコンピュータH8のCプログラミングに,これまで修得したCプログラミングが役に立っていることを認識すること
(2)クロスコンパイル+ダウンロードによるマイクロコンピュータプログラムのプログラム開発の様子を知ること
(3)課題プログラムの完成

2.必要な装置器具
(1)パーソナルコンピュータ (Windowsマシン,H8クロスコンパイラ環境がインストールされているもの)
(2)シリアル通信ケーブル(RS232Cストレートケーブル)
(3)AKIH8/3048を用いたDCモータ制御評価セット(小坂研究室開発)
(4)ACアダプタ(15V)

3.装置器具の説明と接続
(1)AKIH8/3048を用いたDCモータ制御評価セット(小坂研究室開発)
図4.1にDCモータ制御評価セットを示す。本実験では図左側の電源,モータ・エンコーダは使用しない。回路はむき出しであるため,金属部分には絶対に触らないようして,回路のショートに気をつけること。
 

図4.1 AKIH8/3048を用いたDCモータ制御評価セット

(2)シリアル通信ケーブル(RS232Cストレートケーブル)
パーソナルコンピュータとH8を接続する通信ケーブルを図4.2に示す。図 で右側の25PがH8に接続するコネクタで,左側の9Pがパソコンのシリアルポートに接続するコネクタである。図4.4に示すようにコネクタを接続しなさ い。またもう一端のコネクタをパソコンの背面のシリアルポートに接続しなさい。

図4.2 パーソナルコンピュータとH8を接続するシリアル通信ケーブル

(3)ACアダプタ(15V)
図4.3にACアダプタを示す。マイクロコンピュータH8/3048は5Vで動作するが,フラッシュメモ リへの書き込みには12Vが必要なため,DC15Vを供給する。図4.4に示すようにコネクタを接続しなさい。また,図4.4のON−OFFと書いてある スイッチは電源スイッチであるが,これをOFFにしてから,ACアダプタをAVコンセントに接続しなさい。

注意 ACアダプタには同じ形で出力電圧が異なるもの,DC出力プラグのセンタが+のものと−のものがあり,間違えると機器の破損につながる。ここではDC15V,センタ+を用いる。 


図4.3 ACアダプタ
出力が「DC15V」であること,「端子センタが+」であることを確認

  

図4.4 ACアダプタケーブルとシリアル通信ケーブルを接続したところ


4.DCモータ制御評価セット
マイクロコ ンピュータH8/3048は日立製作所の製品であり,これをボードにつけて使えるようにできているCPUボード(AKIH8)が秋月電子通商から販売され ている。またプログラムダウンロード等の拡張性を設けたマザーボードも秋月電子通商から販売されている。小坂研究室では以前より,AKIH8を利用した授 業・実験向けのDCモータ制御評価セットを開発してきた。本実験で用いるのはDCモータ制御評価セットの一部である。

5.マイクロコンピュータH8/3048
(ここは最初意味がわからなくてもよい。実験後に再度読んでからレポートを書くこと)
マ イクロコンピュータH8/3048は16ビットCPUであるが,データのポート入出力では8ビット幅でデータ転送を行なっている。入出力ポートはメモリ マップトであり,メモリアドレスの一部分にレジスタとして,ポートが並んでいる。各ポートは初期状態で入力となっているため,プログラム中で初期化して使 用する。この装置ではマイクロコンピュータH8をモード7という基本モードで使用するが,この状態ではデータバスやアドレスバスは外部から見ることは出来 ない。そのかわり,ポートの端子がCPUのピンに直接見えるようになっている。各ポートの特性はH8/3048マニュアルを参考にするとよい。

6.マイクロコンピュータH8/3048プログラミングの仕掛け
(ここは最初意味がわからなくてもよい。実験後に再度読んでからレポートを書くこと)
通 常マイクロコンピュータのプログラミングはプログラムコードのROM焼き込みをともなうが,H8/3048はフラッシュメモリと呼ばれる,ROMが内蔵さ れている。これはプログラムコードのセットに特別な回路を必要とするが,RAMなみの手軽さで書き込みが出来,電源を落としてもコードが消えないものであ る。
入出力をC言語で記述するには,あるアドレス(ポートアドレス)に8ビット幅のデータを書き込みを行なったり,あるアドレス(ポートアドレス)から8ビット幅のデータを読み込めばよい。
各ポートはヘッダファイル「3048.h」(C:\Program Files\h8\C)によってポートアドレスはポート名で定義されていて,「P1.DR.BYTE」のようにtypedef命令・構造体・共用体を用いて便利に呼び出されるようになっている。
小 坂研究室ではさらに「H8-01.h」内の関数群でポートアドレスも意識しないでプログラミングが出来るような仕掛けを作成している。これには関数 printfに近い記述で,シリアル通信でパソコン画面に表示を行なう関数を用意した。また,さらにタイマ割り込みに関する仕掛けも作成しており,プログ ラム開発が容易になっている。


7.ファイルのダウンロード作業
http://xythos.tokyo-ct.ac.jp/usr/kosaka/for_students/H8.html  
または
http://tnct20.ens.tokyo-ct.ac.jp/~kosaka/for_students/H8.html
(本校のホームページwww.tokyo-ct.ac.jp→左側Index学科紹介→情報工学科→研究室および教官の紹介→coskxの個人page→H8)
内のKOSAKAfiles2.lzh
http://xythos.tokyo-ct.ac.jp/usr/kosaka/for_students/H8/h8_env/KOSAKAfiles2.lzh
または
http://tnct20.ens.tokyo-ct.ac.jp/~kosaka/for_students/H8/h8_env/KOSAKAfiles2.lzh
をダウンロードし,解凍しておくこと。ここには,BuildEnv2.html内で記述のあるフォルダtemplate,およびH8-MB-Pro.html内の各プログラムが入っている。
ダウンロード先は「マイドキュメント」とする。
解凍するには「Lhaca」がインストールされているので,「KOSAKAfiles2.lzh」のアイコンをダブルクリックするだけでよい。解凍後,解凍されたフォルダに何が入っているか確認しておくと,次の作業が効率的である。

8.作業
(1)この文書の末尾の「参考 プログラムのコンパイル&ダウンロードと実行の手順のまとめ」を読みなさい。
(2)http://xythos.tokyo-ct.ac.jp/usr/kosaka/for_students/H8.html
内の(http://xythos.tokyo-ct.ac.jp/usr/kosaka/for_students/H8/h8_env/BuildEnv2.html
または
http://tnct20.ens.tokyo-ct.ac.jp/~kosaka/for_students/H8/h8_env/BuildEnv2.html
「BuildEnv2.html」 に従い,プログラムのコンパイル&マイコンへのダウンロードおよび実行の手順に習熟しなさい。(プログラムはできるだけコピー&ペーストで作る) 「BuildEnv2.html」の「1」の「前提」に書いてある内容はすべて準備済みである。「2.プログラムの作成から実行まで」から作業すればよ い。エディタは「メモ帳」「TeraPad」「VC++のエディタ」のいずれかを用いるとよい。
(3)http://xythos.tokyo-ct.ac.jp/usr/kosaka/for_students/H8.html
内の(http://xythos.tokyo-ct.ac.jp/usr/kosaka/for_students/H8/H8-MB-Pro/H8-MB-Pro.html
または
http://tnct20.ens.tokyo-ct.ac.jp/~kosaka/for_students/H8/H8-MB-Pro/H8-MB-Pro.html
「H8-MB-Pro.html」に従い,LEDの点滅プログラム,LEDのPWM動作,8ビットスイッチ,プッシュスイッチのプログラム,Windowsパソコンのターミナルソフト「ハイパーターミナル」
との交信プログラムを実行しなさい。プログラムは,初期化関数および操作関数呼び出しのみでプログラミングが出来ることを理解すればよいが,「h8-01.h」に与えられている関数の中身もできるだけ理解すること。

9.課題(レポート)
(1)「LED0を2回点滅の後LED1を2回点滅」を繰り返すプログラムを作成せよ。

(2)マイコン起動からの経過時間(分と秒を表示)をシリアル通信を使ってPC側に表示するプログラムを作りなさい。ただし,100msecごとの タイマ割り込みを使用すること。また割り込み関数内で表示を行なってはいけない。グローバル変数のカウンタを用いればよいだろう。

(3)100msecごとの割り込みを用いて,ストップウォッチを作成せよ。スタート・ストップはキーボードのキーに割り当てても良いし,あるいは マザーボード上のプッシュスイッチを用いても良い。また割り込み関数内で表示を行なってはいけない。グローバル変数のカウンタを用いればよいだろう。

(4)タイマ割り込みとはどのような概念か述べなさい。

(5)マニュアルを調べ,「h8-01.h」中のLEDの初期設定関数,LEDの点灯・消灯関数の各行の意味を説明しなさい。


参考1
マニュアル:http://xythos.tokyo-ct.ac.jp/usr/kosaka/for_students/H8.htmlの最下部にリンクがある

ファイル3048.h:Windowsパソコンの「C:\Program Files\h8\C」にある。

参考2
プログラムのコンパイル&ダウンロードと実行の手順のまとめ
(1)「ハイパーターミナル」などのシリアル通信を実行するアプリケーションを終了し,シリアルポートを解放する。(「ハイパーターミナル」の場合は「切断」ボタンを押すだけでも良い)
(2)図4.4で,Write-RunスイッチをWriteにしてからON-OFFスイッチをONにする。これで,プログラムコードをH8//3048のフラッシュメモリに書き込む準備が出来る。スイッチの順番が逆ではいけない。
(3)作業用フォルダ内でCソースファイルのアイコンをh8cc.cmd へのショートカットのアイコンへドラッグ&ドロップする。終了するまで待つ。異常終了については,「BuildEnv2.html」の説明を参照のこと。

作業用フォルダのテンプレート

(4)正常に終わったら,図4.4で,ON-OFFスイッチをONにして,Write-RunスイッチをRunにしてからON-OFFスイッチをONにする。これでプログラムが実行される。
(5)SCI(シリアルコミュニケーションインタフェイス,シリアル通信)を利用したプログラムの場合はプログラム実行前に「to_H8.ht」をダブルクリックして「ハイパーターミナル」を起動しておく。

参考3
「3048.h」のソースリスト(AKIH8/3048のCコンパイラに付属)の表示ORダウンロード→ここです