キューティーフラッシュ

HC08シリーズマイコンMC68HC908QT4を使ったLED点滅器、 だから「キューティーフラッシュ」です。 このアプリケーションは、 いかにコーディングをしないでLEDを点滅させるかを追及したものです。 CodeWarriorのある機能を使うことで、Zeroコーディングを 達成しました。

ハードウェア概要

このアプリケーションのハードウェアは、きわめて簡単です。 マイコンのほかには、抵抗一本、LED一本、3V電源で構成されます。

キューティーフラッシュ回路図
キューティーフラッシュ部品表
品名型番個数調達先
マイコンMC68HC908QT4CP1Freescale
LEDOSDR5113A1秋月電子
抵抗100Ω ¼W1手持ち在庫
電池ボックス単3×2本1秋月電子
片面ガラスユニバーサル基板72mm×48mm1秋月電子
ICソケット8P1手持ち在庫
ラッピングソケット-適量手持ち在庫

簡単にラッピングでくみ上げました。

キューティーフラッシュ基板表
キューティーフラッシュ基板裏

プログラム開発

プログラムの開発には、CodeWarriorを使います。 ここでは、V5.0を使って説明します。

CodeWarriorの起動

スタートメニューからCodeWarriorを起動するとCodeWarriorが起動します。 初めてCodeWarriorを起動したときには、 下のような"Startup"ダイアログが出てきますが、 今はこのダイアログは使用しませんので、 X をクリックしてダイアログを閉じます。

CodeWarrior起動画面

この後、"Tip of the Day"ダイアログが出てくるかも知れませんが、 これも X をクリックして閉じてしまいましょう。

プロジェクトの作成

CodeWarriorでは、 一つのプログラムの単位を「プロジェクト」と呼んでいます。 ここでは、新規にプロジェクトを作成します。

使用言語とディレクトリの設定

メニューから"File → New Project..."を選ぶと、 "HC(S)08 New Project"ダイアログが開きます。 まずは、"Project Paramters"を設定します。

新規プロジェクト画面1

使用する言語に"C"を選び、 プロジェクトを作成する場所を設定します。 この例では、"C:\Projects\CW\qtflash"というディレクトリに "qtflash.mcp"というプロジェクトファイルを作成しています。 設定を終えたら、「次へ」をクリックします。

デバイスと接続法の設定

画面が変わって、"Device and Connection"の設定に移ります。

新規プロジェクト画面2

デバイスには"HC08 → Q Family → MC68HC908QT4"を選び、 デフォルトの接続法には"Full Chip Simulation"を選び、 「次へ」をクリックします。

追加するファイルの設定

3枚目の画面は、"Add Additional Files"の設定です。 プロジェクトで使用するソースコードなどあれば ここで設定します。

新規プロジェクト画面3

今回は、追加するファイルはありませんので、 そのまま「次へ」をクリックします。

プロセッサエキスパートの設定

4枚目の画面は、"Processor Expert"の設定です。

新規プロジェクト画面4

"Processor Expert"を選んでこの機能の使用を宣言します。 この仕掛けを使用することによって、 必要なコーディング量を大幅に減らすことができます。 さらに、「次へ」をクリックします。

C/C++のオプションの設定

5枚目の画面は、"C/C++ Options"の設定です。

新規プロジェクト画面5

すべて、デフォルトのままの設定にします。

startup codeANSI
memory modelSmall
floating point formatNone

設定を確認して 「次へ」をクリックします。

PC-Lintの設定

最後の画面は、"PC-Lint"の設定です。 PC-lint™というのは、 プログラムの書式を検査するためのプログラムですが、 そもそも今回はコーディングをしない予定なので使用しません。

新規プロジェクト画面6

"No"をチェックして 「完了」をクリックすると、新規プロジェクトが出来上がります。

プロセッサエキスパートの設定

ここから、 プログラムをコーディングする代わりに プロセッサエキスパートのプロパティを設定していきます。

プログラム可能パルス生成器の呼び出し

まず、 プログラム可能パルス生成器 (Programmable Pulse Generator: PPG) というブロックの設定をします。 実は、PPGというブロックは、 HC908QT4の仕様書には記載がありません。 このプロセッサエキスパートでは、 具象的なPulse Width Modulation (PWM)ブロックを 抽象的なPPGブロックとして定義しています。

