Hallo
Ich bin auch noch ADC-Anfänger, aber so würde ich das nicht machen:
Bei der ersten Zuweisung sollte man nur = verwenden um alle alten Bits im Controllregister zu löschen. Auf dieser Basis kann man dann alles weitere verodern. Oder Zuweisung mit = als Einzeiler.ADCSRA |= (1<<ADEN); //Damit ist der Converter gestartet
ADCSRA |= (1<<ADSC); //hiermit wird die Messung initialisiert und gestartet
ADSC würde ich als letztes setzen wenn alles andere erledigt ist. SFIOR würde ich zur Sicherheit extra auf free-runnig setzen.
Setzt erst zusätzlich das REFS0-Bit und löscht dann ADMUX komplett mit = PA0 ( PA0 entspricht 0!)ADMUX |= (1<<REFS0);
ADMUX = PA0;
So wäre besser:
Bei dieser Spannungsreferenz muss an AREF ein Kondensator gegen GND geschaltet werden (10nF beim RP6-AtMega32). Genauer wäre vermutlich die Verwendung der internen 2,56V-Referenz, allerdings braucht man dann auch einen Kondensator. Und einen Spannungsteiler für die 5V-Eingangsspannung. Die Eingangsspannung darf nie größer als die Referenz sein!ADMUX = (1<<REFS0) | (0<<REFS1); // Spannungsreferenz AVCC
ADMUX |= (0<<ADLAR) // zusätzlich Ergebniss rechtsbündig
ADMUX |= PA0; // zusätzlich Kanal wählen
X sollte ein 16-Bit-Wert sein.uint8_t x;
Reine Übungssache. Ich hoffe, ich habe das meiste gefunden. ADC macht Spass!Der ADC is ja ganzschön kompliziert.
Bei mir war übrigends dies hier die Initialzündung: A V R -Tutorial
Gruß
mic
Lesezeichen