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?
Hallo, wenn ein Atmel AVR "rechnen" soll oder muss, dann muss er auch "laufen". D.h. er muss sich außerhalb eines PowerDown Modus befinden.
Es gibt ein Datenblatt, beim Hersteller, das beschreibt in welchem Modus welche Einheiten laufen
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.
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.
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.
Jörg W. schrieb: > 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. ist das irgendwo im Datenblatt beschrieben?
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.
:
Bearbeitet durch Moderator
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.
Ich glaube das geht nicht wie du es willst. Ginge denn ein externer Zähler?
Ingo Less schrieb: > Ich glaube das geht nicht wie du es willst. Ginge denn ein > externer > Zähler? Das wollte ich eigentlich vermeiden.
County schrieb: > zumal der Pin TOSC1 auch die Verwendung eines Quarzes zum Takten des µC > ausschließt. ATmega8 oder Nachfolger? Bei allen anderen sind XTAL und TOSC eigentlich getrennt.
Es geht um den ATmega328PB. Also ad hoc hätte ich gewettet, das geht mit ASSR.EXCLK; lasse mich aber gerne eines besseren belehren.
S. Landolt schrieb: > Es geht um den ATmega328PB. Hatte ich übersehen, steht ja oben, stimmt. > Also ad hoc hätte ich gewettet, das geht mit ASSR.EXCLK Im Prinzip Ja, aber … was man sich damit an Kompromissen einhandelt, wurde schon genannt.
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.
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.
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.