Hallo!

Danke für die Antworten. Wie es so ist haben die Antworten noch mehr Fragen aufgeworfen.
Hier erst einmal das modifiziert Programm:

Code:
 #include <avr/io.h>


void adc_init(void);

unsigned int buffer;

int main(void)
{

	adc_init();

	while (1)
	{
	ADCSRA |= (1<<ADSC);
		while ( !(ADCSRA & (1<<ADIF)) )
	;buffer = ADC;

	}

}

void adc_init(void)
{

	ADMUX = 0;
	ADCSRA = (1<<ADEN);

}
ADCSRA |= (1<<ADSC);

Hätte es hier nicht auch ein einfaches oder getan? Wenn nicht warum nicht?


ADMUX = 0;
Hier wird der Kanal bestimmt der gewandelt werden soll... wer lesen kann ist klar im Vorteil. Habe die DIL Variante ... habe nur PC4 & 5 ignoriert.

Wenn ich die interne Referenzspannung nutzen möchte gebe ich hier also folgendes an?

ADMUX = C0;

Das Ergebnis ist ja 10 Bit breit. Also im HSB stehen nur zwei Bit mit relevanten Daten?

Wenn ich ein 8 Bit genaues Ergebnis haben möchte (was ja die weitere Verarbeitung und Ausgabe sehr vereinfach) muss ich was tun?

O-Ton:

If the result is left adjusted and no more than 8-bit precision is required, it is sufficient to
read ADCH. Otherwise, ADCL must be read first, then ADCH, to ensure that the content
of the Data Registers belongs to the same conversion. Once ADCL is read, ADC access
to Data Registers is blocked. This means that if ADCL has been read, and a conversion
completes before ADCH is read, neither register is updated and the result from the conversion
is lost. When ADCH is read, ADC access to the ADCH and ADCL Registers is
re-enabled.

Wie kann das aber sein? Im ADCH steht doch nur ein Teil der auf 10 Bit bezogenen Messung oder??


Ich habe nur die ATMEL AppNote, Assembler Befehlscode und Beschreibung Atmega8.
Ich habe auch ein Buch über C. Was mir noch fehlt ist was über die speziellen Sachen für avr-gcc. Gibt es da was? Ich benutze zum Programmieren nur Programmers Notepad2 und gehe über eine normale ISP-Schnittstelle auf ein Experimentierboard.(Steckboard)


Gruß Olli