ATmega128 und mehrere AD-Wandlungen

Gast #1633512
Lesenswert?

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
Gast #1633569
Lesenswert?

Wenn du nichts angeschlossen hast an den Pins und weder Pullup noch 
Pulldown eingebaut hast, verhalten sich ADC-Eingänge fast wie Antennen.
Teilweise reichts schon mit dem Finger an die Analogsensorbuchse deines 
Boards(?) zu fassen, um die Werte zu ändern.

Was für ein Board verwendest du? Wie sieht das Layout aus?
Gast #1634194
Lesenswert?

@Flo
Stimmt eigentlich schon, nur hätte ich gedacht das der Wert um die 0 V 
schwankt. Ich benutze ein Crumb128 auf einem Steckplatine, an dem habe 
ich die Pins raus geführt.

@spess53
Hab den JTAG nun bei den Fuses ausgemacht. Hat am verhalten des 
Mikrocontrollers leider nichts verändert.


Keine Ahnung was da nicht stimmt  :-/


Gruß Alex

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren