www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik timer bis 1 minute zählen lassen


Autor: tank_84 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe folgendes Problem:
Mein Programm setzt den Mikrocontroller in den Standby Modus. Ein 
Interrupt (timer1) weckt ihn jede Sekunde, eine Messung wird 
durchgeführt.
Ich möchte jedoch nur alle 60 Sekunden messen lassen, allerdings erlaubt 
die Timerkonfiguration einen so hohen Zählwert nicht.
Jetzt habe ich eine Zählvariable, die bei jedem Interrupt um 1 erhöht 
wird, die permanent abgefragt wird. Beim Zählstand 60 (= 1Minute) wird 
die Messung dann durchgeführt.
Allerdings wird dadurch der Controller jede Sekunde aus dem Standby 
"aufgeweckt", um den Variablenzählstand zu überprüfen.

Wie kann ich das eleganter lösen, so dass der Controller eine komplette 
Minute im Standby verharrt?

Autor: Zählschleife (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wie kann ich das eleganter lösen, so dass der Controller eine komplette
>Minute im Standby verharrt?

Das wird nur durch einen externen Interrupt gehen, welcher dann jede 
Minute den MC weckt. (ob das eleganter ist sei jetzt mal offen 
gelassen).

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ tank_84 (Gast)

>Allerdings wird dadurch der Controller jede Sekunde aus dem Standby
>"aufgeweckt", um den Variablenzählstand zu überprüfen.

Ja und? Wie lange arbeitet er denn dann? Ein paar Dutzend Mikrosekunden.

>Wie kann ich das eleganter lösen, so dass der Controller eine komplette
>Minute im Standby verharrt?

Gar nicht. Reche mal aus wieviel Strom das sparen würde.

MFG
Falk

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Allerdings wird dadurch der Controller jede Sekunde aus dem Standby
>"aufgeweckt", um den Variablenzählstand zu überprüfen.

Ja. Aber wo ist das Problem?

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie schon die Vorposter schrieben: Das Bisschen mehr Strom, das der
Controller aufnimmt, wenn jede Sekunde für ein paar Sekunden die CPU
aktiviert bewegt sich sim Subsubpromillebereich.

Wenn du dir CPU trotzdem 1 Minute lang schlafen legen möchtest, kannst
du an verschiedenen Schrauben drehen:

1. Nimm den bitbreitesten Timer/Counter, der verfügbar ist.

2. Stelle den größten Vorteilerfaktor ein, der möglich ist.

3. Reduziere die globale Taktfrequenz auf einen geeigneten Wert.
   Dadurch laufen zwar auch Berechnungen langsamer, was aber in deiner
   Anwendungen vielleicht keine Rolle spielt.

Bsp.: Ein ATmega hat mindestens einen 16-Bit-Timer, der größte
Vorteilerfaktor ist 1024. Bei der Defaulttaktfreqeuenz von 1 MHz
kommst du schon bis ca. 67 Sekunden. Oder habe ich mich verrechnet?

Bei manchen Controllern kann man mehrere Timer kaskadieren, um längere
Zeitintervalle zu realisieren.

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>...wenn jede Sekunde für ein paar Sekunden ...

wir bewegen uns durch Raum und Zeit :-)

MW

Autor: Albert Eisbein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.....und spalten Haare. ;-)

Albert Eisbein

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ yalu (Gast)

>Bsp.: Ein ATmega hat mindestens einen 16-Bit-Timer, der größte
>Vorteilerfaktor ist 1024. Bei der Defaulttaktfreqeuenz von 1 MHz
>kommst du schon bis ca. 67 Sekunden. Oder habe ich mich verrechnet?

Nur dass der OP sicher ein 32,768 kHZ Uhrenquarz als Taktquelle nutzt. 
Bei 16 Bit läuft der alle 2 Sekuden über. Mit Vorteiler 1024 alle 2048 
Sekunden.

MFG
Falk

Autor: Albert Eisbein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Falk

QUARZFORMATE!!!

Albert Eisbein

Autor: Albert Zweistein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Albert Eisbein

Du sprichst aus was ich denke...

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch ein Lösungsansatz, welcher es ermöglichen würde, den µC im 
Minutentakt aufzuwecken:

Verwendet werden zwei Hardwaretimer (1x 16Bit und 1x 8Bit)

16Bit-Timer läuft z.B. im CTC-Modus mit Ouput Compare um am OCx-Pin eine 
relativ niedrige "Zwischenfrequenz" zu erzeugen. Der OCx-Pin wird mit 
dem Pin verbunden, über welchen der 8Bit-Timer extern getaktet werden 
kann. Der µC soll dann geweckt werden, sobald der 8Bit-Timer überläuft.

Auf diese Weise lässt sich (rein rechnerisch) auch ein sehr langes 
Zeitintervall realisieren.

Ein kleines Rechenbeispiel:

- µC-Takt 16MHz
- 16Bit-Timer mit Prescaler 1024; OCx-Toggle

--> Zwischenfrequenz = 16MHz/1024/65536/2 = 119,20929 mHz
    (dies entspricht einer Zeitbasis von 8,389 Sekunden!)

Diese Frequenz (Zeitbasis) wird nun nochmals vom 8Bit-Timer durch 256 
geteilt:

--> Zeitbasis = 16MHz/1024/65536/2/256 = 0,4657 mHz
    dies entspricht 2147 Sekunden (33 Minuten 47 Sekunden) !!!


Man beachte, dass diese Werte für eine Taktfrequenz von 16MHz gelten. 
Bei niedrigeren Taktfrequenzen lassen sich dann natürlich entsprechend 
längere Zeitintervalle realisieren.

Gruß,
Magnetus

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael Wilhelm schrieb:
>>...wenn jede Sekunde für ein paar Sekunden ...
>
> wir bewegen uns durch Raum und Zeit :-)

Das Mikro von den Sekunden ist so mikro, dass du es glatt übersehen
hast. Nicht einmal ich kann es erkennen, so winzig ist es ;-)

Autor: Stefan Burger (stefan1975)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo tank

hast du das problem inzwischen gelöst?
ich habe nämlich ein ähnliches problem !

könntest du das programm mal als anhang in diesen beitrag einstellen !

wäre echt nett!!

mfg
stefan

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,
schaut mal ins Datenblatt!
Schliesst einen 1MHz Quarz an.
Vorteiler auf 1024.
16bit Timer.
Dann habt ihr ca die Minute(sogar mehr).

gruss fubu

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmal ich ;-)
Wenn es sein muss schreibe ich euch wohin der Quarz angeschlossen wird 
und welche Register wie gesetzt werden müssen !!! Aber nur nach 
Nachfrage !!!

gruss

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.