Forum: Mikrocontroller und Digitale Elektronik Wieviel MHz am besten für 1 Sekunden Takt


von Kim S. (Gast)


Lesenswert?

Hallo,
wie komme ich rechnerisch am besten auf 1 Sekunden der 500ms oder 100ms 
Interrupt?
Also mit welchem Quarz und mit welchem Prescaler etc pp.
Leider komme ich mit dem Timer in Pascal noch nicht klar, daher kann ich 
den noch nicht einsetzen....

von Falk B. (falk)


Lesenswert?

@Kim Schmidt (corado)

>wie komme ich rechnerisch am besten auf 1 Sekunden der 500ms oder 100ms
>Interrupt?

Grundrechenarten?

>Also mit welchem Quarz und mit welchem Prescaler etc pp.
>Leider komme ich mit dem Timer in Pascal noch nicht klar, daher kann ich
>den noch nicht einsetzen....

Doch. Wenn du schon daran scheiterst, such dir ein anderes Hobby. Siehe 
Artikel Timer.

MFG
Falk

von spess53 (Gast)


Lesenswert?

Hi

Welcher Controller?

MfG Spess

von Kim S. (Gast)


Lesenswert?

Atmega 32

von Peter D. (peda)


Lesenswert?

Kannst jedem Quarz nehmen.
Das Prinzip ist Rechnen mit gebrochenen Zahlen:

Beitrag "Die genaue Sekunde / RTC"


Peter

von Steffen (Gast)


Lesenswert?

Tag!

Die MHz sind doch recht egal?
Hauptsache der Timer läuft mit größtem Prescaler nicht unterhalb einer 
Sekunde über?

Ganz Einfach:

- 16Bit-Timer verwenden.
-Passenden Prescaler verwenden.
- Interrut Timer_overflow aktivieren
-Korrekturzahl ausrechnen und nach einem Überlauf jeweils in den Timer 
vorladen.

Und schon hast du jede Sekunde (oder halb oder sonstiges??) einen 
Timer_overflow zur verfügung.

Bei Fragen helf ich gerne^^


Grüße Steffen

von Karl H. (kbuchegg)


Lesenswert?

Steffen schrieb:
> Tag!
>
> Die MHz sind doch recht egal?
> Hauptsache der Timer läuft mit größtem Prescaler nicht unterhalb einer
> Sekunde über?
>
> Ganz Einfach:
>
> - 16Bit-Timer verwenden.
> -Passenden Prescaler verwenden.
> - Interrut Timer_overflow aktivieren
> -Korrekturzahl ausrechnen und nach einem Überlauf jeweils in den Timer
> vorladen.

Anstelle von Vorladen, könnte man auch den CTC Modus benutzen.


Aber auch Falk ganz oben hat recht.
Timer sind universelle Bausteine des Mega32. Wenn man nicht mit ihnen 
umgehen kann, und das ist wirklich nicht schwer, dann verschenkt man 
glatt einen nicht unbeträchtlichen Teil dessen, was ein Mega32 von sich 
aus kann.

von Steffen (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Anstelle von Vorladen, könnte man auch den CTC Modus benutzen.

Ups, den hab ich jetzt ganz vergessen^^
Is beides eine Möglichkeit.
Egal welcher weg, beide führen nach Rom...

Ich hab schon öfters beide Wege eingeschlagen. ;-)

Grüße Steffen

von Matthias (Gast)


Lesenswert?

Mit nem 0,032768 MHz Quarz und nem Prescaler von 128 hat man einen
"Quarzgenauen" Sekundentakt (wenn ich mich jetzt nicht verrechnet hab) 
;-)

8-Bit Timer und Overflow IRQ

von Simon K. (simon) Benutzerseite


Lesenswert?

Matthias schrieb:
> Mit nem 0,032768 MHz Quarz und nem Prescaler von 128 hat man einen
> "Quarzgenauen" Sekundentakt (wenn ich mich jetzt nicht verrechnet hab)
> ;-)
>
> 8-Bit Timer und Overflow IRQ

Mit einem 16MHz Takt, 256er Prescaler und CTC auf 62499 (16 Bit Timer) 
kommt man ebenfalls auf 1Hz.

Software Prescaler kann man auch immer machen.

Für einen 1Hz Takt kann man alles nehmen.

von Achim M. (minifloat)


Lesenswert?

Wenn der Takt an einem Ausgang(ein Pin des Controllers) ausgegeben 
werden soll, kann man auch die PWM-fähigkeit des Timers mit 
einstellbarem TOP benutzen. Vllt. ein wenig overkill, aber Hauptsache es 
tut :)
mfg mf

von Guest (Gast)


Lesenswert?

Wenn es eine (batteriebetriebene) Uhr werden soll, gibt es spezielle 
Uhrenquarze mit ein paar und 32kHz. (Frage am Rande: Sind die eigentlich 
genauer, als die 16MHz mit Prescaler?)
Da gibts von AVR auch eine Appnote zu:
http://www.atmel.com/atmel/acrobat/doc1259.pdf

von oldmax (Gast)


Lesenswert?

Hi
Ist wirklich nett, wie ihr eure Antworten verpackt..
>Leider komme ich mit dem Timer in Pascal noch nicht klar, daher kann ich
>den noch nicht einsetzen....
Wieviele von euch programmieren in Pascal ?
Würd mich mal interessieren.
Die Frage ist vielleicht etwas unglücklich gestellt, denn wenn ich einen 
Interrupt alle 500ms oder alle 100 ms habe, brauche ich ja nur eine 
Variable hochzählen und entsprechend bei >1 oder >9 Sekunden hochzählen. 
Das bedeutet, es gibt halt eine Zeitbasis von 2 oder 10 Hz. Wenn der 
Pascal-Compiler da nicht grad eine Wissenschaft draus macht, kann man 
sich getrost zurücklehnen, der Controller steckt das lässig weg und läßt 
sich auch noch genug Zeit für weitere Aufgaben.
Da ich µC's auch nicht in Pascal programmiere, kann ich leider nicht 
mehr zu sagen.
Gruß oldmax

von Kim S. (Gast)


Lesenswert?

ja, so mache ich es zur Zeit.
Das ganze dient einem Amperstundenzähler, der zumindest über 2 Tage 
hinweg halbwegs genau sein sollte.
Leider bekomme ich aber schon nach wenigen Stunden erhebliche 
Abweichungen...
Auf der gleichen Platine habe ich noch einen RTC (PCF8386 oder wie der 
sich schimpft) Den nutze ich derzeit aber wirklich nur für die Uhr....

von Skua (Gast)


Lesenswert?

Ich nehme dann gern 4194304 Hz da braucht man sich nicht zu verenken.

Welchen PASCAL Compiler verwendest du?

von Kim S. (Gast)


Lesenswert?

ursprünglich AVRco, mit dem wäre das ganz einfach...
Jetzt habe ich mir aber die Vollversion von Mikropascal "gegönnt" und da 
ist leider nicht so viel pascal drin wie man erwarten sollte...vieles 
muss doch noch auf direktem Wege erledigt werden.. so das ich vermutlich 
doch gleich C hätte nehmen können...
Schade, ich habe hier etliche Quarze rumliegen, aber ich glaube kein 
4er...so ein Ärger

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.