Forum: Mikrocontroller und Digitale Elektronik Genaue Zeiten berechnen


von Bastian (Gast)


Lesenswert?

Hallo,

kann mir jemand einen Link oder App Notes empfehlen, wo die genaue 
Berechnung des Timers (Timer/Compare) bei verschiedenen Taktfrequenzen 
finde?

z.B. wie ich den Timer dimensionieren muss, um bei 8 MHz einen 1Hz Takt 
zu erzeugen, oder bei 10 MHz einen 3 Hz Takt.



Danke

Gruß
Bastian

von Jens (Gast)


Lesenswert?

in c oder asm?
in asm einfach die taktzyklen zusammenzählen ;) aber den drann, die 
takte für vergleiche und sprünge mitzurechnen

von Bastian (Gast)


Lesenswert?

Ich wollte das in asm machen.

Einfach zusammenzählen? Hast du evtl. einen Quelltext zur Ansicht?

von jimmibee (Gast)


Lesenswert?

die zeit zusammenzählen, die du pro zählimpuls hast plus die zeiten für 
spünge und befehle in der zählroutine

von Bastian (Gast)


Lesenswert?

Ich hab noch eine Frage:


Wennn der Zähler mit dem Compare Register übereinstimmt und der 
Interrupt ausgelöst wird,

setzt man dann in der Interrupt Routine im allgemeinen den Zähler zurück 
oder lässt man ihn weiterlaufen (bis er überläuft und von vorn 
anfängt)??

Welche Variante ist sinnvoller um genauere Takte zu erhalten??


Gruß

Bastian

von jimmibee (Gast)


Lesenswert?

>setzt man dann in der Interrupt Routine im allgemeinen den Zähler zurück oder 
lässt man ihn weiterlaufen (bis er überläuft und von vorn anfängt)??

jenachdem was du machst

>Welche Variante ist sinnvoller um genauere Takte zu erhalten??

test it

das sind zu allgemeine fragen, die du nach eigenem gut dünken selbst 
beantworten kannst. probiers doch einfach aus wie's läuft

von Peter D. (peda)


Lesenswert?

Ich reite warscheinlich schon tote Pferde, aber hier habe ich mal die 
Grundlagen beschrieben:

http://www.specs.de/users/danni/appl/soft/clock/index.htm


Trotzdem versuchen hier immer wieder Leute ganz verzweifelt unbedingt 
genau ganzzahlige Quarze und Teilerfaktoren rauszukriegen.

Warscheinlich wird heutzutage die Bruchrechnung nicht mehr gelehrt.


Peter

von Bastian (Gast)


Lesenswert?

Da muss ich mir erstmal überlegen, wie ich das am besten messen kann.
Mit einer Stopuhr messen, wie genau z.B. mein 1 Hz takt zählt?
Da könnte eine Messung länger dauern, um genaue Werte zu erhalten.

Ich hab gehofft, jemand könnte aus Erfahrung ein paar Tips geben..

von Jupp (Gast)


Lesenswert?

Im Studio simulieren dürfte einfacher sein, da siehst du wieviel Zeit 
exakt zwischen verschiedenen Breakpoints vergangen ist und ob Du Deinen 
1 Hz Takt hast.

von Stefan (Gast)


Lesenswert?

Hi,

besser als das was peter dannegger in seinem link beschrieben hat, gehts 
nicht! nu müsste doch eigentlich alles klar sein... oder!? interne timer 
in embeddet systems sind eben keine präzisionsuhren. was spricht gegen 
eine externe rtc?

taktmessung machtse am besten mit nem scope!!!???

stefan

von jimmibee (Gast)


Lesenswert?

>Mit einer Stopuhr messen, wie genau z.B. mein 1 Hz takt zählt?

zyklen zaehlen, taktfrequenz vom quarz lesen und die befehlsliste 
anschauen wegen anzahl der zyklen pro befehl, dann lässt sich alles sehr 
genau berechnen (zählen)

von Peter D. (peda)


Lesenswert?

@Stefan,

"interne timer in embeddet systems sind eben keine präzisionsuhren. was 
spricht gegen eine externe rtc?"


Ganz im Gegenteil !
Sie sind wie jeder digitale Teiler hochgenau.

Die Rechnung mit gebrochenen Zahlen sollte nur verdeutlichen, daß 
niemand merken kann, ob da ein paar Takte an einer Sekunde fehlen.
Deshalb reicht es für RTC-Anwendungen völlig aus, wenn man in 1/60 
(Minutenkorrektur), 1/3600 (Stundenkorrektur) oder 1/86400 
(Tageskorrektur) Schritten hochgenau korrigiert.


Zu den RTC ist zu sagen, daß Quarze mit hoher Frequenz stabiler und 
weniger temperaturabhängig sind. D.h. eine Uhr mit 11MHz ist immer 
genauer als eine mit 38kHz.


Deshalb hat eine externe RTC ausschließlich dann eine Berechtigung, wenn 
die Zeit bei Netzausfall über eine Batterie oder einen Elko 
weitergezählt werden soll, da typischer Weise ein MC mehr Strom benötigt 
als eine externe RTC (z.B. DS1338 = 400nA).


Ich bevorzuge meistens einen freilaufenden Timer (Interrupts alle 256, 
8192 oder 65536 Zyklen), da ich dann nicht mehr die Rechenzeit für das 
Software-Reload berücksichtigen muß.
Ich kann also in C programmieren ohne dann im erzeugten Assemblerkode 
die benötigten Befehlszyklen addieren und abziehen zu müssen.


Peter

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.