hi, bin dabei den ADC einzustellen das er 3 verschiedene Spannungen erkennt und daraufhin an den ausgängen pc2 und pa6 eine led ansteuert. der ADC eingang liegt an einem spannungsteiler, an dem die 3 unterschiedlichen Widerstände angebracht werden. 1k, 2,2k, 6,8k Ohm wenn ich jetzt z.b. den 1k gegen den 2,2k tausche, bleibt die dazugehörige Led an und geht nicht aus, obwohl ich denke das der free running modus eingeschaltet ist bei mir und dadurch doch jederzeit der neue messwert dazu führen muss das die jeweils richtige Led leuchtet! code: ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADATE) | (1<<ADIF) | (0<<ADIE) |(1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0) ; ADCSRB &= ~(1<<ADTS2) | ~(1<<ADTS1) | ~(1<<ADTS0) ; ADMUX |= (0<<REFS1) | (1<<REFS0) | (1<<MUX0); // 680 Ohm Kabel if ( (ADCW > 185) && (ADCW < 267)) { PORTA |= (1<<PA6); } // 220 Ohm Kabel else if ( (ADCW > 542) && (ADCW < 624)) { PORTC |= (1<<PC2); } // 100 Ohm Kabel else if ( (ADCW > 955) && (ADCW <= 1023)) { PORTC |= (1<<PC2); PORTA |= (1<<PA6); }
Marcel Bernstedter schrieb: > PORTA |= (1<<PA6); Da wird nur ein Bit gesetzt, aber nie gelöscht. Gruß Dietrich
Hi >obwohl ich denke das der free >running modus eingeschaltet ist bei mir und dadurch doch jederzeit der >neue messwert dazu führen muss das die jeweils richtige Led leuchtet! Du hast keine Stelle, an der eine Led ausgeschaltet wird. MfG Spess
Und das
1 | ADCSRB &= ~(1<<ADTS2) | ~(1<<ADTS1) | ~(1<<ADTS0) ; |
wird auch nicht das gewünschte Ergebnis liefern. Probier das mal auf dem Papier durch. Das Ergebnis ist sehr erhellend und wichtig für dein weiteres Verständnis, daher solltest du diese Operation selber durchprobieren und nicht hier vorgekaut werden. Gibt es einen Grund, warum du den Free-Running Modus nehmen willst und nicht die getesteten und funktionierenden Funktionen aus dem AVR-GCC-Tutorial?
hab ich mir keine gedanken darüber gemacht. Free running modus bedeutet ja das immer wieder neu gemessen wird und genau das brauche ich ja. bei dem tutorial sieht das so aus als würde ich die anzahl der messungen in eine fkt. eingeben.
Marcel Bernstedter schrieb: > hab ich mir keine gedanken darüber gemacht. Free running modus bedeutet > ja das immer wieder neu gemessen wird und genau das brauche ich ja. > > > bei dem tutorial sieht das so aus als würde ich die anzahl der messungen > in eine fkt. eingeben. Nö. Bei den Tutorial Funktionen bedeutet ein Aufruf der Funktion read_adc eine Messung. Ist die Messung gemacht, liefert die Funktion den gemessenen Wert. Und beim nächsten Aufruf der Funktion wird wieder gemessen und beim nächsten Aufruf wieder. Mit jedem Aufruf der Funktion wird der gerad am Eingang anstehende Wert gemessen. Ob du jetzt in einer Schleife den ADCW ausliest oder die Funktion aufrufst, ist in deiner Applikation (soweit ich das sehen kann) Jacke wie Hose.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.