Freescale M68DEMO908QT4 デモボード紹介と活用例
作品名 : "3-LED Software PWM with Phase-Shift
120/240/360deg."
これは 2003年 6月に書いた内容を 2005年 9月に更新したものです。

2003年春、フリースケールセミコンダクタ(当時はまだモトローラでした)のホームページを見ていたらフラッシュROM内蔵8ビットマイコン
MC68HC908QT4 の簡単な 評価ボード (デモボード)がもらえると書いてあったので応募してみました。
すると運良く当選(?)し、品物が送られてきました。早速いじってみると・・・なかなか良さそうです! 搭載されたマイコンは8ピンで非常にコンパクトなものです。
このデモボードに付属するソフトウェア開発環境
CodeWarrior を提供しているメトロワークス社の担当の方へ送ったレポートの一部を紹介します。
デモボードを使ってC言語のプログラミングとデバッグを体験してみました。あまり高度なことはしていませんが、うまくいったのでご報告させていただきます。
M68DEMO908QT4 の未実装ランドへ下記のように LED と抵抗を2本ずつ追加します。
DS4 と R7 のところに LED と 330Ωを実装します。これは
PORTA-4 出力になります。
DS3 と R6 のところに LED と 330Ωを実装します。これは
PORTA-5 出力になります。
気を付けることがあります。このボードの回路は
PORTA-5 が半固定抵抗 VR1 にも接続されているので、これを右または左に回し切ってしまうと、出力が短絡されて出力ポートが壊れる可能性があります。VR1
は真ん中にセットしておいてください。そうすれば壊れることはありません。
今回のプログラムはタイマモジュールの PWM 機能を使わずに、ソフトウェアで3ch分の
PWM を実現しています。 (1つの関数を3つの
LED の明るさ変化処理に使い回しています。)
C:\Program Files\Metrowerks\CodeWarrior CW08_V2.1\(CodeWarrior_Examples)
\HC08\HC08 PEDebug\QT_QY Demos\68HC908QT4 Demonstration Board
\68HC908QT4 Blinking C- User Monitor Mode\
にある Blinking_C_user_monitor_mode.mcp のプロジェクトを利用します。
上記フォルダ下の \sources\blinking.c を、添付したソースファイルで置き換えると、3個の
LED をフワフワと明滅させることができます。 3個の
LED 明滅の周期は同じですが、位相を 120度ずつずらしています。
タイマモジュールのハードウェア機能を使った
PWM だと同時に2ch 分しか実現できませんが、ソフトウェアだけで実装してこんなに簡単に多ch
ができました。やはりC言語で書けると非常にラクです。ありがたいことです。
以上、簡単ですが作成したプログラムの紹介を終わります。
「このソースコードにはCodeWarriorによって自動的に定義された部分が含まれます。このソースコードは個人の責任において公開され、フリースケールセミコンダクタおよびメトロワークスは一切責任を負うものではありません。」
これはフリースケールセミコンダクタ様の規定による表示です。
ホームページでの公開を許諾していただき、誠にありがとうございました。
上記は私が M68DEMO908QT4 デモボードを入手した当時の付属 CD-ROM に入っていた CodeWarrior V.2.1 での解説です。その後、付属 CD-ROM の CodeWarrior のバージョンは確認していません。2005年 9月現在メトロワークス社のサイトからダウンロードできる CodeWarrior for HC(S)08 Special Edition(無償版)は V.3.1 になっています。
CodeWarrior V.3.1 で確認したところ、基本的に何ら変わりありませんでした。ただし Blinking_C_user_monitor_mode.mcp のサンプルプロジェクトは入っていないので下記の手順に従って作成してください。
● 準備
デモボードの QT4
には既に UserMonQT4.asm
が書き込まれています。(この意味が分からない場合は気にしなくても大丈夫です。)
デモボードに LED と抵抗それぞれ2本追加することについては上記の説明と同様に行ってください。それから、VR1
のツマミを中央付近にしておいてください。
● ソフトウェア的な作業
CodeWarrior で File ->
New を選択します。HC(S)08 Board Support Stationery を選択、Project Name は Blinking_C_user_monitor_mode とし、Location は自分で管理しやすいところに設定してOKを押します。私の場合は
Location を
C:\Documents and Settings\ryosuke\My Documents\CW08\
Blinking_C_user_monitor_mode にしました。

OKを押すと選択肢が現れるので、QT4 -> 68HC908QT4
Demonstration Board
-> User Monitor Mode -> C を選びます。