CodeWarriorのウィンドウの中央下には、 "Bean Selector"というサブウィンドウがあります。

PPG設定画面1

PPGを設定するためには、 このウィンドウの "CPU Internal Peirpherals → Timer → PPG"を見つけ出して、 ダブルクリックします。 すると、右側にある"Bean Inspector"というサブウィンドウに PPGの設定項目が現れます。

PPG設定画面2

出力ポートの設定

PPGを呼び出しただけでは、PPGの出力はPTA0に出てきます。 もちろん、PTA0に出しても良いのですが、 PTA0は、MON08の通信線としても使用されるため、 避けておきたいところです。 この例では、PTA1に出力します。

PPG設定画面3

"Bean Inspector"の項目"Output pin"を"PTA1_TCH1_AD1_KBI1"に設定すると、 画面中央上の"Target CPU"の"PTA1"にPPGが移動します。

パルス周期の設定

必須設定項目あるいは問題のある設定には、 !マークが現れます。 この例では、二つの!マークが 表示されていますので、これらについて設定を行います。

まず、パルス周期を設定します。 "Bean Inspector"の項目"Period"の...を クリックすると、パルス周期設定ダイアログが現れます。

PPG設定画面4

このマイコンの場合、設定可能なPPGの周期は、 ダイアログの下の方の"Possible settings:"(可能な設定)の "Possible values:"(可能な値)に 書いてあるように、最大1310.700msです。 ここでは、"Requested value"(要求値)を"1310.7"、 "Units"(単位)を"ms"(ミリ秒)と指定します。 これで、1.3秒周期で点滅する設定になります。 値を書き込んだら、「OK」をクリックします。

パルス幅の設定

次に、パルス幅を設定します。 具体的には、LEDが転倒している時間です。 "Bean Inspector"の項目"Starting Pulse Width"の ...を クリックすると、パルス幅設定ダイアログが現れます。

PPG設定画面5

このダイアログの使い方は先のパルス周期の設定とまったく同じです。 ここでは、10%デューティにするため、 "131.07ms"を入力しますが、 実際に設定可能な値は、PWMの時間分解能に依存するため、 "131.060ms"または"131.080ms"になります。 この情報は"Possible settings:"の "Closest value"(最も近い値)に書いてあります。

ここで、「OK」をクリックすると、 "Bean Inspector"ウィンドウは、 「131.07msに設定しようとしたけど、実際には131.080msになっているよ」と いう表示になります。

PPG設定画面6

以上で、プロセッサエキスパートの設定は終わりです。 また、一行もコーディングはしていませんが、 プログラム開発も終わりです。

シミュレーション

出来上がった、アプリケーションが正しく動作するかを シミュレーションで確認することができます。

シミュレータを起動する

画面左側のプロジェクトペインを見てください。

プロジェクトペイン

このペインの上のほうには、いくつかのアイコンが並んでいます。 アイコンの左のドロップダウンリストが"Full Chip Simulation"に なっているのを確認して、 DEBUGアイコンをクリックします。 すると、コード生成、コンパイル、リンクの後にシミュレータが起動してきます。

LEDを準備する

このシミュレータは、画面上に仮想的なLEDを表示させることができます。 メニューから"Component → Open..."を選ぶと "Open Window Component"(ウィンドウ部品を開く)ダイアログが現れます。

ウィンドウ部品を開く

このダイアログから、"Visualizationtool"(視覚化ツール)を選んで 「OK」をクリックすると、 "Visualization Tool"という新しいウィンドウが開きます。

視覚化ツール

このウィンドウ内で右クリックをすると、 ドロップダウンメニューが現れます。 このメニューから、"Add New Instrument → LED"を選択します。 すると、マウスカーソルの位置に破線の四角形が現れます。 マウスをウィンドウの真ん中でクリックすると、 緑色のLEDが表示されます。

LEDの配置

このままでは、LEDはどのデータを表示すればよいのかがわかりません。 これを指定するのがプロパティダイアログです。 LEDの上で右クリックして、 ドロップダウンメニューから"Properties"(属性)を選択すると "Properties of LED"というダイアログが開きます。

