www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AD-Wandler, Sprache: C


Autor: Kristian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Ich habe ein kleines Problem. Ich habe eben ein Programm für den 8Bit 
AD-Wandler in C geschriben. Der AD-Wert soll mit 8 LED angezeigt werden 
und zudem noch via RS232 dezimal auf einem Terminal auf dem PC 
ausgegeben werden
( printf("%d",read_adc()); )
Ich dachte, auf dem PC gibt es nun Zahlen zwischen 0 und 255 aus, jedoch 
gibt es Zahlen von 0 - 128 und von -128 - -1 aus!!!! Wieso das??

Autor: Stefanie B. (sbs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
unsigned | signed

Autor: Kristian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was meinst du mit unsigned | signed?
Habe ja keine Variabel gebraucht!?

Autor: Obelix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
%d -> %u

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

Bewertung
0 lesenswert
nicht lesenswert
Kristian wrote:
> Was meinst du mit unsigned | signed?
> Habe ja keine Variabel gebraucht!?

Aber du hast einen Format String gebraucht.
%d bedeutet nun mal: Nimm die 16 Bit die als Argument
übergeben werden und gib sie als Zahl mit Vorzeichen
aus.

Autor: Kristian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was muss ich den eingeben, wenn ich z.B. einen 10Bit Wandler brauchen 
möchte???

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

Bewertung
0 lesenswert
nicht lesenswert
Kristian wrote:
> Was muss ich den eingeben, wenn ich z.B. einen 10Bit Wandler brauchen
> möchte???

Falsche Frage.
Richtige Frage:
Welchen Datentyp muss deine read_adc() Funktion liefern?
Nach diesem Datentyp bestimmt sich dann das Formatzeichen,
welches im printf benutzt werden muss.

Hintergrund: Im Aufruf der printf Funktion steht erst mal
ein arithmetischer Ausdruck. Ob dieser Ausdruck nun
   0
oder
   a     ( a sei eine int Variable )
oder
   a + 4
oder
   function()     (function sei eine Funktion die einen int liefert)
oder
   a + function()
oder
   a + function() + 5
oder
   ....

lautet, ist erst mal dem printf völlig egal. Da steht ein
arithmetischer Ausdruck und wenn dieser Ausdruck ausgewertet
wird, dann entsteht daraus eine ganze Zahl mit Vorzeichen
(eben ein int). Bei einem int lautet aber das Formatierzeichen
auf %d.

Hast du aber eine ganze Zahl mit 16 Bit ohne Vorzeichen, dann
lautet das Formatierzeichen auf %u

Die Frage lautet daher nicht: Was muss read_adc liefern, damit ein
%d das richtige ausgibt.
Die Frage lautet umgekehrt: Was habe ich in meiner Argumentliste
und wie muss daher das zugehörige Formatierzeichen im Formatierstring
aussehen.

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.