So, mein Code sieht jetzt so aus:
Code:
#include <avr/io.h>
#include <stdint.h>
#define F_CPU 1000000UL
int main(void)
{
DDRC = (1<<PC0);
uint16_t x;
SFIOR = ((0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0));
ADCSRA = ((1<<ADEN) | (1<<ADATE) | (1<<ADPS0) | (1<<ADPS1));
ADMUX = (1<<REFS0);
ADMUX |= PA0;
ADCSRA |= (1<<ADSC); //hiermit wird die Messung initialisiert und gestartet
while(1)
{
x = ADCW; //hier wird das ADC-Register ausgelesen
if (x >= 800) //wenn der gemessene Wert die 128 erreicht oder überschreitet soll die LED
//an PC0 leuchten also wenn die Spannung die hälfte von 0V zu AREF
//(hier 2,5V) überschreitet
{
PORTC |= (1<<PC0);
}
else
{
PORTC &= ~(1<<PC0);
}
}
}
Jetzt klappt das auch schon besser, aber wenn ich "if (x<=500)" schreibe geht die Lampe bei etwa 4,2V an. x ist doch aber 16 bit groß.
das müsste doch jetzt auf 0xffff verteilt sein, oder? Ich versteh das nicht.
Gruß Jan
Lesezeichen