Не работает прерывание на atmega8

romiras
Offline
Зарегистрирован: 12.07.2015

После входа в режим сна 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();
}

 

romiras
Offline
Зарегистрирован: 12.07.2015

И так пробовал:

#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();
}

Атмеги с одинаковыми частотами зашивал. Но восьмая - не реагирует все равно. Объясните, пожалуйста, куда копать!

romiras
Offline
Зарегистрирован: 12.07.2015

Немного разобрался: прерывание на атмега8 работает без режима сна, проблема в том, что засыпает камень беспробудным сном. Поигрался с фьюзами - эффект тот же.

romiras
Offline
Зарегистрирован: 12.07.2015

Заработало по низкому уровню на входе. Жаль, что только так. Всем спасибо.