Forum: Compiler & IDEs ADC liefert immer den selben Wert


von Elias 1. (alajas)


Lesenswert?

Hallo Leute,

ich bastle nun schon seit Tagen an meinem AT90USB1286 und dessen ADC 
Eingang. Ich habe den Code aufs nötigste red. Wenn ich den PIN F1 nicht 
belege liefert mir die Ausgabe immer 1023 = X. WEnn ich den PIN jetzt 
mit GND oder Vcc verbinde tut sich gar nichts. Woran liegt das?
1
//ADC-init
2
  ADMUX  |= (1<<REFS0);       
3
  // die Versorgungsspannung AVcc als Refernz wählen 
4
  ADMUX  |= (1<<MUX0);        //MUX0 ist Eingang PINF1
5
  ADCSRA |= (1<<ADEN);      // ADC aktivieren 1=ON; 0=OFF
6
  ADCSRA |= (1<<ADSC);      //Startet eine ADC Wandlung
7
  ADCSRA |= (1<<ADPS2 | 1<<ADPS1) | (1<<ADPS0); //Prescaler 128->       8000000/128 = 62,5kHz
8
9
 DDRF &= ~(1<<PF1); // 0 schaltet den Pin auf Eingang
10
 PORTF |= (1<<PF1); //1 aktiviert den Pullup Widerstand
Ausgabe:
1
void startADC (void)
2
{
3
X = ADCL;
4
X += (ADCH<<8);
5
printzahlen(X);
6
print(" = X\n");
7
}

von Elias 1. (alajas)


Lesenswert?

Hallo Leute,

ich habe es selbst gelöst. Ich habe in der Ausgabe einfach nochmal das 
ADSC Bit auf 1 gesetzt und jetzt kommen die Wert "nur so daher 
geflogen".

void startADC (void)
{

ADCSRA |= (1<<ADSC);

X = ADCL;
X += (ADCH<<8);
printzahlen(X);
print(" = X\n");
}

von Rolf Magnus (Gast)


Lesenswert?

Elias 1234 schrieb:
> ADCSRA |= (1<<ADSC);      //Startet eine ADC Wandlung
>   ADCSRA |= (1<<ADPS2 | 1<<ADPS1) | (1<<ADPS0); //Prescaler 128->
> 8000000/128 = 62,5kHz

Den Prescaler bei laufender Wandlung zu ändern ist vermutlich keine gute 
Idee.

> Ausgabe:
> void startADC (void)
> {
> X = ADCL;
> X += (ADCH<<8);
> printzahlen(X);
> print(" = X\n");
> }

Hast du davor auch gewartet, bis die Wandlung fertig ist? Und hast du 
das erste Ergebnis verworfen, wie es das Datenblatt empfielt?

von Elias 1. (alajas)


Lesenswert?

Hallo Rolf,

die erste Messung war mir dabei egal, ich wollte den ADC blos zum laufen 
bringen. Ich habs aber geändert und ADEN & ADSC zum Schluss er 
initialisierung eingestellt.

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.