hallo,

ich lauf wider einmal im kreis. ich versuche die werte des adc auf der RN-Control 1.4 auf die UART auszugeben . die UART funktioniert aber die wert vom adc sind irgendwie nicht richtig glaub ich zumindest?
den Port c ist nur zur kontrolle ob der atmel läuft.
Jetzt hat jemand eine ahnung wieso ich solche ergebnise bekomme wie: adcval 5c spannung 1f ? aber am PA6 1,7V sind?
liegt es an der Konvertierung?
sind die werte des ADC falsch?
wenn ja wie sollte man den ADC auswerten?
mit result = ADCH;
oder result = ADCL + (ADCH << 8 );


hier mein quellcode:


Code:
#include <avr/io.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/signal.h>
#include <string.h>
#include "uart.h"

#ifndef F_CPU
#define F_CPU 16000000UL // 16MHz Taktfrequenz
#endif

/* 9600 baud */
#define UART_BAUD_RATE      9600      
#define CR \r\n


#define	DELAY_LOOPS   50     // So viele Schleifendurchgaenge lang muss erledigt werden

struct{
	
	uint8_t bPin:1 ;			// Aktuelles Signal am Pin (Taster)
	uint8_t bStatus:1;			// Status des Tasters ob dieser beim voriegen durchlauf gedrückt war!


} bportd;

uint8_t nCounter;				// Zähler wie oft der Taster gedrückt war
uint8_t nKeyPress;				// Schleifenzähler wie viele Schleifen der Taster schon gedrückt war!

//Prototypen
void init(void);
uint16_t RADCC(uint8_t mux);

int main (void){


	// UART Initalisierung   
    uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 
    
	//Interrupt enable
	sei();
	// Initialisierung der Register
	DDRA = 0x00;
	PORTA = 0xff;
	DDRC = 0xff; 
	DDRD = 0x00; 
	PORTD = 0x01;
	
	// Initialisierung der Varialblen 
	char buffer[15];
	
	bportd.bPin =1;
	bportd.bStatus =0;
	nCounter =0;
	uint16_t adcval ;
	uint16_t spann;
	
	
	uart_puts("\n\r Test Prog V1.0 RS232 Start\n\r");
	for(;;){	
	
	if(bit_is_clear (PIND,PIND0)){		// wenn der knopf gedrückt ist logisch 0 
		if(bportd.bPin){				// wenn der knopf nicht gedrückt war dann wird alles zurückgesetzt!
		nCounter =0;
		bportd.bPin =0;
		bportd.bStatus =0;
		}
		else if(!bportd.bStatus){		// wenn der knopf immer noch gedrückt
		
			if(++nCounter > DELAY_LOOPS){
			nKeyPress++;			//zähler erhöhen
			PORTC = nKeyPress;		// ausgabe am Port c
			
			adcval = RADCC(6);	//
			spann = (4,88*adcval)/255;
			
			itoa( adcval, buffer, 16);
			uart_puts("\n\r adcval ");
			uart_puts(buffer);
			
			itoa( spann, buffer, 16);
			uart_puts("\n\r spannung ");
			uart_puts(buffer);
			
			bportd.bStatus=1;		// status merken
			}
		}
	
	}
	else
	{
	bportd.bPin = 1;
	}
}}



uint16_t RADCC(uint8_t mux){
	uint8_t i;
	uint16_t  result =0; // Initialisierung wichtig
	
	ADCSRA = (1<<ADEN) | (1<<ADPS1)| (1<<ADPS2)| (1<<ADPS0); 	//Prescaler 128 & ADC aktivieren
	ADMUX = mux; //Kanalwählen
	ADMUX |= (1<<REFS1) |(1<<ADLAR); //VCC = Referenz
	
	ADCSRA |= (1<<ADSC); //adc wandlung
	while(!ADCSRA & (1<<ADIF));//Warten 
	
	
	for(i=0;i<4;i++)
	{
		ADCSRA |= (1<<ADSC); // adc wandlung
		
		while ( ADCSRA & (1<<ADSC) ); // Warten
		
		result += ADCH; // Wandlungsergebnisse addiern
		//result += ADCW; //einspricht ADCL + (ADCH <<8);
	}
	
		ADCSRA &= ~(1<<ADEN); // ADC deaktivieren 
		
		result /= 4; // arithm. Mittelwert
		
return result;
}
bestendank für eure mühe

sg servusssss