Hallo zusammen,
ich habe mein winziges Projekt mit einem ATmega328P aufgesetzt und will dieses nun auf einen ATtiny85 verwenden. Ich nahm an, dass es keine große Sache wird den Code entsprechend anzupassen (ist es vlt auch gar nicht). Aber ich habe meine Schwierigkeiten damit, die ISR richtig zum laufen zu bekommen.
Ich will den MC schlafen legen und durch einen Reed-Schalter bei LOW aufwecken (Pin7 = INT0)
Hier das Test-Beispiel:
#include <avr/sleep.h>
int pinLed = 0;
void setup(){
pinMode(pinLed,OUTPUT);
MCUCR &= ~(_BV(ISC01) | _BV(ISC00)); //INT0 on low level
GIMSK |= _BV(INT0); //enable INT0
}
void loop(){
digitalWrite(pinLed,HIGH);
delay(1000);
digitalWrite(pinLed,LOW);
system_sleep();
}
void system_sleep()
{
ADCSRA &= ~_BV(ADEN);// Switch Analog to Digital converter OFF
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Set sleep mode
sleep_mode(); // System sleeps here
ADCSRA |= _BV(ADEN); // Switch Analog to Digital converter ON
}
ISR(PCINT0_vect)
{
}
Meines Erachtens nach setze, ich durch “MCUCR &= ~(_BV(ISC01) | _BV(ISC00));” das MCU Control Register laut des Datenblatts richtig
ISC01 ISC00 Description
0 0 The low level of INT0 generates an interrupt request.
Aber der MC wird bei HIGH aufgeweckt.
Hab ich was vergessen oder mache etwas falsch?