Hallo, ich betreibe einen M8L@3.3V mit dem Quellcode eines M8 der bei 5V läuft. Dabei fällt mir auf, dass der ADC bei 0-1650mV Werte von 0-777 liefert, und bei 1650-3300mV Werte von 1000-1777. Ist das normal? Ich hätte schon erwartet, dass der Bereich 777-1000 auch ausgefüllt wird. Oder mach ich irgendwo einen Fehler? Eine weitere Sache die mir nicht ganz einleuchtet. Bei 10 Bit hab ich einen Bereich von 0-1023. Der ADC geht aber bis 1777. Warum? Danke.
@ L. R. (badinode) >ich betreibe einen M8L@3.3V mit dem Quellcode eines M8 der bei 5V läuft. >Dabei fällt mir auf, dass der ADC bei 0-1650mV Werte von 0-777 liefert, >und bei 1650-3300mV Werte von 1000-1777. >Ist das normal? Der ADC liefert sicher keine 1777. Denn der macht bestenfalls 10 Bit, sprich 1023 ist das Maximum. >Oder mach ich irgendwo einen Fehler? Wahscheinlich liefert deine Funktion schon ein in mV umgerechnetes Ergbnis. Und wenn der Code für 5V Betriebs-und Referenzspannung ausgelegt ist, dann klappt das mit 3.3V eben nicht. >einen Bereich von 0-1023. Der ADC geht aber bis 1777. Warum? Siehe oben. Festkommaarithmetik MfG Falk
Das schreit nach einem Programmfehler und normal ist das keinesfalls.
1 | void adc_init(void) { |
2 | ADMUX = 0b01000000; |
3 | ADCSRA |= 0x80; |
4 | }
|
5 | |
6 | uint16_t readadchan(char n) { |
7 | |
8 | ADMUX = n; |
9 | ADMUX |= 0x40; |
10 | ADCSRA |= 0x44; |
11 | |
12 | while((ADCSRA & 0x40) !=0){}; |
13 | |
14 | ADCSRA &= ~(0x44); |
15 | return ADCW; |
16 | }
|
Das ist der Code. readadchan() wird öfters aufgerufen um zu mitteln. Es findet keine Umrechnung in Spannungen oder sonstws statt. Ich gebe direkt den ADC-Wert aus.
Wo ist das Problem? 0- 777 (oktal) -> 0- 511 (dezimal) 1000-1777 (oktal) -> 512-1023 (dezimal)
Okay, nun nochmal für diejenigen, denen das vielleicht auch mal passieren sollte. Der Fehler lag im
1 | itoa(a, buf, 8); |
. Hatte irrtümlicherweise angenommen, die 8 stünde für die Bufferlänge. Dabei steht sie für Octal. Also muss da eine 10 draus werden und gut is.
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.