hallo , hier ein beispiel aus dem forum, von mir zusammengewürfelt.

Code:
#include <stdio.h>
#include <stdlib.h>
#include <avr/io.h>
#include <stdint.h>
#include <string.h>

#define ADCchannel_init   DDRA=0x00                 // ADC Port als Eingang deklarieren
#define ADCinit           ADCSRA|=_BV(ADEN)         // Teilt dem Board mit das der jeweilige Port für ADC verwendet wird
#define ADCdisable        ADCSRA &=~_BV(ADEN)       // machs das vorherige wieder rückgänig
#define ADCstart          ADCSRA|=_BV(ADSC)         // startet eine konvertierung auf dem gewünschten Kannal/Pin
#define ADCfree           ADCSRA|=_BV(ADATE)        // schaltet den freilaufenden Modus ein
#define ADCvintern        ADMUX|=_BV(REFS0)     // interne Spannungsversorgung
#define ADCinterrupt_on   ADCSRA|=_BV(ADIE)                // ADC interrupt wird freigeschalten
#define ADCprescaler_2    ADCSRA |=_BV(ADPS0)              // gewünschter Teilungsfaktor/Prescaler 
#define ADCprescaler_4    ADCSRA|=_BV(ADPS1)
#define ADCprescaler_8    ADCSRA=_BV(ADPS1) | _BV(ADPS0)
#define ADCprescaler_16   ADCSRA|=_BV(ADPS2)
#define ADCprescaler_32   ADCSRA=_BV(ADPS2) | _BV(ADPS0)
#define ADCprescaler_64   ADCSRA=_BV(ADPS2) | _BV(ADPS1)
#define ADCprescaler_128  ADCSRA=_BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0)
#define ADCprescaler_reset ADCSRA = ~_BV(ADPS2) & ~_BV(ADPS1) & ~_BV(ADPS0)        
#define ADCchannel_1                                      //gewünschter Kannal z.B bei ATmega32 PINA0 - PINA7
#define ADCchannel_2      ADMUX|=_BV(MUX0)                // bei nicht freilaufen muss ADCchannel_x vor
#define ADCchannel_3      ADMUX|=_BV(MUX1)                // ADCstart kommen dann kann man mit getadc() der 
#define ADCchannel_4      ADMUX= _BV(MUX1) | _BV(MUX0)    // Adcwert des gewählten Kannals auslesen
#define ADCchannel_5      ADMUX|=_BV(MUX2)
#define ADCchannel_6      ADMUX= _BV(MUX2) | _BV(MUX0)
#define ADCchannel_7      ADMUX= _BV(MUX2) | _BV(MUX1)
#define ADCchannel_8      ADMUX= _BV(MUX2) | _BV(MUX1) | _BV(MUX0)
#define ADCchannel_reset  ADMUX= ~_BV(MUX2) & ~_BV(MUX1) & ~_BV(MUX0)

uint16_t getadc(void)
{
   while (ADCSRA & _BV(ADSC)) {}
   return ADC;
}

int main(void)
{

uint16_t x;

ADCinit;
ADCprescaler_16;
//Aktivierung des ADC, festlegen eines Prescalers von 16 

while (1)
	{
	ADCchannel_2;
	//Aktivierung des Pins , an ihm soll die zu messende Spannung liegen
		
	ADCstart;
	//Start einer Konvertierung
	
	x=getadc();	
    
	}
}
mfg pebisoft

( Bei längeren Code Schnipseln doch bitte den Code-Tag benutzten, MfG Kjion )