Forum: Mikrocontroller und Digitale Elektronik Langzeit timer ca 6h realisieren.


von Andi (Gast)


Lesenswert?

Hallo,

bin noch recht frisch hinter den Ohren was Mikrocontroller betrifft und 
will gerne für ein Schulprojekt einen Langzeit timer ca. 6h realisieren.

Ich habe einen ATMega32 zur verfügung ist dies Problemlos möglich oder 
ist das sehr aufwendig? Hat vielleicht schon einmal jemand einen solchen 
Langzeittimer realisiert?
Bin für jede Hilfe dankbar, villeicht hat ja jemand so ein ähnliches 
Programm das er mal posten kann.

Gruß Andi

von Frank B. (f-baer)


Lesenswert?

Wie genau soll dein Timer denn sein?

von Skua (Gast)


Lesenswert?

Such mal nach Eieruhr.

von Andi (Gast)


Lesenswert?

Er muß nicht besonders genau sein soll halt alle 6h eine Messung machen 
dabei ist es unwichtig ob es jetzt nach 5,5h oder erst nach 6,5h 
geschieht.

von Karl H. (kbuchegg)


Lesenswert?

definiere "aufwändig"

Ob dein Timer 5 Sekunden oder 6 Stunden oder 3 Tage laufen soll, ist 
letzten Endes nur eine Frage dessen, wieviele Sekundenimpulse man 
abzählt, bis die Aktion passiert.

(Sekundenpulse ist jetzt nur ein Beispiel. Es können auch 0.5 
Sekundenpulse sein oder was auch immer. Hauptsache regelmässig und man 
kann sie zählen)

von Silvan K. (silvan) Benutzerseite


Lesenswert?

Die eleganteste Lösung bietet meiner Meinung nach eine RTC. Da dir die 
(scheinbar) nicht zur Verfügung steht, musst du mit einem integrierten 
Timer vorlieb nehmen.
D.h.:
-höchsten Frequenzteiler wählen
-im Overflow Interrupt Zähler inkrementieren
-beim Erreichen von Zählerstand x wird die Messung gemacht und der 
Zähler zurückgesetzt

x errechnet sich aus: 21600sec [=6h] / Zeit_zwischen_Interrupts [in sec]

von Oliver J. (skriptkiddy)


Lesenswert?

Ich würde dir zu ner batteriegestützen Echtzeituhr ala DS1307 oder 
ähnlichem raten. Diese kannst du dann aller paar Minuten abfragen und 
wenn die richtige Zeit erreicht ist, dann machst du die Messung. Damit 
wäre sichergestellt, dass auch nach einem Stromausfall alles noch so 
funktioniert, wie es soll.
Du könntest könntest den AVR sekündlich aus dem Schlaf holen (Dazu 
einfach den Takt an der Echtzeituhr abgreifen) und dann nen Zähler 
hochzählen lassen und wieder schlafen legen. Bei nem bestimmten 
Zählerstand ließt du die Uhr aus. Ist deine Stunde der Messung erreicht, 
dann machst du sie auch, ansonsten nur Zähler zurücksetzen und den Atmel 
wieder schlafen legen.

Was hast du überhaupt damit vor?

Gruß Skriptkiddy

von Hauspapa (Gast)


Lesenswert?

Du kannst auch den ganzen Programmierkrempel sein lassen und zu 
klassischer Logik greifen:

Ein Uhrenquarz, am CD4060. Nachdem der das 14 mal geteilt hat durch 10 
Teilen, z.B. mit CD4018. Und nochmal durch einen CD4060 herunterteilen 
lassen. 6h ohne zusätzliche Logik auf 5% genau.

von avion23 (Gast)


Lesenswert?

Hallo Andi,
das ist problemlos möglich.

Ich habe es realisiert mit einem timer, der alle 100ms überläuft und 
dann ein overflow-flag setzt. Dieses flag frage ich im main-loop ab und 
zähle meine Zeit mit einer anderen Variable mit. Und falls "time == 
6*10*3600*", führe ich das aus was ich möchte.

Falls Stromverbrauch kritisch: Watchdoginterrupt.

von Andrew T. (marsufant)


Lesenswert?

Andi schrieb:
> Er muß nicht besonders genau sein soll halt alle 6h eine Messung machen
> dabei ist es unwichtig ob es jetzt nach 5,5h oder erst nach 6,5h
> geschieht.

Ein CMOS IC 4060 ist das, was Deine Aufgabe schnell und preiswert löst: 
Langzeittimer.