OKを押します。
この状態では 「VR1 によって LED(DS2) の点滅周期を調整するデモプログラム」が main.c としてプロジェクトに組み込まれていますが、不要です。上の
blinking.c のファイル名を main.c に変えて、今回のプロジェクトの main.c に上書き保存してください。場所は先ほどの例だと
C:\Documents and Settings\ryosuke\My
Documents\CW08\
Blinking_C_user_monitor_mode\sources のフォルダの中になります。
CodeWarrior IDE 画面の Sources というフォルダの絵の中に main.c がありますのでダブルクリックで開いてください。中身が 「VR1 によって LED(DS2) の点滅周期を調整するデモプログラム」ではなく、先ほどの blinking.c を main.c にファイル名変更したものの内容になっていることを確認してください。
ここで一旦 MAKE ボタン(マウスカーソルを当てると説明が出ます)を押してコンパイルしてみてください。うまくいきましたか?
エラーは出ないはずですが、「C4000: Condition always TRUE」という警告が出たと思います。エラーではなく警告なので、もう一度 MAKE を押してもそれ以上は何も言ってきません。もし見逃した場合は、下記のように main.c の右端にある四角をクリックして「Touch」してから MAKE すると警告が出ます。(画面は凡例です。)

この警告は「条件が常に真になる判定ですよ」ということを言っています。
組み込みマイコンならではの while( 1 ) について、永久ループだけど大丈夫?と心配してくれているのです。問題はないのですが、警告が出るのは気に入らないという向きには while( 1 ) の替りに for( ; ; ) を使う方法もお勧めです。これは根本的に先ほどと変わらないのですが、「for 文は初期化、条件、後処理のいずれかを省略しても良い」ということから「for 文は初期化、条件、後処理の全てを省略しても良い」という解釈ができますから警告を出さないのだと理解しています。実際、市販のC言語ソース静的解析ツールでも同様の解釈をするものがありますし、Freescale Hybrid Controller MC56F8300 シリーズ用の CodeWarrior に用意されている main.c では while( 1 ) ではなく for( ; ; ) と書かれています。
そんなわけで while( 1 ) の替りに for( ; ; ) と書き直してから MAKE すると、その部分の警告が出なくなります。
● フラッシュ書き込み〜動作確認
M68DEMO908QT4 デモボードのフラッシュ書き込みを実際にやってみましょう。シリアルケーブルを繋いだら、デモボードの電源を入れる前に CodeWarrior IDE の Debug を押してください。MAKE が終わった後、最初はあっけなくデバッガが起動したと思います。この時点ではまだフラッシュに書き込みが行われていません。これは、現在はパソコン上でシミュレーションを行う設定になっているからです。モードを切り替えてみましょう。デバッガのメニューから PEDebug -> Mode: Full Chip
Simulation というところを In-Circuit Debug/Programming に変更してください。

下図のような、ウィンドウが現れましたね。

このメッセージの指示に従ってください。「S1ボタンを押し続けたまま電源を入れ、その後S1ボタンを離します。」 そしてOKを押してください。デバッグモードを切り替えるか聞いてくるのでYESを押します。フラッシュ書き換えを行うか聞いてくるのでYESを押します。するとまた電源スイッチとS1押しボタンスイッチの操作を促してきますから指示に従います。ちなみに、電源を落とすときはS1ボタンを押しておく必要はありません。OKをクリックする替わりにEnterを押しても良いです。私は 「電源オフ、S1を押しながら電源オン、S1を離す、Enterを押す」 の手順でやっています。同じ操作を2〜3回繰り返したらデバッガ画面が出て静かになります。フラッシュ書き込み終了です。取りあえず、ユーザモニタモードでの便利なデバッグ(意味が分からなくても気にしなくて大丈夫です)は置いといて動作確認をしてみましょう。デモボードの電源を一旦落とします。デバッガも終了させておきましょう。
シリアルケーブルは付けたままでも抜いても構いません。今度はS1スイッチを押さずに、そのままデモボードの電源を入れてみてください。
3つのLEDが120度ずつ位相をずらして、フワフワと明滅したら成功です。
● 困ったときは
もしフラッシュの書き込みを行うときに通信条件の設定を行うウィンドウが開いた場合は、上から順に、ClassIII
を選択、Serial Port は自分のパソコンに合わせて選択、通信速度は
9600baud を選択、Security は右下の IGNORE にチェックを入れます。これで、左下の
Contact Target... を押せばOKです。
簡単なデモボードですが、なかなか奥が深そうだということが理解いただけると思います。それにしても、今見るとフワフワ光るはずが多少チラついて見えます。もっと綺麗にできるはずですが LED の種類にもよるでしょうし、今は追求しないことにします。
最後に M68DEMO908QT4 デモボードの入手方法について。フリースケールのウェブサイトからも注文できますし、代理店さん経由でも買えると思います。米国のインターネット通販 Digi-Key ( 日本の窓口 もあり私が見たときは \3,326 でした)でも取り扱っています。
このホームページで紹介した内容を実施する場合は全て自己責任において行っていただきますようお願いします。
不明点や質問、感想などはこのホームページの掲示板へお願いします。