Hallo jawo3,

der Code soll stellvertretend sein (merke gerade, dass nicht der rp6, sondern der Asuro gemeint war, deshalb müssten evtl. die Register-Einstellungen geändert werden).

Ersteinmal die Spannungsteiler - Berechnunge (ohne Spannungsteiler darf höchstens bis zur Referenzspannung gemessen werden):
https://www.roboternetz.de/phpBB2/ze...ler+berechnung

Variable:
Code:
uint8_t bPortd,adc;
float adc_result; 
char puffer_tostr[20];
init (Register setzen):
Code:
void adc_init(void)
{
     ADCSRA |= (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);    //  Teilungsfaktor 73.728 <= X <= 294,912  ---> X=128
	 /*  ADMUX &=~ ((1<<REFS1) | (1<<REFS0));                          // ---> Referenzspannung off  */ 
}
messen:
Code:
float adc_Kanal_messen(uint8_t mux) 
{ 
     adc_result = 0; 
     ADMUX = mux;                           // Kanal waehlen und VCC=Referenzspannung
     ADCSRA |= (1<<ADSC);                  // eine ADC-Wandlung starten
     while ( ADCSRA & (1<<ADSC) ) {;}     // auf Abschluss der Konvertierung warten 
     adc_result = ADCW;                    // ADCW muss einmal gelesen werden 
     adc_result = 0;                       // Dummy -> adc_result nullen
     for( adc=0; adc<4; adc++ )           // 4x eine ADC-Wandlung durchführen
     { 
         ADCSRA |= (1<<ADSC);              // eine Wandlung "single conversion" 
         while ( ADCSRA & (1<<ADSC) ) {;} // auf Abschluss der Konvertierung warten 
         adc_result += ADCW;                // Wandlungsergebnisse aufaddieren 
     } 
     adc_result /= 4;                       // Summe durch vier teilen = arithm. Mittelwert 
     adc_result = adc_result*(5.00/1023);   // 5,00 Volt nach Spannungswanlder gemessen -> wenn kein Spannungsteiler verwendet = Endergebnis   
     return adc_result; 
}

auslesen (zB. im main-Teil):
Code:
adc_Kanal_messen(1);                                // PORTA1 auswählen
          adc_result=adc_result*5.00736;            // 5,00736 = bei den gewählten Widerständen bester Wert (vom Spannungsteiler)
          dtostrf(adc_result,2,2,puffer_tostr);     // float to string umwandlung -> LCD und UART Ausgabe (verständlich Zeichen)
          /*
		  lcd_gotoxy(0,1);                                
          lcd_puts("Spannung: "); 
          lcd_puts(puffer_tostr); 
          lcd_puts(" Volt \n\r");
		  */
Habe den Code nochmal besser kommentiert (am besten in einen Editor wie Programmers Notepad kopieren -> besser lesbar).
Die LCD Kommandos wurden ausgeklammert.

Der Code oben ist für einen Atmega32 (Register könnten andere sein).
Wie o.g. ist es hier recht gut erklärt:
http://www.mikrocontroller.net/artic...l_Converter.29

Gruß
Stefan