µC ATMEGA168P - Analogwerte Einlesen

OP #3676987
Lesenswert?

Hey Leute ich bin hier fast am Verzweifeln, weiß absolut nicht wieso 
mein code nicht funktioniert.
Also ich hab ein ATmega168P und folgendes geschrieben:
Mein Eingang ist PC2 (ADC2)
1
//AD-Wandler konfigurieren
2

3
DDRC  &= ~(1<<PC2); // Analogpin als EINGANG
4

5
ADMUX  |=  ((1<<MUX1) | (1<<REFS0) ); // Eingang wählen+AvCC
6
ADCSRA |=  ((1<<ADPS2) | (1<<ADPS1) | (1<<ADEN)); // ADC Prescaler
7

8
// AD-Wandlung aufruf
9
uint16_t ADC_Read(void)
10
{
11
  uint16_t temp_ADC=0;
12
  ADCSRA |= (1<<ADSC); // START_ADC
13
    while ((ADCSRA & (1<<ADSC))) {   // Messung abwarten
14
    }
15

16
  
17
  temp_ADC = ADCL;
18
  temp_ADC |= (ADCH<<8);
19
  
20
return ADCW; // hier auch return temp_ADC versucht
21
}

so und ich bekomme immer 1023 als Rückgabewert, ob nun 2,5V anliegt oder 
0V (GND)
mein VCC ist 5V.

vilt kann mir ja jmd helfen, wäre cool danke:)
OP #3677003
Lesenswert?

okay hat sich irgendwie erledigt, wenn ich direkt beim Aufruf alles 
konfiguriere gehts:
1
uint16_t ADC_Read(void)
2
{
3
  uint16_t temp_ADC=0;
4
  
5
  
6
    ADMUX  |=  ((1<<MUX1) | (1<<REFS0) ); //(1<<ADLAR)
7
        ADCSRA |=  ((1<<ADPS2) | (1<<ADPS1) | (1<<ADEN)); // ADC Prescaler
8
  
9
  
10
  ADCSRA |= (1<<ADSC); // START_ADC
11
    while ((ADCSRA & (1<<ADSC))) {   // Messung abwarten
12
    }
13

14
  
15
  temp_ADC = ADCL;
16
  temp_ADC |= (ADCH<<8);
17
  
18
return ADCW;
19
}
wieso ist das so :(
#3677097
Lesenswert?

Mathias K. schrieb:

> wieso ist das so :(


Weiß keiner, solange du nicht deinen richtigen Originalcode herzeigst, 
sondern nur Ausschnitte davon.
Entweder steht deine Konfiguration in irgend einer FUnktion, die du aus 
main() heraus nie aufgerufen hast. Oder, du hast dir irgendwo ADMUX 
zerschossen. Oder irgendwas ganz anders, an das ich momentan nicht 
denke.
Aber aus dem Codeschnipsel im Eröffnungsposting kann man das nun mal 
nicht ablesen.

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