スイッチ入力 について

 

先のP2.DR.BIT.B0にスイッチをつないでその変化をマイコンでみてみましょう。回路は簡単。

単にポートに2Pスイッチをつないでその反対側をグランドに結線するだけです。

プログラムに入る前にプルアップ(pull up)について説明します。

こんな回路があったとします。先の回路にプルアップ用の抵抗10KΩがついてます。

・スイッチがoffの場合

P2-0に入る電圧は5Vです。ポートに入る電流は少しなので電圧降下もあまりおこらず5Vになります。

・スイッチがonの場合

Vccは5Vなので10kΩの抵抗を通る電流は0.5mAとなります。0.5mA×5Vで2.5mWなので1/4Wのカーボン皮膜抵抗でも大丈夫です。ポートにかかる電圧は0Vとなります。

これがプルアップ、さっきのスイッチのみだとGNDか不安定かという状態をとるのに対してこちらはつねに5Vか0Vです。(#押されたら0で押してなければ1なのです)ではナゼ先の回路で大丈夫かというと、H8の内部でプルアップをしてくれるからです。といっても勝手にしてくれるわけではなく設定します。そこでプログラム

#include <3048f.h> /*I/O用インクルード キットについてくるH8/3048専用のヘッダファイルです。*/

void main(void)
{
init_mother_system();

PA.DDR = 0xff;
PB.DDR = 0xff;
P1.DDR = 0xff;
P2.DDR = 0x00; /*入力に設定*/

P2.PCR.BYTE = 0xff; /*プルアップレジスタ設定*/

P3.DDR = 0xff;
P4.DDR = 0xff;
P5.DDR = 0xff;
P6.DDR = 0xff;
P8.DDR = 0xff;

while(1)
{

if(P2.DR.BIT.B0 == 0)
P1.DR.BIT.B0 = 1;
if(P2.DR.BIT.B0 == 1)
P1.DR.BIT.B0 = 0;

}
}

ソースコードはこちら

 

 

ここのP2.PCR.BYTE = 0xffというところでポート2の全てのポートをプルアップしますと設定しています。プルアップできるポートは限られているのでポート別機能一覧をみてください。PCR = プルアップ コントロール レジスタ

このプログラムですと、スイッチが入った時にLEDがついて、offの時は消灯します。


同じようにしてプッシュスイッチをつかうことができますが、その場合はチャタリングと呼ばれる機械的な不安定な状態があるのでコンデンサをはさんで低減します。

こんなかんじでスイッチがつかえます。

なんらかの指示を与えるのに必要なので活用しましょう。またスイッチは押した感じによってタクトスイッチでは気に入らなかったりと結構趣味な部分です。w


Return