Hallo,
hab gerade lauflichter programmiert. jetzt möcht ich die Geschwindigkeit meines lauflichts über ein Poti (ADC-Eingang) steuern.
kann mir jemand bei meinem code weiterhelfen
Code:#include <avr/io.h> #include <delay.h> uint16_t auswertung (void); volatile uint16_t wert=0; zeit (void) int n; int main (void) { uint16_t =0,ergebnis=0; n = 0; //Ports initialisieren DDRD = 0xFF; //Port C als Ausgang für die LED's PORTD = 0XFF; //Pull Up's aktiviert while(1) { zeit = n; ergebnis = auswertung(); PORTD = (0b00000001); _delay_ms(n); PORTD = (0b00000010); _delay_ms(n); PORTD = (0b00000100); _delay_ms(n); PORTD = (0b00001000); _delay_ms(n); PORTD = (0b00010000); _delay_ms(n); PORTD = (0b00100000); _delay_ms(n); PORTD = (0b01000000); _delay_ms(n); PORTD = (0b10000000); _delay_ms(n); PORTD = (0b01000000); _delay_ms(n); PORTD = (0b00100000); _delay_ms(n); PORTD = (0b00010000); _delay_ms(n); PORTD = (0b00001000); _delay_ms(n); PORTD = (0b00000100); _delay_ms(n); PORTD = (0b00000010); _delay_ms(n); } uint16_t auswertung (void) { //Initialisieren ADCSRA = ((1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)); ADMUX = ((1<<MUX3));//interner Vref wird benutzt 2,5V; ohne REFS1 und REFS2 wird angelegter Vref bentzt max 5V; MUX3 ist ADC0 //Dummy Auslesung als Warm-Up wie im Tutorial ADCSRA |= (1<<ADSC); while (ADCSRA & (1<<ADSC)); //Messung ADCSRA |= (1<<ADSC); while (ADCSRA & (1<<ADSC)); wert = ADCL; //ERR wert += (ADCH<<8); //Alternativ 'wert = ADCW;' ADCSRA &= ~(1<<ADEN); //ADC Disable return wert; } zeit (void)//auslesen von adc und damit geschwindigkeit der leds festlegen { {if ( (ergebnis <= 256) & (ergebnis > 0) ) {n=10;} if ( (ergebnis <= 512) & (ergebnis > 256) ) {n=100;} if ( (ergebnis <= 768) & (ergebnis > 512) ) {n=500;} if ( (ergebnis <= 1024) & (ergebnis > 768) ) {n=1000;} else {n=0;}} return n; }







Zitieren
Lesezeichen