Gast
#273528
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