-         

Ergebnis 1 bis 6 von 6

Thema: Dezimal und Dualzahlen miteinander verrechnen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    18.03.2006
    Beiträge
    24

    Dezimal und Dualzahlen miteinander verrechnen

    Anzeige

    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

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    07.03.2006
    Beiträge
    15
    wie wärs wenn du einfach die letzten 2 bits vom lsb streichst die sind am unwichtigsten dann hast du 8bit

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.10.2005
    Ort
    Mönchengladbach
    Alter
    47
    Beiträge
    114
    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.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.11.2004
    Ort
    München
    Alter
    30
    Beiträge
    447
    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.
    Code:
    MotorSpeed((data[0] >> 2),(data[1] >> 2));
    So könnte es gehen.
    MfG Alex

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.11.2004
    Ort
    München
    Alter
    30
    Beiträge
    447
    Da war einer nen paar Sekunden schneller als ich

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.10.2005
    Ort
    Mönchengladbach
    Alter
    47
    Beiträge
    114
    @PasstScho: Dafür warst Du ausführlicher

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •