Beim ADC hast du mehrere Möglichkeiten wie du ihn auslesen kannst. Du musst immer ADCH auslesen, ansonsten wird der Zugriff auf den ADC blockiert (der ADC liest keine neuen Daten ein). Steht im DB auf S190 letzter Absatz. Das ist der Grund warum es das ADLAR Bit gibt.
Wenn du 8Bit Auflösung benötigst setzt du das ADLAR Bit im ADMUX Register und liest es dann mit aus
Wenn du die vollen 10Bit benötigst gibt es 2 Möglichkeiten. Entweder du liest es mit ADCL und ADCH aus oder du liest es direkt mit ADCW aus (ADLAR Bit bleibt 0).
Code:
Variante 1 (ADCH immer als letztes auslesen):
Variable1 = ADCL; //0-255
Variable2 = ADCH; //0-3
Variante 2:
Variable = ADCW; //0-1023
Die Referenzspannung muss zwischen 0V und VCC sein. Welche Spannung genau gewählt wird ist egal. Zusätzlich gibt es interne Referenzen (meist 1,1V und/oder 2,56V, beim Atmega8 hast du nur 2,56V).
Beim Atmega8 hast du als Referenz eine externe Spannung an AREF Eingang (zwischen 0V und VCC), AVCC mit externen Kondensator an AREF (Achtung die Spannung liegt an AREF an, nur mit Kondensator) oder die interne Referenz (gilt das gleiche wie bei AVCC als Referenz).
Die Einstellmöglichkeiten findest du auf S199.
Bei AVCC als Referenz hast du die gleichen Störungen am ADC wie am AVCC Eingang (deswegen wird die Schaltung mit Induktivität und Kondensator am AVCC empfohlen (S196)
Die Formel wie man den ADC Wert berechnet steht auf S199. Die Formel musst du noch umformen. Wenn du 8Bit verwendest musst du statt 1024 mit 256 rechnen.
Der Attiny2313 hat, so wie du schon geschrieben hast keinen ADC. Eventuell könntest du mit dem Komparator arbeiten. Dieser löst einen Int aus.
http://www.atmel.com/Images/Atmel-24..._datasheet.pdf
MfG Hannes
Lesezeichen