mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tiny26 wacht aus ADC noise reduction nicht mehr auf :-(


Autor: Paul H. (powl)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi!


Um dem Rauschen von meiner I/O Peripherie etwas entgegen zu wirken 
wollte ich während der kram an ist in den ADC noise reduction sleep mode 
gehen.

Der ADC ist aktiviert, Interrupt auch. Löse ich den ADC manuell aus dann 
funktioniert alles.
  ; Sleep Mode aktivieren
  ldi    R16, (1 << SE) | (1 << SM0)
  out    MCUCR, R16

Hier habe ich den Noise reduction mode eingestellt. Mein Timer löst alle 
viertel Sekunden einen interrupt aus in dem der ADC gestartet wird. 
Anstatt hier das ADCSR bit zu setzen gehe ich per sleep einfach in den 
noise reduction mode.

Leider wacht der AVR davon nie wieder auf :-( Eigntlich sollte er doch 
dann an der stelle weitermachen an der er aufgehört hat oder? Aber er 
macht dann garnix mehr. Woran könnte das denn liegen?

Im Code im Anhang ist noch eine TWI Master Routine von mir die mir das 
ganze auf der LED-Anzeige ausgibt.

mfg PoWl

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> sbi    ADSC, ADCSR  ?
das soll doch gaaaaanz sicher
    sbi ADCSR, ADSC
heißen? -- also ERST Register DANN Bit...


hth. Jörg

Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh danke für den Hinweis, hab das tatsächlich vertauscht :-) Der 
Assembler hats jedoch trotzdem richtig kompiliert und der sbi-befehl ist 
sowieso auskommentiert aber danke :-)

Hat denn niemand ne Ahnung woran das liegen könnte dass mein AVR aus dem 
Sleep-Mode nich wieder aufwacht? :-(

Das SleepEnable-Bit ist gesetzt, der ADC noise reduction Mode 
ausgewählt. Der ADC ist mit ADEN auch aktiv.

Wird die MCU eignetlich vom Interrupt wieder zurückgerufen? Da der ADC 
von der Timer-ISR aus gestartet wird sind hier interrupts noch nicht 
aktiv. Liegt das daran?

mfg PoWl

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also das komplette Analysieren Deines Programms ist mir jetzt zu mühsam.

Aber:

Ich setze den Befehl SLEEP (meist/immer) in der Mainloop ein. Das 
sichert ab, das alle ISRs ordentlich verlassen wurden und alle Jobs (per 
Jobflags) erledigt sind. Ich nutze SLEEP im Idle-Mode (meist) bereits 
für ganz einfache Programme, wenn alle Jobs der Mainloop erledigt sind, 
schicke ich den AVR schlafen. Der nächste Interrupt weckt ihn dann 
wieder und vor dem nächsten Interrupt kann sowiso kein neuer Job (über 
Jobflags) in Auftrag gegeben werden.

In Deinem Fall müsste beim Start des ADC der Sleep-Mode von Idle auf 
ADC-Noise-red. umgeschaltet werden. Laut Datenblatt (Seite 41) sollte 
der ADC bereits eingeschaltet, aber nicht gestartet sein, dann startet 
er beim Aufruf von Sleep (wenn Mode ADC-Noise-red. voreingestellt ist) 
automatisch. Ist der ADC-Interrupt korrekt initialisiert, dann wird der 
AVR auch ordentlich geweckt. In der ADC-ISR muss der Sleepmode natürlich 
sofort wieder auf Idle umgeschaltet werden, damit beim nächsten Sleep 
ein Timer das Wecken schafft.
Übrigens: Während ACD-Sleep bleiben die Timer stehen (deren Takt wird ja 
deaktiviert). Es kann durchaus möglich sein, dass eine Korrektur der 
Timer erforderlich ist.

Ein Beispiel mit umschaltbarem Sleep-Mode findest Du hier:
http://www.hanneslux.de/avr/divers/index.html
Es ist allerdings nicht mit Tiny26 und auch nicht mit ADC-Noise-red., 
sondern mit Tiny15 und "Tiefschlaf" (Wecken per ext-Int).

...

Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habs.. das I-bit im SREG musste aktiviert sein :-) jetzt gehts^^

danke trotzdem ;-) mfg powl

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul Hamacher wrote:
> ich habs.. das I-bit im SREG musste aktiviert sein :-)

Ja sicher doch, deshalb auch der Hinweis, Sleep in der Mainloop 
aufzurufen. Das I-Flag alleine reicht aber nicht.

> jetzt gehts^^

Wirklich???

Denn falls Du Sleep immernoch in der ISR aufrufst, wirst Du mit 
Stacksalat rechnen müssen.

>
> danke trotzdem ;-) mfg powl

Nix zu danken

...

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.