ATTINY406 , Powerdown , aufwachen per Port-Interrupt

#7983021
Lesenswert?

Hallo Leute, da bastet und programmiert man schon seit jahrzehnten mit den AVR rum und denkt man kennt alles. Neue AVR-Typen sind immer für Überraschungen gut. Wie Beispielsweise der ATTINY406: *kompakte Programmierschnittstelle (3pins) *Komparator mit programmierbare Hysterrese *kompakte Gehäuseform ... Aber so eine einfache Sache zu implementieren wie per Tastendruck aufwachen aus dem Schlafzustand, das hat mich jetzt 1.5 Tage gekostet. Beim ATTINY24 konnte man jeden Pin dafür nutzen (Pin-Changes-Interrupt) Beim ATTINY406 funktionte das im Prinzip auch, aber komischer Weise nur bei aktiven Debugger aus dem Powerdown-Sleepmodus und autonom nur aus dem im Idle-Sleepmodus. Warum wird die schxxxx CPU nicht wieder wach?!
Das Datenblatt studiert bis zum abwinken und da ist die Rede von: "Asynchronous Sensing Pin" Und auf den Seiten 17/18 fintet man eine kleine Randnotitz: "2. All pins can be used for external interrupts, where pins Px2 and Px6 of each port have full asynchronous detection." Die Erkenntnis: Aufwachen geht also nur mit Taster an Pin2 oder Pin6!

Hat jemand schon ähnliche Erfahrunge gemacht das man sich im Datenblatt oder Internet blöde sucht nach der Lösung des Problems?

#7983026
Lesenswert?

Torsten R. schrieb:

"2. All pins can be used for external interrupts, where pins Px2 and Px6 of each port have full asynchronous detection."

Der Punkt ist dass normalerweise alle Eingänge zuerst auf die interne Clock synchronisiert werden bevor sie ausgewertet werden. Das ist der gängigste Weg ungültige Zustände der Flipflops zu vermeiden. Wenn Du jetzt aber einen Sleep-Modus hast in dem alle Clocks aus sind, dann geht das nicht.

Dafür braucht man dann die "full asynchronous detection". Die bringt aber meist andere Nachteile mit sich, wie z.B. langsamer, höherer Stromverbrauch, und wird daher nicht an allen Pins implementiert.

: Bearbeitet durch User
#7983028
Lesenswert?

... blöde sucht ...

Also darüber bin ich auch schon gestolpert, vor längerer Zeit; aber anderthalb Tage habe ich nicht benötigt, um die Stelle im Datenblatt zu finden:

Table 11-3. Sleep Mode Wake-Up Sources, Spalte 'Power-Down' mit der Fußnote

  1. The I/O pin must be configured according to Asynchronous Sensing Pin Properties in the PORT section.
#7983042
Lesenswert?

ATmega328 ... Ein paar Pins haben zwei Interrupt-Funktionen ... PCINT18

Was aber nur sehr bedingt zum vorliegenden Thema passt. Denn wie Torsten R. bereits schrieb, weckt jeder PCINTn den ATmega328 auch aus 'Power-down' auf.

: Bearbeitet durch User
Persönliche Seite #7983071
Lesenswert?

Torsten R. schrieb:

aber komischer Weise nur bei aktiven Debugger aus dem Powerdown-Sleepmodus und autonom nur aus dem im Idle-Sleepmodus.

Bei aktivem Debugger bleibt ein (interner) Takt auch im Powerdown aktiv, damit die Verbindung zum Debugger nicht abbricht, d.h. eigentlich geht der Controller gar nicht wirklich in den Powerdown. Nebeneffekt ist dann dass der Takt auch andere Peripherieeinheiten am Leben hält.

Ist bei anderen Controllern ganz genau so (z.B. STM32), die können nur von bestimmten Pins aus den tieferen Low-Power-Modi geweckt werden - außer die Debug-Einheit ist aktiv, und ist so konfiguriert dass sie den Takt auf "an" forciert.

#7983118
Lesenswert?

AVR32DD28 ... lässt mich stutzen

Dieser kann Pin-Change-Interrupt aus Power-Down z.B. auch auf PinA5.

An dieser Stelle gibt es offenbar Unterschiede innerhalb der AVRxt-Klasse - es wird fein unterschieden zwischen 'partially asynchronous' und 'fully asynchronous':

Datenblatt AVR16/32DD28/32: All PORT pins support fully asynchronous input sensing with interrupts for selectable pin change conditions. Fully asynchronous pin change sensing can trigger an interrupt and wake the device from all sleep modes, including modes where the Peripheral Clock (CLK_PER) is stopped.

Datenblatt ATtiny202/204/402/404/406: All PORT pins support asynchronous input sensing ... while partially asynchronous pin change sensing is limited ...

Es kommt also auf den jeweiligen Controllertyp an, zumindest für Pin-Change-Interrupt. Zum Level-Interrupt hat ja Georg M. bereits eine Aussage getroffen.

#7983455
Lesenswert?

S. L. schrieb:

Datenblatt ATtiny202/204/402/404/406: All PORT pins support asynchronous input sensing ... while partially asynchronous pin change sensing is limited ...

