Hallo, ich bastle als Anfänger in der Welt der µController momentan mit einem ATtiny261A , an den ich schon eine LED und einen Taster angeschlossen habe (die beide funktionieren soweit auch). Nun wollte ich mich an den Sleep Mode machen, da der Tiny ja nur eine Batterie hat und man ja nicht mehr Energie verschwenden muss als nötig ist. Hierzu habe ich den Beitrag zum Sleep Mode hier im Forum gelesen und denke ihn auch verstanden zu haben. Als Vorlage für meinen Code habe ich hierbei den Code unter „Aufwachen per Tastendruck“ genommen. Dabei habe ich zu dem Code/dem Prinzip noch ein paar Fragen und ich hoffe Ihr könnt mir dabei helfen :) 1. Hier wird MCUCR UND-Verknüpft mit dem negierten Wert von Hexadezimal 3 (00000011 --> 11111100). Wenn ich ins Manual zum Attiny gucke ist dieses Register mit überall 0 initialisiert, müsste dann durch das UND nicht am Ende auch überall 0 stehen, wodurch der Schritt überflüssig sein (die Werte ändern sich ja nicht)? 2. Ich habe das Register GICR durch GIMSK ersetzt da so wie ich das aus dem Manual lese dies hier das macht wofür laut der Vorlage GICR zuständig ist. Ist das so richtig? 3. Im Prinzip funktioniert der Code, ein Drücken auf den Taster und die LED leuchtet für eine Lampe. In meiner Neugier hab ich dann mal das ausschalten der LED aus dem Code entfernt, da ich dachte er geht mit dem nächsten durchlauf der WHILE-Schleife ja eh in Energiesparmodus. Zu meinem Erstaunen blieb die LED an. Ich habe nun nochmal dazu nachgelesen und tatsächlich nirgendwo etwas davon gelesen das auf Output und auf 1 gesetzte Pins im Power-Down Modus automatisch auf 0 gesetzt werden. Heißt das, das die LED leuchtet, der Power-Modes aber trotzdem aktiv ist? Oder habe ich einen Fehler bei meiner Anpassung des Codes? Mit freundlichen Grüßen
Evolve schrieb: > nirgendwo etwas davon gelesen das auf Output und auf 1 > gesetzte Pins im Power-Down Modus automatisch auf 0 gesetzt werden. Es wäre schlimm, wenn sich im Power-Down unkontrolliert irgendwelche Register ändern würden. So ein MC wäre schlichtweg unbrauchbar. Will man bestimmte Werte im Power-Down an den IO-Pins haben, muß man sie davor entsprechend setzen.
Danke erstmal für die schnelle Antwort! :) Gut dann merke ich mir das die Register so geschaltet bleiben und damit auch LEDs oder andere Anzeigen trotz Power Down eingeschaltet bleiben. Keine Ahnung vielleicht hatte ich Power-Down für mich mit sowas wie dem Energiesparmodus am PC verbunden wo meinem Verständnis nach alles ausgeschaltet wird sobald der aktiviert wird. Mfg
Evolve schrieb: > wodurch der Schritt überflüssig sein (die > Werte ändern sich ja nicht)? Es schadet nicht, explizit genau die erforderliche Situation herzustellen, obwohl es möglicherweise bereits der Fall ist. > gesetzte Pins im Power-Down Modus automatisch auf 0 gesetzt werden. Normale Eingänge werden im Powerdown vom Pin entkoppelt und intern auf 0 gesetzt, um zu verhindern, dass offene Pins den Stromverbrauch negativ beeinflussen. Wobei das natürlich nur auf Eingänge zutrifft, die im Powerdown keine Funktion haben (der Interrupt-Pin hat). An Ausgängen ändert sich jedoch nichts.
Evolve schrieb: > Keine Ahnung vielleicht hatte ich Power-Down für mich mit sowas wie dem > Energiesparmodus am PC verbunden wo meinem Verständnis nach alles > ausgeschaltet wird sobald der aktiviert wird. Der Begriff "Power Down" kann wahlweise als "Strom weg" und "Stromverbrauch runter" interpretiert werden. Was darunter genau verstanden wird kann deshalb vom Kontext abhängen, sich auch zwischen Microcontrollern unterscheiden.
Evolve schrieb: > vielleicht hatte ich Power-Down für mich mit sowas wie dem > Energiesparmodus am PC verbunden Genau so ist es ja. Der PC schaltet nicht einfach aus, sondern führt vor dem Power-Down ne Menge Routinen aus. Wenn alle IOs auf 0 gehen würden, würden sämtliche ICs mit low aktiven /OE und /CS aktiv werden und Deine Batterie leer saugen. Oftmals ist also die 1 der stromsparende Zustand. Daher braucht man die Möglichkeit der freien Auswahl.
Powerdown bedeutet interne Einheiten werden zum Strom sparen abgeschaltet, gemaess Datenblatt. Wenn man dabei LEDs laufenlaesst ist man selbst schuld, das kann der Controller ja nicht wissen. Siehe zB auch http://www.ibrtses.com/embedded/avrpowersave.html
Wow vielen Dank für die große Anzahl an hilfreichen Antworten in kurzer Zeit! Jetzt wo ich mir das so durchlese klingt es natürlich logisch (vor allem wenn man die Ports die auf Low aktiv werden bedenkt). Da der Code dann wohl funktioniert wie er soll wird Frage 2 sich auch erledigt haben, von daher bin ich fürs erste wunschlos glücklich, danke! mfg
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.