Forum: Mikrocontroller und Digitale Elektronik 16 Bit Division Konstante / Variable in AVR-ASM.


von boese (Gast)


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

von JensG (Gast)


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ß.

von boese (Gast)


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

von Peter (Gast)


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.

von Andreas K. (a-k)


Lesenswert?

Atmal AN200: 173 Takte.

Division durch eine Konstante lässt sich u.U. durch Multiplikation mit 
einer Variablen und Division durch 2-er Potenz ersetzen. Aber hier ist 
das ja andersrum, da wäre mir das neu.

von JensG (Gast)


Lesenswert?

tja, aber hier dividieren wir jetzt durch eine Variable - da wirds 
sicherlich weit schwieriger.

von Gast (Gast)


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

von JensG (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.