Arduino для ATtiny изменения поведения pin-прерывания?

У меня есть проект, который, чтобы сэкономить на батарее, переводится в спящий режим до тех пор, пока вывод прерывания не поднимется с НИЗКОГО уровня на ВЫСОКИЙ.

Это хорошо работает на Arduino Nano, однако перевод не работает на ATtiny.

#include <avr/sleep.h>
void setup(){
    pinMode(2,INPUT);
    noInterrupts();
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
    attachInterrupt(INT0,wakeUp,RISING);
    //Yadada
    Interrupts();
}
void wakeUp(){
   //Что-то Что-то
   sleep_mode();
}

Как на Arduino Nano, так и на ATtiny вывод прерывания 0 эквивалентен выводу 2.

  • Arduino настроен на ISP
  • Я запустил загрузчик (с внутренними часами 8 МГц, если это имеет значение).
  • Программа загружается на ATtiny45.

Тем не менее, выход прерывания не прерывается.

Действует ли INT0 на ATtiny по-другому, чем на Arduino, и если да, то как я могу разбудить свой ATtiny?

, 👍0

Обсуждение

attachInterrupt(digitalPinToInterrupt(pin), ..., @Juraj

Значение INT0 равно 0 для Atmega328 и 6 для Attiny45... Он работал просто случайно на другом Arduino. Он даже не должен использоваться с attachInterrupt (он используется attachInterrupt для правильной настройки регистров)., @KIIV

Аааа, так вот почему это не рекомендуется. Я попробую и вернусь с исправлениями! Спасибо вам обоим!, @B7th

@Juraj, По какой-то причине моя версия Arduino IDE не распознает digitalPinToInterrupt? Выглядит как обычная вещь, так что посмотрим, как еще я могу это сделать. В настоящее время занимается дайвингом в ГИМСКЕ и др.: S, @B7th

вполне возможно, что ядро Arduino в этом пакете поддержки плат не имеет такой функции, @Juraj


1 ответ


Лучший ответ:

0

После просмотра большого количества документации мне показалось лучшим и более эффективным прикрепить прерывание без функций.

EIMSK  |=  (1<< INT0);//Присоединяет прерывание
MCUCR  |=  (1<< SM1)  //Режим отключения питания
         | (1<<ISC01) //Восходящий край INT0
         | (1<<ISC00);// генерирует запрос на прерывание
,

Я думаю, это здорово, что вы вернулись и сами ответили на свой вопрос. Но этот ответ кажется странно несоответствующим вопросу "Действует ли INT0 на ATtiny иначе, чем на Arduino, и если да, то как я могу разбудить свой ATtiny?", @timemage