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
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.