Forum: Mikrocontroller und Digitale Elektronik ADC will nicht so recht


von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Tom K. (ez81)


Lesenswert?

1
    while(ADCSRA&(1<<ADSC)) //waiting for the end of conversation
2
    {
3
      Result+=ADCW;
4
    }
Soll das wirklich so?

von Daniel (Gast)


Lesenswert?

Ja man kann so:
1
Result+=ADCW;
Es werden die beiden Register ausgelesen, so erspart man sich die 
Arbeit. :)

von Tom K. (ez81)


Lesenswert?

Während Du auf das Ende einer Messung wartest, addierst Du schonmal im 
Vorraus die Ergebnisse, so schnell es der uc schafft?

von Daniel (Gast)


Lesenswert?

Danke dir Tom.

Habe das aus den Augen gelassen, später Abend. :)
Morgen werde es ausprobieren und das Ergebnis posten.

von Tom K. (ez81)


Lesenswert?

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

von Daniel (Gast)


Lesenswert?

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
}

von Micha H. (mlh) Benutzerseite


Lesenswert?

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.

von Daniel (Gast)


Lesenswert?

Micha vergleiche mal was ich am 03.03.2011 11:01 gepostet hab.
Der Fehler ist lange aus dem Program raus.

von Volker Z. (vza)


Lesenswert?

Daniel schrieb:
>
1
> 
2
>   Result/=4;
3
> 
4
>   return Result>>2;
5
> 
6
> }


Zwei mal durch 4 Teilen ?

Volker

von Daniel (Gast)


Lesenswert?

So Leute habe das Program zum Laufen gebracht.
Danke für eure Beiträge.

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
Noch kein Account? Hier anmelden.