Forum: Mikrocontroller und Digitale Elektronik sleep-mode nur mit low-level ISR "verlassbar"?


von Klaus R. (klaus2)


Lesenswert?

Hallo zusammen,

im Datenblatt des ATtiny44 steht meiner Ansicht nach, dass nicht nur low 
level sondern auch pin_change geht...aber irgendwie läuft das nicht. Low 
level geht 1A. Bevor ich nun weiterforsche: Ist der power down auch mit 
einem anderen ext trigger als low_level an INT0 verlassbar? Am liebsten 
wäre mir pin change.

Klaus.

von Bastler (Gast)


Lesenswert?

Beide sollte funktionieren, aber:

Note that if a level triggered interrupt is used for wake-up the changed 
level must be held for some time to wake up the MCU (and for the MCU to 
enter the interrupt service routine). See “External Interrupts” on page 
49 for details.

sagt das Datenblatt. Und bei PowerDown ist der Takt gestopped und muß 
erst wieder anlaufen. Das kann dauern. Bei externem Quarz bis zu 16k 
Takte.

von Schläfer (Gast)


Lesenswert?

Bastler schrieb:
> Beide sollte funktionieren, aber:
>
> Note that if a level triggered interrupt is used for wake-up the changed
> .
> .

Mit INT0 und low level geht es doch bei Klaus R.

@Klaus R.: Mit Pin Change Interrupt geht es auch. Zeig mal dein Pin 
Change Programm mit dem es nicht klappt.

von Bastler (Gast)


Lesenswert?

Mal ganz von vorne testen.
PinChange ohne Sleep geht?
PinChange aus IDLE geht?
PinChange aus PowerDown geht immer noch nicht?

von Klaus R. (klaus2)


Lesenswert?

Pin change ging, wenn ich mich gut an gestern 02:30 erinnere :) Eine LED 
in der ISR toggelt. Aber wenn er einmal schlief, schlief er...naja, ist 
nur ein Feinschliff, low level geht auch.

Ich hatte nur die Bits ISC01/00

MCUCR |= (1<<SM1)|(0<<SM0)|(0<<ISC01)|(1<<ISC00);

geändert, das reicht - oder?

Danke, Klaus.

von Bastler (Gast)


Lesenswert?

Wenn ich im DB 9.2.2 "Pin Change Interrupt Timing" die Schaltung 
betrachte, dann braucht die einen Takt. Und der ist bei PowerDown 
angehalten. Und bei 9.2.1 steht zum INT0, das er async arbeitet, d.h. 
Auch bei sleep > IDLE.
Also aufwachen aus Tiefschlaf per Level oder Change, aber nur async, 
also nicht bei PinChange.
Genau so steht's aber auch beim mega169 und der kann das definitiv in 
all den Heizungsreglern.

von Bastler (Gast)


Lesenswert?

ISC01/0 sind nur für INT0 zuständig. PinChange ist was anderes. Damit 
können Änderungen an allen Port-Pins erkannt werden. Aber dazu muß man 
die je Port den zugehörenden Vector verwenden, den jeweilige Int 
freigegeben werden, die PinChangeMask gesetzt sein. Alles im Handbuch 
nachzulesen.

von Schläfer (Gast)


Lesenswert?

Schläfer schrieb:
> @Klaus R.: Mit Pin Change Interrupt geht es auch. Zeig mal dein Pin
> Change Programm mit dem es nicht klappt.

Klaus R. schrieb:
> MCUCR |= (1<<SM1)|(0<<SM0)|(0<<ISC01)|(1<<ISC00);

Damit geht es natürlich nicht. (und Nullen shiften ist hier wirkungslos)

von Klaus R. (klaus2)


Lesenswert?

Hallo Bastler,

ja, das hatte ich auch schon beim Überfliegen vermutet - da lässt sich 
leider viel konfigurieren. Muss ich mir in Ruhe mal ansehen. Ein Problem 
wäre es für mich auch nur bei hängender Taste - im Moment.

Sin dbeim Feld-Wald-Wiesen PowerDown 20uA OK? Ohne jetzt groß die 
Schaltung optimiert zu haben...die Anwendung hat einen LiIon Akku, der 
wird damit ne Weile halten, ergo kein Problem für mich - wobei die 
0.1uA@1.8V aus dem DB schon reizen :)

@Schläfer: 0 shift ist mir klar, stört aber auch nicht. Ist halt ne 
Bastelmaske. Den Rest hat Bastler ja erklärt (und nicht nur kritisiert 
:) )

Klaus.

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.