Sleep beim Attiny2313 und erwacht nimmer mehr

Gast #1939311
Lesenswert?

Hallo,

vielen Dank an alle die immer gern mit Rat und Tat versuchen zu helfen.

Im Anhang ist mein Code mit dem ich mich momentan schon sehr viel 
abgemüht habe. Habe viele Beiträge zum Sleepmode gelesen aber nichts hat 
mich bisher entscheidend weitergebracht.

Solange der Sleep-Befehl deaktiviert war wurde INT0 oder INT1 ausgelöst 
und er ging zurück in die Endlosschleife. Im nächsten Schritt wollte ich 
durch den Sleep (PowerDown) testen wie sich die Stromaufnahme verändert 
bzw. ob dies so funktioniert. Leider erwacht der Attiny daraus nicht 
mehr.

In den ganzen Beiträgen gesucht ob bzw. wie der generelle Ablauf beim 
Sleepmodus sein soll. Die Lösung war leider nicht dabei.

Also wende ich mich verzweifelt an euch, es lässt mir keine Ruhe wo mein 
Denkfehler ist.

Vielen Dank für eure Hilfe!!!

Gruß
RFG
Angehängte Dateien:
Gast #1939332
Lesenswert?

Hallo

Bin jetzt nicht so der ASM Freund, aber ich denke, das du aus dem 
Powerdown nur mit einem Low Level Int kommst.

Du mußt also bevor du in den Sleep gehst, den Int neu konfigurieren auf 
Low Level.

Und beim aufwachen wieder ändern, auf deine Flanke.

MFG
Dieter
Persönliche Seite #1939334
Lesenswert?

> durch den Sleep (PowerDown) testen
>   ldi   temp, 0b01111010      ;(1<<ISC01) | (1<<ISC11) | (1<<ISC00) | (1<<ISC10) 
| (1 << SE) | (1 << SM0)| (1 << SM1); INT0 und INT1 auf fallende Flanke 
konfigurieren; sleep aktivieren

Das ergibt kein PowerDown Sleepmode sondern Standby.

INT0 weckt nur mit Level Interrupt auf. Das ist aber nicht eingestellt, 
sondern Flanke.

Am INT0 Pin sollte dann ein Pullup aktiviert sein, um den Ruhezustand zu 
garantieren. Habe ich in den Bitmustern nicht kontrolliert.

BTW. Warum schreibst du Bitmuster im Code und symbolische Namen in den 
Kommentaren? Das ist doch pervers :-)
Gast #1939380
Lesenswert?

Ich kann es kauum glauben das ich das übersehen habe. Vielen Dank! Es 
hat soweit funktioniert.

Letzte Frage: Warum springt er nicht in meine Interruptroutine sondern 
bleibt in der Endlosschleife? Da bin ich wohl noch nicht tief genug 
drin.

Gruß
RFG
Gast #1939409
Lesenswert?

In der Schleife "Loop" in der der sleep-Befehl ist.

Im Debugger springt er in die Interuptroutine und dann die Schleife 
bearbeitet, auf dem Steckbrett wird nur die Schleife ausgeführt und 
wieder in den sleepmoduus zurück. Hängt das auch an den Flags?
Gast #1939466
Lesenswert?

Nein, das klappt nicht so wie ich mir das vorstelle. Ich kappier einfach 
nicht warum der sleepmodus verlassen wird durch auslösen des externen 
Interrupts, daann aber nicht meine Interruptroutine gestartet wird. Wie 
kann ich so unterscheiden welcher Interrupt ausgelöst wurde?
Persönliche Seite #1939532
Lesenswert?

Der Sleepmodus wird verlassen (nach dem sleep gehts weiter...), wenn 
eine der ISRs abgearbeitet wurde.

[Zitat]
If an enabled interrupt occurs while the MCU is in a sleep mode, the MCU 
wakes up. The MCU is then halted for four cycles in addition to the 
start-up time, it executes the interrupt routine, and resumes execution 
from the instruction following SLEEP.
[/Zitat]

Die ISR werden ab dann nicht mehr ausgeführt, weil die ISRs Interrupts 
global sperren (cli) und die Sperre vor dem nächsten sleep nicht 
mehr aufgehoben wird.

Hast du die anderen Probleme schon behoben? Ich würde mich mal auf nur 
einen IRQ z.B. INT0 konzentrieren.

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