timer1 Wert in ms umrechnen

Gast #525579
Lesenswert?
• ▲
▼
Hallo,
ich habe da eine Frage zur Umrechnung von timerwerten in ms.
Diese ms Werte möchte ich dann gerne per uart übertragen.
Man könnte das ja z.B. so machen:

t[s]=((1/FCLK)*prescaler)*timerwert

mein Probem ist nur, das ich zur Umrechnung sehr hohe Werte habe 
(uint32_t) und diese auch noch multiplizeieren muß.

Gibt es da nicht einen eleganteren Weg?

Hier meine Vorrausseztungen:
a) Zeit messen
b) 0s-5s
c) prescaler=1024
d) clk = 8Mhz

vielen Dank

mfg chris
#525647
Lesenswert?
• ▲
▼
Du könntest doch zunächst mal ein paar Konstante
ausrechnen

(1/FCLK)*prescaler

da mal einsetzen:

(1/8000000)*1024

gekürzt ergibt das

1 / 7812

wenn du nun 1/7812 * timerwert rechnest kriegst du
das Ergebnis in Sekunden, also als Kommazahl. Du willst
aber Millisekunden. Also kannst du gleich noch mal einen
Faktor von 1000 einbringen um den Schritt von Sekunden
zu Millisekunden zu machen.
Daraus ergibt sich, dass sich deine Berechnung vereinfacht
zu

  1 / 7.812 * timerwert

Jetzt musst du dich entscheiden: Wieviele Kommastellen
willst du bei der Übertragung der Millisekunden?
Sagen wir mal 3 Nachkommastellen reichen dir. D.h.
du möchtest das Ergebnis nicht in Millisekunden sondern
das Hundertfache davon. Ein Ergebnis von 1000 soll 1 Millisekunde
repräsentieren. Ein Ergebnis von 2587 wären dann 2.587
Millisekunden.

Für deine Formel bedeutet das einen zusätzlichen Faktor
von 1000:

  1000 * timerwert / 7.812

Der Wert 1000 / 7.812 ergibt ausgerechnet ziemlich genau 128
d.h deine Gleichung vereinfacht sich zu

   128 * timerwert

Das Ergebnis ist wie bereits gesagt das Tausendfache der
Millisekunden. d.h. alles was du tun musst, ist bei der
Ausgabe zwischen die Tausenderstelle und der Hunderterstelle
ein Dezimalkomma einschmuggeln und du kriegst die Ausgabe
in Millisekunden mit 3 Nachkommastellen.
Gast #525722
Lesenswert?
• ▲
▼
Hallo  Karl heinz,

vielen Dank für deine ausführliche Darstellung. Den gleichen Ansatz 
hatte ich auch schon, nur ich dachte, das man 1/7812 also gleich 1.28*e4 
nicht als Konstante eintragen kann. Dachte es geht nur Ganzzahlig.
Ich werde mit folgender Formel weitergehen, da ich nur ganze ms ohne 
Kommastellen brache...

t[ms]=(128*timerwert)/1000


vielen Dank Karl heinz

cu

chris

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.