mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik mal wieder Sleep beim Atmega8


Autor: Adi A. (mateit)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo AVR-Begeisterte,

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

#include <stdlib.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>

ISR(INT0_vect) {
  sleep_disable();
}

int main(void)
{
  //interrupts deaktivieren
  cli();

  //DDRs setzen
  DDRB = 0x00; 
  DDRD = 0xFF; 

  //interrupts aktivieren
  sei();

     while(1)
  {

    // binaeres hochzaehlen
    PORTD++;
    _delay_ms(10);

    // wenn PB2 low, Sleep Modus aktivieren
    if( !(PINB & (1 << PB1)) )
    {
      set_sleep_mode(SLEEP_MODE_PWR_DOWN);
      sleep_mode();
    }
  }
}


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

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du willst laut Code den INT0-Interrupt zum Aufwecken nehmen. Der wird 
aber nirgendwo aktiviert, und auf PD6 liegt er auch nicht...

Autor: Adi A. (mateit)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RTFDS! Da gibts ne schöne Tabelle, wo die sie möglichen Aufweck-Signale 
für sämtliche Sleepzustände gelistet sind.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe Sleep Mode

Autor: Adi A. (mateit)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Siehe Sleep Mode

Ahhh vielen Dank! Das hat mir wirklich geholfen. Schade, dass man im 
Power Down Modus nur INT0 und INT1 zum Aufwachen nutzen kann, aber naja, 
muss ich wohl mit leben.

Danke an alle.


Gruß

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du könntest auch auf dem Mega48/88/168 wechseln. Die haben nen Interrupt 
an allen Pins.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Uwe ...

Auch wenn die an allen pins interrupts haben so sind im Power Down nur 
INT0 und INT1 aktiv!

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Paul (Gast)

>Auch wenn die an allen pins interrupts haben so sind im Power Down nur
>INT0 und INT1 aktiv!

Nöö, die Pin Change Interrupts sind auch im Power Down Mode verfügbar.

MfG
Falk

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.