Hallo Leute. Hoffe auf eure Hilfe. Das Problem ist folgendes. Nachdem ich den ADC dazu geschaltet habe, wird kein Signal ausgegeben dieses soll zwischen 0,5 und 2 ms liegen. Das signal soll über den Poti geregelt werden. Bedanke mich für eure Hilfe im Voraus.
1 | while(ADCSRA&(1<<ADSC)) //waiting for the end of conversation |
2 | {
|
3 | Result+=ADCW; |
4 | }
|
Soll das wirklich so?
Ja man kann so:
1 | Result+=ADCW; |
Es werden die beiden Register ausgelesen, so erspart man sich die Arbeit. :)
Während Du auf das Ende einer Messung wartest, addierst Du schonmal im Vorraus die Ergebnisse, so schnell es der uc schafft?
Danke dir Tom. Habe das aus den Augen gelassen, später Abend. :) Morgen werde es ausprobieren und das Ergebnis posten.
Es fehlen auch noch ein paar Kleinigkeiten beim Starten der Messung: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Nutzung_des_ADC viele Grüße, Tom
Hi Tom. Welche Kleinigkeiten sind es, ich habs genau wie im Tutorium.
1 | uint16_t ADC_Read() |
2 | |
3 | {
|
4 | |
5 | uint16_t Result=0; |
6 | |
7 | for(uint8_t i=0;i<4;i++) |
8 | |
9 | {
|
10 | |
11 | ADCSRA|=(1<<ADEN); //ADC enable |
12 | |
13 | while(ADCSRA&(1<<ADSC)); //waiting for the end of conversation |
14 | |
15 | Result+=ADCW; |
16 | |
17 | }
|
18 | |
19 | Result/=4; |
20 | |
21 | return Result>>2; |
22 | |
23 | }
|
Tom K. schrieb: Vergleiche mal Deines > while(ADCSRA&(1<<ADSC)) //waiting for the end of conversation > { > Result+=ADCW; > } mit diesem > while(ADCSRA&(1<<ADSC)); //waiting for the end of conversation > Result+=ADCW; Und frage Dich was da anders ist... Kleinigkeit mit großer Wirkung.
Micha vergleiche mal was ich am 03.03.2011 11:01 gepostet hab. Der Fehler ist lange aus dem Program raus.
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.