Forum: Compiler & IDEs ADC liest nur 1023 aus


von Franz (Gast)


Lesenswert?

Servus,

mit diesem code:
1
void adc_init(void)
2
{
3
  uint16_t result;
4
  //ADMUX |= (1<<REFS0);
5
  ADCSRA |= (1<<ADEN);
6
  ADCSRA |= (1<<ADSC);                 
7
    while (ADCSRA & (1<<ADSC) ){};          
8
    result = ADCW;
9
10
}
11
12
uint16_t get_adc()
13
{
14
  uint8_t i;
15
  uint16_t result = 0;
16
  
17
  for(i=0;i<10;i++) {
18
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
19
    while (ADCSRA & (1<<ADSC) ){};
20
    result += ADCW;   
21
    }
22
  result = result/10;
23
  return result;
24
}
versuche ich die an ADC0 anliegende Spannung bei einem ATMega8 
auszulesen, die Spannung beträgt 1,9V. Der Wert den ich erhalte ist aber 
immer 1023. Sind in meinem Code Fehler oder muss ich den Fehler woanders 
suchen?
Beste Grüße
Franz

von Daniel W. (roughdog)


Lesenswert?

Hi Franz!

Ohne in den C-Code zu schauen was Grundsätzliches: Vref richtig gewählt 
und wenn nötig angeschlossen?!? Also intern (dann mit C gepuffert) oder 
extern (dann sollte die natürlich auch anliegen, evtl. Tiefpass 
davor)...

Viele Grüße

DOG

von Helfer (Gast)


Lesenswert?

>   //ADMUX |= (1<<REFS0);

1) D.h. du stellst in deinem Code keine Referenz ein. Welche ist dann 
laut Datenblatt defaultmäßig eingestellt?

2) Verkabelung von Aref, AVcc, AGND, ADC-Pins OK?

von Franz (Gast)


Lesenswert?

Hallo,
der Vref Pin ist mit 5V verbunden.
Laut DB ist VRef Referenz.
Verkabel ok, ich kann die Spannungen direkt am AVR messen.

von Franz (Gast)


Lesenswert?

Hat sich geklärt, hatte keinen Frequenzvorteiler eingestellt für den 
ADC, wobei ich mich nicht erinnern kann das jemals gemacht zu haben...

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.