Hallo Bernhard,
vielen, vielen Dank für deine Antwort !!!!
Es funktioniert einwandfrei !!!!
Hier der Code für die anderen Leute, die es interessiert und die eine Lösung suchen.
Code:#include <avr/io.h> void adc_init (void){ //interne Referenzspannung //ADMUX = 0xC0; //AVCC //ADMUX = 0x40; //AREF ADMUX = 0xC0; ADCSRA = 0x80; //ADC aktivieren, Rest 0 setzen //ADCSRA |= 0x01; //Vorteiler 2 //ADCSRA |= 0x02; //Vorteiler 4 //ADCSRA |= 0x03; //Vorteiler 8 //ADCSRA |= 0x04; //Vorteiler 16 ADCSRA |= 0x05; //Vorteiler 32 //ADCSRA |= 0x06; //Vorteiler 64 //ADCSRA |= 0x07; //Vorteiler 128 ADCSRA |= (1<<6); //Konvertierung starten while(ADCSRA & (1<<6)){}; //Kovertierung beendet uint16_t ergebnis = 0; ergebnis = ADCL; ergebnis += (ADCH<<8); } uint16_t adc_read (uint8_t kanal){ static uint8_t init = 0; if(init==0){adc_init(); init++;} //beim ersten Aufruf zunaechst initialisieren ADMUX &= (0xE0); //Vorhandenen Wert fuer den Kanal loeschen //den Wert fuer den Kanal schreiben, dabei die vorderen 3 Bits vor evtl. fehlern schuetzen ADMUX |= (kanal&(0x1F)); ADCSRA |= (1<<6); //Konvertierung starten while(ADCSRA & (1<<6)){}; //Kovertierung beendet uint16_t ergebnis = 0; ergebnis = ADCL; ergebnis += (ADCH<<8); return ergebnis; //Ergebnis zurueckgeben } int main(void) { float messung; DDRD = 0b00111111; while(1) { messung = adc_read(2); if( messung<=500 ){ PORTD = 0b00000001; } else { PORTD = 0b00000010; } } }
Gruß
Fabi







Zitieren


Lesezeichen