Прерывания и sleep

Лёха
Offline
Зарегистрирован: 22.02.2016

Привет.

Прочитал про прерывания, пытался что-то сделать, но не выходит.

Arduino pro mini 3.3v

Скажем подключаю я по вот этой схеме (только 3.3в):

У меня срабатывает прерывание даже при прикосновении пальца ко второму выходу (вообще без кнопки).

Возможно ли сделать что бы прерывание срабатывало только тогда, когда на входе 3.3в ?

 

#include <avr/sleep.h>
#include <avr/power.h>


void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);   // initialize digital pin 13 as an output.
  sleepMode();
}


void loop() {
  Serial.println("Hello");
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(500);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOdW
  delay(500);              // wait for a second   
  sleepMode();
}

/* Засыпание ардуины */
void sleepMode() {
  attachInterrupt(0, wakeupMode, HIGH);
  set_sleep_mode (SLEEP_MODE_PWR_DOWN); 
  sleep_enable();
  sleep_cpu ();   

}

/* Просыпаемся */
void wakeupMode() {
  Serial.println("Wake"); 
  detachInterrupt(0);
  digitalWrite(13, HIGH);
}

 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

1. attachInterrupt(0, wakeupMode, HIGH); - не правильно. Нет такого режима (HIGH) для прерывания. Поставь RISING или FALLING. http://arduino.ru/Reference/AttachInterrupt

2. Попробуй уменьшить номинал стягивающего резистора R1, например 4,7К или чуть меньше (но не менее 1К).

Лёха
Offline
Зарегистрирован: 22.02.2016

Спасибо. Попробовал:

4.7к - ложные срабатывания как при 10k

2.2 k - чуть меньше

1 к - уже мало, но всеравно есть

а вот на 680 Омах ложных срабатываний нет.

Почему именно минимум 1к?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Лёха пишет:

Почему именно минимум 1к?

Да это я так, примерно (и по привычке для 5В). Можно и меньше в принципе, тем более 3,3В. Главное посчитать, чтобы ток слишком большой не протекал. Чем меньше сопротивление, тем больше ток через резистор.

При 3,3В и 680 Ом ток через резистор будет примерно 4,85мА (и то кратковременно при нажатой кнопке). Нормально.

Лёха
Offline
Зарегистрирован: 22.02.2016

Огромное спасибо :)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

А ещё лучше, имхо - пин к питанию подтянуть и инвертировать логику работы, чтобы при нажатии кнопки на пине был 0 ;) Тогда и помех не будет.