mikrocontroller.net

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


Autor: Sandra Schaefer (Gast)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: Sandra Schaefer (Gast)
Datum:
Angehängte Dateien:

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

Autor: Sandra Schaefer (Gast)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: Sandra Schaefer (Gast)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: Sandra Schaefer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Os sorry mein Fehler. natürlich war 33333_4 = 1024_10 gemeint.

Das währe dann utoa(); ?

Autor: Johannes M. (johnny-m)
Datum:

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

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.