レジスタへのアクセスが基本! SHマイコンで遊ぼう:Windows Embedded CEでマイコンとシリアル通信(1)(3/3 ページ)
Windows Embedded CEで、マイコンとシリアル通信を行うまでを解説。まずは「マイコンに慣れる」ところからはじめよう
5.スイッチの状態に合わせてLEDを光らせてみよう!
ここまでの内容で、デジタルI/Oの出力は、自由に使えるようになったと思います。次は“入力”ですが、ここまで来ればもう手順の予想はつくでしょう。出力のときと同様に、マルチプレクスを“入出力”に設定し、I/Oレジスタを“入力”に設定し、データレジスタを読むだけです。先ほどのプログラムと違う点は、I/Oレジスタの設定を“入力”に設定している点だけです。
ベースボードに付いている「スイッチ」を読み取れるように設定しましょう。このスイッチは、ポートEの第2ビットに接続されています。よって、PEIORLの設定は先ほどのものと同じで、
PFC.PEIORL.WORD = 0x0003;
となります。
後は、スイッチの状態をデータレジスタから読み出して、条件分岐でLEDを光らせるだけです。ソースコードは次のようになります(ソースコード2)。
#include "iodefine.h" void main(void) { // ポートE・コントロールレジスタの設定(すべて入出力に設定) PFC.PECRL4.WORD = 0x0000; PFC.PECRL3.WORD = 0x0000; PFC.PECRL2.WORD = 0x0000; PFC.PECRL1.WORD = 0x0000; // ポートE・IOレジスタの設定(PE0とPE1を出力、ほかは入力に設定) PFC.PEIORL.WORD = 0x0003; while (1) { if (PE.DRL.BIT.B2 == 1) { PE.DRL.BIT.B0 = 0; PE.DRL.BIT.B1 = 1; } else { PE.DRL.BIT.B0 = 1; PE.DRL.BIT.B1 = 0; } } }
ビルドして、MOTファイルをSHに書き込んで実行してみましょう。スイッチをスライドさせた方向のLEDが点灯するようになったでしょうか。
6.LEDの明るさを変えてみよう!
LEDの明るさを変えるためには、LEDに掛ける電圧を変える方法が真っ先に浮かびます。しかし、これには「D/Aコンバータ」というアナログ電圧出力の機能が必要になります。今回使用するSH7125にはこの機能が付いていませんし、付いているマイコンもD/Aコンバータが使える端子が限られています。
そこで、「PWM(Pulse Width Modulation)」を使います。日本語では「パルス幅変調」といいます。PWMを用いれば、短い時間の間でLEDの点灯/消灯の割合を変えることで、明るさが変わっているように見せることができます。すなわち、「パルスの幅を変える=パルス幅変調」ということになります。もちろん、この周期を長くすると点滅して見えます。先ほどのLEDの点滅は、点灯/消灯のパルス幅を同じにして、周期を長くした「PWM制御」といえるでしょう。
今回は、レジスタの設定はそのままで構いません。ウエイトの時間を調節するだけですので、無限ループの中身だけを変えてみましょう。例えば、次のようなプログラムになります(ソースコード3)。
#include "iodefine.h" void msecwait(int msec) { int i, j; for (i = 0; i < msec; i++) for (j = 0; j < 6000; j++); } void main(void) { // ポートE・コントロールレジスタの設定(すべて入出力に設定) PFC.PECRL4.WORD = 0x0000; PFC.PECRL3.WORD = 0x0000; PFC.PECRL2.WORD = 0x0000; PFC.PECRL1.WORD = 0x0000; // ポートE・IOレジスタの設定(PE0とPE1を出力、ほかは入力に設定) PFC.PEIORL.WORD = 0x0003; while (1) { PE.DRL.BIT.B0 = 0; msecwait(8); PE.DRL.BIT.B0 = 1; msecwait(2); } }
ソースコード3 LEDを点滅させるプログラム(その2) |
LEDを消灯して8msec待ち、点灯させて2msec待つというプログラムです。少々分かりにくいですが、電源LEDと比べてみると明るさの違いが分かると思います(図6)。
いかがでしたか? マイコンはレジスタの機能や構成が分かれば、簡単に使えるということが理解できたかと思います。もちろん、マイコンには難しい概念もありますが、データシートと“にらめっこ”して、レジスタの扱い方さえ理解できれば何とかなります。今回紹介した機能はほんの一部ですが、マイコンには便利な機能がたくさんあります。ぜひご自身でもトライしてみてください!
次回はマイコンとPCでシリアル通信をするプログラム作ってみたいと思います。お楽しみに! (次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.