mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR: Eine Erfahrung mit SLEEP/IDLE Mode


Autor: SuperUser (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich wollte euch mal an meinen SLEEP Mode Erfahrungen mit dem AVR
(atmega128) teilhaben lassen. Ich habe lange (sehr lange) nach der
Ursache für dieses Problem gesucht.

In der Software gibt es zwei Interrupts:
a) ein Timer Interrupt (Timer 0). Dieser läuft periodisch und startet
eine single ADC Wandlung.
b) Den ADC EOC Interrupt. Dieser wird vom ADC EOC getriggert und dort
werden die A/D Daten verarbeitet. Der ADC Interrupt kann von anderen
Interrupts unterbrochen werden!

Dieses Zusammenspiel von zwei Interrupts ist notwendig, weil mit dem
ADC alleine nicht die erforderliche Abtastfrequenz einstellbar ist. Die
Freigabe der Interrupts im ADC-Int. ist notwendig, da der ADC unbedingt
äquidistant abtasten muss.

Was hat das ganze mit SLEEP zu tun?
-> ohne SLEEP gehts, mit SLEEP nicht. Dabei benutze ich SLEEP Fall den
Idle-Mode.

Was genau passiert, kann man auf dem beigefügten Bild sehen.
Die Interrupt-Laufzeiten wurden jeweils über einen Port nach aussen
signalisiert und aufgezeichnet. Irgendwie bringt der SLEEP Mode den ADC
Interrupt durcheinander. Timer 0 läuft noch sauber durch,
aber der ADC-Interrupt spielt verrückt.

Eine Erklärung dafür habe ich derzeit noch nicht....

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noise Reduction Mode nennt sich das.

Im ADCSR Register bitte den ADC über ADEN ausschalten, ansonsten
startet nämlich der Aufruf von Sleep den ADC und nicht das Setzen vom
ADSC Bit im ADCSR Register !! Solange nämlich per ADEN Bit der ADC
eingeschaltet ist würde ein Aufruf von Sleep den ADC automatisch
starten.

Also ADEN Flag löschen, wenn du das nicht möchtest.


Gruß Hagen

Autor: SuperUser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hagen,

wie ich schon schrieb, ich benutze den IDLE Mode, d.h. bits SM0..SM2 im
MCUCR Register sind alle 0. (Noise Reduction Mode wäre 001)

Allerdings bleibt das ADEN gesetzt, da ich ja auf den ADC warte...

Hmmm, vielleicht verhält sich der ADC im Sleep Mode ähnlich wie im
NRM...

Autor: SuperUser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bingo, auch im Idle Mode:

Data-Sheet:
If the ADC is enabled, a conversion starts automatically when this mode
is entered.

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sag ich doch ;) Ich persönlich gehe nur über den sleep, wenn es sich
machen lässt. Starte ebenfalls den ADC im Timer. Der sleep-noise
reduction Modus hält aber zusätzlich einige Clocks an, so auch den
Timer 1 auf einem M128 zb.

Allerdings finde ich es auch konzeptionell nicht io. das man dieses
Verhalten in den ADC registern nicht explizit ein/ausschalten kann.
Denn das dauernde Ein-/Ausschalten des ADCs über ADEN hat seine
Seiteneffekte, besonders wenn man über ADMUX an der Referenz
rumsprielt.

Erst letztens habe ich nämlich arge Schwierigkeiten bekommen als ich
verschiedene Mesungen abwechslend ->single ended Conversion mit AVcc
als VRef, und differntiel Conversion mit 2.56V als VRef, benutzen
wollte. Die gängige Meinung das an ARef ein 100nF Kondensator dran
sollte kann dann eine böse Falle werden. Denn das Umladen dieses
Kondensators dauert einige Zeit und derZzeitpunkt an dem dieser Cap
umgeaden wird ist exakt der Moment in dem der ADC on ist, die
gepufferten Register ADMUX etc.pp. beim Start des ADC erst übernomen
werden.

D.h. ändert man im ADMUX die Referenz so erfolgt die Übernahme dieser
Änderung erst beim Starten eines neuen Samplings. Da aber der Cap an
ARef mit 100nF bei schnellen Mesungen zu groß ist dauert das
Einschwingen der ARef zu lange und verfälscht die ADC Resutate ins
sinnlose. Die einzisgte Lösung ist dann eine ausreichend lange -> ADC
Prescaler -> Messung als Dummy-Messung durchzuführen. Und eben den Cap
an ARef kleiner zu machen.

Gruß Hagen

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.