Hi @ all

Ich hab mich mal mit dem A/D Wandler beschäftigt. Leider fuktioniert das ganze nicht so wie ich mir das vorstelle.

Das ist einmal der Code:
Code:
#include <avr/io.h>
#include <stdlib.h>
#include "wintek2704.h"

void adc_init(void);
int get_adc (void);
void lcd_put_d(uint8_t dec);

int main (void)
{
	DDRC &=~ _BV(PC0);
	PINC &=~ _BV(PC0);
	
	uint8_t ergebnis_display;
		
	adc_init();
	lcd_init(LCD_DISP_ON);
	lcd_puts("        ADC -- Test\n");
	
	while(1)
	{
		ergebnis_display = get_adc();
		lcd_put_d(ergebnis_display);
	}
	return(0);
}

void lcd_put_d(uint8_t dec)
{
	char buffer[6];
	itoa(dec, buffer, 10);
	lcd_puts(buffer);
}

	

void adc_init (void)
{
	ADCSR = (1 << ADEN) | (1 << ADPS1) | (1 << ADPS2);	//Prescaler = 64 TF = 125 kHz 
}

int get_adc (void)
{
	uint8_t i;
	uint16_t ergebnis_adc;
	
	ADMUX = 0; // Vreff = Vcc
	
	ADCSRA |= (1 << ADSC);
	
	while (!(ADCSRA & (1 << ADIF)));
	
	ergebnis_adc = 0;
	
	for(i = 0; i < 5; i++)
	{
		ADCSRA |= (1 << ADSC);
		while(!(ADCSRA & (1 << ADIF)))
		
		ergebnis_adc += ADC;
	}
	ADCSRA &=~ (1 << ADEN);
	ergebnis_adc = ergebnis_adc / 5;
	
	return ergebnis_adc;
}
Am LCD bekomm ich nur Datdenmüll
Könnte mir da jaemand helfen???

Danke im Voraus
Gruß Robert