Forum: Compiler & IDEs Seltsame Werte bei ADC (ATMEGA8)


von Sandra Schaefer (Gast)


Lesenswert?

Hi Folks,

Ich habe ein problem dass ich nicht verstehe...
Habe aus dem Tutorial einfach das LCD und das ACD beispiel 
zusammenkopiert.

Codeschnipsel:
  //ADC Test
  uint16_t adcval;
  char str[16];

        adcval = ReadChannel(0); /* MUX-Bits auf 0b0000 -> Channel 0 */

  itoa(adcval, str, 4);

  set_cursor(0,4);
  lcd_string(str);

AVCC und Aref liegen auf VCC (5V)
Wenn ich den ADC0 Pin auf Masse lege, kommt eine 0 raus. Das sollte 
soweit auch noch Stimmen :)
Aber wenn ich den ADC0 Pin auf VCC lege bekomme ich den Wert 33333 
zurück. Ich hätte dort 1023 erwartet...

Am Vorteiler sollte es ja nicht liegen, da ja Gleichspannung am Pin 
nagelegt ist.

Das ADC beispiel ist unverändert.
* interne Referenzspannung
* Vorteiler auf 8

macht itoa(); an der stelle Mist?

Schönen Sonntag Abend noch!

Sandra

von Johannes M. (johnny-m)


Lesenswert?

Sandra Schaefer wrote:
> macht itoa(); an der stelle Mist?
Wenn man einen unsigned int ausgeben will, sollte man keine Funktion 
benutzen, die zur Ausgabe eines (signed) int vorgesehen ist. Soweit 
dazu.

Warum jetzt konkret ein solcher Wert herauskommt, kann man anhand des 
gezeigten Codeschnipsels nicht sagen, aber die Vermutung, dass irgendwo 
eine implizite Typumwandlung stattfindet, die nicht sein soll, oder dass 
beim Auslesen und verarbeiten des Wertes irgendwas schief läuft, drängt 
sich auf...

von Johannes M. (johnny-m)


Lesenswert?

Sandra Schaefer wrote:
>   itoa(adcval, str, 4);
Autsch, war mir grad gar nicht aufgefallen. Du solltest Dir in der Doku 
unbedingt mal anschauen, welche Parameter itoa überhaupt erwartet! Die 
4 da hinten ist die Basis des Ausgabe-Zahlensystems!

Und jetzt rate mal, was 1023 im Vierersystem ist... Genau, 33333!

von Sandra Schaefer (Gast)


Angehängte Dateien:

Lesenswert?

Sorry wollte eigentlich den ganzen Quelltext anhängen.
Hiermit tu ich das :9

von Sandra Schaefer (Gast)


Lesenswert?

>> itoa(adcval, str, 4);
> Autsch, war mir grad gar nicht aufgefallen. Du solltest Dir in der Doku
> unbedingt mal anschauen, welche Parameter itoa überhaupt erwartet! Die
> 4 da hinten ist die Basis des Ausgabe-Zahlensystems!

das heißt wenn ich die 4 durch eine 10 ersetze sieht es besser aus?

von Johannes M. (johnny-m)


Lesenswert?

Sandra Schaefer wrote:
> das heißt wenn ich die 4 durch eine 10 ersetze sieht es besser aus?
Tja, könnte sein...

von Sandra Schaefer (Gast)


Lesenswert?

Habs grad nachgerechtet 3333 zur Basis 4 = 255 zur Basis 10

Tja das mit iota() war ein Typischer copy&paste Fehler... Im internet 
Beispiel suchen und klauen :-)

Danke :)

von Johannes M. (johnny-m)


Lesenswert?

Du hast oben aber was von 33333 geschrieben, und das ist 1023 (was ja 
auch zu erwarten gewesen wäre).

Aber wie schon oben gesagt, für die Ausgabe von vorzeichenlosen Zahlen 
sollte man keine Funktion nehmen, die zur Ausgabe von 
vorzeichenbehafteten Zahlen vorgesehen ist! Es gibt auch eine Funktion 
für vorzeichenlose...

von Sandra Schaefer (Gast)


Lesenswert?

Os sorry mein Fehler. natürlich war 33333_4 = 1024_10 gemeint.

Das währe dann utoa(); ?

von Johannes M. (johnny-m)


Lesenswert?

Sandra Schaefer wrote:
> Os sorry mein Fehler. natürlich war 33333_4 = 1024_10 gemeint.
Falsch. Es ist 1023, nicht 1024.

> Das währe dann utoa(); ?
Das wäre sinnvoller als itoa, auch wenn es bei Werten kleiner als 32768 
keinen Unterschied macht.

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.