adc.h /************************************************* AUTHOR: Thomas Adam Version: 1.0 Beschreibung: Erfasst Werte am ADC Port *************************************************/ void adcstart(void); //Startet den ADC. void adcstop(void); //Stoppt de ADC. uint16_t adcget(uint8_t kanal); //Liest wert vom ADC ein. uint16_t gp2d12(uint8_t kanal); //Linearisiert die Werte eines SHARP gp2d12 (10-80cm) uint16_t gp2y0a02yk(uint8_t kanal); //Linearisiert die Werte eine SHARP gp2y0a02yk (20-150cm) //Beschreibt aus wievielen wandlungen der Durchschnittswert gebildet werden sollte den adcget() zurueckgibt. //Hoehere Zahl = Genauer, laengere Wandlungszeit //Niedrigere Zahl = Nicht so genau, kurze Wandlungszeit. #define wandlungen 3 //Standart: 3 //Definiert die Referrenzspannung. ACHTUNG nicht zu niedrig waehlen. Steht im Datenblatt #define referenz ((1< #include "adc.h" int main(void) { // 12V 00001100 //uint16 = 1111.1111 Maximal in Bit gesehen (65535) uint16_t adcval0; uint16_t adcval1; uint16_t adcval2; uint16_t adcval3; adcstart(); adcval0 = adcget(0); // MUX-Bits auf 0b0000 -> Channel 0 if(adcval0>12) // Wenn Spannung am Channel 0 größer 12 V ist Akku Ladestopp! { adcstop(); } adcstart(); adcval1 = adcget(1); // MUX-Bits auf 0b0001 -> Channel 1 if(adcval1>12)// Wenn Spannung am Channel 1 größer 12 V ist Akku Ladestopp! { adcstop(); } adcstart(); adcval2 = adcget(2); if(adcval2>12) // Wenn Spannung am Channel 2 größer 12 V ist Akku Ladestopp! { adcstop(); } adcstart(); adcval3 = adcget(3); if(adcval3>12) // Wenn Spannung am Channel 3 größer 12 V ist Akku Ladestopp! { adcstop(); } } void adcstart(void) { ADCSRA |= ((1<