Hallo,
ich hab hier einen Programmausschnitt, indem ein analoges Signal
eingelesen wird und in ein digitales umgewandelt wird:
unsigned int val;
val = holeWert();
iprintf ("AIN%i: Digital Value %4u = %01u.%04u Volts\n",
chan, (unsigned) val,
(unsigned) (val * VREF) >> 10, /* Output
Integer Portion */
(unsigned) ((val VREF 10000UL) >> 10UL) % 10000); /* Output
Decimal Portion */
val -> ist der Wert den ich mir am analogen Eingang hole.
VREF -> ist mit 33/10 definiert
Das Programm funktioniert soweit und es handelt sich um ein Beispiel
von WinARM.
Ich würde aber gerne wissen was bei iprintf an der Stelle:
(unsigned) (val * VREF) >> 10,
(unsigned) ((val VREF 10000UL) >> 10UL) % 10000);
gemacht wird.
Er nimmt den val-Wert mit VREF mal und beim zweiten auch noch mit
10000ul. Aber was bedeutet >>10 ?
%10000 dies ist doch eine Modulo Berechnung oder?
Als Ausgabe bekomme ich:
AIN515: Digital Value 515 = 1.6591 Volts
AIN513: Digital Value 513 = 1.6523 Volts
AIN520: Digital Value 520 = 1.6757 Volts
AIN518: Digital Value 518 = 1.6689 Volts
AIN515: Digital Value 515 = 1.6591 Volts
Nur wenn ich 515*33/10 berechne komme ich auf 1699,5. Nimmt er da nur
die erste Stelle? Also die 1?
Aber was geschieht bei der zweiten Rechnung genau?
Danke,
Birger
> Aber was bedeutet >>10 10 bits nach rechts schieben. Ist gleichbedeutend mit einer Division durch 1024, da 1024 ja ( 2 hoch 10 ) ist. > Aber was geschieht bei der zweiten Rechnung genau? Ich denke, dass muesstest Du jetzt schon alleine hinkriegen. & ist modulo weiterer Hinweis: 3456 / 1000 -> 3 3456 % 1000 -> 456 mittels / und % kann man also wunderbar eine Zahl in Komponenten splitten: 3456 = 3 tausend und 456
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.