-
-
Neuer Benutzer
Öfters hier
einfache Division mit Atmega AVR?
Hallo,
//alles Folgende bezieht sich auf einen assemblerprogrammierten
//Atmega 324P
Ich möchte meinen Roboter mit einer Art Tacho ausstatten, der die Geschwindigkeit ermittelt:
Dazu sind an den Rädern Impulssensoren angebracht (3 Impulse/Umdrehung). Die Zeitdauer zwischen zwei Impulsen wird mit einem Hardwaretimer exakt gemessen. Um nun die Geschwindigkeit zu erhalten muss man bekanntermaßen folgende Formel anwenden:
Geschwindigkeit = zurückgelegter Weg / dafür benötigte Zeit
Der Weg ist in meinem Fall kostant, die Zeit ändert sich. Um die Aufgabe mit Mikrocontroller (in meinem Fall: Atmega324P) zu lösen, verwendet man in der Regel Routinen, die prinzipiell das schriftliche, dezimale Dividieren nachbilden und relativ viel Zeit (einige 50 Taktzyklen) benötigen.
Ich habe mir gedacht, dass man solche Aufgaben eigentlich schneller lösen können müsste, wenn man die Division in eine Multiplikation umwandelt und die mit dem Hardwaremultiplizierer des Controllers durchführt:
Ergebnis = Divident * (1/Divisor)
Allerdings hat man das Problem nur verlagert, da man vorher den Reziprokwert des Divisors bilden muss (1/Divisor).
Ich könnte mir aber vorstellen, das dies auf binärer Ebene durch einfache Bitmanipulationen machen kann (analog funktioniert es ja schließlich auch bei Addition/Subtraktion).
Meine Frage an euch:
Funkioniert das so? Oder kann man auf anderem Wege die Division beschleunigen?
Ich hab auch schon eine ganze Weile mit Papier und Bleistift überlegt und auch im Internet nachgesehen habe aber nichts passendes gefunden. (vielleicht steh ich aber einfach nur auf dem Schlauch)
Vielen Dank für sämtliche Bemühungen
Gruß,
wolli_bolli
PS.: Ich möchte das ganze in Assembler programmieren.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen