16 Bit Division Konstante / Variable in AVR-ASM.

Gast #874501
Lesenswert?

Ihr habt mir ja neulich schon sehr geholfen...

Nun stehe ich vor einem neuen Problem, ich brauche mal wieder eine 
Division (diesesmal andersrum):

Und zwar hab ich eine Konstante (in diesem Fall 37500) die ich durch 
einen Timerwert (16 Bit Variable) teilen muss...

Hat jemand ne Idee, wie man das mit weniger als 200 Takten hinbekommt?

Freue mich auf eure Antworten!

Viele Grüsse


Boese
Gast #874532
Lesenswert?

es gibt doch sicherlich appnotes bei Atmel, die solche Grundfunktionen 
beschreiben. Oder nicht? Wenn die nicht genau den Fall haben, den Du 
brauchst, dann gibt's mit großer Wahrscheinlichkeit  etwas zum 
allgemeineren Fall Variable/Variable, wo man ja nur noch eine Variable 
durch einen Konstanten Wert ersetzen muß.
Gast #874540
Lesenswert?

Hallo Jens,

ja es gibt divisionsroutinen... Allerdings bin ich der Meinung dass es 
bestimmt schneller geht, wenn sich da mal n mathe-genie mit beschäftigt 
(siehe mein Posting von gestern, da kam eine Routine raus, die 20 Takte 
braucht anstatt die 240 (Atmel-appnote variante)).

Gruss
Gast #874543
Lesenswert?

Hallo,
die Frage ist in welchem Wertebereicht das Ergebniss liegt.

Wenn es z.b. zwischen 1 und 10 liegt dann kannst du einfach den 
Timerwert so lange addieren bis du >= der Konstante bist und einfach die 
Anzahl zählen.
Gast #874563
Lesenswert?

Hallo,
die Wuzel aus 37500 ist ca. 194.
Also kann man mit einer Tabelle aus 194 Wertepaaren das Ergebnis recht 
genau berechnen.
Ist die Zahl durch die dividiert wird grösser, muss die richtige Stelle 
in der Ergebnisspalte gesucht werden. Das kann man binär machen.

Ob das schneller ist, habe ich nicht untersucht. Bis 194 ist das eine 
einfache Adressrechnung.

Gruss
Gast #874579
Lesenswert?

naja, das sind ja aber alles solche Krücken, die letztendlich eine 
Vereinfachung durch Reduzierung der Genauigkeit und Wertebereiche 
anstreben. Da müsste Boese genauer spezifizieren, welche Anforderungen 
er diesbezüglich hat. Mein Gefühl sagt mir jedenfalls, daß das ohne 
Beschränkungen in diesem Falle kaum gehen wird.

Vielleicht kann er auch das Programm mal dahingehend untersuchen, ob 
sich solche Divisionen nicht auch in weniger zeitkritische Bereiche 
verlegen lassen . Wenn das Ergebniss z.B. nur in der Anzeige erscheinen 
soll, intern aber sonst nicht weiterverarbeitet werden soll, dann muß 
man sowas ja nicht unbedingt in einer zeitkritischen INT Routine machen. 
Oder irgendwelchen User-Input kann man schon zu irgendwelchen 
Zwischenergebnissen vermatschen, welche  dann in zeitkritischeren 
Bereichen verwendet werden fürs endgültige Ergebnis.
Hängt natürlich alles vom konkreten Fall ab.

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