пятница, 15 марта 2013 г.

INPUT_PULLUP



Наткнулся тут на механизм неявного управления подтягивающими резисторами. Нужно указать в функции pinMode режим INPUT_PULLUP. 

Подтягивающий резистор — резистор, включенный между проводником, по которому распространяется электрический сигнал, и питанием, либо между проводником и землей.
Подтягивающий резистор нужен, чтобы гарантировать на логическом входе, с которым соединен проводник, высокий (в первом случае) либо низкий (во втором случае) уровень в случаях:
  • проводник не соединен с логическим выходом
  • присоединённый логический выход находится в высокоимпедансном состоянии.
  • когда разомкнут ключевой элемент на присоединённом логическом выходе, который устроен, как открытый вывод ключевого элемента. Ключевым элементом может быть полевой или биполярный транзистор, а открытым выводом — коллектор, эммитер, сток или исток.

Подтягивающий резистор образует цепь, обеспечивающую подтяжку сигнала к питанию либо к земле. В первом случае подтяжка называется подтяжкой к питанию, во втором — подтяжкой к земле.
(C) Wiki

На arduino.ru на текущий момент информации об этом режиме нет, зато есть на оф сайте arduino.cc

Pins Configured as INPUT_PULLUP

The Atmega chip on the Arduino has internal pull-up resistors (resistors that connect to power internally) that you can access. If you prefer to use these instead of external pull-down resistors, you can use the INPUT_PULLUP argument in pinMode(). This effectively inverts the behavior, where HIGH means the sensor is off, and LOW means the sensor is on. See the Input Pullup Serial tutorial for an example of this in use.
Подтягивающие (нагрузочные) резисторы
Если на порт ввода не поступает сигнал, то в данном случае рекомендуется задать порту известное состояние. Это делается добавлением подтягивающих резисторов 10 кОм, подключающих вход либо к +5 В (подтягивающие к питанию резисторы), либо к земле (подтягивающие к земле резисторы).
Микроконтроллер Atmega имеет программируемые встроенные подтягивающие к питанию резисторы 20 кОм. 
Пример кода(При нажатии кнопки включаем встроенный светодиод на выводе 13):


int btnPin = 7;
int ledPin = 13;
boolean signal = false;

void setup()
{
  pinMode(btnPin, INPUT_PULLUP);
}

void loop()
{
  signal = digitalRead(btnPin);
  signal = !signal;
  delay(31);
  digitalWrite(ledPin, signal);
}

3 комментария: