Forum: Mikrocontroller und Digitale Elektronik ADC Was passiert hier genau


von Birger M (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

> 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

von Karl H. (kbuchegg)


Lesenswert?

> & ist modulo

Tippfehler:  % ist modulo

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
Noch kein Account? Hier anmelden.