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
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?
Du musst den µC mit sleep in den Schlummer schicken (bzw. in GCC-C mit sleep();)
Sorry, muss natürlich sleep_cpu() heißen. Am besten schaust Du Dir die Headerdatei sleep.h mal an.
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
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").
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
Super, funktioniert wunderbar. Danke johnny.m
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.