mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR counter im Sleep.Mode


Autor: County (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Jetzt ist G. (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt ein Datenblatt, beim Hersteller, das beschreibt in welchem Modus 
welche Einheiten laufen

Autor: Karl M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg W. (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: County (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: County (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Jörg W. (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch Moderator
Autor: County (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ingo Less (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube das geht nicht wie du es willst. Ginge denn ein externer 
Zähler?

Autor: County (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ingo Less schrieb:
> Ich glaube das geht nicht wie du es willst. Ginge denn ein
> externer
> Zähler?

Das wollte ich eigentlich vermeiden.

Autor: Jörg W. (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: S. Landolt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht um den ATmega328PB.

Also ad hoc hätte ich gewettet, das geht mit ASSR.EXCLK; lasse mich aber 
gerne eines besseren belehren.

Autor: Jörg W. (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: S. Landolt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter D. (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm zum Zählen den Pin-Change-Interrupt.

Autor: County (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.