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.
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.
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.
Mal ganz von vorne testen. PinChange ohne Sleep geht? PinChange aus IDLE geht? PinChange aus PowerDown geht immer noch nicht?
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.
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.
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.
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.