Habe folgendes Problem: Möchte denn ADC in FREE Running mode verwenden und wenn ein Wert fertig gewandelt ist soll er in die Interrupt Routine springen. Problem: Er macht das genau einmal und ich finde den Fehler nicht im Programm: int main (void) { ADMUX |= (1<<REFS0); ADCSRA|= (1<<ADIE) |(1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2); ADCSRA |=(1<<ADEN); ADCSRA|=(ADSC); for(;;); } SIGNAL (SIG_ADC) { .... }
Wie ist das gemeicht ohne auto trigger kein free running mode? Ich kann ich auto trigger aktivieren?
Danke dir ... jetzt funktioniert free running mode. Wie aktiviere ich den eingentlich den 8bit ADC? und nicht 10bit? Will das meine Werte von 0 bis 255 gehen. Danke
irgendwas stimmt mit dem Free Running Mode. Es wird immer nur die erste Messung ausgegeben:
1 | //init ADC
|
2 | ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADATE) | (1<<ADPS2) | (1<<ADPS1); // Frequenzvorteiler // setzen auf 8 (1) und ADC aktivieren (1) |
3 | ADCSRB = (0<<ADTS2) | (0<<ADTS1) | (1<<ADTS0); // Free running mode. |
4 | ADMUX |= (1<<REFS0) | (0<<ADLAR); // AVCC als Referenz |
5 | |
6 | |
7 | |
8 | while(1) |
9 | {
|
10 | long_delay(1000); |
11 | |
12 | uint16_t tmp = ADCW; |
13 | char buffer[20]; |
14 | itoa(tmp, buffer,10); |
15 | uart_puts(buffer); |
16 | |
17 | }
|
Wieso wird ADCW nicht aktualisiert? ADATE ist aktiviert ....
>> ADCSRB = (0<<ADTS2) | (0<<ADTS1) | (1<<ADTS0); // Free running mode.
Das stimmt nicht...
rtfm. Jörg
ps.: Lass uns bei dem Neueren Thread in GCC-Forum beleiben
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.