LEDの属性

ここで設定しなくてはならないのは、 "Port to Display"(表示するポート)と "Bitnumber to display"(表示するビット番号)です。 PPGの出力として指定したのは、"PTA1"端子です。 この端子の状態は、$0000番地の"PTAD"レジスタのビット1を 通じて知ることができます。 このため、 "Port to Display"には、"PTAD"レジスタのアドレス"0x0000"を "Bitnumber to display"には、"1"を指定します。 これで、LEDは、PTA1の状態を表示することが出来るようになりました。

視覚化ツールの更新方法を指定する

視覚化ツールは、周期的に更新しないと最新の状態の表示になりません。 この更新方法を指定するため、 "visualization Tool"の"LED"の無い部分で右クリックし、 現れたドロップダウンメニューから"Properties"を選択します。

視覚化ツールの属性

このダイアログでは、"Refresh Mode:"(画面更新モード)を "Periodical"(周期的)に設定します。 すると、"Refresh Mode:"の下に新たに "Refresh Time (100ms):"(画面更新時間)という項目が出現します。 ここでは、すばやい反応を期待するために"1"を設定します。

シミュレータを走らせる

以上でシミュレーションの準備は完了です。 "True-Time Simulator & Real-Time Debugger"ウィンドウに戻って、 Start/Continueアイコンを クリックすると、シミュレータが動作を始め、 "Visualization Tool"の"LED"が赤と緑で点滅を始めます。

シミュレーション

デフォルトの状態では、 "LED"は、0を緑で1を赤で表現しますので、 緑の状態がLEDが点灯している状態に相当します。

マイコンにプログラムを書き込む

さて、いよいよマイコンにプログラムを書き込みます。 この例では、HC08のデータシートにいくつか記述のある モニタモードのうち、"Normal Monitor"モードを使用します。 ハードウェアには、 DEMO908LB8評価ボードを開発ツールとして使用しました。

デバッガ兼書き込みプログラムを呼び出す

CodeWarriorのプログラム書き込み機能は、 デバッガやシミュレータと兼用のツールから利用します。

書き込み機能の呼び出し

ドロップダウンリストを"Mon08 Interface"に変更して、、 シミュレータを起動したときと同じように、 DEBUGアイコンをクリックすると コード生成、コンパイル、リンクの後、 デバッガが立ち上がります。

MON08インターフェースの設定

デバッガの初期化が終わると "P&E Connection Manager"(P&E社の接続マネージャ)画面が現れます。 ここでは、MON08インターフェースの設定を行います。

接続方法の指定

まずは、"Interface Details"(インターフェースの詳細)から設定します。 新規に接続方法を指定するために、 "Add A Connection"(接続を追加する)をクリックすると、 "Interface Selection"(インターフェースの選択)という画面が 現れます。

インターフェースクラスの指定

MON08インターフェースを使用したマイコンへの書き込みでは、 その途中で、何度かリセットをかける必要があります。 この画面では、どのような方法でリセットをかけるかを指定します。

今回は、データシートに記載されたままのハードウェアを使用しますので、 "Class 3 - Custom Board (no ICS) with MON08 serial port circuitry built in" (クラス3-ICS機能の無い独自ボードに MON08シリアルポート回路を組み込んだもの)を 選択します。

再び接続方法の指定

次に"Interface Details..."(インターフェースの詳細...)の "Baud Rate"(データ転送速度)を9600に設定します。 ここで指定すべき数値は、データシートに記載があります。

HC08は、モニタモードに入ると中のプログラムなどがすべて 見えてしまいます。 このため、ある鍵コードを与えないとモニタモードに入ることが 出来ないような仕組みになっています。 この画面の右側にある "Security Options"(セキュリティのオプション)では、 モニタモードに入るための鍵コードを指定します。

とは言うものの、使い古しのマイコンを消去してから使いたい場合などは、 鍵コードがわからないので、この機能が障害になってしまいます。 そこで、鍵コードを与えずにモニタモードに入って、 FLASHの全面消去だけを許可する"Ignore Security"(セキュリティ無視)という 方法も用意されています。 この例では、こちらの方法を使用します。

