Использование таймера AVR в ISR

Я пытаюсь создать ISR, который работает в течение 15 секунд, когда нажата конкретная кнопка. Я пытаюсь использовать функции AVR на моем Arduino Uno, чтобы начать подсчет, когда он входит в ISR, а затем выйти из цикла, когда он достигнет 15 секунд.

Мне трудно понять, где на самом деле хранится счетчик, который я хочу использовать для моего цикла while.

Вот мой код:

#define button_pin 2
#define duration 15
#define osc_in 0

#include 
#include 

const float convert = 5.0/1023.0;

void setup() {

  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
  attachInterrupt(digitalPinToInterrupt(button_pin), button_interrupt, CHANGE);

  sei();

  pinMode(button_pin, INPUT);
  Serial.begin(9600);
}

void loop() {
    //int channel1 = analogRead(osc_in);

//while (millis() < 10000)
  //Serial.println(millis());
  //Serial.println(channel1 * convert);
  //channel2 = channel1;
}

void button_interrupt(){
  //(# timer counts + 1) = (target time)/(timer resolution)
  //int timer_counts = duration/(pow(6.4, -5));
  //int dur = 234374;
  OCR1A = 234374;
  TCCR1B |= (1 << CS10);

  while (????????){
    int channel1 = analogRead(osc_in);
    Serial.println(channel1 * convert);
  }
}
1
Выполнение серийного номера в ISR, как правило, является плохой идеей. Возможно, подумайте о том, чтобы делать свою выборку непрерывно, и используя ISR для установки флага и запуска таймера с 1 выстрелом. Код цикла может проверять флаг и выполнять последовательную отчетность 9600 бод по мере необходимости.
добавлено автор Dave X, источник

1 ответы

Не делайте задержек внутри ISR. Не выполняйте серийные отпечатки внутри ISR. Прочитайте это .

Вам нужно перепроектировать. ISR может установить флаг, который затем тестируется в цикле . Задержка в loop .

1
добавлено
Анархическая электроника
Анархическая электроника
1 510 участник(ов)

[около] электронные темы. без переходов на личности, стен стикеров, политики, непрошенной рекламы и всякого такого Основной чат у нас в @ru_electronics Общий информационный канал @ru_electronics_feed

Про электронику
Про электронику
1 461 участник(ов)

QA чат для решения вопросов, связанных с электроникой. без стикеров, непрошенной рекламы и игр в русский форум оформляйте вопрос в одно сообщение вопросы со словом «кто» игнорируются don't ask for ask Правила http://telegra.ph/ru-electronics-rulz-11-11

Embedded Group
Embedded Group
873 участник(ов)

Все про Embedded и электронику. Осторожно, бывают нотификейшены. #вопросподелу - Для поиска вопросов и ответов #devtools - фотки рабочих железок Работа: @rabotaembedded http://embedded.group http://vk.com/embedded_space

Hardware & Radio
Hardware & Radio
155 участник(ов)

Разговоры об электронике, микроконтроллерах, низкоуровневом программировании, реверс-инжиниринге, FPGA, квадрокоптерах, 3D-печати, Software Defined Radio, любительском радио, и всяком таком.

ARDUINO [RU]
ARDUINO [RU]
60 участник(ов)

Обсуждение Электронного конструктора Arduino. Проблемы и их решения. Ссылки на интересные статьи и проекты. ВК: https://vk.com/arduino_esp Realtek: http://vk.com/rtl8711 Чаты: IOT https://t.me/ProIOT esp8266 https://t.me/Proesp8266