Не работает прерывание на atmega8
- Войдите на сайт для отправки комментариев
Пнд, 05/12/2016 - 09:05
После входа в режим сна Atmega8 не реагирует на прерывание. Зашиваю этот же код в 328 атмегу - работает без проблем, будится на "ура". Подскажите, что нет так?
#include <avr/sleep.h>
#include <avr/power.h>
#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
volatile boolean
flag = false,
flagdone = false;
void waking(void) {
flag = true;
}
void sleeping(void) {
flag = false;
flagdone = false;
digitalWrite(6, LOW);
delay(100);
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_mode();
sleep_disable();
}
void setup() {
pinMode(6, OUTPUT);
digitalWrite(6, HIGH);
delay(5000);
digitalWrite(6, LOW);
attachInterrupt(0, waking, HIGH); //2pin
sleeping();
}
void loop() {
digitalWrite(6, HIGH);
delay(5000);
sleeping();
}
И так пробовал:
#include <avr/sleep.h> int wakePin = 2; // pin used for waking up int sleepStatus = 0; // variable to store a request for sleep int count = 0; // counter void wakeUpNow() // here the interrupt is handled after wakeup { } void setup () { pinMode (13, OUTPUT); pinMode(wakePin, INPUT); Serial.begin(9600); attachInterrupt(0, wakeUpNow, HIGH); } void sleepNow() { digitalWrite (13, LOW); set_sleep_mode(SLEEP_MODE_PWR_DOWN); e sleep_enable(); attachInterrupt(0, wakeUpNow, HIGH); sleep_mode(); sleep_disable(); detachInterrupt(0); } void loop () { digitalWrite (13, HIGH); delay(5000); sleepNow(); }Атмеги с одинаковыми частотами зашивал. Но восьмая - не реагирует все равно. Объясните, пожалуйста, куда копать!
Немного разобрался: прерывание на атмега8 работает без режима сна, проблема в том, что засыпает камень беспробудным сном. Поигрался с фьюзами - эффект тот же.
Заработало по низкому уровню на входе. Жаль, что только так. Всем спасибо.