Gast
#1990923
Hallo Jungs ertsmal möchte ich euch alle schöne Weinachtstage wünschen. zu meinem Problem, Ich habe ein STK500 mit einem Atmega88, nun möchte ich mich mit den Analogen digitalen Wandler vertraut machen.Dazu habe ich am Eingang am Pin C0/ADC0 eine 0,4 V soannung angeschlossen, nun möchte ich gerne testen ob diese Spannung gewandlet wurde dazu habe ich das folgende Code geschrieben. Ich möchte einfach, dass die LEDS 0 bis 5 eingeschaltet werden falls die Spannung kleiner 1 V ist.Bei meinem Test bleiben die LEDs leider immer an erst wenn ich die Bedinung von 1 auf 1000 dann gehen Sie ert aus. vielleicht kann mir jemand sagen was ich hier falsch mache , oder ein typ geben wie ich das am besten testen kann besten Dank im voraus #include <avr/io.h> /* ADC initialisieren */ void ADC_Init(void) { uint16_t result; ADMUX = (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen // 1,1 V ADCSRA = (1<<ADPS1) | (1<<ADPS0); // Frequenzvorteiler ADCSRA |= (1<<ADEN); // ADC aktivieren /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */ ADCSRA |= (1<<ADSC); // eine ADC-Wandlung while (ADCSRA & (1<<ADSC) ); // auf Abschluss der Konvertierung warten /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten Wandlung nicht übernommen. */ result = ADCW; } /* ADC Einzelmessung */ uint16_t ADC_Read( uint8_t channel ) { // Kanal waehlen, ohne andere Bits zu beeinflußen ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F); ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion" while (ADCSRA & (1<<ADSC) ) // auf Abschluss der Konvertierung warten ; return ADCW; // ADC auslesen und zurückgeben } /* Beispielaufrufe: */ int main (void) { uint16_t adcval; uint16_t voltage; ADC_Init(); while(1) { adcval = ADC_Read(0); // Kanal 0 //Hier möchte ich den umwandlenden Wert in Spannung Umrechnen voltage = adcval*4.883; if (voltage <1 ) { DDRB |= 0xFF; PORTB |= (1<<PORTB6) | (1<<PORTB7); } } }