Seltsame Werte bei ADC (ATMEGA8)

Gast #1219229
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
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...
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!
Gast
>> 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?
Gast
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 :)
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...
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.