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
Meines Wissen muss man den wieder anwerfen. Ich tu's jeweils im ADC Interrupt : Lesen, dann neu starten.
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.
JaaWaa wrote:
> Meines Wissen muss man den wieder anwerfen.
Das sollte im Free Running Modus aber eben nicht nötig sein!
Michael Wilhelm wrote: >>(n << MUX0); > > was ist denn n? Schätzungsweise die Kanalnummer...
> 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.
>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.
> 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.
@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...
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.
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.