[Mega8] ADC gibt nur 0 oder 1023 zurück

Gast #850782
Lesenswert?
• ▲
▼
Der ADC von meinem Atmega 8 gibt, obwohl der entsprechende Pin über 
einen Widerstand an VCC hängt nur 1023 aus, hängt er an GND bekomme ich 
0.
Aber: Wenn der Pin in der Luft hängt bekomme ich was von ~500.
1
uint16_t ReadChannel(uint8_t mux){
2
  uint8_t i;
3
  uint16_t result;
4
 
5
  ADMUX = mux;                      // Kanal waehlen
6
  ADMUX |= (1<<REFS0); // AVCC Referenzspannung nutzen
7
 
8
  ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);    // Frequenzvorteiler 
9
                               // setzen auf 8 (1) und ADC aktivieren (1)
10
 
11
  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
12
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
13
  ADCSRA |= (1<<ADSC);              // eine ADC-Wandlung 
14
  while ( ADCSRA & (1<<ADSC) ) {
15
     ;     // auf Abschluss der Konvertierung warten 
16
  }
17
  result = ADCW;  // ADCW muss einmal gelesen werden,
18
                  // sonst wird Ergebnis der nächsten Wandlung
19
                  // nicht übernommen.
20
 
21
  /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */
22
  result = 0; 
23
  for( i=0; i<4; i++ )
24
  {
25
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
26
    while ( ADCSRA & (1<<ADSC) ) {
27
      ;   // auf Abschluss der Konvertierung warten
28
    }
29
    result += ADCW;        // Wandlungsergebnisse aufaddieren
30
  }
31
  ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)
32
 
33
  result /= 4;                     // Summe durch vier teilen = arithm. Mittelwert
34
 
35
  return result;
36
}

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