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?
@B7th, 👍0
Обсуждение1 ответ
Лучший ответ:
После просмотра большого количества документации мне показалось лучшим и более эффективным прикрепить прерывание без функций.
EIMSK |= (1<< INT0);//Присоединяет прерывание
MCUCR |= (1<< SM1) //Режим отключения питания
| (1<<ISC01) //Восходящий край INT0
| (1<<ISC00);// генерирует запрос на прерывание
Я думаю, это здорово, что вы вернулись и сами ответили на свой вопрос. Но этот ответ кажется странно несоответствующим вопросу "Действует ли INT0 на ATtiny иначе, чем на Arduino, и если да, то как я могу разбудить свой ATtiny?", @timemage
- Добавление прерывания в ATtiny45 с помощью Arduino
- Как указать имя таймера в зависимости от чипа, в который он будет компилироваться?
- PCINT0, PCINT1, PCINT2 и т. д. на ATtiny45/85
- Как назначить прерывание на нажатие кнопки с помощью ATtiny? (прерывание не срабатывает с моим кодом)
- Прерывание переполнения таймера AVR не работает
- ATtiny85 AC Phase Control для регулировки яркости лампочки
- Чтение квадратурного энкодера в реальном времени с полным разрешением только с одним прерыванием на ATmega328
- Недопустимое использование выражения void (как использовать указатель функции с вводом)
attachInterrupt(digitalPinToInterrupt(pin), ...
, @JurajЗначение INT0 равно 0 для Atmega328 и 6 для Attiny45... Он работал просто случайно на другом Arduino. Он даже не должен использоваться с attachInterrupt (он используется attachInterrupt для правильной настройки регистров)., @KIIV
Аааа, так вот почему это не рекомендуется. Я попробую и вернусь с исправлениями! Спасибо вам обоим!, @B7th
@Juraj, По какой-то причине моя версия Arduino IDE не распознает digitalPinToInterrupt? Выглядит как обычная вещь, так что посмотрим, как еще я могу это сделать. В настоящее время занимается дайвингом в ГИМСКЕ и др.: S, @B7th
вполне возможно, что ядро Arduino в этом пакете поддержки плат не имеет такой функции, @Juraj