mikrocontroller.net

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


Autor: boese (Gast)
Datum:

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

Autor: JensG (Gast)
Datum:

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

Autor: boese (Gast)
Datum:

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

Autor: Peter (Gast)
Datum:

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

Autor: Andreas K. (a-k)
Datum:

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

Autor: JensG (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

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

Autor: JensG (Gast)
Datum:

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

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.