プルアップの回路
imageプラグインエラー : 画像を取得できませんでした。しばらく時間を置いてから再度お試しください。
スイッチがOFFの時はAの電圧がHIGHになる。
スイッチがONの時はAの電圧がLOWになる。
プルダウンの回路
imageプラグインエラー : 画像を取得できませんでした。しばらく時間を置いてから再度お試しください。
スイッチがOFFの時はAの電圧がLOWになる。
スイッチがONの時はAの電圧がHIGHになる。
消費電力
通常状態でスイッチがOFFの場合はプルダウンの回路の方が消費電力が少ない。
通常状態でスイッチがONの場合はプルアップの回路の方が消費電力が少ない。
まあ気にすることはないと思うけど。
AVR内蔵のプルアップ抵抗を使える?
digitalWrite(pin, HIGH);
でプルアップされるようです。
imageプラグインエラー : 画像を取得できませんでした。しばらく時間を置いてから再度お試しください。
抵抗1つ省略できるので便利。
抵抗値は?
プルアップの場合
mega168のデータシートによるとAVR内蔵のプルアップ抵抗は20K-50Kだそうだ。
- 電圧を測定する部分の抵抗値(=A)より十分小さい
- スイッチがONになってGNDに接続されても電流が多すぎない
という抵抗値である必要があるわけだから100Kではたぶん大きすぎ、1Kでは5Vで5mA。
1Kから20Kぐらいの間で適当に選べばよさそうかな。
プルダウンの場合
- スイッチがONになってGNDに接続されても電流が多すぎない
- 十分しっかりGNDに引っ張れる値
と考えると、何オーム?
内蔵プルアップでのスケッチ
int ledPin = 13;
int inputPin = 2;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
digitalWrite(inputPin, HIGH); // pull-up
}
void loop(){
int in = digitalRead(inputPin);
if(in==HIGH){
digitalWrite(ledPin, LOW); //LED OFF
}
else{
digitalWrite(ledPin, HIGH); //LED ON
}
}
チャタリング防止
#include <Debounce.h> // http://www.arduino.cc/playground/Code/Debounce
int SW_YELLOW = 3;
int SW_GREEN = 2;
Debounce sw_yellow = Debounce(20, SW_YELLOW);
Debounce sw_green = Debounce(20, SW_GREEN);
void setup() {
Serial.begin(9600);
pinMode(SW_YELLOW, INPUT);
pinMode(SW_GREEN, INPUT);
digitalWrite(SW_YELLOW, HIGH); // pull-up
digitalWrite(SW_GREEN, HIGH); // pull-up
}
void loop(){
if(sw_yellow.update() && sw_yellow.read()==LOW) {
yellow_count++;
Serial.print("yellow_count=");
Serial.println(yellow_count);
}
if(sw_green.update() && sw_green.read()==LOW) { // digitalRead(SW_GREEN)==LOW
green_count++;
Serial.print("green_count=");
Serial.println(green_count);
}
}
最終更新:2011年05月15日 15:59