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!
Sorry wollte eigentlich den ganzen Quelltext anhängen. Hiermit tu ich das :9
>> 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?
Sandra Schaefer wrote:
> das heißt wenn ich die 4 durch eine 10 ersetze sieht es besser aus?
Tja, könnte sein...
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...
Os sorry mein Fehler. natürlich war 33333_4 = 1024_10 gemeint. Das währe dann utoa(); ?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.