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


von Kristian (Gast)


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??

von Stefanie B. (sbs)


Lesenswert?

unsigned | signed

von Kristian (Gast)


Lesenswert?

Was meinst du mit unsigned | signed?
Habe ja keine Variabel gebraucht!?

von Obelix (Gast)


Lesenswert?

%d -> %u

von Karl H. (kbuchegg)


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.

von Kristian (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


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.

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.