und weiter: "Only from BOTHEDGES or LEVEL interrupt sense configurations". Mit einer dieser beiden Optionen kann jeder Pin den ATtiny aus Power Down aufwecken. "BOTHEDGES" entspricht dem "Pin Change Interrupt" der aelteren Modelle.

(Firma: 1984now) #7983480
Lesenswert?

Arne R. schrieb:

S. L. schrieb:

Datenblatt ATtiny202/204/402/404/406: All PORT pins support asynchronous input sensing ... while partially asynchronous pin change sensing is limited ...

und weiter: "Only from BOTHEDGES or LEVEL interrupt sense configurations". Mit einer dieser beiden Optionen kann jeder Pin den ATtiny aus Power Down aufwecken. "BOTHEDGES" entspricht dem "Pin Change Interrupt" der aelteren Modelle.

Hmmm... Für mich sieht das eher so aus, wie die Konfigurationsmöglichkeiten der alten INTx. Und auch da gab es bereits den Wildwuchs, dass bestimmte INTx sich nicht so konfigurieren ließen, dass sie in der Lage gewesen wären, das Teil bei Toggle aus dem PowerDown zu wecken. Beispiel AtMega16/32: INT0/1 können lassen sich zwar auch auf das Äquivalent zu BOTHEDGES konfigurieren, können dann aber das Teil nicht aus dem PowerDown holen. Das können sie nur, wenn sie auf LOWLEVEL konfiguriert sind. INT2 hingegen läßt sich bezüglich des "interrupt sense" überhaupt nicht konfigurieren (default ist hier BOTHEDGES), aber kann dafür das Teil bei Toggle aus dem PowerDown holen.

Also, ich würde mich hier auf garnix verlassen, sondern es bei Bedarf so machen, wie es auch S.L. macht: ausprobieren.

#7983541
Lesenswert?

Torsten R. schrieb:

Wie Beispielsweise der ATTINY406: *kompakte Programmierschnittstelle (3pins) *Komparator mit programmierbare Hysterrese *kompakte Gehäuseform

Gerade bei der tinyAVR® 0-series ist der Komparator noch unterentwickelt. Bei den weiterentwickelten AVRs kann die Referenzspannung eingestellt werden - zwar nur mit 8 Bit, aber das ist auf jeden Fall besser als nichts.

Angehängte Dateien:
(Firma: 1984now) #7983596
Lesenswert?

Arne R. schrieb:

Ob S. schrieb:

Also, ich würde mich hier auf garnix verlassen, sondern es bei Bedarf so machen, wie es auch S.L. macht: ausprobieren.

Habe ich gemacht, und BOTHEDGES funktioniert.

Hmmm... Da fragt man sich dann allerdings, was uns die Anmerkung auf Seite 17 sagen soll, die schon der TO erwähnt hatte. Und die er auch als wahr identifiziert hatte, also zumindest insofern, als dass es an anderen Pins als Px2/Px6 bei ihm eben nicht funktioniert hat. Genau das war ja überhaupt der Anlass für diesen Thread.

#7983674
Lesenswert?

Ob S. schrieb:

Arne R. schrieb:

BOTHEDGES funktioniert.

Hmmm... Da fragt man sich dann allerdings, was uns die Anmerkung auf Seite 17 sagen soll, die schon der TO erwähnt hatte.

Ich lese das Datenblatt so, dass an diesen Pins alle Modi (also auch RISING und FALLING) aus Power Down aufwecken koennen.

dass es an anderen Pins als Px2/Px6 bei ihm eben nicht funktioniert hat.

AFAICS hat er nicht erwaehnt, welchen Modus (RISING/FALLING/BOTHEDGES/LEVEL) er gewaehlt hat.

Angehängte Dateien:
: Bearbeitet durch User
#7990427
Lesenswert?

Das hat nun arg lange gedauert, ich möchte es aber trotzdem noch nachtragen:

AFAICS hat er nicht erwaehnt, welchen Modus (RISING/FALLING/BOTHEDGES/LEVEL) er gewaehlt hat.

Es ist zu vermuten, dass er denselben Fehler machte wie ich auch, sich nämlich auf Pin-Change RISING oder FALLING zu kaprizieren, statt, wie von Arne R. ausgeführt, BOTHEDGES (analog zur AVRe-Klasse) zum Aufwecken aus Power-down zu verwenden. Denn Letzteres funktioniert immer&überall, während Ersteres bei den älteren AVRxt auf PINx2/6 beschränkt ist: ATtinies, aber auch bspw. ATmega4809 oder AVR128DB28. Diese Einschränkung entfällt z.B. beim (neueren) AVR32DD28, bei diesem sind alle Pins 'fully asynchronous'.

#7990719
Lesenswert?

... LEVEL ...

Beim Level-Interrupt ist unangenehm (und macht die Programmierung i.d.R. aufwändiger), dass 'Notes 2. The LEVEL interrupt will keep triggering continuously as long as the pin stays low'. Bei Power-down vermeide ich diesen, wenn möglich.

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