Forum: Mikrocontroller und Digitale Elektronik µC ATMEGA168P - Analogwerte Einlesen


von Mathias K. (matzeknu)


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

von Mathias K. (matzeknu)


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

von Karl H. (kbuchegg)


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.

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.