AVR counter im Sleep.Mode

Gast #5264519
Lesenswert?

Hallo Forum,

ich habe ein Taktsignal, das einen Zähler hochzählen soll.
Der Controller ist die meiste Zeil im Sleep-Modus und sollte wenn 
möglich
zum Hochzählen nicht geweckt werden.
Die Frage ist geht das mit einem AVR(Mega328PB) und wenn ja wie?
Ich vermute, ich benötige dazu den Asynchronen Timer?
Welchen Pin kann ich als Zähleingang verwenden?
Gast #5264544
Lesenswert?

Jetzt ist natürlich die Frage, was bedeutet "einen Zähler hochzählen"?

Ein ext. Taktsignal an einen TimerX legen und diesen zählen lassen, oder 
Timer2 im "asynchronous mode" mit einem 32kHz Quarz betreiben?


Siehe Datenblatt atmega328pb: 15.1. Sleep Modes

Einige TimerX haben auch einen externen Eingang (External clock source) 
Tn Pin, mit n E {0,1,3,4}, über den ein Taktsignal zugeführt werden 
kann.

Dabei muss der AVR im "run" Zustand sein.
Moderator Persönliche Seite #5264551
Lesenswert?

Karl M. schrieb:
> wenn ein Atmel AVR "rechnen" soll oder muss

Davon war allerdings nicht die Rede.

County schrieb:
> Ich vermute, ich benötige dazu den Asynchronen Timer?

Das ist der einzige, der keinen weiteren Takt braucht.

> Welchen Pin kann ich als Zähleingang verwenden?

TOSC1

Ist aber nicht ganz ohne: teilweise musst du bis zu zwei Flanken an
TOSC1 haben, bevor Registerwerte im Zähler 2 überhaupt übernommen worden
sind und du ihn schlafen legen darfst.
Gast #5264561
Lesenswert?

Karl M. schrieb:
> Einige TimerX haben auch einen externen Eingang (External clock source)
> Tn Pin, mit n E {0,1,3,4}, über den ein Taktsignal zugeführt werden
> kann.
>
> Dabei muss der AVR im "run" Zustand sein.

das möchte ich nicht, Controller soll in einem SLeep-Modus sein.


Der externe Takt soll einen Counter hochzählen. Ab und zu wacht der uC 
durch einen Interrupt auf und schaut sich den Counter-Zustand an.

Die "normalen" Timer/Counter können das nicht, da sie den Main-Takt zur 
Flankenerkennung benötigen.

Die Frage ist, ob das über den asynchronen Timer/Counter  geht, ich 
möchte damit nicht die CPU takten.
Moderator Persönliche Seite #5264575
Lesenswert?

County schrieb:
> Ab und zu wacht der uC durch einen Interrupt auf und schaut sich den
> Counter-Zustand an.

Durch welchen denn?  Du hast ja alle Clockdomains abgeschaltet außer
der asynchronen.  Diese zählt aber keine Zeit, sondern deine externen
Ereignisse … der einzige weitere mögliche Clock wäre dann der Watchdog
(im Interrupt-Modus), aber der ist natürlich ziemlich ungenau.

County schrieb:
> ist das irgendwo im Datenblatt beschrieben?

Ja, natürlich.  Das Kapitel über den asynchronen Zähler solltest du
dir schon mal durchlesen …

Ich würde wohl eher zu zusätzlicher Hardware greifen dafür.  Ein
ATtiny10 im IDLE sleep braucht nur einige 10 µA und hätte einen
16-Bit-Zähler.  Den wiederum könnte man dann vom Hauptprozessor mit
SPI gelegentlich auslesen.

Ein Hardware-CMOS-Zähler hätte praktisch gar keinen Ruhestrom, aber
man müsste dann entweder noch eine Schieberegister-Logik dranhängen,
um ihn mit SPI auszulesen oder ihn parallel auslesen.
Gast #5264587
Lesenswert?

Jörg W. schrieb:
> Durch welchen denn?  Du hast ja alle Clockdomains abgeschaltet außer
> der asynchronen.  Diese zählt aber keine Zeit, sondern deine externen
> Ereignisse … der einzige weitere mögliche Clock wäre dann der Watchdog
> (im Interrupt-Modus), aber der ist natürlich ziemlich ungenau.

Genau eine Quelle ist zum Wecken ist der WDT, Genauigkeit spiel keine 
spielt keine Rolle, da der Zählerstand gesendet wird und der Empfänger 
eine Uhr hat.

Jörg W. schrieb:
> Ja, natürlich.  Das Kapitel über den asynchronen Zähler solltest du
> dir schon mal durchlesen …

mache ich

Jörg W. schrieb:
> Ich würde wohl eher zu zusätzlicher Hardware greifen dafür.

Darauf wird es wohl hinauslaufen, zumal der Pin TOSC1 auch die 
Verwendung eines Quarzes zum Takten des µC ausschließt.
Gast #5264753
Lesenswert?

Interessant wäre zu wissen, wie und wie oft der Zählerstand ausgelesen 
wird und um welche Zählfrequenz es geht. Auch was der ATmega328 sonst 
noch machen soll, der wird ja sicher nicht nur zählen.
Gast #5265340
Lesenswert?

Peter D. schrieb:
> Nimm zum Zählen den Pin-Change-Interrupt.

mache ich aktuell auch, im Moment kommen die Pulse auch nur alle paar 
Sekunden (Wasseruhr).
Da aber noch einige andere Funktionen und  Interrupts auf dem 
Controller laufen, wollte ich diese simple Zählfunktion an den 
"Maschinenraum" abgeben.

Danke für die Antworten.

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