PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dezimal und Dualzahlen miteinander verrechnen



Katja
18.03.2006, 11:20
Hallo Community,

ich möchte gerne, daß der Asuro abhängig von der Helligkeit seine Geschwindigkeit verändert. Die Helligkeit wird mit dem ADC und 10Bit aufgelöst und für die beiden Photodioden in "uint16_t data[2]" gespeichert.

Die Geschwindigkeit für beide Motoren kann ich über die Funktion MotorSpeed( rechter Motor, linker Motor) setzen. Allerdings nur mit 8Bit werten. Also maximal MotorSpeed(255,255).

Meine Idee war jetzt einfach den 10-Bit-Wert des ADC durch 1023 zu teilen und mit 255 zu multiplizieren. Also so: MotorSpeed( data[0]/1023*255 , data[1]/1023*255 ) Leider geht das nicht. Vielleicht wegen dual und dezimal-zahlen? Wär super wenn mir jemand helfen könnte

lg Katja

PiH
18.03.2006, 12:54
wie wärs wenn du einfach die letzten 2 bits vom lsb streichst die sind am unwichtigsten dann hast du 8bit

xanadu
18.03.2006, 13:14
Wenn du einen Wert von 0 bis 1023 durch 1023 teilst, dann wird irgendetwas zwischen 0 und 1 herauskommen. Da Du aber mit ganzzahligen Werten areitest, ist das Ergebnis immer 0 oder 1 und nichts dazwischen. Erst dann wird mit 255 multipliziert, das Ergebnis ist also 255, wenn der Eingangswert 1023 ist, sonst 0.

Der Lösungsansatz von PiH ist genau der richtige Weg. Die letzten zwei Bit "streichst" du, indem du den Eingangswert um zwei Bit nach rechts verschiebst (shift right) oder einfach durch 4 teilst.

PasstScho
18.03.2006, 13:20
Hallo Katja,
Du kannst nicht einfach ein 16Bit Word durch 1024 teilen und danach mit 256 Multiplizieren.
Kommalose Datentypen in Computern haben wirklich kein Komma.
Also ist 753/1024=0! (nicht 0,7! und die 0,7 wird auch nicht aufgerundet - denn wo kein Komma ist kann nicht gerundet werden!)
Wenn du dann 753/1024*255 machst kommt eben auch 0 raus!
Was du machen könntest, wäre die letzten 2 Bits deiner 10Bit Daten einfach wegzulassen.
Das ist dann wire PiH gemeint hat.

MotorSpeed((data[0] >> 2),(data[1] >> 2));
So könnte es gehen.
MfG Alex

PasstScho
18.03.2006, 13:21
Da war einer nen paar Sekunden schneller als ich :)

xanadu
18.03.2006, 13:43
@PasstScho: Dafür warst Du ausführlicher ;-)