Gast
#1633512
Hallo an Alle,
ich wollte mit einem Atmega128 acht analog Spannungen von Sharp
IR-Sensoren in einen digitalen Wert erfassen.
Jetzt habe ich das Problem das ich nicht alle Kanäle sampeln kann. Bin
verwirrt und hoffe wirklich auf eure Hilfe.
- F_CPU von 14.7456 Mhz
- ADC Prescalor von 128
- ARev = AVCC mit einem 100nF Kondensator auf Masse
_________________________________________
void adcInit( ) {
ADMUX = (0 << REFS1) | (1 << REFS0) | (1 << ADLAR);
ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
adcRead( 0 );
}
uint16_t adcRead( uint8_t mux ) {
ADMUX = mux | (0 << REFS1) | (1 << REFS0) ; //| (1 << ADLAR);
ADCSRA |= (1 << ADSC);
while ( ADCSRA & (1 << ADSC) ) {
;
}
return ADCW;
}
__________________________________________________________
Der Aufruf sieht in etwa wie folgt aus
uint16_t inf0 = adcRead(0);
_delay_ms(5);
uint16_t inf1 = adcRead(1);
...
Wenn ich nun alle acht Kanäle hintereinander Aufrufe (Verzögerung von
5ms)
bekomme ich folgende verwirrende Werte. Vor allem wenn ich kein
IR-Sensor angeschlossen habe, sollte auf dem AD-Pin eigentlich 0 V
liegen.
inf0:inf1:inf2:inf3:inf4:inf5:inf6:inf7
975 : 0 : 954 : 0 : 937 : 0 : 927 : 0
976 : 0 : 959 : 0 : 938 : 0 : 922 : 0
975 : 0 : 955 : 0 : 931 : 0 : 919 : 0
977 : 0 : 950 : 0 : 931 : 0 : 923 : 0
…
sollte ein Sensor am Pin 0 angeschlossen sein wird folgendes gesampled
467 : 0 : 457 : 0 : 447 : 0 : 447 : 0
464 : 0 : 457 : 0 : 446 : 0 : 443 : 0
456 : 0 : 451 : 0 : 452 : 0 : 452 : 0
454 : 0 : 446 : 0 : 438 : 0 : 442 : 0
…
Der erste Wert passt, ich versteh nur nicht warum der dritte, fünfte und
siebte sich auch verändert. Wenn der Sensor am Pin 1 angeschlossen ist,
ändert sich inf2 und nicht inf1.
Evt könnt ihr mir ja weiterhelfen.
Soweit Gruß
Alex