mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bekomme ADC Noise Canceler beim ATMega16 nicht zum laufen


Autor: Thomas Fr. (-tom-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche nun schon seit langem den AD-Wandler des ATMega16 im
"Noise Canceler"-Modus zu betreiben. Er wandelt aber nicht und ADIF
wird auch nicht gesetzt. Ich finde meinen Fehler einfach nicht.

Ich gehe folgendermaßen vor:
ADEN=1, ADATE=0 und den Teiler einstellen (125kHz)
ADMUX (externe Ref und single ended) einstellen


Wenn ich jetzt über ADSC-setzen eine einfache Wandlung starte, bekomme
ich das richtige Ergebnis.

Um nun den "Noise Canceler" zu benutzen, muss ich doch nur Interrupts
zulassen und im MCUCR-Register eine dezimale 80 reinschreiben (SM0=1 und
SE=1), oder verstehe ich das falsch? (Datenblatt Seite 31)
Mach ich das so, passiert nichts.
Kann mir jemand sagen, was ich im Datenblatt falsch verstanden oder
übersehen habe?

Und sehe ich das richtig, dass der UART die CPU im "Noise
Caneler"-Schlafzustand nicht wecken kann (Datenblatt Seite 32)?

Danke

Gruß

Thomas

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also nach weiteren Versuchen, bin ich mir nun fast sicher, dass das
ATMega garnicht in den Schlafmodus wechselt und folglich auch keine
Wandlung startet. Gibt es bei den Sleep-Modes noch was zu beachten,
oder genugt einfach das setzen des SE-Bits und des entsprechenden
Sleepmodus über die SMx-Bits?

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst den µC mit sleep in den Schlummer schicken (bzw. in GCC-C mit
sleep();)

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, muss natürlich sleep_cpu() heißen. Am besten schaust Du Dir die
Headerdatei sleep.h mal an.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das nicht das gleiche, wenn ich die Bit händisch setzte, d.h. nicht
diese Funktion benutze? Hab den code der fertigen sleep-Funktion gerade
nicht zur Hand, werde aber heute abend nochmal reinschauen.

Gruß

Thomas

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hat mit den Bits nix zu tun. Der µC schläft erst dann ein, wenn er
den (Assembler-) Befehl 'sleep' hört. Das Setzen der Bits ist nur
Vorarbeit. sleep_cpu() (in GCC-C) macht nix anderes, als diesen Befehl
einzufügen. Falls Du in CodeVision programmierst, geht das über
#asm("sleep").

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahh, jetzt hab ich es verstanden. Wußte nicht, dass es da extra einen
Befehl für gibt. Ich dachte ein Schreiben ins Sleep-Mode-Register löst
das Schlafen automatisch aus. Aber es gibt ja tatsächlich einen extra
Befehl dafür. Dann wird einiges klarer.
Immer wieder liegt es nur daran, dass ich manches zu flüchtig lese.

Vielen Dank

Gruß

Thomas

Autor: Thomas Fr. (-tom-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super, funktioniert wunderbar.

Danke johnny.m

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.