ATTiny: SLEEP_MODE_PWR_DOWN - wo geht es weiter?

Gast #2565893
Wenn ich einen ATtiny (hier Tiny25) in den Power-Down Mode schicke und 
ihn z.B. über den INT0 wieder aufwecke, dann geht es wohl direkt nach 
dem Sleep-Statement wieder weiter. Soweit OK.
Anfangs hatte ich vergessen, die ISR für INT0 zu installieren und dann 
wird wohl eine Reset durchführt, also wieder vorne angefangen.

Meine Frage: ist dies zufällig so und eigentlich ein Seiteneffekt oder 
kann/darf man das auch gezielt nutzen?
Gast
HildeK schrieb:
> hatte ich vergessen, die ISR für INT0 zu installieren und dann
> wird wohl eine Reset durchführt, also wieder vorne angefangen.

....überleg einfach mal wo er dann hinspringt ;-)

der "reset" kann je nach dem auch kein reset, sondern auch andere 
seltsame verhaltensweisen annehmen....
HildeK schrieb:
> Wenn ich einen ATtiny (hier Tiny25) in den Power-Down Mode schicke und
> ihn z.B. über den INT0 wieder aufwecke, dann geht es wohl direkt nach
> dem Sleep-Statement wieder weiter. Soweit OK.
> Anfangs hatte ich vergessen, die ISR für INT0 zu installieren und dann
> wird wohl eine Reset durchführt, also wieder vorne angefangen.
>
> Meine Frage: ist dies zufällig so und eigentlich ein Seiteneffekt oder
> kann/darf man das auch gezielt nutzen?

Wenn du einen Interrupt auslöst, dann springt der Controller zum 
entsprechenden Interruptvektor. Ob du eine ISR hast oder nicht. Ganz 
einfach.
Und jetzt schau mal wo der Interruptvektor liegt und dann überleg mal 
was passiert wenn du keine ISR hast.

Ein Reset an sich wird da nicht ausgelöst, lediglich die 
Programmausfürung beginnt wieder von vorne. Aber ein Reset setzt ja alle 
Register in einen bestimmten Zustand und das passiert hier NICHT.

gruß cyblord
Gast
Vielen Dank euch beiden.

cyblord ---- schrieb:
> Und jetzt schau mal wo der Interruptvektor liegt und dann überleg mal
> was passiert wenn du keine ISR hast.

Ja, habe ich getan und im Disassemblerlisting vom AVR-Studio gefunden:
- der INT0 hat die ADR 0x0001 (Datenblatt).
- dort steht (bei fehlender ISR) RJMP PC+0x14, also ein Sprung nach 
PC=0x0015
- da findet man RJMP PC-0x0015, also einen Sprung nach Adresse 0x0000. 
Das ist aber der Resetvektor.

Daraus schließe ich, dass dies, zumindest mit dem AVR GCC, funktioniert 
und der Tiny einen astreinen Reset ausführt.

cyblord ---- schrieb:
> Aber ein Reset setzt ja alle
> Register in einen bestimmten Zustand und das passiert hier NICHT.
Das wäre demnach aber nicht so.
Oder ich habe noch immer eine Verständnislücke.
Gast
Anon Ymous schrieb:
> springen nach 0x00 != Reset

Für ein paar Hinweise, in welche Richtung die Unterschiede gehen, wäre 
ich dir schon dankbar.
Worin liegen die Unterschiede, wenn ich den Reset-Pin bediene oder die 
SW auf den Resetvektor springt?
HildeK schrieb:
> Anon Ymous schrieb:
>> springen nach 0x00 != Reset
>
> Für ein paar Hinweise, in welche Richtung die Unterschiede gehen, wäre
> ich dir schon dankbar.
> Worin liegen die Unterschiede, wenn ich den Reset-Pin bediene oder die
> SW auf den Resetvektor springt?

Habe ich doch geschrieben. Ein RESET setzt alle Register im Controller 
auf einen definierten Wert. Ein Sprung nach 0x00 tut dies nicht. Was ist 
daran denn nicht verständlich?

> Daraus schließe ich, dass dies, zumindest mit dem AVR GCC, funktioniert
> und der Tiny einen astreinen Reset ausführt.
Diese Schlussfolgerung ist astrein falsch. Mir ist nicht klar wie man 
auf sowas kommt.

Wenn du im Programm nach 0x00 springen willst, dann nimm einfach goto.

gruß cyblord

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.