www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik autorennbahn zeitmessung FF FF x 16bit multiplikation


Autor: jonny knoxville (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hallo!

ich arbeite an einem kleinen heimprojekt und stehe jetzt vor einem
problem. ich möchte mit einem lichtschranken rundenzeit momentane
geschwindigkeit und rundenanzahl messen. im moment hänge ich noch bei
der auswertung wo ich FF FF mit 16bit multiplizieren muss.
ich habe anfangs ein progframm geschrieben wo ich FF FF mit 8 bit
multipliziere doch habe erst im nachhinein gesehen dass die zeit mit
8bit zu kurz für die messung ist.
die berechnung bezieht sich auf die rundenzeit.ich möchte nur die
überläufe zählen weil die programmierung dadurch wesentlich einfacher
ist und der fehler nur 1/1000 beträgt. ich bin für jede
anregung,hilfe,bessere idee zur messung dankbar.
ps:programmierung mit 8052kit im asm

mit freundliche grüßen

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst ja ein Register erhöhen und bei Überlauf wiederum ein anderes
erhöhen und wenn das überläuft wieder ein anderes so kannst du es
beileibig fortsetzen.
a=a+1
if a=255 then b=b+1
if b=255 then c=c+1
if c=255 then d=d+1
if......
goto Anfang

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast ne 8*8=16Bit Multiplikation, die kannst Du auf beliebige
Bitbreiten erweitern.

Das Prinzip entspricht dem der schriftlichen Multiplikation.


Peter

Autor: jonny knoxville (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

danke für die beiden einträge.beiden haben mir zum erfolg geholfen.
das programm läuft perfekt.
jetzt muss ich das nur noch auf elegante weise abwickeln.als
endergebnis bekomme ich nämlich 4byte(weil 4 speicherplätze für die
teile der endergebnisse)
ich denke dabei an eine stapelung der bytes in richtiger reihenfolge ab
einer bestimmten adresse.
was meint ihr? was ist zu beachten? welche eleganten lösungen gibt es
noch?

mit freundlichen grüßen

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>im moment hänge ich noch bei
>der auswertung wo ich FF FF mit 16bit multiplizieren muss.

(16bit) ist deine 16bit zahl
Wie wärs mit (10000hex *(16bit))-(16bit)
das ist das gleiche wie 0xFFFF*(16bit)
elegant wird das ganze natürlich erst wenn man die Multiplikation
durch
shiften ersetzt. Oder richtig elegant:
Man greift aufs 3. Byte zu
bsp: (16bit)=8hex
10000hex *8hex=80000hex (noch 8hex subtrahieren)
entspricht einer verschiebung um 2 Bytes. Also kein shift sondern
einfache mov Befehle.

elegant genug?

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nehm doch einfach das Byte das zuletzt Beschrieben wird. Wenn hier die
Genauigkeit nich reicht und das letzte Byte so ausschaut 00011111 dann
nehm einfach die letzen 5bits und schiebe die höheren 3Bits vom
vorherigen Byte dazu

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.