mruby/cをPsoC5LPで動かす|Chapter02 LED点滅の速さを変える
※この記事に掲載されている情報は、2018年3月時点のものです。
目標
タイマーと浮動小数点を使って、1秒以下のウエイトを実現する。
作業手順
Chapter1で作成したプロジェクトをベースにします。 PSoC Creatorで、Chapter1のプロジェクトをオープンしておいてください。
mrubyスクリプトの自動コンパイル処理の追加
Chapter1では、手作業でmrubyスクリプトをコンパイルしていました。
頻繁に変更するようになると、作業が煩雑になりますので自動化します。
- コンパイル用バッチファイルmrbc.batをmrubyソースコードをおいたディレクトリへコピーします。バッチファイルは、ダウンロードページのmrubyコンパイラをダウンロードしてください。
- mrbc.bat中のset MRBC行をmrbc.exeの絶対パスに書き替えます。
- メニューからProject>Build Settingsダイアログを表示します。
ARMGCC... >User Commands>User Commandsの設定欄Pre Buildへ mrbc.batを入力します。
浮動小数点の利用
一秒おきのループを、以下の通り0.2秒おきにして、点滅のサイクルを短くしようと思います。
|
ところが、これをコンパイルして実行しても、ハングアップしたように見えます。
PSoC5LPでは、浮動小数点を扱うために、以下の作業が必要です。 また、ヒープが不足するのでヒープサイズ増加も行っておきます。
- メニューから Project > Build Settingsを選び、Build Settingsダイアログを表示する。Linker > Generalの設定欄、Use newlib-nano Float Formatting を Trueにします。
- 画面左 Workspace Explorerペインの System をダブルクリックしてシステム設定を表示します。 (表示されていない場合は、Project > Design Wide Resource 下にあるので、順に展開する)中央ペインのHeapSizeを0x400に書き換えます。
ビルドと実行
- メニューから、 Build > Clean and Build Design01 を選びます。
- Output欄へ、「--------------- Build Succeeded: ...」と表示されるのを確認します。
- デバイスをUSBポートへ接続します。
- メニューから Debug > Program を選択します。
- Output欄へ、「Device 'PSoC 5LP CY8C5888LT*-LP097' was successfully programmed at ...」と表示されるのを確認します。
- デバイス上でLED1(青色)が前回よりも早い間隔で点滅し、プッシュスイッチ SW1を押すと点いたまま消灯しなくなる動作を確認します。
タイマーの利用
今まではハードウェアタイマーを使わずプログラムを動かしていましたので、点滅周期など正確ではありませんでした。 この項ではハードウェアタイマーをmruby/cに使わせることで、正確さを向上させます。
回路の追加
- 画面左 Workspace Explorerペインから、TopDesign.cyschをダブルクリックして、回路図を画面に表示させます。
- 画面右 ComponentCatalog ペインから、System > Clock をドラッグし、中央のペインへドロップします。
- 配置された Clock_1をダブルクリックし、Configure Dialogを開きます。
- Frequency を、1kHzに変更します。
- 画面右 ComponentCatalog ペインから、System > Interrupt をドラッグし、中央のペインへドロップします。
- 配置された isr1と先ほどのClock1をWireToolを使って接続します。
main.c プログラムの変更
メインプログラムに、追加した回路のためのコードと、mruby/cへのインターフェースを追加します。
|
タイマー未使用宣言を撤回
前チャプターで、タイマー未使用を宣言しているので、それを撤回します。
- メニューから、Project > Build Settings を選び、Build Settingsダイアログを開きます。
- 左ペインの Design01 > ARM GCC... > Compiler > General をクリックし右ペインの Preprocessor Definitions欄を初期値へ戻します。
クリーンビルドと実行
前項で宣言を削除したので、クリーンコンパイルをします。
- メニューから、 Build > Clean and Build Design01 を選びます。
- Output欄へ、「--------------- Build Succeeded: ...」と表示されるのを確認します。
- デバイスをUSBポートへ接続します。
- メニューから Debug > Program を選択します。
- Output欄へ、「Device 'PSoC 5LP CY8C5888LT*-LP097' was successfully programmed at ...」と表示されるのを確認します。
- デバイス上でLED1(青色)が点滅し、プッシュスイッチ SW1を押すと点いたまま消灯しなくなる動作を確認します。