Forum: Mikrocontroller und Digitale Elektronik Tiny85 und Aufwachen aus PowerDown


von HildeK (Gast)


Angehängte Dateien:

Lesenswert?

Um meine noch sehr dürftigen Kenntnisse in µCs und deren Programmierung 
zu erweitern, übe ich gerade an einem Langzeit-Monoflop (man könnte auch 
Treppenlichtautomat sagen). Der Übungskandidat ist ein ATTiny85.
An PB0 ist ein Taster nach GND angeschlossen, PB2 bedient eine LED. 
Drücken der Taste schaltet die LED an, nach Ablauf des Timers wird sie 
wieder ausgeschaltet. Soweit, so gut.

In dem Zusammenhang wollte ich dann den Tiny85 auch in den Powerdown 
Mode schicken. Das tut er zwar, aber ich bekomme ihn anschließend nicht 
wieder wach - bzw. nur mit Reset.

Laut Datenblatt ist der PB0 auch der PCINT0 und als Levelinterrupt 
nutzbar. Nach erneutem Bedienen der Taste an PB0 soll ein LOW-Pegel an 
PB0 über den externen Interrupt INT0 den Tiny wieder aufwecken und das 
Monoflop neu starten.
Was habe ich da noch nicht beachtet oder falsch verstanden?
Eigentlich hätte ich erwartet, dass die Befehle
1
 set_sleep_mode(SLEEP_MODE_PWR_DOWN);  // 
2
 sleep_mode();              // wacht nicht mehr auf :-(
und die Installation der ISR (INT0_vect) ausreichen müssten.
Auch die Bedienung von MCUCR und GIMSK brachte keine Änderung.

Im Anhang das komplette Progrämmchen.

von Verwirrter Anfänger (Gast)


Lesenswert?

Kann es sein, dass du INT0 und PCINT0 verwechselst?
PB0 ist PCINT0 (pin change interrupt) während PB2 der INT0 interrupt 
ist.
Nur INT0 kann aus den tiefsten Schlafmodi aufwecken.

von HildeK (Gast)


Lesenswert?

Verwirrter Anfänger schrieb:
> Kann es sein, dass du INT0 und PCINT0 verwechselst?
Hmm, sieht ganz so aus.

> PB0 ist PCINT0 (pin change interrupt) während PB2 der INT0 interrupt
> ist.
Danke, ja, ich habe übersehen, dass an PB2 zusätzlich noch INT0 
dransteht.
Jetzt sehe ich es auch :-)!

> Nur INT0 kann aus den tiefsten Schlafmodi aufwecken.
Das war schon klar, ich hab aber den Pin, an dem INT0 dransteht, nicht 
gefunden - und das bei nur 8 Pins. Schäm!

Herzlichen Dank für deinen Tipp.

von HildeK (Gast)


Lesenswert?

HildeK schrieb:
> Herzlichen Dank für deinen Tipp.

Tja, gerade getestet: das war es!

von Herr M. (herrmueller)


Lesenswert?

Du könntest auch mit einem PinChange IR.  an PB0 aufwachen, Du hast aber 
INT0 programmiert.
Mit INT0 must Du aber den Taster an PB2 gegen GND anschliessen.
Wakeup geht nur mit Low Level Pegel an INT0, d.h. ISC0 und ISC1 in MCUCR 
müssen 0 sein.

gruss herrmueller

von HildeK (Gast)


Lesenswert?

@herrmueller
Danke.
Das hatte ich auch schon so verstanden und es war meine Absicht, mit dem 
Level-Interrupt zu arbeiten. Nur hatte ich nach Entdecken des PCINT0 
fälschlicherweise angenommen (und nicht weiter gesucht), dass der auch 
die INT0-Funktion hat.
Ich habe was gelernt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.