Forum: Mikrocontroller und Digitale Elektronik ADC läuft nicht frei


von mr.chip (Gast)


Lesenswert?

Hallo

Irgendwie kapiert mein ADC nicht, was 'free running' heisst. Ich 
initialisiere ihn folgendermassen:

Einstellen der Quellen (unbedeutend für das Problem):
ADMUX = (1 << REFS0) | (0 << ADLAR) | (n << MUX0);

Einstellen der Funktionsweise:
ADCSRA = (1 << ADEN) // Enable ADC
  |(1 << ADSC) // Start Conversion
  |(1 << ADIE) // Interrupt Enable (AUSGESCHALTET!)
  |(7 << ADPS0)// Prescaler XTAL / 128
  |(1 << ADATE); // Auto trigger enable (for free running)

Einstellen der Trigger-Source:
  ADCSRB = (0 << ADTS0); // free running mode


Komischerweise wird der ADC-Interrupt (im Simulator) nur genau einmal 
aufgerufen, obwohl der ADC ja free running sein sollte. Wenn ich im 
Interrupt ADSC wieder auf 1 schreibe, dann läuft er auch schön brav 
stetig durch. Allerdings sollte er ja automatisch getriggert werden.

Was mache ich bloss falsch?

Gruss
Michael

von JaaWaa (Gast)


Lesenswert?

Meines Wissen muss man den wieder anwerfen. Ich tu's jeweils im ADC 
Interrupt : Lesen, dann neu starten.

von Michael Wilhelm (Gast)


Lesenswert?

>(n << MUX0);

was ist denn n?
Und mit welchem Controller arbeitest du?

MW

von Johannes M. (johnny-m)


Lesenswert?

Welcher Controller?

Ich habe vor Jahren mal das Problem gehabt, dass die 
Auto-Trigger-Funktionalität im Simulator nicht funktionierte. Ich 
vermute mal, dass das auch den Free Running Mode betrifft. In den 
Known Issues stand damals auch nichts von einem bekannten Bug. 
Möglicherweise hat sich da bis heute nichts dran geändert (OK, ich habe 
damals glaub ich keinen Bugreport an ATMEL geschrieben, was ich 
vielleicht hätte tun sollen).

Beitrag "AVRStudio-Simulator: ATMega16, ADC Auto Trigger"

Ich vermute mittlerweile fast, dass der Simulator schlicht und 
ergreifend das ADATE-Bit ignoriert.

von Johannes M. (johnny-m)


Lesenswert?

JaaWaa wrote:
> Meines Wissen muss man den wieder anwerfen.
Das sollte im Free Running Modus aber eben nicht nötig sein!

von Johannes M. (johnny-m)


Lesenswert?

Michael Wilhelm wrote:
>>(n << MUX0);
>
> was ist denn n?
Schätzungsweise die Kanalnummer...

von mr.chip (Gast)


Lesenswert?

> Meines Wissen muss man den wieder anwerfen. Ich tu's jeweils im ADC
> Interrupt : Lesen, dann neu starten.

Das würde aber den 'free running' Mode überflüssig machen. Es gibt ja 
diese Auto-Trigger-Sources, die den ADC selbst anwerfen. Eine davon ist 
free running, und da erwarte ich eben, dass der ADC dann auch 
tatsächlich automatisch angeworfen wird.

In meinem Fall ist das insofern wichtig, dass ich keinen ADC-Interrupt 
haben möchte, aber immer ein aktuelles Resultat. Der ADC soll einfach 
nebenher laufen und stetig abtasten, gelesen wird dann, wenn man gerade 
einen Wert braucht.

von Ahem (Gast)


Lesenswert?

>Eine davon ist free running, und da erwarte ich eben, dass der ADC dann auch
>tatsächlich automatisch angeworfen wird.
Das ist auch so. Habe ich auch schon verwendet.

Also den Controller wissen wir ja noch nicht, aber aus dem Manual vom 
48/88/168 habe ich mal folgendes herausgeholt. Ich gehe im Moment davon 
aus, das dies bei allen Megas so ist.


>Using the ADC Interrupt Flag as a trigger source makes the ADC start a new 
>conversion as soon
>as the ongoing conversion has finished. The ADC then operates in Free >Running 
mode, constantly
>sampling and updating the ADC Data Register. The first conversion must be 
>started by
>writing a logical one to the ADSC bit in ADCSRA. In this mode the ADC will 
>perform successive
>conversions independently of whether the ADC Interrupt Flag, ADIF is >cleared or 
not.

von mr.chip (Gast)


Lesenswert?

> Ich habe vor Jahren mal das Problem gehabt, dass die
> Auto-Trigger-Funktionalität im Simulator nicht funktionierte.

Das habe ich mittlerweile auch feststellen müssen. Auf dem AVR läuft es 
nämlich. Ein bisschen ärgerlich, was Atmel da produziert - fehlende 
Funktionen kann ich verstehen, aber dann sollte der Simulator wenigstens 
darauf hinweisen.

von Johannes M. (johnny-m)


Lesenswert?

@Ahem:
Klar, wie gesagt, ich gehe von einem Simulatorproblem aus. Wäre nicht 
das erste. Ich habe auch schon mit dem Free Running Mode in Hardware 
gearbeitet, und da läuft er...

von Johannes M. (johnny-m)


Lesenswert?

mr.chip wrote:
> aber dann sollte der Simulator wenigstens
> darauf hinweisen.
Wie gesagt, wenn niemand einen Bugreport schreibt, dann wird das nix. 
Auch wenn ich mir fast nicht vorstellen kann, dass das in drei Jahren 
noch keiner außer mir damals festgestellt hat...

Wenn die das dann nicht für nötig halten, es zu reparieren, dann kommt 
wenigstens in die Known Issues ein Eintrag, dass Auto Trigger nicht 
unterstützt wird. Da selbst das ausgeblieben ist, vermute ich stark, 
dass sich tatsächlich noch niemand ernsthaft beschwert hat. Aber der 
alte Simulator V1 wird ja denke ich mal sowieso nicht mehr gemaintaint.

von Ahem (Gast)


Lesenswert?

@ Johnny-M

>Klar, wie gesagt, ich gehe von einem Simulatorproblem aus.

Ich weiss, das Du das geschrieben hast. Und?

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.