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