Translate

2009年12月13日日曜日

スイッチ(6)

[ 実験MikroC Pro PIC16F84A_SW_LED_0025]


[(4)active high のスイッチに、active lowのLED]


RA2のスイッチ(SW2)を押した時、RB4のLED2を点灯させなさい。











(1) active low のスイッチに、active highでソース電流をはき出して点灯させるLED。
(2) active low のスイッチに、active lowでシンク電流を吸い込んで点灯させるLED。
(3) active high のスイッチに、active highでソース電流をはき出して点灯させるLED。
(4) active high のスイッチに、active lowでシンク電流を吸い込んで点灯させるLED。


1つのタクトスイッチ(入力)で1つのLEDを点灯(出力)させる4つの組み合わせの最終回です。
間違えやすく紛らわしいですが、スイッチの基本です。




































mikroC PRO for PIC

2009年12月10日木曜日

スイッチ(5) while文でスイッチ入力

[ 実験MikroC Pro PIC16F84A_SW_LED_0018]

[(3)active high のスイッチに、active highのLED]



RA2のスイッチ(SW2)を押した時、RB3のLED1を点灯させなさい。













今回は、
if(条件式) A else Bの代わりに
while(条件式) A
while(条件式) B
を使ってプログラミングしてみました。


あまり、見たこと無いですが、同様のプログラミングが出来ます。




















やはり
if(条件式) A else B
が、一般的です。














mikroC PRO for PIC

2009年12月9日水曜日

ブレッドボードの配線ケーブル

皆さんは、ブレッドボードの配線ケーブルは何を使っていますか?

ぼくは、LAN(Ethernet)ケーブルを利用しています。












プレッドボード風の実験ボードです。
LEDやスイッチや抵抗を付けたり外したり面倒なので愛用しています。
LAN(Ethernet)ケーブルを利用しています。
本当は、もう少し太い方が、良いのですが。


主な仕様


タクトスイッチ        8個
赤LED           16個
緑LED(電源確認用)   1個
抵抗(スイッチ、LED)  25個
セラロック20MHz     1個
セラロック10MHz     1個
28ピン用ソケット      2個







PICkit2でPICに書き込みも利用しています。













2009年12月8日火曜日

スイッチ(4) RA1_bit

[ 実験MikroC Pro PIC16F84A_SW_LED_0014]

[(2)active low のスイッチに、active lowのLED]


RA1のスイッチ(SW1)を押した時、RB4LED2を点灯させなさい。









今回はactive low のスイッチに、active lowのLEDの実験です。

RB4のLED2は、active lowの時、点灯し、active highの時、消灯します。
PORTB = 0x10; // RB4=1(High)にしてLED2を消灯
をプログラムします。
この時、
PORTB = 0xFF;
にすると、RB3のLED1が点灯してしまいます。



MikroC PROでは、RA(0-7)_bit の書式もあります。
PORTA.F1
と同様にポートAの1ビットにアクセス出来ます。





















mikroC PRO for PIC

2009年12月6日日曜日

スイッチ(3) Button関数

[ 実験 MikroC Pro PIC16F84A_SW_LED_0011]

[(1)active low のスイッチに、active highのLED(3)]


前回の続きです。

mikroCには、入力スイッチ専用のButton関数があります。











unsigned short Button(unsigned short *port, unsigned short pin, unsigned short time, unsigned short active_state);

Button(&PORTA,1,1,0)
Button(&PORT(A or B),(ピン番号),(デバウンスの時間),(active highactive low (1 or 0)))
active low の例です。




active high の例です。






もう1つ実験してみます。



mikroCのHelpには

parameter time is a debounce period in milliseconds
と記載されています。
デバウンスの時間(ミリ秒)
チャタリングですね。
試しに、1000を入れて実験してみます。
if(Button(&PORTA,1,1000,0)){ // Active lowの時




スイッチを押してから1秒くらい後にLEDが点灯しています。


mikroC PRO for PIC
 



2009年12月5日土曜日

スイッチ(2)

[ 実験 MikroC Pro PIC16F84A_SW_LED_0005]

[(1)active low のスイッチに、active highのLED(2)]


前回の続きです。
スイッチには、いろいろな記述があります。
これが全てではありません。

ぜひPIC16F84Aに書き込みをして確認して下さい。
また、何故こうなるのか理由も考えて下さい。

























if(条件式)
if((~PORTA.F1 & 0x1F) != 2){ // SW1オンの時(Active low)
PORTB.F3 = 1; // RB3のLED1を点灯
} else {
PORTB.F3 = 0; // RB3のLED1を消灯
}
他にも、いろいろあると思います。
スイッチに関するコメントお願い致します。
mikroC PRO for PIC
 

2009年12月2日水曜日

スイッチ(1) if文でスイッチ入力

[ 実験 MikroC Pro PIC16F84A_SW_LED_0001]
[(1)active low のスイッチに、active highのLED(1)]


RA1のスイッチ(SW1)を押した時、RB3のLED1を点灯させなさい。















すべてのピンは入出力設定ビット (TRIS レジスタ) を備えています。
TRISA ビットがセット(=1) されると、そのビットに対応する PORTA ピンが入力となり、出力ドライバがハイインピーダンスモードになります。
TRISA ビットをクリア(=0) されると、そのビットに対応する PORTA ピンが出力となり、出力ラッチの内容がピンに出力されます。
--- Data Sheet より ---



つまり、プログラミングする時、TRISレジスタを”1”または”0”にすることでI/Oポートを入力(Input)にするか出力(Output)にするかが決まります。

スイッチは、入力(Input)なのでTRISレジスタを”1”にします。
LEDは、出力(Output)なのでTRISレジスタを”0”にします。




TRISA = 0x06; // RA1,RA2=input 他=output
TRISB = 0x00; // RB0-7=output








if(PORTA.F1 == 0)もし、RA1が0(Low:0V)の時、
Active Lowなのでスイッチを押している時

PORTB.F3 = 1;RB3が1(High:5V)の時、LED1はGND(0V)に繋がっていますので
電流が流れてLED1は点灯します。

elseそれ以外の時は

PORTB.F3 = 0;RB3が0(Low:0V)の時、LED1はGND(0V)に繋がっていますので
電流は流れませんからLED1は点灯しません。







if(PORTA.F1 == 1)もし、RA1が1(High:5V)の時、
Active Lowなのでスイッチを押していない時







if(PORTA.F1 != 1)
もし、RA1が1(High:5V)でない時
RA1が0(Low:0V)の時








if(PORTA.F1 != 0)
もし、RA1が0(Low:0V)でない時
RA1が1(High:5V)の時


スイッチは、基本的に
if(条件式)~else~
を使います。


他にもありますが、次回にします。



LEDのアノード(+)側に抵抗を半田付けしています。





スイッチを押しています。


オレンジ色のコードが5V
緑色のコードが、GNDで0V
4番ピン(MCLR)を5Vに繋がないと誤動作します。
(PIC16F88,PIC16F628Aに慣れるとよく忘れてしまいます。)



mikroC PRO for PIC