mal wieder Sleep beim Atmega8

OP #1532182
Lesenswert?

Hallo AVR-Begeisterte,

ich bin Anfänger und wollte mich heute den Interrupts und dem Sleep 
Modus zuwenden.
Das ist mein Code:
1
#define F_CPU 8000000L
2

3
#include <stdlib.h>
4
#include <avr/io.h>
5
#include <util/delay.h>
6
#include <avr/interrupt.h>
7
#include <avr/sleep.h>
8

9
ISR(INT0_vect) {
10
  sleep_disable();
11
}
12

13
int main(void)
14
{
15
  //interrupts deaktivieren
16
  cli();
17

18
  //DDRs setzen
19
  DDRB = 0x00; 
20
  DDRD = 0xFF; 
21

22
  //interrupts aktivieren
23
  sei();
24

25
     while(1)
26
  {
27

28
    // binaeres hochzaehlen
29
    PORTD++;
30
    _delay_ms(10);
31

32
    // wenn PB2 low, Sleep Modus aktivieren
33
    if( !(PINB & (1 << PB1)) )
34
    {
35
      set_sleep_mode(SLEEP_MODE_PWR_DOWN);
36
      sleep_mode();
37
    }
38
  }
39
}

Im Normalfall blinken die LEDs am Port D. Sobald ich den Taster an PB1 
drücke, stoppt das Blinken und die CPU fährt in den Power Down Modus.

Solbald ein H-Signal an PD6 (AIN0; Pin 12) anliegt, möchte ich, dass die 
CPU wieder hochfährt und das Blinken an alter Stelle fortsetzt. Und 
genau an dieser Stelle hänge ich fest, die CPU möchte einfach nicht 
weiter zählen.
Weiß jemand Rat? Was mache ich falsch?

(Ich weiß allerdings nicht, ob es auch möglich ist einen x-beliebigen 
Taster als Interrupt zu verwenden (?).)


Vielen Dank schon im Voraus.
Schönen (restlichen) Feiertag noch.


Grüße

mateit
OP #1532193
Lesenswert?

Hallo,

vielen Dank für die wirklich sehr schnelle Antwort.
Gut, dass du es sagst. Ich hatte den AIN0 im Sinn.
Ich müsste also PD2 als Eingang deklarieren, dort ist bloß blöderweise 
eine meiner LEDs angeschlossen.

Aber das ist alles eh nur eine Notlösung. Denn eigentlich möchte ich PB2 
(einen beliebigen Taster) als Interrupt verwenden - ist das möglich?


Gruß

mateit

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren