Fixpunktnachkommastellen zu BCD

Gast #4093943
Lesenswert?
• ▲
▼
Hallo!

Wie wandelt man mit einem AVR (ASM) die Fixpunktnachkommastellen zu BCD 
um?

Beispiel: .75 dezimal entspricht bei 4 Bit Nachkommastellen 1100 binär - 
also dezimal 12.
Die 75 als Ganzzahl kann ich errechnen, indem ich die 12 mit 100 
multipliziere (wegen 4 Bit ergeben sich maximal 2 dezimale 
Nachkommastellen) und anschliessend durch 16 dividiere (2^4). Danach 
kann ich eine Routine wie die in AppNote 204 verwenden, um die BCD-Codes 
zu erhalten.

Aber geht es nicht auch irgendwie effizienter über irgendwelche cleveren 
Bit-Schiebereien, Algorithmen oder dergleichen bzw. ohne die 
Multiplikation und Division? Die erscheinen mir etwas aufwändig für die 
Aufgabenstellung.


Danke im Voraus und Gruss!
Gast #4093989
Lesenswert?
• ▲
▼
Max H. schrieb:
> Die Division durch 16 geht mit 4 Rechtsshifts, eventuell durch Nibble
> Swap optimierbar, Multiplikation geht bei ATmegas in Hardware.
Stimmt. Das habe ich beides übersehen. Damit sieht das gleich viel 
eleganter aus. Das probiere ich.

Route 66 schrieb:
> Effizient in welcher Hinsicht
Geschwindigkeit. Der Rest scheint mit kein Problem zu sein.
#4094006
Lesenswert?
• ▲
▼
Nico schrieb:
> Geschwindigkeit. Der Rest scheint mit kein Problem zu sein.

Deine 4 binären Nachkommastellen ergeben 16 mögliche BCD-Werte.
Bei zweistelliger dezimaler Nachkommastelle sind das 16 Bytes, bei 
vierstelliger dezimaler Nachkommastelle 16 Words.

Für Dein Beispiel (zwei dez. Nachkommastellen aus 4 binären) ergibt sich 
eine Tabelle von 16 Bytes BCD-Code, also:
00 06 12 19... und für den 12ten Wert findet man dann 75.
Über einen Zeiger ist der Zugriff einfach. Auch nichtlineare 
Zusammenhänge oder spezielle Rundungsregeln (Abschneiden, kaufmännisch, 
immer Aufrunden...) sind möglich.

Nennt sich Lookup-Table (LUT).

Für zwei Nachkommastellen geht es weder schneller noch mit weniger 
Speicher.

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.