Forum: Mikrocontroller und Digitale Elektronik ATmega128 und mehrere AD-Wandlungen


von Alex (Gast)


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

von spess53 (Gast)


Lesenswert?

Hi

Hast du JTAG abgeschaltet?

MfG Spess

von Alex (Gast)


Lesenswert?

Hi spess53

öhm.. nö.. stört das den ADC oder sind es die selben pins?

von Flo (Gast)


Lesenswert?

Welche Sensoren verwendest du und wie hast du sie an den AVR 
angeschlossen?

von spess53 (Gast)


Lesenswert?

Hi

>öhm.. nö.. stört das den ADC oder sind es die selben pins?

Dann sieh mal nach, wo die Pins liegen.

MfG Spess

von Alex (Gast)


Lesenswert?

Hallo Flo

Es sind Infrarot Sensoren von Sharp gp2d120 mit einer analogen Spannung 
von ca 0 bis 3.2 V

Gruß

von Alex (Gast)


Lesenswert?

@spess53

<<< peinlich.. habs nicht gesehn..

von Alex (Gast)


Lesenswert?

Danke spess53 gleich mal ausprobieren..

von Flo (Gast)


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?

von Alex (Gast)


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

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
Noch kein Account? Hier anmelden.