マイコンに圧電スピーカをつなぐと、音を出すことができます。
音の周期を決めるにはタイマ・モジュールを使います。
でも、MC9RS08KA2には、ほかのHC(S)08マイコンには存在する
ある機能が欠けているのです。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音を出す (1)" »
MC9RS08KA2で音を出すハードウェア
MC9RS08KA2で音を出す
システムで必要なのは、マイコンとそれにつながる圧電スピーカです。
それに電源をつけると独立した立派なアプリケーションになります。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音を出す (2)" »
プログラム開発のためのプロジェクトを作る
プログラムの開発は、
HC(S)08シリーズと同様に
CodeWarriorを使います。
この記事では、
RS08用のCコンパイラでプログラムを作成します。
そのため、ベータ版のCコンパイラが含まれている
CodeWarrior for Microcontrollers V6.0のインストールが必要です。
「スタート」メニューからCodeWarriorを呼び出します。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音を出す (3)" »
ソフトウェア・タイマで音を出すプログラムを作る
最初に、タイマ・モジュールを使わない純粋にソフトウェアだけで処理を行う
プログラムを書いてみます。
タイマをソフトウェアで実現するので、ソフトウェア・タイマと呼びます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音を出す (4)" »
ソフトウェア・タイマで音を出すプログラムの解説 (1)
前回は、ソフトウェア・タイマで音を出すプログラムのソース・コードを掲載しました。
今回から2回に分けてその詳細を解説していきます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音を出す (5)" »
ソフトウェア・タイマで音を出すプログラムの解説 (2)
前回に引き続いて、ソフトウェア・タイマで音を出すプログラムの詳細を解説していきます。
後半は、関数についての解説です。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音を出す (6)" »
プログラムを実行する
マイコンにプログラムを書き込んだら、実行させてみましょう。
実行は、デバッガの画面から行います。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音を出す (9)" »
ソフトウェア・タイマの周波数を変えてみる
圧電スピーカから音を出すことはできましたが、
このままでは一定の音程の音が出てくるだけです。
マイコンの動作中にデバッガから操作して音程を変えてみましょう。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音を出す (10)" »
モジュロ・タイマで音を出すプログラムを作る
前回まで、ソフトウェア・タイマを使用して音を出すプログラムを作りましたが、
出てくる音程は「出たとこ勝負」で決まっていました。
確実に音程を決めるには、ハードウェアの力を借ります。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音を出す (11)" »
モジュロ・タイマ用にソース・コードを書き直す
前回決めた方針に従って、モジュロ・タイマを使うプログラムを作成します。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音を出す (12)" »
モジュロ・タイマを使うプログラムの解説
今回は、モジュロ・タイマを使うプログラムの詳細を解説していきます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音を出す (13)" »
モジュロ・タイマの周波数を変えてみる
前回までに作成したモジュロ・タイマを使用したプログラムを実行します。
さらに、動作中のマイコンに介入して音程も変えます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音を出す (14)" »
前回までに作成した音を出す装置のプログラムを変更すると、
音楽を奏でることができるようになります。
音楽には、音程とテンポの二つの要素が必要です。
テンポを制御するために、二つ目のタイマを使用します。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音楽を奏でる (1)" »
リアルタイム割り込みでテンポを作るプログラム
前回は、音楽を奏でるための二つの要素、音程と音の長さを制御する方法について考えました。
今回から、
モジュロ・タイマで音程を決め、
RTIモジュールでテンポを決める
最初の課題プログラムの作成をはじめます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音楽を奏でる (2)" »
二つの音を切り替えるソース・コード
前回までで
プログラムの方針が決まったので、
フローチャートに従って、ソース・コードを記述します。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音楽を奏でる (3)" »
二つの音を切り替えるプログラムの解説(1)
前回紹介したプログラムの解説を行います。
第1回目は、レジスタの初期設定値と大域変数です。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音楽を奏でる (4)" »
音程とテンポを変えてみる
プログラムができたので、マイコンに書き込んで実行します。
このアプリケーションもデバッガからパラメータを変更することができます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音楽を奏でる (6)" »
配列で楽譜を表現する
前回作成したアプリケーションは、
二つの音程を切り替える機能を持っています。
この切り替えの機能を、楽譜に従って、
自動的に行うと音楽を演奏することができます。
もちろん、人間のために書かれた五線譜をマイコンが読むことはできないので、
FLASH ROM上に定数としてデータをして楽譜を記述していかなくてはなりません。
そこで、これから数回にわたって、
楽譜をデータとして定義する方法を考えていきます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音楽を奏でる (7)" »
小節を表現する型
前回は音符を表現するデータ構造を考えました。
楽譜は、音符を順番に並べたものです。
今回は、音符と楽譜の中間のデータ構造として小節を考えます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音楽を奏でる (8)" »
楽譜を表現する型
前回まで楽譜を表現するデータ構造を考えてきました。
今回は、いよいよ最上位階層の楽譜データを定義します。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音楽を奏でる (9)" »
楽譜の具体的な記述法
前回までで、楽譜を表現するデータ構造を決定しました。
今回は、このデータ構造を使って楽譜を記述する方法を具体的に示します。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音楽を奏でる (10)" »
PRMファイルの記述
今回は、ソース・コードのほかに必要なもうひとつの設定ファイルである
PRMファイルを記述します。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で音楽を奏でる (16)" »
RS08マイコンのアプリケーション開発は、
CodeWarriorという統合開発ツールを使います。
また、この開発ツールを使うと、
HC08, HCS08, ColdFire V1の
三種類のマイコンのアプリケーションも開発することができます。
まずは、開発ツールをインストールしましょう。
続きを読む "CodeWarrior for MCUs V6.1 のインストール (1)" »
インストーラ・ファイルをダウンロードする
前回は、CD-ROMが入手できた場合のインストーラの起動の仕方について解説をしました。
今回は、freescale.comからダウンロードする場合の手順について解説します。
続きを読む "CodeWarrior for MCUs V6.1 のインストール (2)" »
前回までで、CD-ROMを使う方法とfreescale.comからダウンロードする方法の
二通りについてインストーラの起動までを解説しました。
今回は、起動したインストーラを使って、
CodeWarrior for MCUs V6.1をインストールする手順を解説していきます。
インストール作業
インストーラが起動すると、
スプラッシュが表示されます。
続きを読む "CodeWarrior for MCUs V6.1 のインストール (3)" »
前回までで、CodeWarrior for MCUs V6.1のインストールが終わりました。
今回は、CodeWarrior for MCUs V6.1を使って、サンプル・プログラムを書き込んでみます。
続きを読む "CodeWarrior for MCUs V6.1 のインストール (4)" »
「MC9RS08KA2で音を出す装置」は、
これまでのプログラムでは使っていませんが、
押しボタン(キー)を付けてあります。
次のテーマとして、音を出す装置のプログラムを変更し、
キー入力により音をON/OFFさせるプログラムを作成します。
キーの状態を知るには、どうしたらよいのでしょうか。
続きを読む "超Low-EndマイコンRS08を使おう - キーの状態により音を制御する (1)" »
前回まで、キー入力を行うための要素が揃いました。
今回から、キー入力を読み取るソフトウェアを作成します。
デバッガでキーの状態を調べる
それでは、最初のプログラムを作成します。
ここで作成するプログラムは、ポートの状態を読み込んで、
その状態によりある変数の値を変更するプログラムです。
変数の値は、デバッガによりリアルタイムで観測することが出来ます。
続きを読む "超Low-EndマイコンRS08を使おう - キーの状態により音を制御する (3)" »
前回、マイコンにプログラムを書き込んで、実行したのですが、
キーを押しても、デバッガが表示している大域変数には変化がありませんでした。
さて、どうしたわけでしょうか。
続きを読む "超Low-EndマイコンRS08を使おう - キーの状態により音を制御する (6)" »
キーの状態で音を制御するプログラム
前回までのプログラムで、
キーの状態を知る方法がわかったので、
キーの状態に従って、音を出したり止めたりするプログラムを
作ります。
続きを読む "超Low-EndマイコンRS08を使おう - キーの状態により音を制御する (7)" »
前回までで、
LED駆動基板がプログラムを含めて完成しました。
今回は、イルミネーション・ハードウェアを完成させます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で作るイルミネーション (3)" »
イルミネーション・プログラムを作る
イルミネーション・プログラムを作成して、マイコンに書き込みます。
ここでは、ソフトウェアPWMを使ってLEDを点灯させるプログラムを流用します。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で作るイルミネーション (2)" »
いざ、点灯
プチ・デコレーション・ライトを取り付けたら、点灯式です。
スイッチをONにすると、LEDが点滅を始めます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で作るイルミネーション (4)" »
音を出す装置のプログラムを変更すると、
キー入力で演奏が始まるオルゴールができあがります。
電池駆動なら、省電力設計にしたいよね。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で作る電子オルゴール (1)" »
消費電流を測定しながら、プログラムを改造する
このアプリケーションの大部分の時間は、
人間がキーを押すのを待っている状態です。
このようなアプリケーションの場合、
待ち時間での消費電流を減少させると平均の消費電流が減り、
電池寿命が長くなります。
今回から数回にわたり、消費電流を測定しながら、
消費電流を減らすためのプログラム改造方法を考えます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で作る電子オルゴール (7)" »
STOP命令を使ってみる
前回は、省電力モードに入るWAIT命令を使ってみました。
今回は、もう一つの省電力モードである、
STOPを試してみます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で作る電子オルゴール (8)" »
今回もさらなる、低消費電力を実現するために、プログラムを改造していきます。
そのためには、使用していないモジュールを停止させます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で作る電子オルゴール (9)" »
最終版電子オルゴールプログラム
消費電流を減らすために、
プログラムにさまざまな改造を施しましたので、
その結果のプログラムを公開します。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で作る電子オルゴール (10)" »
今回から、MC9RS08KA2に表示機能をつけます。
マイコンの表示装置には、LEDを使うのが便利です。
どんなふうに接続するのでしょうか。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で4個のLEDを駆動する (1)" »
今回は、LEDを駆動するシステムの図をもとに具体的なハードウェアを作成します。
MC9RS08KA2で4個のLEDを駆動するハードウェア
このシステムで必要なのは、マイコンと4組のLEDと抵抗です。
あとは、電源を加えると立派な独立アプリケーションになります。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で4個のLEDを駆動する (2)" »
今回は、LEDに流れる電流の計算方法を解説します。
LEDに電流を流すと
LEDを点灯させたときの明るさは、LEDに流す電流で決まります。
LEDという素子は、
適切な電流を流した状態のときにLEDの両端に現れる電圧がほぼ一定になります。
そのため、直列に接続する抵抗の値によって、
LEDに流す電流をある程度決定することができます。
この抵抗のことを電流制限抵抗と呼んでいます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で4個のLEDを駆動する (3)" »
今回も引き続き、LEDに流す電流の計算方法を解説します。
マイコンのポート出力の電圧降下
マイコンのポート出力は、
抵抗成分をもっているので、電流を流すと電圧降下が起こります。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で4個のLEDを駆動する (4)" »
今回からソフトウェア開発を行います。
プログラム開発のためのプロジェクトを作る
プログラムの開発は、
CodeWarrior for Microcontollersを使います。
ここでは、
RS08用のCコンパイラが含まれている
CodeWarrior for Microcontrollers V6.1を使って、
Cコンパイラでプログラムを作成します。
「スタート」メニューから
CodeWarrior for Microcontrollersを
呼び出します。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で4個のLEDを駆動する (5)" »
今回は、プログラムのもとになるフローチャートを描きます。
LEDを点滅させるプログラムを作る
最初は、4個のLEDを別々の周期で点滅させるプログラムを書きます。
時間を決めるタイマ・モジュールは、
MC9RS08KA2には4個も入っていません。
そこで、モジュロ・タイマを拡張した、
4組のソフトウェア・タイマを作ってそれぞれ処理します。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で4個のLEDを駆動する (6)" »
今回は、いよいよソース・コードを記述します。
4個のLEDを点滅させるソース・コードを書く
フローチャートに従って、ソース・コードを書いていきます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で4個のLEDを駆動する (7)" »
今回から、音を出すプログラムとは異なる部分について、ソース・コードの解説を行います。
PTADDレジスタの設定について
ポートの出力機能を有効にするために、
PTADD_INITという定数を
宣言して初期化関数で使用しています。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で4個のLEDを駆動する (8)" »
今回は、ソース・コードの後半部分を解説します。
初期設定関数の解説
関数initialize(void)では、
レジスタと変数の初期化を行っています。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で4個のLEDを駆動する (9)" »
PWMでLEDの明るさを変えるプログラムを作る
先のプログラムでは、LEDの点滅周期を変更しましたが、
LEDの明るさについては点灯と消灯の二種類の状態しかとっていません。
では、LEDの明るさを変化させるためには、どうしたらよいのでしょうか。
LEDの見かけの明るさを変化させる技術の一つに
平均電流を制御するPWMという手法があります。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で4個のLEDを駆動する (12)" »
ソフトウェアPWMのフローチャート
LEDの点滅が見えなくなるのは、
一秒間におおむね60回以上の点滅が行われたときです。
このプログラムでは、PWMの周期を約8ミリ秒として、
一秒間に125回の点滅が行われるように設定しています。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で4個のLEDを駆動する (13)" »
ソフトウェアPWMのソース・コード
フローチャートに従って、ソース・コードを書きます。
ここでは、C:\Projects\CW\RS08C11という場所に
RS08C11というプロジェクトを作成して
プログラムを記述していきます。
プロジェクトの作成および設定は、これまでと同じなので、省略します。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で4個のLEDを駆動する (14)" »
モジュロ・タイマの設定について
前回のプログラムは、LEDの点滅を見せるためのものでしたが、
今回は、LEDが点滅していることを感じさせないようにします。
そのため、モジュロ・タイマの周期が短くなっています。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で4個のLEDを駆動する (15)" »
LEDの明るさを自動で変えるプログラムを作る
先のプログラムでは、デューティー比を手動で変化させていました。
次は、自動的に明るさを変化させるプログラムを作ります。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で4個のLEDを駆動する (17)" »
自動的にLEDの明るさを変更するソース・コード
フローチャートに従って、ソース・コードを書きます。
ここでは、C:\Projects\CW\RS08C12という場所に
RS08C12というプロジェクトを作成して
プログラムを記述していきます。
プロジェクトの作成および設定は、これまでと同じなので、省略します。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2で4個のLEDを駆動する (18)" »
これまでは、MC9RS08KA2で4個(系統)のLEDを駆動しました。
もっと多くのLEDを駆動したいのですが、
MC9RS08KA2には、そんなに多くの端子がありません。
でも、工夫すれば、何とかなります。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2に多くのLEDを接続する (1)" »
今回は、システム図をもとに具体的なハードウェアを作成します。
MC9RS08KA2で6個のLEDを駆動するハードウェア
このアプリケーションの回路図を示します。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2に多くのLEDを接続する (2)" »
今回は、三つのポートで6個のLEDを駆動する仕組みを解説します。
多くのLEDを駆動する仕組み
6個のLEDは、異なるポートそれぞれの間に張られる、
いわゆる「完全グラフ」の枝状に配置されます。
このため、4個のポートを使えば12個のLEDを
8個のポートを使えば理論上56個のLEDを駆動することができます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2に多くのLEDを接続する (3)" »
今回も引き続き6個のLEDを制御する仕組みを解説します。
なぜ、LEDは一つだけ光るのか?
上の例では、
LED4が順方向バイアスになって点灯していますが、 よく見ると、LED1とLED3も
順方向バイアスになっています。
なぜ、これらのLEDは、点灯しないのでしょうか。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2に多くのLEDを接続する (4)" »
今回は、LEDに流れる電流を計算します。
LEDに流れる電流を計算する
この回路には、
LEDに流れる電流を決定するための電流制限抵抗が使われていません。
では、いったい、どのくらいの電流が流れているのでしょうか。
「MC9RS08KA2で4個のLEDを駆動する」で示したように、
マイコンのポート出力は、抵抗成分を持っているため、
電流を流すと電圧降下が起こります。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2に多くのLEDを接続する (5)" »
特定のLEDを点灯するプログラムを作る
それでは、狙ったLEDを点灯させるプログラムを書いてみましょう。
最初は、いつものようにデバッガから手動で操作するプログラムです。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2に多くのLEDを接続する (6)" »
特定のLEDを点灯するソース・コード
フローチャートに従って、ソース・コードを記述します。
ここでは、C:\Projects\CW\RS08C13という場所に
RS08C13というプロジェクトを作成して
プログラムを記述していきます。
プロジェクトの作成および設定は、これまでと同じなので、省略します。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2に多くのLEDを接続する (7)" »
今回は、ソース・コードに解説を加えていきます。
大域変数の解説
このプログラムで使用する変数は、一つだけです。
//==============================================================
// 変数の宣言
//==============================================================
byte led_index; // 点灯させるLEDの場所
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2に多くのLEDを接続する (8)" »
手動でLEDを点灯させてみる
プログラムができあがりました。
USBSPYDER08を使って、プログラムをマイコンに書き込んで実行します。
コンパイルから実行まで
メニュー・バーから
Project → Makeを選択するか、
F7キーを押してコンパイルを行います。
プロジェクト・ウィンドウの上のほうにあるMakeボタンを
クリックすることもできます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2に多くのLEDを接続する (9)" »
LEDを順番に点灯させるプログラムを作る
手動でLEDを点灯させることができたので、
次は、LEDを順番に点灯させるプログラムを作ります。
LEDを切り替えるタイミングを作るのは、
おなじみモジュロ・タイマです。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2に多くのLEDを接続する (10)" »
LEDを順番に点灯させるソース・コード
フローチャートに従って、ソース・コードを記述します。
ここでは、C:\Projects\CW\RS08C14という場所に
RS08C14というプロジェクトを作成して
プログラムを記述していきます。
プロジェクトの作成および設定は、これまでと同じなので、省略します。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2に多くのLEDを接続する (11)" »
モジュロ・タイマの設定について
このアプリケーションでは、LEDの点滅を目で確認します。
そのため、モジュロ・タイマは、ゆっくりとした周期で動作させます。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2に多くのLEDを接続する (12)" »
プログラムを実行する
プログラムができあがりました。
USBSPYDER08を使って、マイコンにプログラムを書き込み実行します。
続きを読む "超Low-EndマイコンRS08を使おう - MC9RS08KA2に多くのLEDを接続する (13)" »