Du kannst die Spannung mit einem Spannungsteiler (zB. wie dem vom RN-Board) ermitteln:
init:
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 */
}
//-----------------------------------------------------
float adc_Kanal_messen(uint8_t mux)
{
adc_result = 0;
ADMUX = mux; // Kanal waehlen
ADCSRA |= (1<<ADSC); // eine ADC-Wandlung
while ( ADCSRA & (1<<ADSC) ) {;} // auf Abschluss der Konvertierung warten
adc_result = ADCW; // ADCW muss einmal gelesen werden
adc_result = 0; // Dummy
for( adc=0; adc<4; adc++ )
{
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);
return adc_result;
}
auslesen:
Code:
adc_Kanal_messen(1);
adc_result=adc_result*5.00736;
dtostrf(adc_result,2,2,puffer_tostr);
lcd_gotoxy(0,1);
lcd_puts("Spannung: ");
lcd_puts(puffer_tostr);
lcd_puts(" Volt \n\r");
Die Code-Schnipsel findest du hier im Forum (sowie die Spannungsteiler-Berechnung) und hier: http://www.mikrocontroller.net/artic...l_Converter.29
Gruß
Stefan
Lesezeichen