最後に書き込みハードウェアの電源を入れてから "Contact Target These Settings..." (これらの設定でターゲットに接続する) ボタンをクリックすると、 書き込みハードウェアとのやりとりが始まります。

英単語のCONNECTとCONTACT

文章を書いていて疑問に思ったのですが、 CodeWarriorの画面では、 "connect"と"contact"という単語が使い分けられています。 どちらも他動詞用法なのですが、 "connect"の方は"connect A and B"「AとBをつなぐ」という意味で、 "contact"の方は"contact A"「Aにつながる」という意味だそうです。 どちらも主語が省略されているのでわかりにくいですね。

マイコンに書き込む

先の画面でボタンをクリックすると、 "Power Cycle Dialog"(電源入れなおしダイアログ)という画面が 現れます。

電源入れなおし

これから先、何度かこの画面が出てきます。 その時には、

  1. マイコンの電源を切る。
  2. マイコンの電源をもう一度入れなおす。
  3. ダイアログの「OK」ボタンをクリックする。

という動作を行います。

デバッガの画面が初期化されると "Erase and Program Flash?"(フラッシュを消去、書き込みするか?)という 画面が現れます。

消去確認

今回は、プログラムの書き込みが目的ですので、 「Yes」をクリックします。 もし、デバッグだけの目的でしたら、 「No」をクリックします。

今度は、"CPROG08SZ Programmer"(CPROG08SZプログラマ)という ウィンドウが現れます。

プログラマ前半

このプログラムは、 実際にマイコンにプログラムを書き込むためのプログラムで、 CodeWarriorから受け取った情報を基に個々のマイコン独自の設定ファイルと 書き込みプログラムを読み出してプログラムを行います。 このため、CodeWarriorでは、正しいマイコン名を与える必要があります。

しばらくして、 FLASHの消去が終わると、 再び"Power Cycle Dialog"(電源入れなおしダイアログ)という画面が 現れます。

電源入れなおし

電源を入れなおして「OK」をクリックすると、 FLASHへのプログラムの書き込みが始まります。

プログラマ後半

書き込みと確認が終わったら、 "CPROG08SZ Programmer"画面は自動的に消滅します。 これで、マイコンへの書き込みは終了です。 マイコンの電源を切ってから、 マイコンを取り外してアプリケーションボードに載せます。

うまく、書き込めないときには

実は、この文書を書いている時にモニタモードに入れない事態が 発生しました。

失敗1

こんな時には、ウィンドウの下の方にある "Status:"(状態)の YYNNN__のあたりをクリックすると、 なぜモニタモードに入れなかったかという説明を見ることができます。

失敗の説明

もちろん、すべて英語なので大変でしょうが、 解決の糸口はつかめると思います。

で、私の場合ですが、 /IRQ(PTA2)端子に与える電圧が不足していたのが原因でした。 普通のモニタモードに入るためには、 この端子に最低でもVDD+2.5[V]の電圧を与えなくては なりません。 私の使っていた書き込みハードウェアでは、 この電圧を定格9Vの006P積層乾電池からツェナーダイオードを使って 作っています。 そのため、この乾電池の電圧がVDD+2.5[V]を下回ると モニタモードへ入れなくなってしまうのです。

同じ乾電池から5.0Vのレギュレータでマイコンへの VDDも作っています。 5.0VのVDDは供給することが出来るので、 マイコン自体は正常に動作しているように見えます。 見つけにくい問題ですね。 乾電池を交換したらプログラムできるようになりました。

LEDを点滅させる

アプリケーションボードにマイコンを載せて、電源をつなぐと、 LEDが点滅を始めます。 これで、完成です。

キューティーフラッシュ点滅

動作を変えたい

点滅の周期を変えるなどの設定の変更は、 プロセッサエキスパートの属性を変更して書き込むだけです。

このマイコンの場合には、マイコンの制約上、 周期を1.3秒より長くすることは出来ません。 もっと長い周期を手軽に実現するためには、 最近発表された"MC68HC908QT4A"がお勧めです。 このAバージョンは、無印バージョンの機能に加えて、 バスクロックを可変することができるため、 周期を3.2倍長くすることができます。

2006-01-15 発行。
Copyright (C) 2006 noritan.org ■