Forum: Mikrocontroller und Digitale Elektronik wie aktiviert man den noise Reduction Interrupt ?


von Josef M. (josefm)


Angehängte Dateien:

Lesenswert?

Irgendwie funktioniert bei mir der noise Reduction Interrupt nicht
oder nicht richtig.
MCU: ATMega328 1MHz
Wenn ich das Flag ADSC abfrage also Polling dann bekomme ich den ADC
Wert.
Nur mit Interrupt und Noise Reduction gehts nicht.
In der Beschreibung von ATMEL heißt es man solle Single Conversion Mode
verwenden. Also ADATE = 0  und damit kein free Running.
Im Anhang ist die Initialisierungroutine enthalten.
Eventuell, bzw. höchstwarscheinlich fehlt da noch was.

Josef

von Stefan E. (sternst)


Lesenswert?

Josef Mayr schrieb:
> Im Anhang ist die Initialisierungroutine enthalten.

Wieso als .txt und nicht .c?

Josef Mayr schrieb:
> Eventuell, bzw. höchstwarscheinlich fehlt da noch was.

Ich sehe nicht, dass du irgendwo eine Wandlung startest.

> // Bit 6 – ADSC: ADC Start Conversion   but not for noise reduction ?

Wie kommst du auf das "but not for noise reduction"?

von Peter D. (peda)


Lesenswert?

Bei allen Sleep-Sachen ist die Reihenfolge wichtig:

- setze ADC-Sleepmode
- cli
- disable alle anderen Interrupts
- starte ADC
- sleep
- sei

Den Interrupt leer lassen und den ADC nach dem SEI auslesen.
Das spart haufenweise push/pop.

Meine Erfahrung ist aber, daß die Wandlung dadurch kaum besser wird.

Dafür hat man heftige Nebenwirkungen, z.B. Timer0,1,3 und UART gehen 
falsch, also auch die PWMs!


Peter

von Peter D. (peda)


Lesenswert?

Ups, Schusselfehler.
Das SEI gehört natürlich direkt vor das SLEEP!

- setze ADC-Sleepmode
- cli
- disable alle anderen Interrupts
- enable ADC-Interrupt, starte ADC
- sei
- sleep

Den Interrupt leer lassen und den ADC nach dem SLEEP auslesen.
Das spart haufenweise push/pop.


Peter

von Hannes L. (hannes)


Lesenswert?

Peter Dannegger schrieb:
> Ups, Schusselfehler.

Na denn iss ja gut... - Ich wollte schon zweifeln... ;-)))

...

von Dosmo (Gast)


Lesenswert?

Peter Dannegger schrieb:
> - sei
> - sleep

Übrigens, nur so am Rande:
In dieser Konstellation werden die Interrupts erst mit "sleep" scharf 
geschaltet, und das ist auch gut so, damit nicht ausversehen noch ein 
Interrupt zwischen "sei" und "sleep" reingrätscht.

von Uwe (de0508)


Lesenswert?

Hallo Dosmo,

wenn man
1
- disable alle anderen Interrupts
durchführt und dann nur den ADC wieder freischaltet, ist es doch sehr 
sehr unwahrscheinlich, dass eine ADC-Wandlung innerhalb 2er Zyklen 
fertig ist.

Oder ?

von Peter D. (peda)


Lesenswert?

Uwe S. schrieb:
> wenn man- disable alle anderen Interrupts
> durchführt und dann nur den ADC wieder freischaltet, ist es doch sehr
> sehr unwahrscheinlich

Stimmt, wenn man das Magazin rausnimmt, braucht man den Sicherungshebel 
nicht mehr runter zu drücken.
Bloß manchmal liegt man doch tot am Boden und denkt sich, da steckte 
wohl noch eine Patrone im Lauf.

Es ist einfacher, immer die sichere Variante zu nehmen, als jedesmal neu 
nachzudenken. Der Mensch ist vergeßlich.


Peter

von Cyblord -. (cyblord)


Lesenswert?

Die Wandlung wird beim Eintritt in den ADC Noise Reduction Sleep Mode 
automatisch gestartet. Muss also nicht vorher gestartet werden.

gruß cyblord

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.