www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC Was passiert hier genau


Autor: Birger M (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> & ist modulo

Tippfehler:  % ist modulo

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.