Forum: Mikrocontroller und Digitale Elektronik ATTINY406 , Powerdown , aufwachen per Port-Interrupt


von Torsten R. (tom365)


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?

von Gerd E. (robberknight)


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
von S. L. (sldt)


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.

von Nemopuk (nemopuk)


Lesenswert?

Darauf stößt man z.B. auch, wenn man sich die Pinbelegung des ATmega328 
anschaut. Ein paar Pins haben zwei Interrupt-Funktionen. Ein Pin ist 
z.B. mit INT0/PCINT18 beschriftet. Das ist nicht aus Versehen doppelt 
gemoppelt.

: Bearbeitet durch User
von S. L. (sldt)


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
von Georg M. (g_m)


Lesenswert?

Viel Text, aber kein Code.

Torsten R. schrieb:
> Die Erkenntnis: Aufwachen geht also nur mit Taster an Pin2 oder Pin6!

Nein, mit jedem Pin: Pull-up und Button gegen GND. Wie immer.

von S. L. (sldt)


Lesenswert?

> Nein, mit jedem Pin: Pull-up und Button gegen GND. Wie immer.

Bei einem uC der AVRxt-Klasse aus Power-Down?

von Niklas G. (erlkoenig) Benutzerseite


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.

von Georg M. (g_m)


Lesenswert?

S. L. schrieb:
> Bei einem uC der AVRxt-Klasse aus Power-Down?

Jetzt bin ich aber verwirrt. Ich dachte, der LOW-Level-Interrupt 
funktioniert immer, und nur die Flankenerkennung braucht etwas 
komplizierteres.

Jetzt muss man wieder alles testen.

von Georg M. (g_m)


Lesenswert?

Ja, der Low-Level-Interrupt beim Power-Down funktioniert mit PA1 genauso 
wie mit PA2.

von S. L. (sldt)


Lesenswert?

> Jetzt bin ich aber verwirrt.

Okay, ich auch - ich habe gerade nur einen AVR32DD28 zur Hand, und was 
ich bei diesem auf die Schnelle sehe, lässt mich stutzen.
  Morgen mal in Ruhe überprüfen ...

von S. L. (sldt)


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.

von Arne R. (ebps)


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.

von Ob S. (Firma: 1984now) (observer)


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.

von Arne R. (ebps)


Lesenswert?

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.

von Georg M. (g_m)


Angehängte Dateien:

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.

von Ob S. (Firma: 1984now) (observer)


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.

von Arne R. (ebps)


Angehängte Dateien:

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.

: Bearbeitet durch User
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Arne R. schrieb:

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

Das stimmt, dazu gab es keine explizite Klarstellung, daran kann es also 
tatsächlich gelegen haben.

von S. L. (sldt)


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'.

von Georg M. (g_m)


Angehängte Dateien:

Lesenswert?

Das Thema ist äußerst kompliziert.

von S. L. (sldt)


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.

von Georg M. (g_m)


Lesenswert?

Mit Tastern benutze ich immer den Low-Level-Sense-Wake-up-Interrupt und 
habe dabei noch nie irgendwelche Schwierigkeiten oder einen 
nennenswerten SW-Aufwand festgestellt.

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.