Gast
#1955986
Guten Abend, ich wollte mit dem Atmega8 eine Spannung an Pin PC4 (ADC4) auslesen. Daher habe ich zwischen PIN PC5 und PC4 einen Potentiometer geklemmt. Leider liefert mir der Pin PC5 nicht die volle Spannung. Es liegt nur zirka ein drittel an. Weiß jemand woran das liegen kann? Code: //---------------------------------------------------------------------- #define F_CPU 3686400 // Taktfrequenz des myAVR-Boards #include <avr\io.h> // AVR Register und Konstantendefinitionen #include <inttypes.h> //Datentyplib //---------------------------------------------------------------------- uint16_t readADC(uint8_t channel) { //Avcc auf 4,5 V //AREF auf 4,5 V; Damit obere Messgrenze auf 4,5 V gelegt //GND zu GND //Funktion läuft über Avcc!!!!! uint8_t i; uint16_t result = 0; ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1); //Den ADC aktivieren /Teilungsfaktor auf 64 stellen ADMUX = channel | (0<<REFS1) | (1<<REFS0); //Avcc als Spannungsquelle verwenden /ADC4 messen ADCSRA |= (1<<ADSC); //ADC initialisieren /Dummyreadout machen while(ADCSRA & (1<<ADSC)); for(i=0; i<3; i++) { ADCSRA |= (1<<ADSC); while(ADCSRA & (1<<ADSC)); result += ADCW; } ADCSRA &= ~(1<<ADEN); result /= 3; return result; } //---------------------------------------------------------------------- int main (void) { DDRB = 0xff; DDRD = 0xff; //DDRC &= ~(0xff); DDRC = 1,1,1,1,1,0; while(1) { PORTC = (1<<PC5) | (0<<PC4); //Eingang und Ausgang schalten uint16_t result = readADC(00100); //ADC auslesen für Pin PC4 /ADC4 if (result < 400) { //ADC auswerten PORTD = (1<<PD5) | (1<<PD6) | (1<<PD7); } //ADC auswerten if (result > 800) { //ADC auswerten PORTD = (1<<PD5) | (0<<PD6) | (0<<PD7); } //ADC auswerten if ((result < 801) and (result > 399)) { //ADC auswerten PORTD = (1<<PD5) | (1<<PD6) | (0<<PD7); } //ADC auswerten } /* wird nie erreicht */ return 0; } //----------------------------------------------------------------------