22Bit Wert durch 100 dividieren und auf LCD ausgeben

Gast #165306
Lesenswert?

Wie würdest du es im Kopf machen ?
Ganz einfach: Das Komma um 2 Stellen verschieben. Dasselbe wird man
auch bei einem uC machen, denn das ist sehr viel schneller, als den
Wert durch 100 zu teilen und dann auszugeben.
Gast #165308
Lesenswert?

Ich habe einen ATMEGA 16 und programmiere in Assembler.

Ich muss bei einem Tacho die gefahrene Strecke anzeigen, das mache ich,
indem ich bei jeder Radumdrehung z.B 86cm hinzuaddiere.

Wie kann ich also die Kommastelle hier verschieben?
Gast #165309
Lesenswert?

>Wie kann ich also die Kommastelle hier verschieben?

Wenn du in Assembler programmierst hast du irgendeine Routine, die den
Wert auf dem LCD ausgibt. Und da musst du einfach vor der Ausgabe der
10er Stelle ein Komme ans LCD senden.
Gast #165310
Lesenswert?

Da die 22 Bit wahrscheinlich auf drei 8 Bit Register verteilt sind
könnte man z. B. durch 128 teilen indem man 7 mal nach rechts schiebt
(oder einmal links und das niederwertigste Byte wegwerfen). Um eine
Teilung durch 100 zu erreichen vergrößert man einfach den Pro Impuls
addierten Wert um den Faktor 1,28.
X mal 1,28 / 128 = X / 100
Sebstverständlich gibt es noch meherere andere Lösungen, aber das
dürfte mit Assembler die kürzeste und schnellste sein.

Dieter
Gast #165313
Lesenswert?

Um eine BCD Zahl in den Standard ASCII Code für LCDs umzuwandeln muss
man soweit ich weiß ja eigentlich eh nur 48 dazuaddieren.

Aber wie kann ich in Assembler einen Kommawert als Faktor hinzufügen?
Gast #165314
Lesenswert?

Allgemein, um eine große Zahl als ASCII auszugeben:

Starte mit dem ASCII-Wert von '0' in einem Register. Nun durchlaufe
eine Schleife, in der Du jedesmal 1.000.000 von Deinem
Wert abziehst und (falls das ging), Dein Register inkrementierst. Ist
die Zahl schon zu klein, schreibst Du den Wert raus. Und das gleiche
machst Du dann für 100.000, 10.000 usw. Ist schneller und einfacher als
alles, selbst wenn Du mal drei-Byte-Werte subtrahieren mußt. Nach den
hunderten kann man aufhören, wenn der Rest nicht angezeigt werden
soll.

Speziell in diesem Fall: Du brauchst keine cm, sondern immer nur Meter.
Dieter hat also Recht: ändere Deine Zählbasis! Ich würde es so machen,
daß Du in zwei Bytes nachher direkt Deine Meter stehen hast. Also
müssen im dritten Byte 256stel-Meter stehen. Also zählst Du pro
Umdrehung 220 zu diesem Byte hinzu, der Übertrag kommt auf das Wort, in
dem die Meter stehen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren