mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 22Bit Wert durch 100 dividieren und auf LCD ausgeben


Autor: Gregor_V (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich müsste einen 22Bit Wert durch 100 dividieren, damit danach ein
16Bit Wert herauskommt, welcher danach wiederum auf einer LCD augegeben
wird.

Gibt es hierfür eine einfache möglichkeit das zu realisieren?

mfg Gregor

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: dds5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Frage ist leider zu unspezifisch. Auf welcher Plattform findet alles
statt ?  Taschenrechner, PC oder µController ?

Dieter

Autor: Gregor_V (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: dds5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gregor_V (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, nur ist eine 22Bit BIN2BCD Routine aufwendiger zu realisieren als
eine 16Bit Ausgabe, und ich habe auch leider nicht mehr allzu viel
freie Register...

Autor: dds5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag:
nach dem Teilen muß das hexadezimale Ergebnis latürnich noch in BCD
oder ASCII gewandelt werden (was halt die LCD braucht).

Autor: Gregor_V (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Philipp Sªsse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.