von Bob (Gast)


Lesenswert?

Hauspapa schrieb:
> Ein Uhrenquarz, am CD4060. Nachdem der das 14 mal geteilt hat durch 10
> Teilen, z.B. mit CD4018. Und nochmal durch einen CD4060 herunterteilen
> lassen. 6h ohne zusätzliche Logik auf 5% genau.

Komisch. CD4060+CD4018 würde ich jetzt schon als "zusätzliche 
Logik"(-Chips) betrachten.

Den Uhrenquarz kann man auch direkt an den Mega32 klemmen, wenn man's 
denn so genau braucht und der Stromverbrauch wichtig ist.

2 ICs weniger, und dafür auf ~30ppm genau.

Ansonsten:
http://www.mikrocontroller.net/articles/AVR_-_Die_genaue_Sekunde_/_RTC

von Peter D. (peda)


Lesenswert?

Die dafür nötigen Programmbytes fühlen sich einsam in dem riesengroßen 
ATmega32.
Nimm den kleinsten AVR, den Du kriegen kannst, z.B. ATTiny12:

Beitrag "Re: 24h Schalter mit Attiny 12"

Das Programm von 24h auf 6h zu ändern, wirst Du schon schaffen.


Peter

von andi (Gast)


Lesenswert?

Hallo euch allen,

ihr seid echt Spitze, ich danke euch! Jetzt hab ich ja tausende von 
möglichkeiten! Werd euch auf dem laufenden halten aber jetzt erst mal in 
die Haia gehen :)

von Hauspapa (Gast)


Lesenswert?

2Stk. CD4060 plus 2 Stk. CD4018 geht auf 0.4% genau. Das sind in 6 
Stunden 1min 36s daneben. Ohne Tiny und ohne Programmieren. Oder ein 
Tiny und kein Logikgrab da stimme ich voll zu.

2Stk. CD4060 plus 4 Stk. CD4018 geht dann ganz genau.

jetzt dürft Ihr mich schlagen

von MaWin (Gast)


Lesenswert?

Er will "eine Messung machen", es geht also offenbar nicht nur um den 
Timer (der, wenn man erst mal einen uC an einen Quartz angeschlossen hat 
nur noch ein simples Programm ist), sondern wohl auch um Erfassung von 
Analogwerten und Speicherung. Daher sind Lösungen mit CD4060 wohl 
Humbug, denn da misst nix.

von Hauspapa (Gast)


Lesenswert?

Ich habe Euch ja verstanden. Vermutlich würde ich selbst auch einen uC 
nehmen. Der Vollständigkeit halber:

Ein 6,144 MHz Quarz und 2 74HC4060 braucht für 6 Stunden ziemlich genau 
4 Minuten zu lange. Für einen CD4060 sind die 6 MHz vermutlich etwas 
schnell. Wenn es nur um einen Trigger geht finde ich 2 
Standardschaltkreise + Quarz nicht schlecht. Leider hat man den 
passenden Quarz und die ICs meist nicht im Haus. Den uC schon eher.

von Rene S. (Firma: BfEHS) (rschube)


Lesenswert?

Hallo,

wie findet ihr folgenden Vorschlag.

Mit einem uHz Timer z.Bsp.: LTC6991 den Controller alle 6 Stunden 
aufwecken, die Messung machen und wieder schlafen. Der LTC6991 ist 
einstellbar von 1ms bis 9,5h

Das ist doch das einfachste, oder?

mfg Rene

von Karl H. (kbuchegg)


Lesenswert?

Hauspapa schrieb:
> Ich habe Euch ja verstanden. Vermutlich würde ich selbst auch einen uC
> nehmen. Der Vollständigkeit halber:
>
> Ein 6,144 MHz Quarz und 2 74HC4060 braucht für 6 Stunden ziemlich genau
> 4 Minuten zu lange. Für einen CD4060 sind die 6 MHz vermutlich etwas
> schnell. Wenn es nur um einen Trigger geht finde ich 2
> Standardschaltkreise + Quarz nicht schlecht. Leider hat man den
> passenden Quarz und die ICs meist nicht im Haus. Den uC schon eher.

Der Fragesteller hat auch seine Vorstellungen von der zu erzielenden 
Genauigkeit gegeben. 6 Stunden +/- 0.5 Stunden. Das erreicht man mit 
einem µC (er hat bereits einen Mega32) locker auch ohne Quarz und (auch 
wenn ich jetzt geschlagen werde) mit ganz banalen Delay-Schleifen.

von Bob (Gast)


Lesenswert?

Rene Schube schrieb:
> Mit einem uHz Timer z.Bsp.: LTC6991 den Controller alle 6 Stunden
> aufwecken, die Messung machen und wieder schlafen. Der LTC6991 ist
> einstellbar von 1ms bis 9,5h
>
> Das ist doch das einfachste, oder?

Genau wie Lösungen mit RTC-Chip, wo man sich nen "Wecker" stellen 
kann...

Macht manchmal Sinn. Ist aber nicht "das einfachste". Wenn die Schaltung 
z.B. Jahrelang aus einer Knopfzelle laufen soll, kann es lohnen einen 
besonders sparsamen Zusatzchip einzusetzen, um im Durchschnitt ein paar 
100 nA weniger zu verbrauchen.

Extrem niedriger Stromverbrauch war aber keine der Anforderungen. 
Besonders hohe Genauigkeit auch nicht. Also reicht die allerbilligste 
Lösung, und die ist halt rein in Software. Sogar der interne 8MHz 
RC-Oszi im ATMega würde reichen, nochmal 20 Cent für nen Quarz 
eingespart...

von af (Gast)


Lesenswert?

Ganz einfach. Besorge dir einen DS1371 Zähler (Sekundenzähler). Den 
steuerst du per I2C an. Alles easy. Wenn du dann fragen bei der 
Umsetzung hast, meldest du dich hier noch mal.

von Bob (Gast)


Lesenswert?

af schrieb:
> Ganz einfach. Besorge dir einen DS1371 Zähler (Sekundenzähler). Den
> steuerst du per I2C an. Alles easy. Wenn du dann fragen bei der
> Umsetzung hast, meldest du dich hier noch mal.

Siehe oben. Exakt gleiche Begründung. Ist nicht easy, ist unnützer und 
teurer Mehraufwand.

von Andi (Gast)


Lesenswert?

Also nochmals danke,

hab da grad was mit delay schleifen gehört wie genau funktioniert sowas? 
Werden dazu auch timmer verwendet?
Das Programm von Peter Danneger sieht echt gut aus, aber leider in basic 
geschrieben such eher was in C.
von irgendwelchen externen Bauteilen wollte ich mich eigentlich fern 
halten, die Genauigkeit ist mir nicht so wichtig.

von Frank B. (foobar)


Lesenswert?

Das Programm von Peter Danneger sieht mir eher wie Assembler aus, oder 
meine Basic-Kenntnisse sind schon zu stark eingerostet :-) In C z.B. von 
der Idee her:
1
void main()
2
{
3
  int i, j;
4
  for (i = 0; i < 1000; i++) {
5
    for (j = 0; j < 1000; j++) {
6
      // tu nix
7
    }
8
  }
9
  ledAn();
10
  stop();
11
}

Die Verschachtelung der Schleifen brauchst du, falls der 
"int"-Zahlenwert z.B. nur 16 Bit ist. Ausprobieren, wie viel Ebenen mit 
welcher Schleifenlänge du brauchst. Bei guten Compilern wird so eine 
Schleife wegoptimiert, daher bei "tu nix" per Inline-Assembler noch ein 
"nop" einbauen, oder z.B. eine Dummy-Variable hochzählen.

PS: das ist eine schnell gehackte Lösung und nicht gut, da wenn du mal 
einen neuen Compiler installierst, es eine andere Verzögerung haben 
könnte. Besser per Interrupt einen genauen Takt generieren lassen und 
dann zählen, oder auch einfach nur Timerregister in einer Endlosschleife 
auswerten. Für eine Einmalanwendung, die du später nie wieder ändern 
willst, reicht es aber aus.

von sven s. (Gast)


Lesenswert?

@  Frank Buss

32 oder 64 bit Variablen sind auch kein thema...


wenn du schon einen µC hast dann mit Timer durchlaufenlassen und im 
overflow interrupt hochzählen ( 32 bit variable sollte reichen)
oder mit einem hier vorgeschlagenen rtc chip hat den vorteil das dass 
dann gegen stromausfall sicherer ist.

die lösung mit externen cmos steinen is doch völliger humbug bringt ja 
null vorteile teilen kann ein µC ganz gut und einen Uhrenquarz kann man 
auch dranhängen (ja die elektronik zum ansteuern is da schon drinn)

gruß sven

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
Noch kein Account? Hier anmelden.