<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Flood1k4</id>
	<title>Mikrocontroller.net - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Flood1k4"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Flood1k4"/>
	<updated>2026-04-10T21:28:56Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53142</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53142"/>
		<updated>2010-12-01T10:19:23Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen. Den sparsamen Umgang mit der verfügbaren el. Ladung nennt man &#039;&#039;&#039;Power Management&#039;&#039;&#039; (engl. Energiesparen).&lt;br /&gt;
&lt;br /&gt;
Im Rahmen des Power Managements stehen uns beispielsweise die Sleep-Modi zur Verfügung, mit denen wir bestimmte Module zeitweise deaktivieren können. Andere garnicht genutzte Module können wir durch entsprechende Konfiguration (z.B. in den Fuses) auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt, hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32. Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten müssen folgende Schritte ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register wird auf 1 gesetzt&lt;br /&gt;
# Die SMx-Bits im MCUCR-Register je nach gewünschtem Modus setzen&lt;br /&gt;
# Der SLEEP-Befehl wird ausgeführt&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann sofort in den SLEEP-Modus, d.h. noch vor eventuell anstehenden Interrupts, und wacht erst wieder auf wenn ein Signal eines geeigneten Moduls (je nach Modus) ihn aufweckt.&lt;br /&gt;
&lt;br /&gt;
Die Arbeit wird dann mit der ersten Anweisung hinter dem SLEEP-Befehl wieder aufgenommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MCUCR - MCU Control Register&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bit&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 0&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
| SE&lt;br /&gt;
| SM2&lt;br /&gt;
| SM1&lt;br /&gt;
| SM0&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC11&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC10&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC01&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Bit 7 - SE: Sleep Enable&lt;br /&gt;
:Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
;Bit 6..4 - SM2..0: Sleep Mode Select&lt;br /&gt;
:Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SM2&lt;br /&gt;
! SM1&lt;br /&gt;
! SM0&lt;br /&gt;
! style=&amp;quot;text-align:left&amp;quot; | Sleep Modus&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Modi Übersicht====&lt;br /&gt;
&lt;br /&gt;
Generell is der Modus zu wählen der die meisten nicht benötigten Module abschaltet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Aktive Takte &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Aktive Oszillatoren&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | Weckquellen&lt;br /&gt;
|- style=&amp;quot;background-color:#f0f0f0&amp;quot;&lt;br /&gt;
| Sleep Modus&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;CPU&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;FLASH&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;IO&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ADC&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ASY&amp;lt;/sub&amp;gt;&lt;br /&gt;
| Haupttaktgeber&lt;br /&gt;
| Timer Oszillator&lt;br /&gt;
| INT2&amp;lt;br /&amp;gt;INT1&amp;lt;br /&amp;gt;INT0&lt;br /&gt;
| TWI Address Match&lt;br /&gt;
| Timer2&lt;br /&gt;
| SPM/EEPROM Ready&lt;br /&gt;
| ADC&lt;br /&gt;
| Andere I/O&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar bei externer Taktquelle&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt; Wenn AS2-Bit in ASSR-Register gesetzt&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt; Nur INT2 oder Level Interrupt INT1 und INT0&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen, das bietet sich vorallem an wenn bestimmte Module im gegebenen Projekt generell nicht benötigt werden und damit deaktiviert werden können.&lt;br /&gt;
&lt;br /&gt;
==== Analog to Digital Converter ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich entweder durch das BODEN-Bit in den Fuses oder mit entsprechenden Befehlen aktivieren oder deaktivieren. Das Fuse-Bit ist standardmäßig gesetzt (Achtung: Umgekehrte Logik!) und der BOD damit deaktiviert.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
Natürlich geht auch das sofwareseitig [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; ASM-Quellcode Beispiele&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: AVR]]&lt;br /&gt;
[[Kategorie: AVR-Tutorial]]&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Equipment&amp;diff=53141</id>
		<title>AVR-Tutorial: Equipment</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Equipment&amp;diff=53141"/>
		<updated>2010-12-01T10:15:39Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Rumpus Board von lochraster.org */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= AVR-Tutorial - Benötigte Ausrüstung =&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
Ein Mikrocontroller alleine ist noch zu nichts nützlich. Damit man etwas damit anfangen kann, braucht man eine Schaltung, in die der Controller eingesetzt wird. Dazu werden bei Elektronikhändlern Platinen angeboten, die alles nötige (Taster, LEDs, Steckverbinder...) enthalten. Häufig enthalten diese Platinen nicht nur Platz für den Mikroprozessor, sondern auch einen ISP-Programmierer (Näheres dazu später).&lt;br /&gt;
&lt;br /&gt;
=== Fertige Evaluations-Boards und Starterkits ===&lt;br /&gt;
&lt;br /&gt;
==== AVR Starterkit aus dem Mikrocontroller.net-Shop ====&lt;br /&gt;
&lt;br /&gt;
Sehr gut für dieses Tutorial geeignet ist das [http://shop.mikrocontroller.net/?product_id=67 AVR-Starterkit aus dem Mikrocontroller.net-Shop]. Das Kit enthält eine Platine mit dem Controller ATmega8, einen USB-ISP-Programmieradapter und ein Steckernetzteil.&lt;br /&gt;
&lt;br /&gt;
==== STK500 ====&lt;br /&gt;
[[Bild:Stk500.jpg|right]]&lt;br /&gt;
Das STK500 ist das Standard-Board für AVR Entwicklung, direkt von Atmel. Es enthält auch einen ISP-Programmer und ist fertig aufgebaut. Es ist unter Entwicklern sehr beliebt und wird natürlich von Atmel unterstützt. Es gilt allgemein als gute Investition, wenn man ernsthaft in das Thema einsteigen möchte.&lt;br /&gt;
&lt;br /&gt;
Das STK500 kostet bei Reichelt ca. 80 Euro (ein geeignetes Netzteil muss zusätzlich erworben werden).&lt;br /&gt;
&lt;br /&gt;
==== Pollin ATMEL Evaluations-Board Version 2.x ====&lt;br /&gt;
&lt;br /&gt;
Bei Pollin Elektronik gibt es für ca. 15 Euro ein Evaluations-Board als Bausatz zum Selbstlöten. Im Bausatz sind die Aufbauanleitung, die Platine und Bauteile enthalten. Der/die Mikrocontroller und eine Stromversorgung müssen seperat beschafft werden. Auf dem Board ist ein einfacher ISP-Programmer (serielles &#039;&#039;bit-banging&#039;&#039;) integriert. &lt;br /&gt;
&lt;br /&gt;
Siehe: &lt;br /&gt;
* [[Pollin ATMEL Evaluations-Board]]&lt;br /&gt;
* http://www.pollin.de&lt;br /&gt;
&lt;br /&gt;
==== Pollin Funk-AVR-Evaluationsboard v1.x ====&lt;br /&gt;
&lt;br /&gt;
Bei diesem Board besteht die Möglichkeit, Funkmodule wie das [[RFM12]], RFM01 oder RFM02 auf dem Board aufzulöten.&lt;br /&gt;
&lt;br /&gt;
Siehe: &lt;br /&gt;
* [[Pollin Funk-AVR-Evaluationsboard]]&lt;br /&gt;
* [http://www.pollin.de http://www.pollin.de]&lt;br /&gt;
&lt;br /&gt;
==== ATmega8-Entwicklungsplatine ====&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist die [http://shop.mikrocontroller.net/?product_id=43 ATmega8-Entwicklungsplatine von shop.mikrocontroller.net]. Diese enthält eine Fassung für den Controller, einen Spannungswandler, die Beschaltung für die serielle Schnittstelle und einen Anschluss für den Programmieradapter. Die restliche Hardware wie LEDs und Taster kann man sich selber nach Belieben auf das Lochrasterfeld löten.&lt;br /&gt;
&lt;br /&gt;
==== Rumpus Board von lochraster.org ====&lt;br /&gt;
&lt;br /&gt;
Lochraster.org bietet ein Entwicklungsboard namens Rumpus an. Es kommt als Bausatz mit allen Teilen und Microcontroller (Atmega 168), auf dem Microcontroller ist bereits ein USB Bootloader installiert so dass man nach dem Zusammenbau sofort starten kann. Das Board wird direkt über USB mit Strom versorgt und auch über USB programmiert, es kann auch selbst als Programmer für AVR Microcontroller benutzt  werden. Das Board ist mit recht umfangreicher Peripherie ausgestattet, so das sich von sehr einfachen Anwendungen wie dem Blinken einer LED bis hin zu komplexen Aufgaben wie senden und empfangen von Infrarot Signalen eine Vielzahl von Anwendungen realisieren lassen. Mit 45 Euro gehört es sicher nicht zu den ganz billigen Einsteigerboards, für den ambitionierten Amateur bietet die reichhaltige Peripherie den Vorteil, das Board während des gesamten Lernprozesses zu nutzen ohne für die Realisierung komplexerer Aufgaben neue Hardware auflöten zu müssen. Auch relativiert sich dieser Preis wieder dadurch, dass kein ISP Programmer benötigt wird. Beim Umstieg auf ein anderes Board, für welches man dann einen ISP Programmer benötigt, kann der Rumpus diese Aufgabe übernehmen anstatt zum alten Eisen geworfen zu werden.&lt;br /&gt;
&lt;br /&gt;
Weitere Infos unter http://www.lochraster.org/ und http://wiki.lochraster.org/&lt;br /&gt;
&lt;br /&gt;
==== RN-Control =====&lt;br /&gt;
&lt;br /&gt;
Die Forengemeinde von Roboternetz hat ebenfalls ein Evaluierungsboard entwickelt, das mittlerweile sehr ausgereift ist und viele Erweiterungsmöglichkeiten bietet.&lt;br /&gt;
&lt;br /&gt;
Siehe:&lt;br /&gt;
* [http://robotikhardware.de/ http://robotikhardware.de/]&lt;br /&gt;
* [http://www.roboternetz.de/ http://www.roboternetz.de/]&lt;br /&gt;
&lt;br /&gt;
==== Arduino ====&lt;br /&gt;
Die Boards der [http://www.arduino.cc Arduino-Familie] bieten einen ATmega328p mit 16MHz und lassen sich über einen integrierten USB-seriell-Wandler und Bootloader programmieren. Die Ports sind auf Buchsenleisten herausgeführt. Sie können auch unabhängig von der Arduino-Entwicklungsumgebung als AVR-Entwicklungsboard genutzt werden.&lt;br /&gt;
&lt;br /&gt;
==== Andere ====&lt;br /&gt;
&lt;br /&gt;
Das Angebot an AVR-Evaluationboards, -Experimentierplatinen, -Entwicklerplatinen oder wie die jeweiligen Hersteller ihre Produkte auch immer bezeichnen, ist mittlerweile recht groß geworden. Sie alle zu bewerten ist unmöglich geworden.&lt;br /&gt;
&lt;br /&gt;
===Selbstbau===&lt;br /&gt;
&lt;br /&gt;
Ein fertiges Board ist gar nicht nötig, man kann die benötigte Schaltung auch selbst auf einem kleinen Steckbrett oder einer Lochrasterplatine aufbauen. So kompliziert wie das STK500 wird es nicht, es reichen eine Handvoll Bauteile. Wie man das macht, wird im Folgenden beschrieben.&lt;br /&gt;
Steckbretter (Breadboards) gibt&#039;s z.&amp;amp;nbsp;B. bei [http://www.reichelt.de Reichelt],  [http://www.conelek.com/Steckplatinen ConeleK], [http://www.elv.de/ ELV] oder [http://www.conrad.de/ Conrad]. &lt;br /&gt;
&lt;br /&gt;
Auf einem Steckbrett könnte eine Schaltung etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:tutorial_grundschaltung_breadboard.jpg|600px|center|Die im Folgenden beschriebene Grundschaltung (Spannungsversorgung links, 6-poliger ISP-Anschluß rechts hinter dem Prozessor, Quarz mit 2 Kondensatoren statt Oszillator)&amp;lt;br&amp;gt; Erweitert um eine LED mit Vorwiderstand an PB0 (rechts vor dem Prozessor), einem Resettaster (links vor Prozessor) und einem Stützkondensator zwischen +5V und GND (rechts unten)]]&lt;br /&gt;
&lt;br /&gt;
Hier ist die im Folgenden beschriebene Grundschaltung zu sehen (Spannungsversorgung links, 6-poliger ISP-Anschluß rechts hinter dem Prozessor, Quarz mit 2 Kondensatoren statt Oszillator), erweitert um eine LED mit Vorwiderstand an PB0 (rechts vor dem Prozessor), einem Resettaster (links vor Prozessor) und einem Stützkondensator zwischen +5V und GND (rechts unten).&lt;br /&gt;
&lt;br /&gt;
[[Bild:Mega8_Tutorial.png|center|framed| Die Grundschaltung eines Mega8.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ACHTUNG:&#039;&#039;&#039; Die Pinbelegung der 6-poligen ISP-Verbindung weicht von den ATMEL Angaben ab! Wenn ATMEL oder ATMEL-kompatible ISP-Adapter benutzt werden, diese Pinbelegung gemäß [http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf AVR042] (PDF) benutzen: http://www.mikrocontroller.net/articles/AVR_In_System_Programmer#Pinbelegung]]&lt;br /&gt;
&lt;br /&gt;
Über den Takteingang &#039;&#039;&#039;XTAL1&#039;&#039;&#039; ist der Mikrocontroller mit dem &#039;&#039;&#039;Quarzoszillator&#039;&#039;&#039; verbunden, der den benötigten Takt von 4 MHz liefert (siehe unten). Achtung: die Pins werden, wenn man den Oszillator mit der Schrift nach oben vor sich liegen hat, von unten links aus abgezählt. Unten links ist Pin 1, unten rechts Pin 7, oben rechts Pin 8 und oben links Pin 14 (natürlich hat der Oszillator nur 4 Pins. Die Nummerierung kommt daher, dass bei einem normalen IC dieser Größe an den gleichen Positionen die Pins Nr. 1, 7, 8 und 14 wären). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PD0-PD7&#039;&#039;&#039; und &#039;&#039;&#039;PB0-PB5&#039;&#039;&#039; sind die &#039;&#039;&#039;IO-Ports&#039;&#039;&#039; des Mikrocontrollers. Hier können Bauteile wie LEDs, Taster oder LCDs angeschlossen werden.&lt;br /&gt;
Der &#039;&#039;&#039;Port C (PC0-PC5)&#039;&#039;&#039; spielt beim Atmega8/AT90S4433 eine Sonderrolle: mit diesem Port können Analog-Spannungen gemessen werden. Aber dazu später mehr!&lt;br /&gt;
An &#039;&#039;&#039;Pin 17-19&#039;&#039;&#039; ist die Stiftleiste zur Verbindung mit dem ISP-Programmer angeschlossen, über den der AVR vom PC programmiert wird (Achtung: Pins in Abbildung entsprechen nicht der Belegung des AVRISP mkII. Die korrekte Pin-Belegung kann im Handbuch des AVRISP mkII eingesehen werden).&lt;br /&gt;
Die Resetschaltung, bestehend aus &#039;&#039;&#039;R1&#039;&#039;&#039; und &#039;&#039;&#039;C1&#039;&#039;&#039;, sorgt dafür, dass der Reseteingang des Controllers standardmäßig auf Vcc=5V liegt.&lt;br /&gt;
Zum Programmieren zieht der ISP-Adapter die Resetleitung auf Masse (GND), die Programmausführung wird dadurch unterbrochen und der interne Speicher des Controllers kann neu programmiert werden.&lt;br /&gt;
Zwischen Vcc und GND kommen noch jeweils ein 100nF Keramik- oder Folienkondensator C3 und C4, um Störungen in der Versorgungsspannung zu unterdrücken. Diese [[Abblockkondensator|Abblockkondensatoren]] sollten so nah wie möglich am Controller plaziert werden. An den Ausgang ARef wird ebenfalls ein 100nF Kondensator angeschlossen. Dieser wird allerdings erst benötigt, wenn der Analog/Digital Konverter des µC in Betrieb genommen wird.&lt;br /&gt;
&lt;br /&gt;
Für den Anschluss des ISP-Programmiergerätes kann man im Grunde jede beliebige Pin-Belegung des ISP Steckers benutzen, solange nur alle benötigten Leitungen mit dem Programmiergerät verbunden sind. In der Praxis haben sich allerdings bestimmte Belegungen durchgesetzt. Im Schaltbild ist eine &#039;&#039;&#039;eigene&#039;&#039;&#039; Belegung des 6-poligen Steckers gezeigt. Die alternative Pinbelegung eines 2-reihigen/10-poligen Steckers ist eine übliche Belegung. Benutzt man so eine übliche Belegung, so reicht normalerweise ein 10-poliges Flachbandkabel, um den vorhandenen ISP-Programmer so mit der Schaltung zu verbinden, dass alle Signale am richtigen Prozessorpin ankommen. Siehe auch [[AVR_In_System_Programmer]].&lt;br /&gt;
&lt;br /&gt;
Hier die Liste der benötigten Bauteile: &lt;br /&gt;
&lt;br /&gt;
* R1         Widerstand 10 kOhm&lt;br /&gt;
* C1         Keramikkondensator 47 nF&lt;br /&gt;
* C2, C3, C4 Keramik- oder Folienkondensator 100 nF&lt;br /&gt;
*            Stiftleiste 6-polig&lt;br /&gt;
*            Mikrocontroller ATmega8 (kann auf [http://shop.mikrocontroller.net/ http://shop.mikrocontroller.net/] bestellt werden)&lt;br /&gt;
*            Quarzoszillator 4 MHz&lt;br /&gt;
&lt;br /&gt;
Beim Steckbrett ist darauf zu achten, dass man die parallellaufenden Schienen für GND (blau) und Vcc (rot) jeweils mit Drähten verbindet (nicht Vcc und GND miteinander!).&lt;br /&gt;
&lt;br /&gt;
Eine Zusammenstellung der benötigten Bauteile befindet sich in der [[AVR-Tutorial_Bestellliste|Bestellliste]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid grey; padding: 1ex; font-size: 90%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ergänzende Hinweise zur Taktversorgung (kann übersprungen werden) ===&lt;br /&gt;
&lt;br /&gt;
Ein Mikrocontroller benötigt, wie jeder Computer, eine Taktversorgung. Der Takt ist notwendig, um die internen Abläufe im Prozessor in einer geordneten Reihenfolge ausführen zu können. Die Frequenz des Taktes bestimmt im Wesentlichen, wie schnell ein Computer arbeitet.&lt;br /&gt;
&lt;br /&gt;
Bei einem ATMega8 gibt es 2 Möglichkeiten zur Taktversorgung&lt;br /&gt;
* interner Takt&lt;br /&gt;
* externer Takt&lt;br /&gt;
&lt;br /&gt;
====interner Takt====&lt;br /&gt;
Dies ist der Auslieferungszustand bei einem Mega8. Dabei wird der Takt von einem internen RC-Glied geliefert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteil&#039;&#039;&#039;: Keine externe Beschaltung notwendig. Die Pins, an denen ansonsten ein Quarz oder ein Quarzoszillator angeschlossen wird, sind daher als normale Portpins für Ein/Ausgaben verwendbar.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil&#039;&#039;&#039;: Das RC-Glied ist nicht sehr genau. Bei Temperaturänderungen verändert es seine Frequenz. Nur 4 Frequenzen (1MHz, 2MHz, 4MHz und 8MHz) sind bei einem Mega8 realisierbar. Es gibt zwar die Möglichkeit, die interne Frequenz in Grenzen noch zu verändern, dies ist aber aufwändig und erfordert mindestens einen Frequenzzähler, wenn man eine bestimmte Frequenz erreichen will.&lt;br /&gt;
&lt;br /&gt;
====externer Takt====&lt;br /&gt;
Hier gibt es diesmal drei Möglichkeiten:&lt;br /&gt;
* Quarz&lt;br /&gt;
* Quarzoszillator&lt;br /&gt;
* Keramikschwinger/Resonator&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteil&#039;&#039;&#039;: Die Taktfrequenz ist so stabil, wie es der Quarz, Oszillator oder Keramikschwinger vorgibt. Und das ist wesentlich genauer als der interne Oszillator. Kein Abgleich notwendig, wenn eine bestimmte Frequenz erreicht werden soll, solange es einen Quarz bzw. Oszillator oder Keramikschwinger in dieser Frequenz gibt.&lt;br /&gt;
Ein spezieller Vorteil des Keramikschwingers ist, dass dieser keine Kondensatoren nach Masse braucht, weil er die schon eingebaut hat.&lt;br /&gt;
Es muss lediglich ein dritter Pin mit Masse verbunden werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil&#039;&#039;&#039;: Die Pins an denen der Quarz bzw. Oszillator oder Keramikschwinger angeschlossen wird, sind nicht mehr als I/O Pins nutzbar.&lt;br /&gt;
&lt;br /&gt;
Spätestens dann, wenn eine RS232-Verbindung zu einem anderen Computer aufgebaut werden soll, ist eine exakte Taktversorgung einer der Schlüssel, um diese Verbindung auch stabil halten zu können. Aus diesem Grund wird in diesem Tutorial von vornherein mit einem externen Takt gearbeitet. Es spielt dabei keine Rolle, ob dafür ein Quarzoszillator, ein Quarz oder ein Keramikschwinger benutzt wird.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;FF0000&amp;quot;&amp;gt;Achtung: Ein ATMega8 wird mit aktiviertem internen Takt ausgeliefert. Um einen Quarzoszillator oder einen Quarz zu aktivieren, müssen die Fuse-Bits des Prozessors verändert werden. Details dazu finden sich im Artikel [[AVR Fuses#Taktquellen Fuse Einstellung|AVR Fuses]].&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Quarz statt Quarzoszillator ====&lt;br /&gt;
&lt;br /&gt;
Wird anstelle eines Quarzoszillators ein Quarz eingesetzt, sieht die Anbindung des Quarzes so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:tutorial-quarz-schaltplan.png|center|framed| Quarz Standardbeschaltung]]&lt;br /&gt;
&lt;br /&gt;
Die beiden Kondensatoren &#039;&#039;&#039;C3&#039;&#039;&#039; und &#039;&#039;&#039;C4&#039;&#039;&#039; sind zum Betrieb des Quarzes notwendig. Ihre Größe ist abhängig von den Daten des Quarzes. 22pF sind ein Wert, der bei den meisten Quarzen funktionieren sollte.&lt;br /&gt;
&lt;br /&gt;
==== Keramikschwinger/Resonator- statt Quarz/Oszillator ====&lt;br /&gt;
&lt;br /&gt;
Wird anstelle eines Quarz/Oszillators ein Keramikschwinger eingesetzt, so sieht die Anbindung des Keramikschwingers so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Resonator.png|framed|center| Resonator Standardbeschaltung]]&lt;br /&gt;
&lt;br /&gt;
Es werden keine Kondensatoren benötigt, daher ist der Anschluss eines Keramikschwingers kinderleicht.&lt;br /&gt;
Zu beachten ist, dass ein Keramikschwinger eine höhere Toleranz als ein Quarz aufweist, die aufgedruckte Frequenz also nicht so genau liefert wie ein Quarz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stromversorgung ===&lt;br /&gt;
&lt;br /&gt;
Die Versorgungsspannung &#039;&#039;&#039;Vcc&#039;&#039;&#039; beträgt 5V und kann z.&amp;amp;nbsp;B. mit folgender Schaltung erzeugt werden:&lt;br /&gt;
&lt;br /&gt;
[[Bild:V_Regler.gif|framed|center|Standard-Netzteilbeschaltung eines 7805]]&lt;br /&gt;
&lt;br /&gt;
Bauteile:&lt;br /&gt;
* IC1: 5V-Spannungsregler 7805&lt;br /&gt;
* C1: Elko 10µF (Polung beachten!)&lt;br /&gt;
* C2,C3: 2x Kondensator 100nF (kein Elektrolyt)&lt;br /&gt;
* D1: Diode 1N4001&lt;br /&gt;
&lt;br /&gt;
Hauptelement der Schaltung ist das IC 7805. Seine Aufgabe ist es aus der Versorgungsspannung stabile 5V zu erzeugen. Dieses IC gibt es seit vielen Jahren und wird von vielen Chipherstellern produziert. Er stellt die einfachste und simpelste Möglichkeit dar, aus einer vorhandenen Gleichspannung definierte 5V zu erzeugen. Den 7805 gibt es in verschiedenen Ausführungen, was seine maximale Strombelastung angeht. Für die Zwecke dieses Tutorials ist die Standard-Variante, welche maximal 1A abgeben kann, völlig ausreichend. Der 7805 enthält eine Übertemperatursicherung, so dass er abschaltet, wenn es ihm zu heiß wird.&lt;br /&gt;
&lt;br /&gt;
Die beiden 100nF Kondensatoren haben die Aufgabe, eine mögliche Schwingneigung des 7805 zu unterdrücken. Sie müssen so nahe wie möglich an den Anschlusspins des 7805 angeschlossen werden, um ihre Wirkung zu entfalten.&lt;br /&gt;
&lt;br /&gt;
An den Eingang (+ und - im Schaltplan) wird ein Steckernetzteil mit einer Spannung von 9 - 12V angeschlossen. Der 7805 benötigt an seinem Eingang eine Gleichspannung, die mindestens 8V beträgt. Mit einem 6V oder 7V Netzteil wird der 7805 keine stabilen 5V erzeugen können. Auf der anderen Seite macht es auch keinen Sinn, wesentlich über 12V Eingangsspannung hinauszugehen. Der 7805 ist ein Linearregler. Salopp gesagt, wird die überschüssige Spannung in Form von Wärme vernichtet. Liegt die Eingangsspannung weit über 12V, so wird schon wesentlich mehr Energie in Form von Wärme umgesetzt, als am Ausgang entnommen werden kann. Mal ganz davon abgesehen, dass der 7805 davon brennheiß werden wird.&lt;br /&gt;
&lt;br /&gt;
Eine Stromversorgung mit Batterien ist grundsätzlich auch möglich, wenn die elektrischen Grenzdaten des µC eingehalten werden (max. Spannung, min. Spannung). Bei der geregelten Stromversorgung oben sollte die Batteriespannung ca. 1.5 - 2.5V (Dropout-Spannung des Linearreglers) größer sein als die Versorgungsspannung des µC. Die [[Versorgung aus einer Zelle]] ist ein Thema für Fortgeschrittene.&lt;br /&gt;
&lt;br /&gt;
=== Der ISP-Programmierer (In-System-Programmer)===&lt;br /&gt;
&lt;br /&gt;
[[Bild:Mikrocontroller.gif|framed|right|ISP Programmierer]]&lt;br /&gt;
Dann braucht man nur noch den &#039;&#039;&#039;ISP-Programmieradapter&#039;&#039;&#039;, über den man die Programme vom PC in den Controller übertragen kann. Eine Übersicht über mögliche ISP-Programmer Varianten findet sich im Artikel [[AVR_In_System_Programmer]].&lt;br /&gt;
&lt;br /&gt;
Fertige ISP-Programmer zum Anschluss an den Parallelport oder USB gibt es z.&amp;amp;nbsp;B. auf http://shop.mikrocontroller.net/. &lt;br /&gt;
&lt;br /&gt;
Eine Bauanleitung gibt es u.a. auf [http://www.rn-wissen.de/index.php/AVR-ISP_Programmierkabel http://www.rn-wissen.de/index.php/AVR-ISP_Programmierkabel] oder [http://rumil.de/hardware/avrisp.html http://rumil.de/hardware/avrisp.html].&lt;br /&gt;
&lt;br /&gt;
Den ISP-Adapter schließt man an den Parallelport an und verbindet ihn mit der Stiftleiste SV1 über ein 6-adriges Kabel (siehe Schaltplan).&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
&lt;br /&gt;
Wer vorausschauend kauft, kauft mehr als einen Mikrocontroller. Bis der erste Controller defekt ist oder man durch Austauschen sicher gehen möchte, ob der Fehler im Programm oder im Controller ist, vergeht nur wenig Zeit.&lt;br /&gt;
&lt;br /&gt;
Für die anderen Teile des Tutorials sollte man sich noch die folgenden Bauteile besorgen: &lt;br /&gt;
&lt;br /&gt;
---------------------------&lt;br /&gt;
Teil 2 (I/O-Grundlagen)&lt;br /&gt;
* 5 LEDs 5mm&lt;br /&gt;
* 5 Taster&lt;br /&gt;
* 5 Widerstände 1k&lt;br /&gt;
* 5 Widerstände 10k&lt;br /&gt;
&lt;br /&gt;
---------------------------&lt;br /&gt;
Teil 6 (LC-Display)&lt;br /&gt;
* 1 Potentiometer 10k&lt;br /&gt;
* 1 HD44780-kompatibles LCD, z.&amp;amp;nbsp;B. 4x20 oder 2x16 Zeichen&lt;br /&gt;
*   besitzt das LCD eine Hintergrundbeleuchtung, dann noch einen Vorwiderstand dafür. Details dazu stehen im Datenblatt des LCD. Ein Wert von 50 Ohm sollte aber in jedem Fall passen. Schlimmstenfalls ist die Hintergrundbeleuchtung dann etwas zu dunkel.&lt;br /&gt;
&lt;br /&gt;
---------------------------&lt;br /&gt;
Teil 10 (Der UART)&lt;br /&gt;
* 1 Pegelwandler MAX232, MAX232&#039;&#039;&#039;A&#039;&#039;&#039; oder MAX202&lt;br /&gt;
* 5 Kondensatoren&lt;br /&gt;
** Bei einem MAX232: je 1µF Elektrolytkondensator&lt;br /&gt;
** Bei einem MAX202 oder MAX232&#039;&#039;&#039;A&#039;&#039;&#039;: je  100nF Keramik- oder Elektrolytkondensator&lt;br /&gt;
:Die Kondensatoren dürfen auch größer sein. Ist man sich nicht sicher, welchen MAX232 man hat (A oder nicht A), dann die größeren Kondensatoren 1µF nehmen, die funktionieren auch beim MAX232A oder MAX202.&lt;br /&gt;
* 1 9-polige SUBD-Buchse (female)&lt;br /&gt;
* 1 dazu passendes Modem(nicht Nullmodem!)-Kabel&lt;br /&gt;
&lt;br /&gt;
---------------------------&lt;br /&gt;
Teil 14 (ADC)&lt;br /&gt;
* 1 Kondensator 100n&lt;br /&gt;
* 1 Potentiometer 10k&lt;br /&gt;
* nach Lust und Laune temperatur- oder lichtabhängige Widerstände und jeweils einen Widerstand in der gleichen Größenordnung wie der Sensor&lt;br /&gt;
&lt;br /&gt;
---------------------------&lt;br /&gt;
Teil 17 (Schieberegister)&lt;br /&gt;
* 2 Schieberegister 74HC595&lt;br /&gt;
* einige LED, damit man an die Schieberegister auch etwas anschliessen kann, samt passenden Vorwiderständen&lt;br /&gt;
&lt;br /&gt;
---------------------------&lt;br /&gt;
Teil 19 (7-Segmentanzeige)&lt;br /&gt;
* 4 7-Segmentanzeigen mit gemeinsamer Anode&lt;br /&gt;
* 4 PNP Transistoren BC338&lt;br /&gt;
* 4 Widerstände 1k&lt;br /&gt;
* 7 Widerstände 100Ohm&lt;br /&gt;
&lt;br /&gt;
Für weitere Bauteile, die man als angehender µC Bastler auch des Öfteren mal benötigt, empfiehlt sich ein Blick in die Liste der [[Standardbauelemente]] bzw. in die [[Absolute_beginner|Grundausstattung]]. Wenn ihr Händler Großpackungen (zb. 100 Stück) von 100n Kondensatoren, 10k, 1k oder 100Ohm Widerständen anbietet, sollten sie deren Erwerb in Erwägung ziehen. Diese Bauteile benötigt man oft und derartige Großpackungen sind oft nicht teurer, als wennn man einige wenige Exemplare einzeln kauft. Dies hängt damit zusammen, daß das Herauszählen von 9 Bauteilen für den Verkäufer teurer kommt, als 100 Bauteile abgepackt aus dem Regal zu nehmen.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
In diesem Tutorial wird nur auf die Programmierung in Assembler eingegangen, da Assembler für das Verständnis der Hardware am besten geeignet ist.&lt;br /&gt;
&lt;br /&gt;
=== Assembler ===&lt;br /&gt;
&lt;br /&gt;
Zuerst braucht man einen &#039;&#039;&#039;Assembler&#039;&#039;&#039;, der in Assemblersprache geschriebene Programme in Maschinencode übersetzt. Windows-User können das [http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725 AVR-Studio] von Atmel verwenden, das neben dem Assembler auch einen Simulator enthält, mit dem sich die Programme vor der Übertragung in den Controller testen lassen; für Linux gibt es [http://www.tavrasm.org/ tavrasm], [http://avra.sourceforge.net/ avra] und [http://avr-asm-tutorial.net/gavrasm/index_de.html gavrasm]. &lt;br /&gt;
&lt;br /&gt;
Um die vom Assembler erzeugte &amp;quot;.hex&amp;quot;-Datei über den ISP-Adapter in den Mikrocontroller zu programmieren, kann man unter Windows z.&amp;amp;nbsp;B. das Programm [http://www.myplace.nu/avr/yaap/ yaap] verwenden, für Linux gibt es [http://savannah.nongnu.org/projects/uisp/ uisp], für beide avrdude.&lt;br /&gt;
&lt;br /&gt;
=== C ===&lt;br /&gt;
Wer in C programmieren möchte, kann den kostenlosen GNU-C-Compiler AVR-GCC (unter Windows &amp;quot;WinAVR&amp;quot;) ausprobieren. Dieser C-Compiler kann auch in das für Assembler-Programmierung notwendige AVR-Studio integriert werden. In der Artikelsammlung gibt es ein umfangreiches [[AVR-GCC-Tutorial|Tutorial]] zu diesem Compiler;&lt;br /&gt;
&lt;br /&gt;
Wer unter Windows und Linux gleichermassen kostenlos entwickeln will, der sollte sich die [http://www.eclipse.org/ IDE Eclipse for C/C++ Developers] und das [http://avr-eclipse.sourceforge.net/wiki/index.php/The_AVR_Eclipse_Plugin AVR-Eclipse Plugin ] ansehen, beide sind unter Windows und Linux einfach zu installieren. Hier wird auch der AVR-GCC benutzt. In der Artikelsammlung gibt es ein umfangreiches [[AVR Eclipse|AVR Eclipse Tutorial]] zu dieser IDE.&lt;br /&gt;
Ebenfalls unter Linux und Windows verfügbar ist die Entwicklungsumgebung [http://www.codeblocks.org/ Code::Blocks] (aktuelle, stabile Versionen sind als Nightly Builds regelmäßig im [http://forums.codeblocks.org/ Forum] verfügbar). Innerhalb dieser Entwicklungsumgebung können ohne die Installation zusätzlicher Plugins &amp;quot;AVR-Projekte&amp;quot; angelegt werden.&lt;br /&gt;
&lt;br /&gt;
Fragen dazu stellt man am besten hier im [http://www.mikrocontroller.net/forum/list-2-1.html GCC-Forum].&lt;br /&gt;
&lt;br /&gt;
=== Pascal ===&lt;br /&gt;
Wer in Pascal programmieren muss, kann [http://www.e-lab.de AVRPascal] ausprobieren.&amp;lt;br&amp;gt; &lt;br /&gt;
Dieser Pascalcompiler ist kostenfrei bis 4kb Code und bietet viele ausgereifte Bibliotheken für Servoansteuerung, Serielle Schnittstellen (COM, TWI, SPI), PWM, Timernutzung, LC-Displays usw.&amp;lt;br&amp;gt; &lt;br /&gt;
Außerdem gibt es eine kostenfreie Version für den Mega8 und den Mega88.&lt;br /&gt;
[http://www.e-lab.de E-LAB].&lt;br /&gt;
&lt;br /&gt;
=== Basic ===&lt;br /&gt;
Auch Basic-Fans kommen nicht zu kurz, für die gibt es z.&amp;amp;nbsp;B. [[Bascom AVR]] ($69, Demo verfügbar).&lt;br /&gt;
&lt;br /&gt;
=== Forth ===&lt;br /&gt;
Wer einen direkten und interaktiven Zugang zum Controller haben will, sollte sich [http://amforth.sourceforge.net Forth] anschauen. Voraussetzung ist ein serieller Anschluß (Max232), also etwas mehr als die Minimalbeschaltung.&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
Bevor man anfängt, sollte man sich die folgenden PDF-Dateien runterladen und zumindest mal reinschauen:&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf Datenblatt des ATmega8 (4,54 MB)]&lt;br /&gt;
* [http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf Befehlssatz der AVRs (1,27 MB)]&lt;br /&gt;
* oder [http://www.avr-roboter.de/controller/befehle/befehle.html Befehlssatz in deutscher Übersetzung online]&lt;br /&gt;
* oder [http://www.avr-modelleisenbahn.de/atmega8/0-einleitung.htm Datenblatt des ATmega8 in deutscher Übersetzung online]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Datenblatt eines Controllers ist das wichtigste Dokument für einen Entwickler. Es enthält Informationen über die Pinbelegung, Versorgungsspannung, Beschaltung, Speicher, die Verwendung der IO-Komponenten und vieles mehr.&lt;br /&gt;
&lt;br /&gt;
Im Befehlssatz sind alle Assemblerbefehle der AVR-Controllerfamilie aufgelistet und erklärt.&lt;br /&gt;
 &lt;br /&gt;
{{Navigation_hochvor|	 &lt;br /&gt;
hochtext=Inhaltsverzeichnis|	 &lt;br /&gt;
hochlink=AVR-Tutorial|	 &lt;br /&gt;
vortext=I/O Grundlagen|	 &lt;br /&gt;
vorlink=AVR-Tutorial: IO-Grundlagen}}	 &lt;br /&gt;
 &lt;br /&gt;
[[Category:AVR-Tutorial]]&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Equipment&amp;diff=53140</id>
		<title>AVR-Tutorial: Equipment</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Equipment&amp;diff=53140"/>
		<updated>2010-12-01T10:14:59Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Fertige Evaluations-Boards und Starterkits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= AVR-Tutorial - Benötigte Ausrüstung =&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
Ein Mikrocontroller alleine ist noch zu nichts nützlich. Damit man etwas damit anfangen kann, braucht man eine Schaltung, in die der Controller eingesetzt wird. Dazu werden bei Elektronikhändlern Platinen angeboten, die alles nötige (Taster, LEDs, Steckverbinder...) enthalten. Häufig enthalten diese Platinen nicht nur Platz für den Mikroprozessor, sondern auch einen ISP-Programmierer (Näheres dazu später).&lt;br /&gt;
&lt;br /&gt;
=== Fertige Evaluations-Boards und Starterkits ===&lt;br /&gt;
&lt;br /&gt;
==== AVR Starterkit aus dem Mikrocontroller.net-Shop ====&lt;br /&gt;
&lt;br /&gt;
Sehr gut für dieses Tutorial geeignet ist das [http://shop.mikrocontroller.net/?product_id=67 AVR-Starterkit aus dem Mikrocontroller.net-Shop]. Das Kit enthält eine Platine mit dem Controller ATmega8, einen USB-ISP-Programmieradapter und ein Steckernetzteil.&lt;br /&gt;
&lt;br /&gt;
==== STK500 ====&lt;br /&gt;
[[Bild:Stk500.jpg|right]]&lt;br /&gt;
Das STK500 ist das Standard-Board für AVR Entwicklung, direkt von Atmel. Es enthält auch einen ISP-Programmer und ist fertig aufgebaut. Es ist unter Entwicklern sehr beliebt und wird natürlich von Atmel unterstützt. Es gilt allgemein als gute Investition, wenn man ernsthaft in das Thema einsteigen möchte.&lt;br /&gt;
&lt;br /&gt;
Das STK500 kostet bei Reichelt ca. 80 Euro (ein geeignetes Netzteil muss zusätzlich erworben werden).&lt;br /&gt;
&lt;br /&gt;
==== Pollin ATMEL Evaluations-Board Version 2.x ====&lt;br /&gt;
&lt;br /&gt;
Bei Pollin Elektronik gibt es für ca. 15 Euro ein Evaluations-Board als Bausatz zum Selbstlöten. Im Bausatz sind die Aufbauanleitung, die Platine und Bauteile enthalten. Der/die Mikrocontroller und eine Stromversorgung müssen seperat beschafft werden. Auf dem Board ist ein einfacher ISP-Programmer (serielles &#039;&#039;bit-banging&#039;&#039;) integriert. &lt;br /&gt;
&lt;br /&gt;
Siehe: &lt;br /&gt;
* [[Pollin ATMEL Evaluations-Board]]&lt;br /&gt;
* http://www.pollin.de&lt;br /&gt;
&lt;br /&gt;
==== Pollin Funk-AVR-Evaluationsboard v1.x ====&lt;br /&gt;
&lt;br /&gt;
Bei diesem Board besteht die Möglichkeit, Funkmodule wie das [[RFM12]], RFM01 oder RFM02 auf dem Board aufzulöten.&lt;br /&gt;
&lt;br /&gt;
Siehe: &lt;br /&gt;
* [[Pollin Funk-AVR-Evaluationsboard]]&lt;br /&gt;
* [http://www.pollin.de http://www.pollin.de]&lt;br /&gt;
&lt;br /&gt;
==== ATmega8-Entwicklungsplatine ====&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist die [http://shop.mikrocontroller.net/?product_id=43 ATmega8-Entwicklungsplatine von shop.mikrocontroller.net]. Diese enthält eine Fassung für den Controller, einen Spannungswandler, die Beschaltung für die serielle Schnittstelle und einen Anschluss für den Programmieradapter. Die restliche Hardware wie LEDs und Taster kann man sich selber nach Belieben auf das Lochrasterfeld löten.&lt;br /&gt;
&lt;br /&gt;
==== Rumpus Board von lochraster.org ====&lt;br /&gt;
&lt;br /&gt;
Lochraster.org bietet ein Entwicklungsboard namens Rumpus an. Es kommt als Bausatz mit allen Teilen und Microcontroller (Atmega 168), auf dem Microcontroller ist bereits ein USB Bootloader installiert so dass man nach dem Zusammenbau sofort starten kann. Das Board wird direkt über USB mit Strom versorgt und auch über USB programmiert, es kann auch selbst als Programmer für AVR Microcontroller benutzt  werden. Das Board ist mit recht umfangreicher Peripherie ausgestattet, so das sich von sehr einfachen Anwendungen wie dem Blinken einer LED bis hin zu komplexen Aufgaben wie senden und empfangen von Infrarot Signalen eine Vielzahl von Anwendungen realisieren lassen. Mit 45 Euro gehört es sicher nicht zu den ganz billigen Einsteigerboards, für den ambitionierten Amateur bietet die reichhaltige Peripherie den Vorteil, das Board während des gesamten Lernprozesses zu nutzen ohne für die Realisierung komplexerer Aufgaben neue Hardware auflöten zu müssen. Auch relativiert sich dieser Preis wieder dadurch, dass kein ISP Programmer benötigt wird. Beim Umstieg auf ein anderes Board, für welches man dann einen ISP Programmer benötigt, kann der Rumpus diese Aufgabe übernehmen anstatt zum alten Eisen geworfen zu werden.&lt;br /&gt;
&lt;br /&gt;
Weitere Infos unter http://www.lochraster.org/ und http://wiki.lochraster.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== RN-Control =====&lt;br /&gt;
&lt;br /&gt;
Die Forengemeinde von Roboternetz hat ebenfalls ein Evaluierungsboard entwickelt, das mittlerweile sehr ausgereift ist und viele Erweiterungsmöglichkeiten bietet.&lt;br /&gt;
&lt;br /&gt;
Siehe:&lt;br /&gt;
* [http://robotikhardware.de/ http://robotikhardware.de/]&lt;br /&gt;
* [http://www.roboternetz.de/ http://www.roboternetz.de/]&lt;br /&gt;
&lt;br /&gt;
==== Arduino ====&lt;br /&gt;
Die Boards der [http://www.arduino.cc Arduino-Familie] bieten einen ATmega328p mit 16MHz und lassen sich über einen integrierten USB-seriell-Wandler und Bootloader programmieren. Die Ports sind auf Buchsenleisten herausgeführt. Sie können auch unabhängig von der Arduino-Entwicklungsumgebung als AVR-Entwicklungsboard genutzt werden.&lt;br /&gt;
&lt;br /&gt;
==== Andere ====&lt;br /&gt;
&lt;br /&gt;
Das Angebot an AVR-Evaluationboards, -Experimentierplatinen, -Entwicklerplatinen oder wie die jeweiligen Hersteller ihre Produkte auch immer bezeichnen, ist mittlerweile recht groß geworden. Sie alle zu bewerten ist unmöglich geworden.&lt;br /&gt;
&lt;br /&gt;
===Selbstbau===&lt;br /&gt;
&lt;br /&gt;
Ein fertiges Board ist gar nicht nötig, man kann die benötigte Schaltung auch selbst auf einem kleinen Steckbrett oder einer Lochrasterplatine aufbauen. So kompliziert wie das STK500 wird es nicht, es reichen eine Handvoll Bauteile. Wie man das macht, wird im Folgenden beschrieben.&lt;br /&gt;
Steckbretter (Breadboards) gibt&#039;s z.&amp;amp;nbsp;B. bei [http://www.reichelt.de Reichelt],  [http://www.conelek.com/Steckplatinen ConeleK], [http://www.elv.de/ ELV] oder [http://www.conrad.de/ Conrad]. &lt;br /&gt;
&lt;br /&gt;
Auf einem Steckbrett könnte eine Schaltung etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:tutorial_grundschaltung_breadboard.jpg|600px|center|Die im Folgenden beschriebene Grundschaltung (Spannungsversorgung links, 6-poliger ISP-Anschluß rechts hinter dem Prozessor, Quarz mit 2 Kondensatoren statt Oszillator)&amp;lt;br&amp;gt; Erweitert um eine LED mit Vorwiderstand an PB0 (rechts vor dem Prozessor), einem Resettaster (links vor Prozessor) und einem Stützkondensator zwischen +5V und GND (rechts unten)]]&lt;br /&gt;
&lt;br /&gt;
Hier ist die im Folgenden beschriebene Grundschaltung zu sehen (Spannungsversorgung links, 6-poliger ISP-Anschluß rechts hinter dem Prozessor, Quarz mit 2 Kondensatoren statt Oszillator), erweitert um eine LED mit Vorwiderstand an PB0 (rechts vor dem Prozessor), einem Resettaster (links vor Prozessor) und einem Stützkondensator zwischen +5V und GND (rechts unten).&lt;br /&gt;
&lt;br /&gt;
[[Bild:Mega8_Tutorial.png|center|framed| Die Grundschaltung eines Mega8.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ACHTUNG:&#039;&#039;&#039; Die Pinbelegung der 6-poligen ISP-Verbindung weicht von den ATMEL Angaben ab! Wenn ATMEL oder ATMEL-kompatible ISP-Adapter benutzt werden, diese Pinbelegung gemäß [http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf AVR042] (PDF) benutzen: http://www.mikrocontroller.net/articles/AVR_In_System_Programmer#Pinbelegung]]&lt;br /&gt;
&lt;br /&gt;
Über den Takteingang &#039;&#039;&#039;XTAL1&#039;&#039;&#039; ist der Mikrocontroller mit dem &#039;&#039;&#039;Quarzoszillator&#039;&#039;&#039; verbunden, der den benötigten Takt von 4 MHz liefert (siehe unten). Achtung: die Pins werden, wenn man den Oszillator mit der Schrift nach oben vor sich liegen hat, von unten links aus abgezählt. Unten links ist Pin 1, unten rechts Pin 7, oben rechts Pin 8 und oben links Pin 14 (natürlich hat der Oszillator nur 4 Pins. Die Nummerierung kommt daher, dass bei einem normalen IC dieser Größe an den gleichen Positionen die Pins Nr. 1, 7, 8 und 14 wären). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PD0-PD7&#039;&#039;&#039; und &#039;&#039;&#039;PB0-PB5&#039;&#039;&#039; sind die &#039;&#039;&#039;IO-Ports&#039;&#039;&#039; des Mikrocontrollers. Hier können Bauteile wie LEDs, Taster oder LCDs angeschlossen werden.&lt;br /&gt;
Der &#039;&#039;&#039;Port C (PC0-PC5)&#039;&#039;&#039; spielt beim Atmega8/AT90S4433 eine Sonderrolle: mit diesem Port können Analog-Spannungen gemessen werden. Aber dazu später mehr!&lt;br /&gt;
An &#039;&#039;&#039;Pin 17-19&#039;&#039;&#039; ist die Stiftleiste zur Verbindung mit dem ISP-Programmer angeschlossen, über den der AVR vom PC programmiert wird (Achtung: Pins in Abbildung entsprechen nicht der Belegung des AVRISP mkII. Die korrekte Pin-Belegung kann im Handbuch des AVRISP mkII eingesehen werden).&lt;br /&gt;
Die Resetschaltung, bestehend aus &#039;&#039;&#039;R1&#039;&#039;&#039; und &#039;&#039;&#039;C1&#039;&#039;&#039;, sorgt dafür, dass der Reseteingang des Controllers standardmäßig auf Vcc=5V liegt.&lt;br /&gt;
Zum Programmieren zieht der ISP-Adapter die Resetleitung auf Masse (GND), die Programmausführung wird dadurch unterbrochen und der interne Speicher des Controllers kann neu programmiert werden.&lt;br /&gt;
Zwischen Vcc und GND kommen noch jeweils ein 100nF Keramik- oder Folienkondensator C3 und C4, um Störungen in der Versorgungsspannung zu unterdrücken. Diese [[Abblockkondensator|Abblockkondensatoren]] sollten so nah wie möglich am Controller plaziert werden. An den Ausgang ARef wird ebenfalls ein 100nF Kondensator angeschlossen. Dieser wird allerdings erst benötigt, wenn der Analog/Digital Konverter des µC in Betrieb genommen wird.&lt;br /&gt;
&lt;br /&gt;
Für den Anschluss des ISP-Programmiergerätes kann man im Grunde jede beliebige Pin-Belegung des ISP Steckers benutzen, solange nur alle benötigten Leitungen mit dem Programmiergerät verbunden sind. In der Praxis haben sich allerdings bestimmte Belegungen durchgesetzt. Im Schaltbild ist eine &#039;&#039;&#039;eigene&#039;&#039;&#039; Belegung des 6-poligen Steckers gezeigt. Die alternative Pinbelegung eines 2-reihigen/10-poligen Steckers ist eine übliche Belegung. Benutzt man so eine übliche Belegung, so reicht normalerweise ein 10-poliges Flachbandkabel, um den vorhandenen ISP-Programmer so mit der Schaltung zu verbinden, dass alle Signale am richtigen Prozessorpin ankommen. Siehe auch [[AVR_In_System_Programmer]].&lt;br /&gt;
&lt;br /&gt;
Hier die Liste der benötigten Bauteile: &lt;br /&gt;
&lt;br /&gt;
* R1         Widerstand 10 kOhm&lt;br /&gt;
* C1         Keramikkondensator 47 nF&lt;br /&gt;
* C2, C3, C4 Keramik- oder Folienkondensator 100 nF&lt;br /&gt;
*            Stiftleiste 6-polig&lt;br /&gt;
*            Mikrocontroller ATmega8 (kann auf [http://shop.mikrocontroller.net/ http://shop.mikrocontroller.net/] bestellt werden)&lt;br /&gt;
*            Quarzoszillator 4 MHz&lt;br /&gt;
&lt;br /&gt;
Beim Steckbrett ist darauf zu achten, dass man die parallellaufenden Schienen für GND (blau) und Vcc (rot) jeweils mit Drähten verbindet (nicht Vcc und GND miteinander!).&lt;br /&gt;
&lt;br /&gt;
Eine Zusammenstellung der benötigten Bauteile befindet sich in der [[AVR-Tutorial_Bestellliste|Bestellliste]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid grey; padding: 1ex; font-size: 90%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ergänzende Hinweise zur Taktversorgung (kann übersprungen werden) ===&lt;br /&gt;
&lt;br /&gt;
Ein Mikrocontroller benötigt, wie jeder Computer, eine Taktversorgung. Der Takt ist notwendig, um die internen Abläufe im Prozessor in einer geordneten Reihenfolge ausführen zu können. Die Frequenz des Taktes bestimmt im Wesentlichen, wie schnell ein Computer arbeitet.&lt;br /&gt;
&lt;br /&gt;
Bei einem ATMega8 gibt es 2 Möglichkeiten zur Taktversorgung&lt;br /&gt;
* interner Takt&lt;br /&gt;
* externer Takt&lt;br /&gt;
&lt;br /&gt;
====interner Takt====&lt;br /&gt;
Dies ist der Auslieferungszustand bei einem Mega8. Dabei wird der Takt von einem internen RC-Glied geliefert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteil&#039;&#039;&#039;: Keine externe Beschaltung notwendig. Die Pins, an denen ansonsten ein Quarz oder ein Quarzoszillator angeschlossen wird, sind daher als normale Portpins für Ein/Ausgaben verwendbar.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil&#039;&#039;&#039;: Das RC-Glied ist nicht sehr genau. Bei Temperaturänderungen verändert es seine Frequenz. Nur 4 Frequenzen (1MHz, 2MHz, 4MHz und 8MHz) sind bei einem Mega8 realisierbar. Es gibt zwar die Möglichkeit, die interne Frequenz in Grenzen noch zu verändern, dies ist aber aufwändig und erfordert mindestens einen Frequenzzähler, wenn man eine bestimmte Frequenz erreichen will.&lt;br /&gt;
&lt;br /&gt;
====externer Takt====&lt;br /&gt;
Hier gibt es diesmal drei Möglichkeiten:&lt;br /&gt;
* Quarz&lt;br /&gt;
* Quarzoszillator&lt;br /&gt;
* Keramikschwinger/Resonator&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteil&#039;&#039;&#039;: Die Taktfrequenz ist so stabil, wie es der Quarz, Oszillator oder Keramikschwinger vorgibt. Und das ist wesentlich genauer als der interne Oszillator. Kein Abgleich notwendig, wenn eine bestimmte Frequenz erreicht werden soll, solange es einen Quarz bzw. Oszillator oder Keramikschwinger in dieser Frequenz gibt.&lt;br /&gt;
Ein spezieller Vorteil des Keramikschwingers ist, dass dieser keine Kondensatoren nach Masse braucht, weil er die schon eingebaut hat.&lt;br /&gt;
Es muss lediglich ein dritter Pin mit Masse verbunden werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil&#039;&#039;&#039;: Die Pins an denen der Quarz bzw. Oszillator oder Keramikschwinger angeschlossen wird, sind nicht mehr als I/O Pins nutzbar.&lt;br /&gt;
&lt;br /&gt;
Spätestens dann, wenn eine RS232-Verbindung zu einem anderen Computer aufgebaut werden soll, ist eine exakte Taktversorgung einer der Schlüssel, um diese Verbindung auch stabil halten zu können. Aus diesem Grund wird in diesem Tutorial von vornherein mit einem externen Takt gearbeitet. Es spielt dabei keine Rolle, ob dafür ein Quarzoszillator, ein Quarz oder ein Keramikschwinger benutzt wird.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;FF0000&amp;quot;&amp;gt;Achtung: Ein ATMega8 wird mit aktiviertem internen Takt ausgeliefert. Um einen Quarzoszillator oder einen Quarz zu aktivieren, müssen die Fuse-Bits des Prozessors verändert werden. Details dazu finden sich im Artikel [[AVR Fuses#Taktquellen Fuse Einstellung|AVR Fuses]].&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Quarz statt Quarzoszillator ====&lt;br /&gt;
&lt;br /&gt;
Wird anstelle eines Quarzoszillators ein Quarz eingesetzt, sieht die Anbindung des Quarzes so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:tutorial-quarz-schaltplan.png|center|framed| Quarz Standardbeschaltung]]&lt;br /&gt;
&lt;br /&gt;
Die beiden Kondensatoren &#039;&#039;&#039;C3&#039;&#039;&#039; und &#039;&#039;&#039;C4&#039;&#039;&#039; sind zum Betrieb des Quarzes notwendig. Ihre Größe ist abhängig von den Daten des Quarzes. 22pF sind ein Wert, der bei den meisten Quarzen funktionieren sollte.&lt;br /&gt;
&lt;br /&gt;
==== Keramikschwinger/Resonator- statt Quarz/Oszillator ====&lt;br /&gt;
&lt;br /&gt;
Wird anstelle eines Quarz/Oszillators ein Keramikschwinger eingesetzt, so sieht die Anbindung des Keramikschwingers so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Resonator.png|framed|center| Resonator Standardbeschaltung]]&lt;br /&gt;
&lt;br /&gt;
Es werden keine Kondensatoren benötigt, daher ist der Anschluss eines Keramikschwingers kinderleicht.&lt;br /&gt;
Zu beachten ist, dass ein Keramikschwinger eine höhere Toleranz als ein Quarz aufweist, die aufgedruckte Frequenz also nicht so genau liefert wie ein Quarz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stromversorgung ===&lt;br /&gt;
&lt;br /&gt;
Die Versorgungsspannung &#039;&#039;&#039;Vcc&#039;&#039;&#039; beträgt 5V und kann z.&amp;amp;nbsp;B. mit folgender Schaltung erzeugt werden:&lt;br /&gt;
&lt;br /&gt;
[[Bild:V_Regler.gif|framed|center|Standard-Netzteilbeschaltung eines 7805]]&lt;br /&gt;
&lt;br /&gt;
Bauteile:&lt;br /&gt;
* IC1: 5V-Spannungsregler 7805&lt;br /&gt;
* C1: Elko 10µF (Polung beachten!)&lt;br /&gt;
* C2,C3: 2x Kondensator 100nF (kein Elektrolyt)&lt;br /&gt;
* D1: Diode 1N4001&lt;br /&gt;
&lt;br /&gt;
Hauptelement der Schaltung ist das IC 7805. Seine Aufgabe ist es aus der Versorgungsspannung stabile 5V zu erzeugen. Dieses IC gibt es seit vielen Jahren und wird von vielen Chipherstellern produziert. Er stellt die einfachste und simpelste Möglichkeit dar, aus einer vorhandenen Gleichspannung definierte 5V zu erzeugen. Den 7805 gibt es in verschiedenen Ausführungen, was seine maximale Strombelastung angeht. Für die Zwecke dieses Tutorials ist die Standard-Variante, welche maximal 1A abgeben kann, völlig ausreichend. Der 7805 enthält eine Übertemperatursicherung, so dass er abschaltet, wenn es ihm zu heiß wird.&lt;br /&gt;
&lt;br /&gt;
Die beiden 100nF Kondensatoren haben die Aufgabe, eine mögliche Schwingneigung des 7805 zu unterdrücken. Sie müssen so nahe wie möglich an den Anschlusspins des 7805 angeschlossen werden, um ihre Wirkung zu entfalten.&lt;br /&gt;
&lt;br /&gt;
An den Eingang (+ und - im Schaltplan) wird ein Steckernetzteil mit einer Spannung von 9 - 12V angeschlossen. Der 7805 benötigt an seinem Eingang eine Gleichspannung, die mindestens 8V beträgt. Mit einem 6V oder 7V Netzteil wird der 7805 keine stabilen 5V erzeugen können. Auf der anderen Seite macht es auch keinen Sinn, wesentlich über 12V Eingangsspannung hinauszugehen. Der 7805 ist ein Linearregler. Salopp gesagt, wird die überschüssige Spannung in Form von Wärme vernichtet. Liegt die Eingangsspannung weit über 12V, so wird schon wesentlich mehr Energie in Form von Wärme umgesetzt, als am Ausgang entnommen werden kann. Mal ganz davon abgesehen, dass der 7805 davon brennheiß werden wird.&lt;br /&gt;
&lt;br /&gt;
Eine Stromversorgung mit Batterien ist grundsätzlich auch möglich, wenn die elektrischen Grenzdaten des µC eingehalten werden (max. Spannung, min. Spannung). Bei der geregelten Stromversorgung oben sollte die Batteriespannung ca. 1.5 - 2.5V (Dropout-Spannung des Linearreglers) größer sein als die Versorgungsspannung des µC. Die [[Versorgung aus einer Zelle]] ist ein Thema für Fortgeschrittene.&lt;br /&gt;
&lt;br /&gt;
=== Der ISP-Programmierer (In-System-Programmer)===&lt;br /&gt;
&lt;br /&gt;
[[Bild:Mikrocontroller.gif|framed|right|ISP Programmierer]]&lt;br /&gt;
Dann braucht man nur noch den &#039;&#039;&#039;ISP-Programmieradapter&#039;&#039;&#039;, über den man die Programme vom PC in den Controller übertragen kann. Eine Übersicht über mögliche ISP-Programmer Varianten findet sich im Artikel [[AVR_In_System_Programmer]].&lt;br /&gt;
&lt;br /&gt;
Fertige ISP-Programmer zum Anschluss an den Parallelport oder USB gibt es z.&amp;amp;nbsp;B. auf http://shop.mikrocontroller.net/. &lt;br /&gt;
&lt;br /&gt;
Eine Bauanleitung gibt es u.a. auf [http://www.rn-wissen.de/index.php/AVR-ISP_Programmierkabel http://www.rn-wissen.de/index.php/AVR-ISP_Programmierkabel] oder [http://rumil.de/hardware/avrisp.html http://rumil.de/hardware/avrisp.html].&lt;br /&gt;
&lt;br /&gt;
Den ISP-Adapter schließt man an den Parallelport an und verbindet ihn mit der Stiftleiste SV1 über ein 6-adriges Kabel (siehe Schaltplan).&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
&lt;br /&gt;
Wer vorausschauend kauft, kauft mehr als einen Mikrocontroller. Bis der erste Controller defekt ist oder man durch Austauschen sicher gehen möchte, ob der Fehler im Programm oder im Controller ist, vergeht nur wenig Zeit.&lt;br /&gt;
&lt;br /&gt;
Für die anderen Teile des Tutorials sollte man sich noch die folgenden Bauteile besorgen: &lt;br /&gt;
&lt;br /&gt;
---------------------------&lt;br /&gt;
Teil 2 (I/O-Grundlagen)&lt;br /&gt;
* 5 LEDs 5mm&lt;br /&gt;
* 5 Taster&lt;br /&gt;
* 5 Widerstände 1k&lt;br /&gt;
* 5 Widerstände 10k&lt;br /&gt;
&lt;br /&gt;
---------------------------&lt;br /&gt;
Teil 6 (LC-Display)&lt;br /&gt;
* 1 Potentiometer 10k&lt;br /&gt;
* 1 HD44780-kompatibles LCD, z.&amp;amp;nbsp;B. 4x20 oder 2x16 Zeichen&lt;br /&gt;
*   besitzt das LCD eine Hintergrundbeleuchtung, dann noch einen Vorwiderstand dafür. Details dazu stehen im Datenblatt des LCD. Ein Wert von 50 Ohm sollte aber in jedem Fall passen. Schlimmstenfalls ist die Hintergrundbeleuchtung dann etwas zu dunkel.&lt;br /&gt;
&lt;br /&gt;
---------------------------&lt;br /&gt;
Teil 10 (Der UART)&lt;br /&gt;
* 1 Pegelwandler MAX232, MAX232&#039;&#039;&#039;A&#039;&#039;&#039; oder MAX202&lt;br /&gt;
* 5 Kondensatoren&lt;br /&gt;
** Bei einem MAX232: je 1µF Elektrolytkondensator&lt;br /&gt;
** Bei einem MAX202 oder MAX232&#039;&#039;&#039;A&#039;&#039;&#039;: je  100nF Keramik- oder Elektrolytkondensator&lt;br /&gt;
:Die Kondensatoren dürfen auch größer sein. Ist man sich nicht sicher, welchen MAX232 man hat (A oder nicht A), dann die größeren Kondensatoren 1µF nehmen, die funktionieren auch beim MAX232A oder MAX202.&lt;br /&gt;
* 1 9-polige SUBD-Buchse (female)&lt;br /&gt;
* 1 dazu passendes Modem(nicht Nullmodem!)-Kabel&lt;br /&gt;
&lt;br /&gt;
---------------------------&lt;br /&gt;
Teil 14 (ADC)&lt;br /&gt;
* 1 Kondensator 100n&lt;br /&gt;
* 1 Potentiometer 10k&lt;br /&gt;
* nach Lust und Laune temperatur- oder lichtabhängige Widerstände und jeweils einen Widerstand in der gleichen Größenordnung wie der Sensor&lt;br /&gt;
&lt;br /&gt;
---------------------------&lt;br /&gt;
Teil 17 (Schieberegister)&lt;br /&gt;
* 2 Schieberegister 74HC595&lt;br /&gt;
* einige LED, damit man an die Schieberegister auch etwas anschliessen kann, samt passenden Vorwiderständen&lt;br /&gt;
&lt;br /&gt;
---------------------------&lt;br /&gt;
Teil 19 (7-Segmentanzeige)&lt;br /&gt;
* 4 7-Segmentanzeigen mit gemeinsamer Anode&lt;br /&gt;
* 4 PNP Transistoren BC338&lt;br /&gt;
* 4 Widerstände 1k&lt;br /&gt;
* 7 Widerstände 100Ohm&lt;br /&gt;
&lt;br /&gt;
Für weitere Bauteile, die man als angehender µC Bastler auch des Öfteren mal benötigt, empfiehlt sich ein Blick in die Liste der [[Standardbauelemente]] bzw. in die [[Absolute_beginner|Grundausstattung]]. Wenn ihr Händler Großpackungen (zb. 100 Stück) von 100n Kondensatoren, 10k, 1k oder 100Ohm Widerständen anbietet, sollten sie deren Erwerb in Erwägung ziehen. Diese Bauteile benötigt man oft und derartige Großpackungen sind oft nicht teurer, als wennn man einige wenige Exemplare einzeln kauft. Dies hängt damit zusammen, daß das Herauszählen von 9 Bauteilen für den Verkäufer teurer kommt, als 100 Bauteile abgepackt aus dem Regal zu nehmen.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
In diesem Tutorial wird nur auf die Programmierung in Assembler eingegangen, da Assembler für das Verständnis der Hardware am besten geeignet ist.&lt;br /&gt;
&lt;br /&gt;
=== Assembler ===&lt;br /&gt;
&lt;br /&gt;
Zuerst braucht man einen &#039;&#039;&#039;Assembler&#039;&#039;&#039;, der in Assemblersprache geschriebene Programme in Maschinencode übersetzt. Windows-User können das [http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725 AVR-Studio] von Atmel verwenden, das neben dem Assembler auch einen Simulator enthält, mit dem sich die Programme vor der Übertragung in den Controller testen lassen; für Linux gibt es [http://www.tavrasm.org/ tavrasm], [http://avra.sourceforge.net/ avra] und [http://avr-asm-tutorial.net/gavrasm/index_de.html gavrasm]. &lt;br /&gt;
&lt;br /&gt;
Um die vom Assembler erzeugte &amp;quot;.hex&amp;quot;-Datei über den ISP-Adapter in den Mikrocontroller zu programmieren, kann man unter Windows z.&amp;amp;nbsp;B. das Programm [http://www.myplace.nu/avr/yaap/ yaap] verwenden, für Linux gibt es [http://savannah.nongnu.org/projects/uisp/ uisp], für beide avrdude.&lt;br /&gt;
&lt;br /&gt;
=== C ===&lt;br /&gt;
Wer in C programmieren möchte, kann den kostenlosen GNU-C-Compiler AVR-GCC (unter Windows &amp;quot;WinAVR&amp;quot;) ausprobieren. Dieser C-Compiler kann auch in das für Assembler-Programmierung notwendige AVR-Studio integriert werden. In der Artikelsammlung gibt es ein umfangreiches [[AVR-GCC-Tutorial|Tutorial]] zu diesem Compiler;&lt;br /&gt;
&lt;br /&gt;
Wer unter Windows und Linux gleichermassen kostenlos entwickeln will, der sollte sich die [http://www.eclipse.org/ IDE Eclipse for C/C++ Developers] und das [http://avr-eclipse.sourceforge.net/wiki/index.php/The_AVR_Eclipse_Plugin AVR-Eclipse Plugin ] ansehen, beide sind unter Windows und Linux einfach zu installieren. Hier wird auch der AVR-GCC benutzt. In der Artikelsammlung gibt es ein umfangreiches [[AVR Eclipse|AVR Eclipse Tutorial]] zu dieser IDE.&lt;br /&gt;
Ebenfalls unter Linux und Windows verfügbar ist die Entwicklungsumgebung [http://www.codeblocks.org/ Code::Blocks] (aktuelle, stabile Versionen sind als Nightly Builds regelmäßig im [http://forums.codeblocks.org/ Forum] verfügbar). Innerhalb dieser Entwicklungsumgebung können ohne die Installation zusätzlicher Plugins &amp;quot;AVR-Projekte&amp;quot; angelegt werden.&lt;br /&gt;
&lt;br /&gt;
Fragen dazu stellt man am besten hier im [http://www.mikrocontroller.net/forum/list-2-1.html GCC-Forum].&lt;br /&gt;
&lt;br /&gt;
=== Pascal ===&lt;br /&gt;
Wer in Pascal programmieren muss, kann [http://www.e-lab.de AVRPascal] ausprobieren.&amp;lt;br&amp;gt; &lt;br /&gt;
Dieser Pascalcompiler ist kostenfrei bis 4kb Code und bietet viele ausgereifte Bibliotheken für Servoansteuerung, Serielle Schnittstellen (COM, TWI, SPI), PWM, Timernutzung, LC-Displays usw.&amp;lt;br&amp;gt; &lt;br /&gt;
Außerdem gibt es eine kostenfreie Version für den Mega8 und den Mega88.&lt;br /&gt;
[http://www.e-lab.de E-LAB].&lt;br /&gt;
&lt;br /&gt;
=== Basic ===&lt;br /&gt;
Auch Basic-Fans kommen nicht zu kurz, für die gibt es z.&amp;amp;nbsp;B. [[Bascom AVR]] ($69, Demo verfügbar).&lt;br /&gt;
&lt;br /&gt;
=== Forth ===&lt;br /&gt;
Wer einen direkten und interaktiven Zugang zum Controller haben will, sollte sich [http://amforth.sourceforge.net Forth] anschauen. Voraussetzung ist ein serieller Anschluß (Max232), also etwas mehr als die Minimalbeschaltung.&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
Bevor man anfängt, sollte man sich die folgenden PDF-Dateien runterladen und zumindest mal reinschauen:&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf Datenblatt des ATmega8 (4,54 MB)]&lt;br /&gt;
* [http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf Befehlssatz der AVRs (1,27 MB)]&lt;br /&gt;
* oder [http://www.avr-roboter.de/controller/befehle/befehle.html Befehlssatz in deutscher Übersetzung online]&lt;br /&gt;
* oder [http://www.avr-modelleisenbahn.de/atmega8/0-einleitung.htm Datenblatt des ATmega8 in deutscher Übersetzung online]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Datenblatt eines Controllers ist das wichtigste Dokument für einen Entwickler. Es enthält Informationen über die Pinbelegung, Versorgungsspannung, Beschaltung, Speicher, die Verwendung der IO-Komponenten und vieles mehr.&lt;br /&gt;
&lt;br /&gt;
Im Befehlssatz sind alle Assemblerbefehle der AVR-Controllerfamilie aufgelistet und erklärt.&lt;br /&gt;
 &lt;br /&gt;
{{Navigation_hochvor|	 &lt;br /&gt;
hochtext=Inhaltsverzeichnis|	 &lt;br /&gt;
hochlink=AVR-Tutorial|	 &lt;br /&gt;
vortext=I/O Grundlagen|	 &lt;br /&gt;
vorlink=AVR-Tutorial: IO-Grundlagen}}	 &lt;br /&gt;
 &lt;br /&gt;
[[Category:AVR-Tutorial]]&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53139</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53139"/>
		<updated>2010-12-01T10:10:04Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Quellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen. Den sparsamen Umgang mit der verfügbaren el. Ladung nennt man &#039;&#039;&#039;Power Management&#039;&#039;&#039; (engl. Energiesparen).&lt;br /&gt;
&lt;br /&gt;
Im Rahmen des Power Managements stehen uns beispielsweise die sogenannten Sleep-Modi zur Verfügung, mit denen wir bestimmte Module zeitweise deaktivieren können. Andere garnicht genutzte Module können wir durch entsprechende Konfiguration (z.B. in den Fuses) auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt, hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32. Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten müssen folgende Schritte ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register wird auf 1 gesetzt&lt;br /&gt;
# Die SMx-Bits im MCUCR-Register je nach gewünschtem Modus setzen&lt;br /&gt;
# Der SLEEP-Befehl wird ausgeführt&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann sofort in den SLEEP-Modus, d.h. noch vor eventuell anstehenden Interrupts, und wacht erst wieder auf wenn ein Signal eines geeigneten Moduls (je nach Modus) ihn aufweckt.&lt;br /&gt;
&lt;br /&gt;
Die Arbeit wird dann mit der ersten Anweisung hinter dem SLEEP-Befehl wieder aufgenommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MCUCR - MCU Control Register&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bit&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 0&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
| SE&lt;br /&gt;
| SM2&lt;br /&gt;
| SM1&lt;br /&gt;
| SM0&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC11&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC10&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC01&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Bit 7 - SE: Sleep Enable&lt;br /&gt;
:Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
;Bit 6..4 - SM2..0: Sleep Mode Select&lt;br /&gt;
:Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SM2&lt;br /&gt;
! SM1&lt;br /&gt;
! SM0&lt;br /&gt;
! style=&amp;quot;text-align:left&amp;quot; | Sleep Modus&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Modi Übersicht====&lt;br /&gt;
&lt;br /&gt;
Generell is der Modus zu wählen der die meisten nicht benötigten Module abschaltet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Aktive Takte &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Aktive Oszillatoren&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | Weckquellen&lt;br /&gt;
|- style=&amp;quot;background-color:#f0f0f0&amp;quot;&lt;br /&gt;
| Sleep Modus&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;CPU&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;FLASH&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;IO&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ADC&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ASY&amp;lt;/sub&amp;gt;&lt;br /&gt;
| Haupttaktgeber&lt;br /&gt;
| Timer Oszillator&lt;br /&gt;
| INT2&amp;lt;br /&amp;gt;INT1&amp;lt;br /&amp;gt;INT0&lt;br /&gt;
| TWI Address Match&lt;br /&gt;
| Timer2&lt;br /&gt;
| SPM/EEPROM Ready&lt;br /&gt;
| ADC&lt;br /&gt;
| Andere I/O&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar bei externer Taktquelle&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt; Wenn AS2-Bit in ASSR-Register gesetzt&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt; Nur INT2 oder Level Interrupt INT1 und INT0&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen, das bietet sich vorallem an wenn bestimmte Module im gegebenen Projekt generell nicht benötigt werden und damit deaktiviert werden können.&lt;br /&gt;
&lt;br /&gt;
==== Analog to Digital Converter ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich entweder durch das BODEN-Bit in den Fuses oder mit entsprechenden Befehlen aktivieren oder deaktivieren. Das Fuse-Bit ist standardmäßig gesetzt (Achtung: Umgekehrte Logik!) und der BOD damit deaktiviert.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
Natürlich geht auch das sofwareseitig [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; ASM-Quellcode Beispiele&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: AVR]]&lt;br /&gt;
[[Kategorie: AVR-Tutorial]]&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53138</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53138"/>
		<updated>2010-12-01T10:08:15Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Quellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen. Den sparsamen Umgang mit der verfügbaren el. Ladung nennt man &#039;&#039;&#039;Power Management&#039;&#039;&#039; (engl. Energiesparen).&lt;br /&gt;
&lt;br /&gt;
Im Rahmen des Power Managements stehen uns beispielsweise die sogenannten Sleep-Modi zur Verfügung, mit denen wir bestimmte Module zeitweise deaktivieren können. Andere garnicht genutzte Module können wir durch entsprechende Konfiguration (z.B. in den Fuses) auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt, hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32. Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten müssen folgende Schritte ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register wird auf 1 gesetzt&lt;br /&gt;
# Die SMx-Bits im MCUCR-Register je nach gewünschtem Modus setzen&lt;br /&gt;
# Der SLEEP-Befehl wird ausgeführt&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann sofort in den SLEEP-Modus, d.h. noch vor eventuell anstehenden Interrupts, und wacht erst wieder auf wenn ein Signal eines geeigneten Moduls (je nach Modus) ihn aufweckt.&lt;br /&gt;
&lt;br /&gt;
Die Arbeit wird dann mit der ersten Anweisung hinter dem SLEEP-Befehl wieder aufgenommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MCUCR - MCU Control Register&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bit&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 0&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
| SE&lt;br /&gt;
| SM2&lt;br /&gt;
| SM1&lt;br /&gt;
| SM0&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC11&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC10&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC01&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Bit 7 - SE: Sleep Enable&lt;br /&gt;
:Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
;Bit 6..4 - SM2..0: Sleep Mode Select&lt;br /&gt;
:Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SM2&lt;br /&gt;
! SM1&lt;br /&gt;
! SM0&lt;br /&gt;
! style=&amp;quot;text-align:left&amp;quot; | Sleep Modus&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Modi Übersicht====&lt;br /&gt;
&lt;br /&gt;
Generell is der Modus zu wählen der die meisten nicht benötigten Module abschaltet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Aktive Takte &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Aktive Oszillatoren&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | Weckquellen&lt;br /&gt;
|- style=&amp;quot;background-color:#f0f0f0&amp;quot;&lt;br /&gt;
| Sleep Modus&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;CPU&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;FLASH&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;IO&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ADC&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ASY&amp;lt;/sub&amp;gt;&lt;br /&gt;
| Haupttaktgeber&lt;br /&gt;
| Timer Oszillator&lt;br /&gt;
| INT2&amp;lt;br /&amp;gt;INT1&amp;lt;br /&amp;gt;INT0&lt;br /&gt;
| TWI Address Match&lt;br /&gt;
| Timer2&lt;br /&gt;
| SPM/EEPROM Ready&lt;br /&gt;
| ADC&lt;br /&gt;
| Andere I/O&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar bei externer Taktquelle&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt; Wenn AS2-Bit in ASSR-Register gesetzt&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt; Nur INT2 oder Level Interrupt INT1 und INT0&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen, das bietet sich vorallem an wenn bestimmte Module im gegebenen Projekt generell nicht benötigt werden und damit deaktiviert werden können.&lt;br /&gt;
&lt;br /&gt;
==== Analog to Digital Converter ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich entweder durch das BODEN-Bit in den Fuses oder mit entsprechenden Befehlen aktivieren oder deaktivieren. Das Fuse-Bit ist standardmäßig gesetzt (Achtung: Umgekehrte Logik!) und der BOD damit deaktiviert.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
Natürlich geht auch das sofwareseitig [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; ASM-Quellcode Beispiele&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Tutorial]]&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53137</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53137"/>
		<updated>2010-12-01T09:57:38Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Praxis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen. Den sparsamen Umgang mit der verfügbaren el. Ladung nennt man &#039;&#039;&#039;Power Management&#039;&#039;&#039; (engl. Energiesparen).&lt;br /&gt;
&lt;br /&gt;
Im Rahmen des Power Managements stehen uns beispielsweise die sogenannten Sleep-Modi zur Verfügung, mit denen wir bestimmte Module zeitweise deaktivieren können. Andere garnicht genutzte Module können wir durch entsprechende Konfiguration (z.B. in den Fuses) auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt, hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32. Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten müssen folgende Schritte ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register wird auf 1 gesetzt&lt;br /&gt;
# Die SMx-Bits im MCUCR-Register je nach gewünschtem Modus setzen&lt;br /&gt;
# Der SLEEP-Befehl wird ausgeführt&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann sofort in den SLEEP-Modus, d.h. noch vor eventuell anstehenden Interrupts, und wacht erst wieder auf wenn ein Signal eines geeigneten Moduls (je nach Modus) ihn aufweckt.&lt;br /&gt;
&lt;br /&gt;
Die Arbeit wird dann mit der ersten Anweisung hinter dem SLEEP-Befehl wieder aufgenommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MCUCR - MCU Control Register&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bit&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 0&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
| SE&lt;br /&gt;
| SM2&lt;br /&gt;
| SM1&lt;br /&gt;
| SM0&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC11&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC10&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC01&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Bit 7 - SE: Sleep Enable&lt;br /&gt;
:Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
;Bit 6..4 - SM2..0: Sleep Mode Select&lt;br /&gt;
:Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SM2&lt;br /&gt;
! SM1&lt;br /&gt;
! SM0&lt;br /&gt;
! style=&amp;quot;text-align:left&amp;quot; | Sleep Modus&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Modi Übersicht====&lt;br /&gt;
&lt;br /&gt;
Generell is der Modus zu wählen der die meisten nicht benötigten Module abschaltet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Aktive Takte &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Aktive Oszillatoren&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | Weckquellen&lt;br /&gt;
|- style=&amp;quot;background-color:#f0f0f0&amp;quot;&lt;br /&gt;
| Sleep Modus&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;CPU&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;FLASH&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;IO&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ADC&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ASY&amp;lt;/sub&amp;gt;&lt;br /&gt;
| Haupttaktgeber&lt;br /&gt;
| Timer Oszillator&lt;br /&gt;
| INT2&amp;lt;br /&amp;gt;INT1&amp;lt;br /&amp;gt;INT0&lt;br /&gt;
| TWI Address Match&lt;br /&gt;
| Timer2&lt;br /&gt;
| SPM/EEPROM Ready&lt;br /&gt;
| ADC&lt;br /&gt;
| Andere I/O&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar bei externer Taktquelle&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt; Wenn AS2-Bit in ASSR-Register gesetzt&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt; Nur INT2 oder Level Interrupt INT1 und INT0&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen, das bietet sich vorallem an wenn bestimmte Module im gegebenen Projekt generell nicht benötigt werden und damit deaktiviert werden können.&lt;br /&gt;
&lt;br /&gt;
==== Analog to Digital Converter ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich entweder durch das BODEN-Bit in den Fuses oder mit entsprechenden Befehlen aktivieren oder deaktivieren. Das Fuse-Bit ist standardmäßig gesetzt (Achtung: Umgekehrte Logik!) und der BOD damit deaktiviert.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
Natürlich geht auch das sofwareseitig [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; ASM-Quellcode Beispiele&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53136</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53136"/>
		<updated>2010-12-01T09:57:01Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Modi Übersicht */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen. Den sparsamen Umgang mit der verfügbaren el. Ladung nennt man &#039;&#039;&#039;Power Management&#039;&#039;&#039; (engl. Energiesparen).&lt;br /&gt;
&lt;br /&gt;
Im Rahmen des Power Managements stehen uns beispielsweise die sogenannten Sleep-Modi zur Verfügung, mit denen wir bestimmte Module zeitweise deaktivieren können. Andere garnicht genutzte Module können wir durch entsprechende Konfiguration (z.B. in den Fuses) auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt, hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32. Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten müssen folgende Schritte ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register wird auf 1 gesetzt&lt;br /&gt;
# Die SMx-Bits im MCUCR-Register je nach gewünschtem Modus setzen&lt;br /&gt;
# Der SLEEP-Befehl wird ausgeführt&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann sofort in den SLEEP-Modus, d.h. noch vor eventuell anstehenden Interrupts, und wacht erst wieder auf wenn ein Signal eines geeigneten Moduls (je nach Modus) ihn aufweckt.&lt;br /&gt;
&lt;br /&gt;
Die Arbeit wird dann mit der ersten Anweisung hinter dem SLEEP-Befehl wieder aufgenommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MCUCR - MCU Control Register&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bit&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 0&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
| SE&lt;br /&gt;
| SM2&lt;br /&gt;
| SM1&lt;br /&gt;
| SM0&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC11&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC10&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC01&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Bit 7 - SE: Sleep Enable&lt;br /&gt;
:Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
;Bit 6..4 - SM2..0: Sleep Mode Select&lt;br /&gt;
:Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SM2&lt;br /&gt;
! SM1&lt;br /&gt;
! SM0&lt;br /&gt;
! style=&amp;quot;text-align:left&amp;quot; | Sleep Modus&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Modi Übersicht====&lt;br /&gt;
&lt;br /&gt;
Generell is der Modus zu wählen der die meisten nicht benötigten Module abschaltet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Aktive Takte &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Aktive Oszillatoren&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | Weckquellen&lt;br /&gt;
|- style=&amp;quot;background-color:#f0f0f0&amp;quot;&lt;br /&gt;
| Sleep Modus&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;CPU&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;FLASH&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;IO&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ADC&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ASY&amp;lt;/sub&amp;gt;&lt;br /&gt;
| Haupttaktgeber&lt;br /&gt;
| Timer Oszillator&lt;br /&gt;
| INT2&amp;lt;br /&amp;gt;INT1&amp;lt;br /&amp;gt;INT0&lt;br /&gt;
| TWI Address Match&lt;br /&gt;
| Timer2&lt;br /&gt;
| SPM/EEPROM Ready&lt;br /&gt;
| ADC&lt;br /&gt;
| Andere I/O&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar bei externer Taktquelle&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt; Wenn AS2-Bit in ASSR-Register gesetzt&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt; Nur INT2 oder Level Interrupt INT1 und INT0&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen, das bietet sich vorallem an wenn bestimmte Module im gegebenen Projekt generell nicht benötigt werden und damit deaktiviert werden können.&lt;br /&gt;
&lt;br /&gt;
==== Analog to Digital Converter ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich entweder durch das BODEN-Bit in den Fuses oder mit entsprechenden Befehlen aktivieren oder deaktivieren. Das Fuse-Bit ist standardmäßig gesetzt (Achtung: Umgekehrte Logik!) und der BOD damit deaktiviert.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
Natürlich geht auch das sofwareseitig [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53135</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53135"/>
		<updated>2010-12-01T09:56:11Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Manuelles Deaktivieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen. Den sparsamen Umgang mit der verfügbaren el. Ladung nennt man &#039;&#039;&#039;Power Management&#039;&#039;&#039; (engl. Energiesparen).&lt;br /&gt;
&lt;br /&gt;
Im Rahmen des Power Managements stehen uns beispielsweise die sogenannten Sleep-Modi zur Verfügung, mit denen wir bestimmte Module zeitweise deaktivieren können. Andere garnicht genutzte Module können wir durch entsprechende Konfiguration (z.B. in den Fuses) auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt, hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32. Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten müssen folgende Schritte ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register wird auf 1 gesetzt&lt;br /&gt;
# Die SMx-Bits im MCUCR-Register je nach gewünschtem Modus setzen&lt;br /&gt;
# Der SLEEP-Befehl wird ausgeführt&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann sofort in den SLEEP-Modus, d.h. noch vor eventuell anstehenden Interrupts, und wacht erst wieder auf wenn ein Signal eines geeigneten Moduls (je nach Modus) ihn aufweckt.&lt;br /&gt;
&lt;br /&gt;
Die Arbeit wird dann mit der ersten Anweisung hinter dem SLEEP-Befehl wieder aufgenommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MCUCR - MCU Control Register&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bit&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 0&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
| SE&lt;br /&gt;
| SM2&lt;br /&gt;
| SM1&lt;br /&gt;
| SM0&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC11&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC10&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC01&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Bit 7 - SE: Sleep Enable&lt;br /&gt;
:Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
;Bit 6..4 - SM2..0: Sleep Mode Select&lt;br /&gt;
:Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SM2&lt;br /&gt;
! SM1&lt;br /&gt;
! SM0&lt;br /&gt;
! style=&amp;quot;text-align:left&amp;quot; | Sleep Modus&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Modi Übersicht====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Aktive Takte &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Aktive Oszillatoren&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | Weckquellen&lt;br /&gt;
|- style=&amp;quot;background-color:#f0f0f0&amp;quot;&lt;br /&gt;
| Sleep Modus&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;CPU&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;FLASH&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;IO&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ADC&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ASY&amp;lt;/sub&amp;gt;&lt;br /&gt;
| Haupttaktgeber&lt;br /&gt;
| Timer Oszillator&lt;br /&gt;
| INT2&amp;lt;br /&amp;gt;INT1&amp;lt;br /&amp;gt;INT0&lt;br /&gt;
| TWI Address Match&lt;br /&gt;
| Timer2&lt;br /&gt;
| SPM/EEPROM Ready&lt;br /&gt;
| ADC&lt;br /&gt;
| Andere I/O&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar bei externer Taktquelle&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt; Wenn AS2-Bit in ASSR-Register gesetzt&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt; Nur INT2 oder Level Interrupt INT1 und INT0&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen, das bietet sich vorallem an wenn bestimmte Module im gegebenen Projekt generell nicht benötigt werden und damit deaktiviert werden können.&lt;br /&gt;
&lt;br /&gt;
==== Analog to Digital Converter ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich entweder durch das BODEN-Bit in den Fuses oder mit entsprechenden Befehlen aktivieren oder deaktivieren. Das Fuse-Bit ist standardmäßig gesetzt (Achtung: Umgekehrte Logik!) und der BOD damit deaktiviert.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
Natürlich geht auch das sofwareseitig [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53134</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53134"/>
		<updated>2010-12-01T09:54:43Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Manuelles Deaktivieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen. Den sparsamen Umgang mit der verfügbaren el. Ladung nennt man &#039;&#039;&#039;Power Management&#039;&#039;&#039; (engl. Energiesparen).&lt;br /&gt;
&lt;br /&gt;
Im Rahmen des Power Managements stehen uns beispielsweise die sogenannten Sleep-Modi zur Verfügung, mit denen wir bestimmte Module zeitweise deaktivieren können. Andere garnicht genutzte Module können wir durch entsprechende Konfiguration (z.B. in den Fuses) auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt, hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32. Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten müssen folgende Schritte ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register wird auf 1 gesetzt&lt;br /&gt;
# Die SMx-Bits im MCUCR-Register je nach gewünschtem Modus setzen&lt;br /&gt;
# Der SLEEP-Befehl wird ausgeführt&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann sofort in den SLEEP-Modus, d.h. noch vor eventuell anstehenden Interrupts, und wacht erst wieder auf wenn ein Signal eines geeigneten Moduls (je nach Modus) ihn aufweckt.&lt;br /&gt;
&lt;br /&gt;
Die Arbeit wird dann mit der ersten Anweisung hinter dem SLEEP-Befehl wieder aufgenommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MCUCR - MCU Control Register&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bit&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 0&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
| SE&lt;br /&gt;
| SM2&lt;br /&gt;
| SM1&lt;br /&gt;
| SM0&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC11&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC10&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC01&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Bit 7 - SE: Sleep Enable&lt;br /&gt;
:Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
;Bit 6..4 - SM2..0: Sleep Mode Select&lt;br /&gt;
:Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SM2&lt;br /&gt;
! SM1&lt;br /&gt;
! SM0&lt;br /&gt;
! style=&amp;quot;text-align:left&amp;quot; | Sleep Modus&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Modi Übersicht====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Aktive Takte &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Aktive Oszillatoren&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | Weckquellen&lt;br /&gt;
|- style=&amp;quot;background-color:#f0f0f0&amp;quot;&lt;br /&gt;
| Sleep Modus&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;CPU&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;FLASH&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;IO&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ADC&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ASY&amp;lt;/sub&amp;gt;&lt;br /&gt;
| Haupttaktgeber&lt;br /&gt;
| Timer Oszillator&lt;br /&gt;
| INT2&amp;lt;br /&amp;gt;INT1&amp;lt;br /&amp;gt;INT0&lt;br /&gt;
| TWI Address Match&lt;br /&gt;
| Timer2&lt;br /&gt;
| SPM/EEPROM Ready&lt;br /&gt;
| ADC&lt;br /&gt;
| Andere I/O&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar bei externer Taktquelle&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt; Wenn AS2-Bit in ASSR-Register gesetzt&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt; Nur INT2 oder Level Interrupt INT1 und INT0&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
==== Analog to Digital Converter ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich entweder durch das BODEN-Bit in den Fuses oder mit entsprechenden Befehlen aktivieren oder deaktivieren. Das Fuse-Bit ist standardmäßig gesetzt (Achtung: Umgekehrte Logik!) und der BOD damit deaktiviert.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
Natürlich geht auch das sofwareseitig [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53133</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53133"/>
		<updated>2010-12-01T09:53:02Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Watchdog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen. Den sparsamen Umgang mit der verfügbaren el. Ladung nennt man &#039;&#039;&#039;Power Management&#039;&#039;&#039; (engl. Energiesparen).&lt;br /&gt;
&lt;br /&gt;
Im Rahmen des Power Managements stehen uns beispielsweise die sogenannten Sleep-Modi zur Verfügung, mit denen wir bestimmte Module zeitweise deaktivieren können. Andere garnicht genutzte Module können wir durch entsprechende Konfiguration (z.B. in den Fuses) auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt, hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32. Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten müssen folgende Schritte ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register wird auf 1 gesetzt&lt;br /&gt;
# Die SMx-Bits im MCUCR-Register je nach gewünschtem Modus setzen&lt;br /&gt;
# Der SLEEP-Befehl wird ausgeführt&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann sofort in den SLEEP-Modus, d.h. noch vor eventuell anstehenden Interrupts, und wacht erst wieder auf wenn ein Signal eines geeigneten Moduls (je nach Modus) ihn aufweckt.&lt;br /&gt;
&lt;br /&gt;
Die Arbeit wird dann mit der ersten Anweisung hinter dem SLEEP-Befehl wieder aufgenommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MCUCR - MCU Control Register&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bit&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 0&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
| SE&lt;br /&gt;
| SM2&lt;br /&gt;
| SM1&lt;br /&gt;
| SM0&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC11&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC10&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC01&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Bit 7 - SE: Sleep Enable&lt;br /&gt;
:Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
;Bit 6..4 - SM2..0: Sleep Mode Select&lt;br /&gt;
:Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SM2&lt;br /&gt;
! SM1&lt;br /&gt;
! SM0&lt;br /&gt;
! style=&amp;quot;text-align:left&amp;quot; | Sleep Modus&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Modi Übersicht====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Aktive Takte &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Aktive Oszillatoren&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | Weckquellen&lt;br /&gt;
|- style=&amp;quot;background-color:#f0f0f0&amp;quot;&lt;br /&gt;
| Sleep Modus&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;CPU&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;FLASH&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;IO&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ADC&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ASY&amp;lt;/sub&amp;gt;&lt;br /&gt;
| Haupttaktgeber&lt;br /&gt;
| Timer Oszillator&lt;br /&gt;
| INT2&amp;lt;br /&amp;gt;INT1&amp;lt;br /&amp;gt;INT0&lt;br /&gt;
| TWI Address Match&lt;br /&gt;
| Timer2&lt;br /&gt;
| SPM/EEPROM Ready&lt;br /&gt;
| ADC&lt;br /&gt;
| Andere I/O&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar bei externer Taktquelle&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt; Wenn AS2-Bit in ASSR-Register gesetzt&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt; Nur INT2 oder Level Interrupt INT1 und INT0&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich entweder durch das BODEN-Bit in den Fuses oder mit entsprechenden Befehlen aktivieren oder deaktivieren. Das Fuse-Bit ist standardmäßig gesetzt (Achtung: Umgekehrte Logik!) und der BOD damit deaktiviert.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
Natürlich geht auch das sofwareseitig [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53132</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53132"/>
		<updated>2010-12-01T09:52:27Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Brown-Out Detector */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen. Den sparsamen Umgang mit der verfügbaren el. Ladung nennt man &#039;&#039;&#039;Power Management&#039;&#039;&#039; (engl. Energiesparen).&lt;br /&gt;
&lt;br /&gt;
Im Rahmen des Power Managements stehen uns beispielsweise die sogenannten Sleep-Modi zur Verfügung, mit denen wir bestimmte Module zeitweise deaktivieren können. Andere garnicht genutzte Module können wir durch entsprechende Konfiguration (z.B. in den Fuses) auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt, hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32. Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten müssen folgende Schritte ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register wird auf 1 gesetzt&lt;br /&gt;
# Die SMx-Bits im MCUCR-Register je nach gewünschtem Modus setzen&lt;br /&gt;
# Der SLEEP-Befehl wird ausgeführt&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann sofort in den SLEEP-Modus, d.h. noch vor eventuell anstehenden Interrupts, und wacht erst wieder auf wenn ein Signal eines geeigneten Moduls (je nach Modus) ihn aufweckt.&lt;br /&gt;
&lt;br /&gt;
Die Arbeit wird dann mit der ersten Anweisung hinter dem SLEEP-Befehl wieder aufgenommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MCUCR - MCU Control Register&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bit&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 0&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
| SE&lt;br /&gt;
| SM2&lt;br /&gt;
| SM1&lt;br /&gt;
| SM0&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC11&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC10&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC01&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Bit 7 - SE: Sleep Enable&lt;br /&gt;
:Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
;Bit 6..4 - SM2..0: Sleep Mode Select&lt;br /&gt;
:Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SM2&lt;br /&gt;
! SM1&lt;br /&gt;
! SM0&lt;br /&gt;
! style=&amp;quot;text-align:left&amp;quot; | Sleep Modus&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Modi Übersicht====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Aktive Takte &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Aktive Oszillatoren&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | Weckquellen&lt;br /&gt;
|- style=&amp;quot;background-color:#f0f0f0&amp;quot;&lt;br /&gt;
| Sleep Modus&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;CPU&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;FLASH&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;IO&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ADC&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ASY&amp;lt;/sub&amp;gt;&lt;br /&gt;
| Haupttaktgeber&lt;br /&gt;
| Timer Oszillator&lt;br /&gt;
| INT2&amp;lt;br /&amp;gt;INT1&amp;lt;br /&amp;gt;INT0&lt;br /&gt;
| TWI Address Match&lt;br /&gt;
| Timer2&lt;br /&gt;
| SPM/EEPROM Ready&lt;br /&gt;
| ADC&lt;br /&gt;
| Andere I/O&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar bei externer Taktquelle&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt; Wenn AS2-Bit in ASSR-Register gesetzt&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt; Nur INT2 oder Level Interrupt INT1 und INT0&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich entweder durch das BODEN-Bit in den Fuses oder mit entsprechenden Befehlen aktivieren oder deaktivieren. Das Fuse-Bit ist standardmäßig gesetzt (Achtung: Umgekehrte Logik!) und der BOD damit deaktiviert.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
&lt;br /&gt;
Aber auch sofwareseitig ist das möglich [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53131</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53131"/>
		<updated>2010-12-01T09:46:17Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen. Den sparsamen Umgang mit der verfügbaren el. Ladung nennt man &#039;&#039;&#039;Power Management&#039;&#039;&#039; (engl. Energiesparen).&lt;br /&gt;
&lt;br /&gt;
Im Rahmen des Power Managements stehen uns beispielsweise die sogenannten Sleep-Modi zur Verfügung, mit denen wir bestimmte Module zeitweise deaktivieren können. Andere garnicht genutzte Module können wir durch entsprechende Konfiguration (z.B. in den Fuses) auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt, hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32. Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten müssen folgende Schritte ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register wird auf 1 gesetzt&lt;br /&gt;
# Die SMx-Bits im MCUCR-Register je nach gewünschtem Modus setzen&lt;br /&gt;
# Der SLEEP-Befehl wird ausgeführt&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann sofort in den SLEEP-Modus, d.h. noch vor eventuell anstehenden Interrupts, und wacht erst wieder auf wenn ein Signal eines geeigneten Moduls (je nach Modus) ihn aufweckt.&lt;br /&gt;
&lt;br /&gt;
Die Arbeit wird dann mit der ersten Anweisung hinter dem SLEEP-Befehl wieder aufgenommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MCUCR - MCU Control Register&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bit&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 0&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
| SE&lt;br /&gt;
| SM2&lt;br /&gt;
| SM1&lt;br /&gt;
| SM0&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC11&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC10&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC01&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Bit 7 - SE: Sleep Enable&lt;br /&gt;
:Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
;Bit 6..4 - SM2..0: Sleep Mode Select&lt;br /&gt;
:Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SM2&lt;br /&gt;
! SM1&lt;br /&gt;
! SM0&lt;br /&gt;
! style=&amp;quot;text-align:left&amp;quot; | Sleep Modus&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Modi Übersicht====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Aktive Takte &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Aktive Oszillatoren&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | Weckquellen&lt;br /&gt;
|- style=&amp;quot;background-color:#f0f0f0&amp;quot;&lt;br /&gt;
| Sleep Modus&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;CPU&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;FLASH&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;IO&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ADC&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ASY&amp;lt;/sub&amp;gt;&lt;br /&gt;
| Haupttaktgeber&lt;br /&gt;
| Timer Oszillator&lt;br /&gt;
| INT2&amp;lt;br /&amp;gt;INT1&amp;lt;br /&amp;gt;INT0&lt;br /&gt;
| TWI Address Match&lt;br /&gt;
| Timer2&lt;br /&gt;
| SPM/EEPROM Ready&lt;br /&gt;
| ADC&lt;br /&gt;
| Andere I/O&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar bei externer Taktquelle&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt; Wenn AS2-Bit in ASSR-Register gesetzt&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt; Nur INT2 oder Level Interrupt INT1 und INT0&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich durch das BODEN-Bit in den Fuses&lt;br /&gt;
generell aktivieren oder deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
&lt;br /&gt;
Aber auch sofwareseitig ist das möglich [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53130</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53130"/>
		<updated>2010-12-01T09:43:10Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Sleep Modi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen. Den sparsamen Umgang mit der verfügbaren el. Ladung nennt man &#039;&#039;&#039;Power Management&#039;&#039;&#039; (engl. Energiesparen).&lt;br /&gt;
&lt;br /&gt;
Im Rahmen des Power Managements stehen uns beispielsweise die sogenannten Sleep-Modi zur Verfügung, mit denen wir bestimmte Module zeitweise deaktivieren können. Andere garnicht genutzte Module können wir durch entsprechende Konfiguration (z.B. in den Fuses) auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt, hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32. Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten müssen folgende Schritte ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register wird auf 1 gesetzt&lt;br /&gt;
# Die SMx-Bits im MCUCR-Register je nach gewünschtem Modus setzen&lt;br /&gt;
# Der SLEEP-Befehl wird ausgeführt&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann sofort in den SLEEP-Modus, d.h. noch vor eventuell anstehenden Interrupts, und wacht erst wieder auf wenn ein Signal eines geeigneten Moduls (je nach Modus) ihn aufweckt.&lt;br /&gt;
&lt;br /&gt;
Die Arbeit wird dann mit der ersten Anweisung hinter dem SLEEP-Befehl wieder aufgenommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MCUCR - MCU Control Register&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bit&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 0&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
| SE&lt;br /&gt;
| SM2&lt;br /&gt;
| SM1&lt;br /&gt;
| SM0&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC11&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC10&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC01&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Bit 7 - SE: Sleep Enable&lt;br /&gt;
:Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
;Bit 6..4 - SM2..0: Sleep Mode Select&lt;br /&gt;
:Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SM2&lt;br /&gt;
! SM1&lt;br /&gt;
! SM0&lt;br /&gt;
! style=&amp;quot;text-align:left&amp;quot; | Sleep Modus&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Übersicht====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Aktive Takte &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Aktive Oszillatoren&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | Weckquellen&lt;br /&gt;
|- style=&amp;quot;background-color:#f0f0f0&amp;quot;&lt;br /&gt;
| Sleep Modus&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;CPU&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;FLASH&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;IO&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ADC&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ASY&amp;lt;/sub&amp;gt;&lt;br /&gt;
| Haupttaktgeber&lt;br /&gt;
| Timer Oszillator&lt;br /&gt;
| INT2&amp;lt;br /&amp;gt;INT1&amp;lt;br /&amp;gt;INT0&lt;br /&gt;
| TWI Address Match&lt;br /&gt;
| Timer2&lt;br /&gt;
| SPM/EEPROM Ready&lt;br /&gt;
| ADC&lt;br /&gt;
| Andere I/O&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar bei externer Taktquelle&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt; Wenn AS2-Bit in ASSR-Register gesetzt&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt; Nur INT2 oder Level Interrupt INT1 und INT0&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Idle Mode====&lt;br /&gt;
Der Idle-Modus ermöglicht es dem Mikrocontroller, von internen&lt;br /&gt;
sowie externen Interrupts aufgeweckt zu werden.&lt;br /&gt;
&lt;br /&gt;
Falls der Analog Comparator nicht gebraucht wird, empfiehlt es sich,&lt;br /&gt;
den Stromverbrauch im Idle-Modus zu reduzieren, indem dieser abgeschaltet wird.&lt;br /&gt;
Das geschieht, indem das ACD-Bit (Analog Comparator Disable) im ACSR (Analog Comparator Status Register) gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* SPI&lt;br /&gt;
* UART&lt;br /&gt;
* Analog Comparator&lt;br /&gt;
* ADC&lt;br /&gt;
* Two-Wire Serial Interface (TWI)&lt;br /&gt;
* Timer/Counters&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* Interrupts&lt;br /&gt;
&lt;br /&gt;
====ADC Noise Reduction Mode====&lt;br /&gt;
In diesem Modus sind mit dem ADC Messungen höherer Auflösung möglich.&lt;br /&gt;
Wenn der ADC aktiviert ist dann startet er automatisch beim betreten dieses Modus. &lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(I/O)&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* ADC&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* Timer/Counter2&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* SPM/EERPOM Interrupt&lt;br /&gt;
&lt;br /&gt;
====Power-down Mode====&lt;br /&gt;
In diesem Modus wird der externe Oszillator gestoppt,&lt;br /&gt;
es sind somit nur noch asynchrone Module aktiv.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* External Reset&lt;br /&gt;
* Watchdog Reset&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
&lt;br /&gt;
====Power-save Mode====&lt;br /&gt;
Identisch mir Power-down Mode mit einer Ausnahme:&lt;br /&gt;
&lt;br /&gt;
Wenn der Timer/Counter2 asynchron getaktet wird (AS2-Bit in ASSR-Register gesetzt),&lt;br /&gt;
läuft dieser auch im Power-Down Mode.&lt;br /&gt;
&lt;br /&gt;
Falls dies nicht der Fall ist, d.h. Timer/Counter2 synchron läuft,&lt;br /&gt;
wird von ATMEL der Power-Down Modus empfohlen.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL) mit Ausnahme von clk(ASY)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* Timer/Counter2 Interrupt&lt;br /&gt;
* siehe Power-Down Modus&lt;br /&gt;
&lt;br /&gt;
====Standby Mode====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-down Mode, der Oszillator läuft jedoch weiter.&lt;br /&gt;
&lt;br /&gt;
====Extended Standby Mode====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-save Mode, der Oszillator läuft jedoch wie beim Standby Mode weiter.&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich durch das BODEN-Bit in den Fuses&lt;br /&gt;
generell aktivieren oder deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
&lt;br /&gt;
Aber auch sofwareseitig ist das möglich [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53129</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53129"/>
		<updated>2010-12-01T09:42:21Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Übersicht */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen. Den sparsamen Umgang mit der verfügbaren el. Ladung nennt man &#039;&#039;&#039;Power Management&#039;&#039;&#039; (engl. Energiesparen).&lt;br /&gt;
&lt;br /&gt;
Im Rahmen des Power Managements stehen uns beispielsweise die sogenannten Sleep-Modi zur Verfügung, mit denen wir bestimmte Module zeitweise deaktivieren können. Andere garnicht genutzte Module können wir durch entsprechende Konfiguration (z.B. in den Fuses) auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt, hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32. Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten müssen folgende Schritte ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register wird auf 1 gesetzt&lt;br /&gt;
# Die SMx-Bits im MCUCR-Register je nach gewünschtem Modus setzen&lt;br /&gt;
# Der SLEEP-Befehl wird ausgeführt&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann sofort in den SLEEP-Modus, d.h. noch vor eventuell anstehenden Interrupts, und wacht erst wieder auf wenn ein Signal eines geeigneten Moduls (je nach Modus) ihn aufweckt.&lt;br /&gt;
&lt;br /&gt;
Die Arbeit wird dann mit der ersten Anweisung hinter dem SLEEP-Befehl wieder aufgenommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MCUCR - MCU Control Register&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bit&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 0&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
| SE&lt;br /&gt;
| SM2&lt;br /&gt;
| SM1&lt;br /&gt;
| SM0&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC11&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC10&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC01&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 7 - SE: Sleep Enable&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 6..4 - SM2..0: Sleep Mode Select&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SM2&lt;br /&gt;
! SM1&lt;br /&gt;
! SM0&lt;br /&gt;
! style=&amp;quot;text-align:left&amp;quot; | Sleep Modus&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Übersicht====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Aktive Takte &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Aktive Oszillatoren&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | Weckquellen&lt;br /&gt;
|- style=&amp;quot;background-color:#f0f0f0&amp;quot;&lt;br /&gt;
| Sleep Modus&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;CPU&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;FLASH&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;IO&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ADC&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ASY&amp;lt;/sub&amp;gt;&lt;br /&gt;
| Haupttaktgeber&lt;br /&gt;
| Timer Oszillator&lt;br /&gt;
| INT2&amp;lt;br /&amp;gt;INT1&amp;lt;br /&amp;gt;INT0&lt;br /&gt;
| TWI Address Match&lt;br /&gt;
| Timer2&lt;br /&gt;
| SPM/EEPROM Ready&lt;br /&gt;
| ADC&lt;br /&gt;
| Andere I/O&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar bei externer Taktquelle&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt; Wenn AS2-Bit in ASSR-Register gesetzt&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt; Nur INT2 oder Level Interrupt INT1 und INT0&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Idle Mode====&lt;br /&gt;
Der Idle-Modus ermöglicht es dem Mikrocontroller, von internen&lt;br /&gt;
sowie externen Interrupts aufgeweckt zu werden.&lt;br /&gt;
&lt;br /&gt;
Falls der Analog Comparator nicht gebraucht wird, empfiehlt es sich,&lt;br /&gt;
den Stromverbrauch im Idle-Modus zu reduzieren, indem dieser abgeschaltet wird.&lt;br /&gt;
Das geschieht, indem das ACD-Bit (Analog Comparator Disable) im ACSR (Analog Comparator Status Register) gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* SPI&lt;br /&gt;
* UART&lt;br /&gt;
* Analog Comparator&lt;br /&gt;
* ADC&lt;br /&gt;
* Two-Wire Serial Interface (TWI)&lt;br /&gt;
* Timer/Counters&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* Interrupts&lt;br /&gt;
&lt;br /&gt;
====ADC Noise Reduction Mode====&lt;br /&gt;
In diesem Modus sind mit dem ADC Messungen höherer Auflösung möglich.&lt;br /&gt;
Wenn der ADC aktiviert ist dann startet er automatisch beim betreten dieses Modus. &lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(I/O)&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* ADC&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* Timer/Counter2&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* SPM/EERPOM Interrupt&lt;br /&gt;
&lt;br /&gt;
====Power-down Mode====&lt;br /&gt;
In diesem Modus wird der externe Oszillator gestoppt,&lt;br /&gt;
es sind somit nur noch asynchrone Module aktiv.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* External Reset&lt;br /&gt;
* Watchdog Reset&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
&lt;br /&gt;
====Power-save Mode====&lt;br /&gt;
Identisch mir Power-down Mode mit einer Ausnahme:&lt;br /&gt;
&lt;br /&gt;
Wenn der Timer/Counter2 asynchron getaktet wird (AS2-Bit in ASSR-Register gesetzt),&lt;br /&gt;
läuft dieser auch im Power-Down Mode.&lt;br /&gt;
&lt;br /&gt;
Falls dies nicht der Fall ist, d.h. Timer/Counter2 synchron läuft,&lt;br /&gt;
wird von ATMEL der Power-Down Modus empfohlen.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL) mit Ausnahme von clk(ASY)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* Timer/Counter2 Interrupt&lt;br /&gt;
* siehe Power-Down Modus&lt;br /&gt;
&lt;br /&gt;
====Standby Mode====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-down Mode, der Oszillator läuft jedoch weiter.&lt;br /&gt;
&lt;br /&gt;
====Extended Standby Mode====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-save Mode, der Oszillator läuft jedoch wie beim Standby Mode weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich durch das BODEN-Bit in den Fuses&lt;br /&gt;
generell aktivieren oder deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
&lt;br /&gt;
Aber auch sofwareseitig ist das möglich [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53128</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53128"/>
		<updated>2010-12-01T09:40:23Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Übersicht */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen. Den sparsamen Umgang mit der verfügbaren el. Ladung nennt man &#039;&#039;&#039;Power Management&#039;&#039;&#039; (engl. Energiesparen).&lt;br /&gt;
&lt;br /&gt;
Im Rahmen des Power Managements stehen uns beispielsweise die sogenannten Sleep-Modi zur Verfügung, mit denen wir bestimmte Module zeitweise deaktivieren können. Andere garnicht genutzte Module können wir durch entsprechende Konfiguration (z.B. in den Fuses) auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt, hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32. Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten müssen folgende Schritte ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register wird auf 1 gesetzt&lt;br /&gt;
# Die SMx-Bits im MCUCR-Register je nach gewünschtem Modus setzen&lt;br /&gt;
# Der SLEEP-Befehl wird ausgeführt&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann sofort in den SLEEP-Modus, d.h. noch vor eventuell anstehenden Interrupts, und wacht erst wieder auf wenn ein Signal eines geeigneten Moduls (je nach Modus) ihn aufweckt.&lt;br /&gt;
&lt;br /&gt;
Die Arbeit wird dann mit der ersten Anweisung hinter dem SLEEP-Befehl wieder aufgenommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MCUCR - MCU Control Register&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bit&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 0&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
| SE&lt;br /&gt;
| SM2&lt;br /&gt;
| SM1&lt;br /&gt;
| SM0&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC11&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC10&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC01&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 7 - SE: Sleep Enable&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 6..4 - SM2..0: Sleep Mode Select&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SM2&lt;br /&gt;
! SM1&lt;br /&gt;
! SM0&lt;br /&gt;
! style=&amp;quot;text-align:left&amp;quot; | Sleep Modus&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Übersicht====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Aktive Takte &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Aktive Oszillatoren&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | Weckquellen&lt;br /&gt;
|- style=&amp;quot;background-color:#f0f0f0&amp;quot;&lt;br /&gt;
| Sleep Modus&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;CPU&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;FLASH&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;IO&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ADC&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ASY&amp;lt;/sub&amp;gt;&lt;br /&gt;
| Haupttaktgeber&lt;br /&gt;
| Timer Oszillator&lt;br /&gt;
| INT2&amp;lt;br /&amp;gt;INT1&amp;lt;br /&amp;gt;INT0&lt;br /&gt;
| TWI Address Match&lt;br /&gt;
| Timer2&lt;br /&gt;
| SPM/EEPROM Ready&lt;br /&gt;
| ADC&lt;br /&gt;
| Andere I/O&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar bei externer Taktquelle&lt;br /&gt;
&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt; Wenn AS2-Bit in ASSR-Register gesetzt&lt;br /&gt;
&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt; Nur INT2 oder Level Interrupt INT1 und INT0&lt;br /&gt;
&lt;br /&gt;
====Idle Mode====&lt;br /&gt;
Der Idle-Modus ermöglicht es dem Mikrocontroller, von internen&lt;br /&gt;
sowie externen Interrupts aufgeweckt zu werden.&lt;br /&gt;
&lt;br /&gt;
Falls der Analog Comparator nicht gebraucht wird, empfiehlt es sich,&lt;br /&gt;
den Stromverbrauch im Idle-Modus zu reduzieren, indem dieser abgeschaltet wird.&lt;br /&gt;
Das geschieht, indem das ACD-Bit (Analog Comparator Disable) im ACSR (Analog Comparator Status Register) gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* SPI&lt;br /&gt;
* UART&lt;br /&gt;
* Analog Comparator&lt;br /&gt;
* ADC&lt;br /&gt;
* Two-Wire Serial Interface (TWI)&lt;br /&gt;
* Timer/Counters&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* Interrupts&lt;br /&gt;
&lt;br /&gt;
====ADC Noise Reduction Mode====&lt;br /&gt;
In diesem Modus sind mit dem ADC Messungen höherer Auflösung möglich.&lt;br /&gt;
Wenn der ADC aktiviert ist dann startet er automatisch beim betreten dieses Modus. &lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(I/O)&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* ADC&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* Timer/Counter2&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* SPM/EERPOM Interrupt&lt;br /&gt;
&lt;br /&gt;
====Power-down Mode====&lt;br /&gt;
In diesem Modus wird der externe Oszillator gestoppt,&lt;br /&gt;
es sind somit nur noch asynchrone Module aktiv.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* External Reset&lt;br /&gt;
* Watchdog Reset&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
&lt;br /&gt;
====Power-save Mode====&lt;br /&gt;
Identisch mir Power-down Mode mit einer Ausnahme:&lt;br /&gt;
&lt;br /&gt;
Wenn der Timer/Counter2 asynchron getaktet wird (AS2-Bit in ASSR-Register gesetzt),&lt;br /&gt;
läuft dieser auch im Power-Down Mode.&lt;br /&gt;
&lt;br /&gt;
Falls dies nicht der Fall ist, d.h. Timer/Counter2 synchron läuft,&lt;br /&gt;
wird von ATMEL der Power-Down Modus empfohlen.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL) mit Ausnahme von clk(ASY)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* Timer/Counter2 Interrupt&lt;br /&gt;
* siehe Power-Down Modus&lt;br /&gt;
&lt;br /&gt;
====Standby Mode====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-down Mode, der Oszillator läuft jedoch weiter.&lt;br /&gt;
&lt;br /&gt;
====Extended Standby Mode====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-save Mode, der Oszillator läuft jedoch wie beim Standby Mode weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich durch das BODEN-Bit in den Fuses&lt;br /&gt;
generell aktivieren oder deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
&lt;br /&gt;
Aber auch sofwareseitig ist das möglich [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53127</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53127"/>
		<updated>2010-12-01T09:38:26Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Theorie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen. Den sparsamen Umgang mit der verfügbaren el. Ladung nennt man &#039;&#039;&#039;Power Management&#039;&#039;&#039; (engl. Energiesparen).&lt;br /&gt;
&lt;br /&gt;
Im Rahmen des Power Managements stehen uns beispielsweise die sogenannten Sleep-Modi zur Verfügung, mit denen wir bestimmte Module zeitweise deaktivieren können. Andere garnicht genutzte Module können wir durch entsprechende Konfiguration (z.B. in den Fuses) auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt, hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32. Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten müssen folgende Schritte ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register wird auf 1 gesetzt&lt;br /&gt;
# Die SMx-Bits im MCUCR-Register je nach gewünschtem Modus setzen&lt;br /&gt;
# Der SLEEP-Befehl wird ausgeführt&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann sofort in den SLEEP-Modus, d.h. noch vor eventuell anstehenden Interrupts, und wacht erst wieder auf wenn ein Signal eines geeigneten Moduls (je nach Modus) ihn aufweckt.&lt;br /&gt;
&lt;br /&gt;
Die Arbeit wird dann mit der ersten Anweisung hinter dem SLEEP-Befehl wieder aufgenommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MCUCR - MCU Control Register&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bit&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 0&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
| SE&lt;br /&gt;
| SM2&lt;br /&gt;
| SM1&lt;br /&gt;
| SM0&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC11&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC10&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC01&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 7 - SE: Sleep Enable&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 6..4 - SM2..0: Sleep Mode Select&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SM2&lt;br /&gt;
! SM1&lt;br /&gt;
! SM0&lt;br /&gt;
! style=&amp;quot;text-align:left&amp;quot; | Sleep Modus&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Übersicht====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Aktive Takte &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Aktive Oszillatoren&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | Weckquellen&lt;br /&gt;
|- style=&amp;quot;background-color:#f0f0f0&amp;quot;&lt;br /&gt;
| Sleep Modus&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;CPU&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;FLASH&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;IO&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ADC&amp;lt;/sub&amp;gt;&lt;br /&gt;
| clk&amp;lt;sub&amp;gt;ASY&amp;lt;/sub&amp;gt;&lt;br /&gt;
| Haupttaktgeber&lt;br /&gt;
| Timer Oszillator&lt;br /&gt;
| INT2&amp;lt;br /&amp;gt;INT1&amp;lt;br /&amp;gt;INT0&lt;br /&gt;
| TWI Address Match&lt;br /&gt;
| Timer2&lt;br /&gt;
| SPM/EEPROM Ready&lt;br /&gt;
| ADC&lt;br /&gt;
| Andere I/O&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(3)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| x&lt;br /&gt;
| x&amp;lt;sup&amp;gt;(2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Idle Mode====&lt;br /&gt;
Der Idle-Modus ermöglicht es dem Mikrocontroller, von internen&lt;br /&gt;
sowie externen Interrupts aufgeweckt zu werden.&lt;br /&gt;
&lt;br /&gt;
Falls der Analog Comparator nicht gebraucht wird, empfiehlt es sich,&lt;br /&gt;
den Stromverbrauch im Idle-Modus zu reduzieren, indem dieser abgeschaltet wird.&lt;br /&gt;
Das geschieht, indem das ACD-Bit (Analog Comparator Disable) im ACSR (Analog Comparator Status Register) gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* SPI&lt;br /&gt;
* UART&lt;br /&gt;
* Analog Comparator&lt;br /&gt;
* ADC&lt;br /&gt;
* Two-Wire Serial Interface (TWI)&lt;br /&gt;
* Timer/Counters&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* Interrupts&lt;br /&gt;
&lt;br /&gt;
====ADC Noise Reduction Mode====&lt;br /&gt;
In diesem Modus sind mit dem ADC Messungen höherer Auflösung möglich.&lt;br /&gt;
Wenn der ADC aktiviert ist dann startet er automatisch beim betreten dieses Modus. &lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(I/O)&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* ADC&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* Timer/Counter2&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* SPM/EERPOM Interrupt&lt;br /&gt;
&lt;br /&gt;
====Power-down Mode====&lt;br /&gt;
In diesem Modus wird der externe Oszillator gestoppt,&lt;br /&gt;
es sind somit nur noch asynchrone Module aktiv.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* External Reset&lt;br /&gt;
* Watchdog Reset&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
&lt;br /&gt;
====Power-save Mode====&lt;br /&gt;
Identisch mir Power-down Mode mit einer Ausnahme:&lt;br /&gt;
&lt;br /&gt;
Wenn der Timer/Counter2 asynchron getaktet wird (AS2-Bit in ASSR-Register gesetzt),&lt;br /&gt;
läuft dieser auch im Power-Down Mode.&lt;br /&gt;
&lt;br /&gt;
Falls dies nicht der Fall ist, d.h. Timer/Counter2 synchron läuft,&lt;br /&gt;
wird von ATMEL der Power-Down Modus empfohlen.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL) mit Ausnahme von clk(ASY)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* Timer/Counter2 Interrupt&lt;br /&gt;
* siehe Power-Down Modus&lt;br /&gt;
&lt;br /&gt;
====Standby Mode====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-down Mode, der Oszillator läuft jedoch weiter.&lt;br /&gt;
&lt;br /&gt;
====Extended Standby Mode====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-save Mode, der Oszillator läuft jedoch wie beim Standby Mode weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich durch das BODEN-Bit in den Fuses&lt;br /&gt;
generell aktivieren oder deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
&lt;br /&gt;
Aber auch sofwareseitig ist das möglich [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53126</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53126"/>
		<updated>2010-12-01T09:11:30Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: Tabellen überarbeitet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen. Den sparsamen Umgang mit der verfügbaren el. Ladung nennt man &#039;&#039;&#039;Power Management&#039;&#039;&#039; (engl. Energiesparen).&lt;br /&gt;
&lt;br /&gt;
Im Rahmen des Power Managements stehen uns beispielsweise die sogenannten Sleep-Modi zur Verfügung, mit denen wir bestimmte Module zeitweise deaktivieren können. Andere garnicht genutzte Module können wir durch entsprechende Konfiguration (z.B. in den Fuses) auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt, hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32. Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten müssen folgende Schritte ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register wird auf 1 gesetzt&lt;br /&gt;
# Die SMx-Bits im MCUCR-Register je nach gewünschtem Modus setzen&lt;br /&gt;
# Der SLEEP-Befehl wird ausgeführt&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann sofort in den SLEEP-Modus, d.h. noch vor eventuell anstehenden Interrupts, und wacht erst wieder auf wenn ein Signal eines geeigneten Moduls (je nach Modus) ihn aufweckt.&lt;br /&gt;
&lt;br /&gt;
Die Arbeit wird dann mit der ersten Anweisung hinter dem SLEEP-Befehl wieder aufgenommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MCUCR - MCU Control Register&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bit&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 0&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
| SE&lt;br /&gt;
| SM2&lt;br /&gt;
| SM1&lt;br /&gt;
| SM0&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC11&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC10&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC01&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 7 - SE: Sleep Enable&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 6..4 - SM2..0: Sleep Mode Select&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SM2&lt;br /&gt;
! SM1&lt;br /&gt;
! SM0&lt;br /&gt;
! style=&amp;quot;text-align:left&amp;quot; | Sleep Modus&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Idle Mode====&lt;br /&gt;
Der Idle-Modus ermöglicht es dem Mikrocontroller, von internen&lt;br /&gt;
sowie externen Interrupts aufgeweckt zu werden.&lt;br /&gt;
&lt;br /&gt;
Falls der Analog Comparator nicht gebraucht wird, empfiehlt es sich,&lt;br /&gt;
den Stromverbrauch im Idle-Modus zu reduzieren, indem dieser abgeschaltet wird.&lt;br /&gt;
Das geschieht, indem das ACD-Bit (Analog Comparator Disable) im ACSR (Analog Comparator Status Register) gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* SPI&lt;br /&gt;
* UART&lt;br /&gt;
* Analog Comparator&lt;br /&gt;
* ADC&lt;br /&gt;
* Two-Wire Serial Interface (TWI)&lt;br /&gt;
* Timer/Counters&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* Interrupts&lt;br /&gt;
&lt;br /&gt;
====ADC Noise Reduction Mode====&lt;br /&gt;
In diesem Modus sind mit dem ADC Messungen höherer Auflösung möglich.&lt;br /&gt;
Wenn der ADC aktiviert ist dann startet er automatisch beim betreten dieses Modus. &lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(I/O)&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* ADC&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* Timer/Counter2&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* SPM/EERPOM Interrupt&lt;br /&gt;
&lt;br /&gt;
====Power-down Mode====&lt;br /&gt;
In diesem Modus wird der externe Oszillator gestoppt,&lt;br /&gt;
es sind somit nur noch asynchrone Module aktiv.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* External Reset&lt;br /&gt;
* Watchdog Reset&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
&lt;br /&gt;
====Power-save Mode====&lt;br /&gt;
Identisch mir Power-down Mode mit einer Ausnahme:&lt;br /&gt;
&lt;br /&gt;
Wenn der Timer/Counter2 asynchron getaktet wird (AS2-Bit in ASSR-Register gesetzt),&lt;br /&gt;
läuft dieser auch im Power-Down Mode.&lt;br /&gt;
&lt;br /&gt;
Falls dies nicht der Fall ist, d.h. Timer/Counter2 synchron läuft,&lt;br /&gt;
wird von ATMEL der Power-Down Modus empfohlen.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL) mit Ausnahme von clk(ASY)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* Timer/Counter2 Interrupt&lt;br /&gt;
* siehe Power-Down Modus&lt;br /&gt;
&lt;br /&gt;
====Standby Mode====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-down Mode, der Oszillator läuft jedoch weiter.&lt;br /&gt;
&lt;br /&gt;
====Extended Standby Mode====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-save Mode, der Oszillator läuft jedoch wie beim Standby Mode weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich durch das BODEN-Bit in den Fuses&lt;br /&gt;
generell aktivieren oder deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
&lt;br /&gt;
Aber auch sofwareseitig ist das möglich [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53125</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53125"/>
		<updated>2010-12-01T09:08:47Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: Tabellen überarbeitet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen. Den sparsamen Umgang mit der verfügbaren el. Ladung nennt man &#039;&#039;&#039;Power Management&#039;&#039;&#039; (engl. Energiesparen).&lt;br /&gt;
&lt;br /&gt;
Im Rahmen des Power Managements stehen uns beispielsweise die sogenannten Sleep-Modi zur Verfügung, mit denen wir bestimmte Module zeitweise deaktivieren können. Andere garnicht genutzte Module können wir durch entsprechende Konfiguration (z.B. in den Fuses) auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt, hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32. Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten müssen folgende Schritte ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register wird auf 1 gesetzt&lt;br /&gt;
# Die SMx-Bits werden je nach gewünschtem Modus setzen&lt;br /&gt;
# Der SLEEP-Befehl wird ausgeführt&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann sofort in den SLEEP-Modus, d.h. noch vor eventuell anstehenden Interrupts, und wacht erst wieder auf wenn ein Signal eines geeigneten Moduls (je nach Modus) ihn aufweckt.&lt;br /&gt;
&lt;br /&gt;
Die Arbeit wird dann mit der ersten Anweisung hinter dem SLEEP-Befehl wieder aufgenommen.&lt;br /&gt;
&lt;br /&gt;
==== Register im Detail ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MCUCR - MCU Control Register&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bit&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;width:12%&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;width:12%; background-color:#c0c0c0&amp;quot; | 0&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
| SE&lt;br /&gt;
| SM2&lt;br /&gt;
| SM1&lt;br /&gt;
| SM0&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC11&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC10&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC01&lt;br /&gt;
| style=&amp;quot;background-color:#c0c0c0&amp;quot; | ISC00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 7 - SE: Sleep Enable&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 6..4 - SM2..0: Sleep Mode Select&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SM2&lt;br /&gt;
! SM1&lt;br /&gt;
! SM0&lt;br /&gt;
! style=&amp;quot;text-align:left&amp;quot; | Sleep Modus&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Idle&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | ADC Noise Reduction&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-down&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Power-save&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Reserved&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; | Extended Standby&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&lt;br /&gt;
==== Die einzelnen Modi im Detail ====&lt;br /&gt;
&lt;br /&gt;
=====Idle Mode=====&lt;br /&gt;
Der Idle-Modus ermöglicht es dem Mikrocontroller, von internen&lt;br /&gt;
sowie externen Interrupts aufgeweckt zu werden.&lt;br /&gt;
&lt;br /&gt;
Falls der Analog Comparator nicht gebraucht wird, empfiehlt es sich,&lt;br /&gt;
den Stromverbrauch im Idle-Modus zu reduzieren, indem dieser abgeschaltet wird.&lt;br /&gt;
Das geschieht, indem das ACD-Bit (Analog Comparator Disable) im ACSR (Analog Comparator Status Register) gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* SPI&lt;br /&gt;
* UART&lt;br /&gt;
* Analog Comparator&lt;br /&gt;
* ADC&lt;br /&gt;
* Two-Wire Serial Interface (TWI)&lt;br /&gt;
* Timer/Counters&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* Interrupts&lt;br /&gt;
&lt;br /&gt;
=====ADC Noise Reduction Mode=====&lt;br /&gt;
In diesem Modus sind mit dem ADC Messungen höherer Auflösung möglich.&lt;br /&gt;
Wenn der ADC aktiviert ist dann startet er automatisch beim betreten dieses Modus. &lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(I/O)&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* ADC&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* Timer/Counter2&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* SPM/EERPOM Interrupt&lt;br /&gt;
&lt;br /&gt;
=====Power-down Mode=====&lt;br /&gt;
In diesem Modus wird der externe Oszillator gestoppt,&lt;br /&gt;
es sind somit nur noch asynchrone Module aktiv.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* External Reset&lt;br /&gt;
* Watchdog Reset&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
&lt;br /&gt;
=====Power-save Mode=====&lt;br /&gt;
Identisch mir Power-down Mode mit einer Ausnahme:&lt;br /&gt;
&lt;br /&gt;
Wenn der Timer/Counter2 asynchron getaktet wird (AS2-Bit in ASSR-Register gesetzt),&lt;br /&gt;
läuft dieser auch im Power-Down Mode.&lt;br /&gt;
&lt;br /&gt;
Falls dies nicht der Fall ist, d.h. Timer/Counter2 synchron läuft,&lt;br /&gt;
wird von ATMEL der Power-Down Modus empfohlen.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL) mit Ausnahme von clk(ASY)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* Timer/Counter2 Interrupt&lt;br /&gt;
* siehe Power-Down Modus&lt;br /&gt;
&lt;br /&gt;
=====Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-down Mode, der Oszillator läuft jedoch weiter.&lt;br /&gt;
&lt;br /&gt;
=====Extended Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-save Mode, der Oszillator läuft jedoch wie beim Standby Mode weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich durch das BODEN-Bit in den Fuses&lt;br /&gt;
generell aktivieren oder deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
&lt;br /&gt;
Aber auch sofwareseitig ist das möglich [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53119</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53119"/>
		<updated>2010-11-30T15:33:55Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Watchdog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
== Um was geht&#039;s? ==&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen.&lt;br /&gt;
&lt;br /&gt;
Um Module zeitweise abzuschalten, können wir die sogenannten Sleep-Modi nutzen,&lt;br /&gt;
andere garnicht benutzte Module können wir auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Hinweis&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Welche Sleep-Modi es gibt, hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten muss folgendes ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register auf 1 setzen&lt;br /&gt;
# SMx-Bits je nach gewünschtem Modus setzen&lt;br /&gt;
# SLEEP-Befehl ausführen&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann in den SLEEP-Modus und wacht erst wieder&lt;br /&gt;
auf wenn ein geeignetes Signal (je nach Modus) ihn &#039;aufweckt&#039;.&lt;br /&gt;
Er nimmt dann die Arbeit mit der ersten Anweisung hinter dem SLEEP-Befehl wieder auf.&lt;br /&gt;
&lt;br /&gt;
==== Register im Detail ====&lt;br /&gt;
&lt;br /&gt;
MCUCR - MCU Control Register&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit    7     6     5     4&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
    |  SE | SM2 | SM1 | SM0 | ...&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 7 - SE: Sleep Enable&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 6..4 - SM2..0: Sleep Mode Select&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SM2 SM1 SM0 | Sleep Modus&lt;br /&gt;
------------+------------&lt;br /&gt;
 0   0   0  | Idle&lt;br /&gt;
 0   0   1  | ADC Noise Reduction&lt;br /&gt;
 0   1   0  | Power-down&lt;br /&gt;
 0   1   1  | Power-save&lt;br /&gt;
 1   0   0  | Reserved&lt;br /&gt;
 1   0   1  | Reserved&lt;br /&gt;
 1   1   0  | Standby(1)&lt;br /&gt;
 1   1   1  | Extended Standby(1)&lt;br /&gt;
&lt;br /&gt;
(1) Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Die einzelnen Modi im Detail ====&lt;br /&gt;
&lt;br /&gt;
=====Idle Mode=====&lt;br /&gt;
Der Idle-Modus ermöglicht es dem Mikrocontroller, von internen&lt;br /&gt;
sowie externen Interrupts aufgeweckt zu werden.&lt;br /&gt;
&lt;br /&gt;
Falls der Analog Comparator nicht gebraucht wird, empfiehlt es sich,&lt;br /&gt;
den Stromverbrauch im Idle-Modus zu reduzieren, indem dieser abgeschaltet wird.&lt;br /&gt;
Das geschieht, indem das ACD-Bit (Analog Comparator Disable) im ACSR (Analog Comparator Status Register) gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* SPI&lt;br /&gt;
* UART&lt;br /&gt;
* Analog Comparator&lt;br /&gt;
* ADC&lt;br /&gt;
* Two-Wire Serial Interface (TWI)&lt;br /&gt;
* Timer/Counters&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* Interrupts&lt;br /&gt;
&lt;br /&gt;
=====ADC Noise Reduction Mode=====&lt;br /&gt;
In diesem Modus sind mit dem ADC Messungen höherer Auflösung möglich.&lt;br /&gt;
Wenn der ADC aktiviert ist dann startet er automatisch beim betreten dieses Modus. &lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(I/O)&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* ADC&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* Timer/Counter2&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* SPM/EERPOM Interrupt&lt;br /&gt;
&lt;br /&gt;
=====Power-down Mode=====&lt;br /&gt;
In diesem Modus wird der externe Oszillator gestoppt,&lt;br /&gt;
es sind somit nur noch asynchrone Module aktiv.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* External Reset&lt;br /&gt;
* Watchdog Reset&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
&lt;br /&gt;
=====Power-save Mode=====&lt;br /&gt;
Identisch mir Power-down Mode mit einer Ausnahme:&lt;br /&gt;
&lt;br /&gt;
Wenn der Timer/Counter2 asynchron getaktet wird (AS2-Bit in ASSR-Register gesetzt),&lt;br /&gt;
läuft dieser auch im Power-Down Mode.&lt;br /&gt;
&lt;br /&gt;
Falls dies nicht der Fall ist, d.h. Timer/Counter2 synchron läuft,&lt;br /&gt;
wird von ATMEL der Power-Down Modus empfohlen.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL) mit Ausnahme von clk(ASY)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* Timer/Counter2 Interrupt&lt;br /&gt;
* siehe Power-Down Modus&lt;br /&gt;
&lt;br /&gt;
=====Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-down Mode, der Oszillator läuft jedoch weiter.&lt;br /&gt;
&lt;br /&gt;
=====Extended Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-save Mode, der Oszillator läuft jedoch wie beim Standby Mode weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich durch das BODEN-Bit in den Fuses&lt;br /&gt;
generell aktivieren oder deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
&lt;br /&gt;
Aber auch sofwareseitig ist das möglich [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53115</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53115"/>
		<updated>2010-11-30T14:59:23Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Watchdog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
== Um was geht&#039;s? ==&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen.&lt;br /&gt;
&lt;br /&gt;
Um Module zeitweise abzuschalten können wir die sogenannten Sleep-Modi nutzen,&lt;br /&gt;
andere garnicht benutzte können wir auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Hinweis&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Welche Sleep-Modi es gibt hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten muss folgendes ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register auf 1 setzen&lt;br /&gt;
# SMx-Bits je nach gewünschtem Modus setzen&lt;br /&gt;
# SLEEP-Befehl ausführen&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann in den SLEEP-Modus und wacht erst wieder&lt;br /&gt;
auf wenn ein geeignetes Signal (je nach Modus) ihn &#039;aufweckt&#039;.&lt;br /&gt;
Er nimmt dann die Arbeit mit der ersten Anweisung hinter dem SLEEP-Befehl wieder auf.&lt;br /&gt;
&lt;br /&gt;
==== Register im Detail ====&lt;br /&gt;
&lt;br /&gt;
MCUCR - MCU Control Register&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit    7     6     5     4&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
    |  SE | SM2 | SM1 | SM0 | ...&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 7 - SE: Sleep Enable&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 6..4 - SM2..0: Sleep Mode Select&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SM2 SM1 SM0 | Sleep Modus&lt;br /&gt;
------------+------------&lt;br /&gt;
 0   0   0  | Idle&lt;br /&gt;
 0   0   1  | ADC Noise Reduction&lt;br /&gt;
 0   1   0  | Power-down&lt;br /&gt;
 0   1   1  | Power-save&lt;br /&gt;
 1   0   0  | Reserved&lt;br /&gt;
 1   0   1  | Reserved&lt;br /&gt;
 1   1   0  | Standby(1)&lt;br /&gt;
 1   1   1  | Extended Standby(1)&lt;br /&gt;
&lt;br /&gt;
(1) Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Die einzelnen Modi im Detail ====&lt;br /&gt;
&lt;br /&gt;
=====Idle Mode=====&lt;br /&gt;
Der Idle-Modus ermöglicht es dem Mikrocontroller von internen&lt;br /&gt;
sowie externen Interrupts aufgeweckt zu werden.&lt;br /&gt;
&lt;br /&gt;
Falls der Analog Comparator nicht gebraucht wird empfiehlt es sich&lt;br /&gt;
den Stromverbrauch im Idle-Modus zu reduzieren indem dieser abgeschaltet wird.&lt;br /&gt;
Das geschieht indem das ACD-Bit (Analog Comparator Disable) im ACSR (Analog Comparator Status Register) gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* SPI&lt;br /&gt;
* UART&lt;br /&gt;
* Analog Comparator&lt;br /&gt;
* ADC&lt;br /&gt;
* Two-Wire Serial Interface (TWI)&lt;br /&gt;
* Timer/Counters&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* Interrupts&lt;br /&gt;
&lt;br /&gt;
=====ADC Noise Reduction Mode=====&lt;br /&gt;
In diesem Modus sind mit dem ADC Messungen höherer Auflösung möglich.&lt;br /&gt;
Wenn der ADC aktiviert ist dann startet er automatisch beim betreten dieses Modus. &lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(I/O)&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* ADC&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* Timer/Counter2&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* SPM/EERPOM Interrupt&lt;br /&gt;
&lt;br /&gt;
=====Power-down Mode=====&lt;br /&gt;
In diesem Modus wird der externe Oszillator gestoppt,&lt;br /&gt;
es sind somit nur noch asynchrone Module aktiv.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* External Reset&lt;br /&gt;
* Watchdog Reset&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
&lt;br /&gt;
=====Power-save Mode=====&lt;br /&gt;
Identisch mir Power-down Mode mit einer Ausnahme:&lt;br /&gt;
&lt;br /&gt;
Wenn der Timer/Counter2 asynchron getaktet wird (AS2-Bit in ASSR-Register gesetzt),&lt;br /&gt;
läuft dieser auch im Power-Down Mode.&lt;br /&gt;
&lt;br /&gt;
Falls dies nicht der Fall ist, d.h. Timer/Counter2 synchron läuft,&lt;br /&gt;
wird von ATMEL der Power-Down Modus empfohlen.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL) mit Ausnahme von clk(ASY)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* Timer/Counter2 Interrupt&lt;br /&gt;
* siehe Power-Down Modus&lt;br /&gt;
&lt;br /&gt;
=====Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-down Mode, der Oszillator läuft jedoch weiter.&lt;br /&gt;
&lt;br /&gt;
=====Extended Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-save Mode, der Oszillator läuft jedoch wie beim Standby Mode weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich durch das BODEN-Bit in den Fuses&lt;br /&gt;
generell aktivieren oder deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
&lt;br /&gt;
Aber auch sofwareseitig ist dies möglich [http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53114</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53114"/>
		<updated>2010-11-30T14:59:07Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Manuelles Deaktivieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
== Um was geht&#039;s? ==&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen.&lt;br /&gt;
&lt;br /&gt;
Um Module zeitweise abzuschalten können wir die sogenannten Sleep-Modi nutzen,&lt;br /&gt;
andere garnicht benutzte können wir auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Hinweis&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Welche Sleep-Modi es gibt hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten muss folgendes ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register auf 1 setzen&lt;br /&gt;
# SMx-Bits je nach gewünschtem Modus setzen&lt;br /&gt;
# SLEEP-Befehl ausführen&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann in den SLEEP-Modus und wacht erst wieder&lt;br /&gt;
auf wenn ein geeignetes Signal (je nach Modus) ihn &#039;aufweckt&#039;.&lt;br /&gt;
Er nimmt dann die Arbeit mit der ersten Anweisung hinter dem SLEEP-Befehl wieder auf.&lt;br /&gt;
&lt;br /&gt;
==== Register im Detail ====&lt;br /&gt;
&lt;br /&gt;
MCUCR - MCU Control Register&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit    7     6     5     4&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
    |  SE | SM2 | SM1 | SM0 | ...&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 7 - SE: Sleep Enable&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 6..4 - SM2..0: Sleep Mode Select&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SM2 SM1 SM0 | Sleep Modus&lt;br /&gt;
------------+------------&lt;br /&gt;
 0   0   0  | Idle&lt;br /&gt;
 0   0   1  | ADC Noise Reduction&lt;br /&gt;
 0   1   0  | Power-down&lt;br /&gt;
 0   1   1  | Power-save&lt;br /&gt;
 1   0   0  | Reserved&lt;br /&gt;
 1   0   1  | Reserved&lt;br /&gt;
 1   1   0  | Standby(1)&lt;br /&gt;
 1   1   1  | Extended Standby(1)&lt;br /&gt;
&lt;br /&gt;
(1) Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Die einzelnen Modi im Detail ====&lt;br /&gt;
&lt;br /&gt;
=====Idle Mode=====&lt;br /&gt;
Der Idle-Modus ermöglicht es dem Mikrocontroller von internen&lt;br /&gt;
sowie externen Interrupts aufgeweckt zu werden.&lt;br /&gt;
&lt;br /&gt;
Falls der Analog Comparator nicht gebraucht wird empfiehlt es sich&lt;br /&gt;
den Stromverbrauch im Idle-Modus zu reduzieren indem dieser abgeschaltet wird.&lt;br /&gt;
Das geschieht indem das ACD-Bit (Analog Comparator Disable) im ACSR (Analog Comparator Status Register) gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* SPI&lt;br /&gt;
* UART&lt;br /&gt;
* Analog Comparator&lt;br /&gt;
* ADC&lt;br /&gt;
* Two-Wire Serial Interface (TWI)&lt;br /&gt;
* Timer/Counters&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* Interrupts&lt;br /&gt;
&lt;br /&gt;
=====ADC Noise Reduction Mode=====&lt;br /&gt;
In diesem Modus sind mit dem ADC Messungen höherer Auflösung möglich.&lt;br /&gt;
Wenn der ADC aktiviert ist dann startet er automatisch beim betreten dieses Modus. &lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(I/O)&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* ADC&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* Timer/Counter2&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* SPM/EERPOM Interrupt&lt;br /&gt;
&lt;br /&gt;
=====Power-down Mode=====&lt;br /&gt;
In diesem Modus wird der externe Oszillator gestoppt,&lt;br /&gt;
es sind somit nur noch asynchrone Module aktiv.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* External Reset&lt;br /&gt;
* Watchdog Reset&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
&lt;br /&gt;
=====Power-save Mode=====&lt;br /&gt;
Identisch mir Power-down Mode mit einer Ausnahme:&lt;br /&gt;
&lt;br /&gt;
Wenn der Timer/Counter2 asynchron getaktet wird (AS2-Bit in ASSR-Register gesetzt),&lt;br /&gt;
läuft dieser auch im Power-Down Mode.&lt;br /&gt;
&lt;br /&gt;
Falls dies nicht der Fall ist, d.h. Timer/Counter2 synchron läuft,&lt;br /&gt;
wird von ATMEL der Power-Down Modus empfohlen.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL) mit Ausnahme von clk(ASY)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* Timer/Counter2 Interrupt&lt;br /&gt;
* siehe Power-Down Modus&lt;br /&gt;
&lt;br /&gt;
=====Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-down Mode, der Oszillator läuft jedoch weiter.&lt;br /&gt;
&lt;br /&gt;
=====Extended Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-save Mode, der Oszillator läuft jedoch wie beim Standby Mode weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Analog Comparator ====&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
==== Brown-Out Detector ====&lt;br /&gt;
Der Brown-Out Detector lässt sich durch das BODEN-Bit in den Fuses&lt;br /&gt;
generell aktivieren oder deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Watchdog ====&lt;br /&gt;
Auch der Watchdog-Timer lässt sich in den Fuses standardmäßig aktivieren/deaktiviren, hier über das WDTON-Bit.&lt;br /&gt;
&lt;br /&gt;
Aber auch sofwareseitig ist dies möglich [klick http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53112</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53112"/>
		<updated>2010-11-30T14:35:08Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Um was geht&amp;#039;s? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
== Um was geht&#039;s? ==&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen.&lt;br /&gt;
&lt;br /&gt;
Um Module zeitweise abzuschalten können wir die sogenannten Sleep-Modi nutzen,&lt;br /&gt;
andere garnicht benutzte können wir auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Hinweis&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Welche Sleep-Modi es gibt hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten muss folgendes ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register auf 1 setzen&lt;br /&gt;
# SMx-Bits je nach gewünschtem Modus setzen&lt;br /&gt;
# SLEEP-Befehl ausführen&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann in den SLEEP-Modus und wacht erst wieder&lt;br /&gt;
auf wenn ein geeignetes Signal (je nach Modus) ihn &#039;aufweckt&#039;.&lt;br /&gt;
Er nimmt dann die Arbeit mit der ersten Anweisung hinter dem SLEEP-Befehl wieder auf.&lt;br /&gt;
&lt;br /&gt;
==== Register im Detail ====&lt;br /&gt;
&lt;br /&gt;
MCUCR - MCU Control Register&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit    7     6     5     4&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
    |  SE | SM2 | SM1 | SM0 | ...&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 7 - SE: Sleep Enable&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 6..4 - SM2..0: Sleep Mode Select&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SM2 SM1 SM0 | Sleep Modus&lt;br /&gt;
------------+------------&lt;br /&gt;
 0   0   0  | Idle&lt;br /&gt;
 0   0   1  | ADC Noise Reduction&lt;br /&gt;
 0   1   0  | Power-down&lt;br /&gt;
 0   1   1  | Power-save&lt;br /&gt;
 1   0   0  | Reserved&lt;br /&gt;
 1   0   1  | Reserved&lt;br /&gt;
 1   1   0  | Standby(1)&lt;br /&gt;
 1   1   1  | Extended Standby(1)&lt;br /&gt;
&lt;br /&gt;
(1) Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Die einzelnen Modi im Detail ====&lt;br /&gt;
&lt;br /&gt;
=====Idle Mode=====&lt;br /&gt;
Der Idle-Modus ermöglicht es dem Mikrocontroller von internen&lt;br /&gt;
sowie externen Interrupts aufgeweckt zu werden.&lt;br /&gt;
&lt;br /&gt;
Falls der Analog Comparator nicht gebraucht wird empfiehlt es sich&lt;br /&gt;
den Stromverbrauch im Idle-Modus zu reduzieren indem dieser abgeschaltet wird.&lt;br /&gt;
Das geschieht indem das ACD-Bit (Analog Comparator Disable) im ACSR (Analog Comparator Status Register) gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* SPI&lt;br /&gt;
* UART&lt;br /&gt;
* Analog Comparator&lt;br /&gt;
* ADC&lt;br /&gt;
* Two-Wire Serial Interface (TWI)&lt;br /&gt;
* Timer/Counters&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* Interrupts&lt;br /&gt;
&lt;br /&gt;
=====ADC Noise Reduction Mode=====&lt;br /&gt;
In diesem Modus sind mit dem ADC Messungen höherer Auflösung möglich.&lt;br /&gt;
Wenn der ADC aktiviert ist dann startet er automatisch beim betreten dieses Modus. &lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(I/O)&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* ADC&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* Timer/Counter2&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* SPM/EERPOM Interrupt&lt;br /&gt;
&lt;br /&gt;
=====Power-down Mode=====&lt;br /&gt;
In diesem Modus wird der externe Oszillator gestoppt,&lt;br /&gt;
es sind somit nur noch asynchrone Module aktiv.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* External Reset&lt;br /&gt;
* Watchdog Reset&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
&lt;br /&gt;
=====Power-save Mode=====&lt;br /&gt;
Identisch mir Power-down Mode mit einer Ausnahme:&lt;br /&gt;
&lt;br /&gt;
Wenn der Timer/Counter2 asynchron getaktet wird (AS2-Bit in ASSR-Register gesetzt),&lt;br /&gt;
läuft dieser auch im Power-Down Mode.&lt;br /&gt;
&lt;br /&gt;
Falls dies nicht der Fall ist, d.h. Timer/Counter2 synchron läuft,&lt;br /&gt;
wird von ATMEL der Power-Down Modus empfohlen.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL) mit Ausnahme von clk(ASY)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* Timer/Counter2 Interrupt&lt;br /&gt;
* siehe Power-Down Modus&lt;br /&gt;
&lt;br /&gt;
=====Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-down Mode, der Oszillator läuft jedoch weiter.&lt;br /&gt;
&lt;br /&gt;
=====Extended Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-save Mode, der Oszillator läuft jedoch wie beim Standby Mode weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
todo... (S. 35)&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53111</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53111"/>
		<updated>2010-11-30T14:34:46Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Um was geht&amp;#039;s? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
== Um was geht&#039;s? ==&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen.&lt;br /&gt;
&lt;br /&gt;
Um Module zeitweise abzuschalten können wir die sogenannten Sleep-Modi nutzen,&lt;br /&gt;
andere garnicht benutzte können wir auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Hinweis:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Welche Sleep-Modi es gibt hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten muss folgendes ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register auf 1 setzen&lt;br /&gt;
# SMx-Bits je nach gewünschtem Modus setzen&lt;br /&gt;
# SLEEP-Befehl ausführen&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann in den SLEEP-Modus und wacht erst wieder&lt;br /&gt;
auf wenn ein geeignetes Signal (je nach Modus) ihn &#039;aufweckt&#039;.&lt;br /&gt;
Er nimmt dann die Arbeit mit der ersten Anweisung hinter dem SLEEP-Befehl wieder auf.&lt;br /&gt;
&lt;br /&gt;
==== Register im Detail ====&lt;br /&gt;
&lt;br /&gt;
MCUCR - MCU Control Register&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit    7     6     5     4&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
    |  SE | SM2 | SM1 | SM0 | ...&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 7 - SE: Sleep Enable&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 6..4 - SM2..0: Sleep Mode Select&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SM2 SM1 SM0 | Sleep Modus&lt;br /&gt;
------------+------------&lt;br /&gt;
 0   0   0  | Idle&lt;br /&gt;
 0   0   1  | ADC Noise Reduction&lt;br /&gt;
 0   1   0  | Power-down&lt;br /&gt;
 0   1   1  | Power-save&lt;br /&gt;
 1   0   0  | Reserved&lt;br /&gt;
 1   0   1  | Reserved&lt;br /&gt;
 1   1   0  | Standby(1)&lt;br /&gt;
 1   1   1  | Extended Standby(1)&lt;br /&gt;
&lt;br /&gt;
(1) Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Die einzelnen Modi im Detail ====&lt;br /&gt;
&lt;br /&gt;
=====Idle Mode=====&lt;br /&gt;
Der Idle-Modus ermöglicht es dem Mikrocontroller von internen&lt;br /&gt;
sowie externen Interrupts aufgeweckt zu werden.&lt;br /&gt;
&lt;br /&gt;
Falls der Analog Comparator nicht gebraucht wird empfiehlt es sich&lt;br /&gt;
den Stromverbrauch im Idle-Modus zu reduzieren indem dieser abgeschaltet wird.&lt;br /&gt;
Das geschieht indem das ACD-Bit (Analog Comparator Disable) im ACSR (Analog Comparator Status Register) gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* SPI&lt;br /&gt;
* UART&lt;br /&gt;
* Analog Comparator&lt;br /&gt;
* ADC&lt;br /&gt;
* Two-Wire Serial Interface (TWI)&lt;br /&gt;
* Timer/Counters&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* Interrupts&lt;br /&gt;
&lt;br /&gt;
=====ADC Noise Reduction Mode=====&lt;br /&gt;
In diesem Modus sind mit dem ADC Messungen höherer Auflösung möglich.&lt;br /&gt;
Wenn der ADC aktiviert ist dann startet er automatisch beim betreten dieses Modus. &lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(I/O)&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* ADC&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* Timer/Counter2&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* SPM/EERPOM Interrupt&lt;br /&gt;
&lt;br /&gt;
=====Power-down Mode=====&lt;br /&gt;
In diesem Modus wird der externe Oszillator gestoppt,&lt;br /&gt;
es sind somit nur noch asynchrone Module aktiv.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* External Reset&lt;br /&gt;
* Watchdog Reset&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
&lt;br /&gt;
=====Power-save Mode=====&lt;br /&gt;
Identisch mir Power-down Mode mit einer Ausnahme:&lt;br /&gt;
&lt;br /&gt;
Wenn der Timer/Counter2 asynchron getaktet wird (AS2-Bit in ASSR-Register gesetzt),&lt;br /&gt;
läuft dieser auch im Power-Down Mode.&lt;br /&gt;
&lt;br /&gt;
Falls dies nicht der Fall ist, d.h. Timer/Counter2 synchron läuft,&lt;br /&gt;
wird von ATMEL der Power-Down Modus empfohlen.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL) mit Ausnahme von clk(ASY)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* Timer/Counter2 Interrupt&lt;br /&gt;
* siehe Power-Down Modus&lt;br /&gt;
&lt;br /&gt;
=====Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-down Mode, der Oszillator läuft jedoch weiter.&lt;br /&gt;
&lt;br /&gt;
=====Extended Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-save Mode, der Oszillator läuft jedoch wie beim Standby Mode weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
todo... (S. 35)&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53110</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53110"/>
		<updated>2010-11-30T14:33:10Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Manuelles Deaktivieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
== Um was geht&#039;s? ==&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen.&lt;br /&gt;
&lt;br /&gt;
Um Module zeitweise abzuschalten können wir die sogenannten Sleep-Modi nutzen,&lt;br /&gt;
andere können wir auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten muss folgendes ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register auf 1 setzen&lt;br /&gt;
# SMx-Bits je nach gewünschtem Modus setzen&lt;br /&gt;
# SLEEP-Befehl ausführen&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann in den SLEEP-Modus und wacht erst wieder&lt;br /&gt;
auf wenn ein geeignetes Signal (je nach Modus) ihn &#039;aufweckt&#039;.&lt;br /&gt;
Er nimmt dann die Arbeit mit der ersten Anweisung hinter dem SLEEP-Befehl wieder auf.&lt;br /&gt;
&lt;br /&gt;
==== Register im Detail ====&lt;br /&gt;
&lt;br /&gt;
MCUCR - MCU Control Register&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit    7     6     5     4&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
    |  SE | SM2 | SM1 | SM0 | ...&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 7 - SE: Sleep Enable&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 6..4 - SM2..0: Sleep Mode Select&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SM2 SM1 SM0 | Sleep Modus&lt;br /&gt;
------------+------------&lt;br /&gt;
 0   0   0  | Idle&lt;br /&gt;
 0   0   1  | ADC Noise Reduction&lt;br /&gt;
 0   1   0  | Power-down&lt;br /&gt;
 0   1   1  | Power-save&lt;br /&gt;
 1   0   0  | Reserved&lt;br /&gt;
 1   0   1  | Reserved&lt;br /&gt;
 1   1   0  | Standby(1)&lt;br /&gt;
 1   1   1  | Extended Standby(1)&lt;br /&gt;
&lt;br /&gt;
(1) Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Die einzelnen Modi im Detail ====&lt;br /&gt;
&lt;br /&gt;
=====Idle Mode=====&lt;br /&gt;
Der Idle-Modus ermöglicht es dem Mikrocontroller von internen&lt;br /&gt;
sowie externen Interrupts aufgeweckt zu werden.&lt;br /&gt;
&lt;br /&gt;
Falls der Analog Comparator nicht gebraucht wird empfiehlt es sich&lt;br /&gt;
den Stromverbrauch im Idle-Modus zu reduzieren indem dieser abgeschaltet wird.&lt;br /&gt;
Das geschieht indem das ACD-Bit (Analog Comparator Disable) im ACSR (Analog Comparator Status Register) gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* SPI&lt;br /&gt;
* UART&lt;br /&gt;
* Analog Comparator&lt;br /&gt;
* ADC&lt;br /&gt;
* Two-Wire Serial Interface (TWI)&lt;br /&gt;
* Timer/Counters&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* Interrupts&lt;br /&gt;
&lt;br /&gt;
=====ADC Noise Reduction Mode=====&lt;br /&gt;
In diesem Modus sind mit dem ADC Messungen höherer Auflösung möglich.&lt;br /&gt;
Wenn der ADC aktiviert ist dann startet er automatisch beim betreten dieses Modus. &lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(I/O)&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* ADC&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* Timer/Counter2&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* SPM/EERPOM Interrupt&lt;br /&gt;
&lt;br /&gt;
=====Power-down Mode=====&lt;br /&gt;
In diesem Modus wird der externe Oszillator gestoppt,&lt;br /&gt;
es sind somit nur noch asynchrone Module aktiv.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* External Reset&lt;br /&gt;
* Watchdog Reset&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
&lt;br /&gt;
=====Power-save Mode=====&lt;br /&gt;
Identisch mir Power-down Mode mit einer Ausnahme:&lt;br /&gt;
&lt;br /&gt;
Wenn der Timer/Counter2 asynchron getaktet wird (AS2-Bit in ASSR-Register gesetzt),&lt;br /&gt;
läuft dieser auch im Power-Down Mode.&lt;br /&gt;
&lt;br /&gt;
Falls dies nicht der Fall ist, d.h. Timer/Counter2 synchron läuft,&lt;br /&gt;
wird von ATMEL der Power-Down Modus empfohlen.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL) mit Ausnahme von clk(ASY)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* Timer/Counter2 Interrupt&lt;br /&gt;
* siehe Power-Down Modus&lt;br /&gt;
&lt;br /&gt;
=====Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-down Mode, der Oszillator läuft jedoch weiter.&lt;br /&gt;
&lt;br /&gt;
=====Extended Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-save Mode, der Oszillator läuft jedoch wie beim Standby Mode weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
todo... (S. 35)&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53109</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53109"/>
		<updated>2010-11-30T14:31:59Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Power-save Mode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
== Um was geht&#039;s? ==&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen.&lt;br /&gt;
&lt;br /&gt;
Um Module zeitweise abzuschalten können wir die sogenannten Sleep-Modi nutzen,&lt;br /&gt;
andere können wir auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten muss folgendes ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register auf 1 setzen&lt;br /&gt;
# SMx-Bits je nach gewünschtem Modus setzen&lt;br /&gt;
# SLEEP-Befehl ausführen&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann in den SLEEP-Modus und wacht erst wieder&lt;br /&gt;
auf wenn ein geeignetes Signal (je nach Modus) ihn &#039;aufweckt&#039;.&lt;br /&gt;
Er nimmt dann die Arbeit mit der ersten Anweisung hinter dem SLEEP-Befehl wieder auf.&lt;br /&gt;
&lt;br /&gt;
==== Register im Detail ====&lt;br /&gt;
&lt;br /&gt;
MCUCR - MCU Control Register&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit    7     6     5     4&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
    |  SE | SM2 | SM1 | SM0 | ...&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 7 - SE: Sleep Enable&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 6..4 - SM2..0: Sleep Mode Select&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SM2 SM1 SM0 | Sleep Modus&lt;br /&gt;
------------+------------&lt;br /&gt;
 0   0   0  | Idle&lt;br /&gt;
 0   0   1  | ADC Noise Reduction&lt;br /&gt;
 0   1   0  | Power-down&lt;br /&gt;
 0   1   1  | Power-save&lt;br /&gt;
 1   0   0  | Reserved&lt;br /&gt;
 1   0   1  | Reserved&lt;br /&gt;
 1   1   0  | Standby(1)&lt;br /&gt;
 1   1   1  | Extended Standby(1)&lt;br /&gt;
&lt;br /&gt;
(1) Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Die einzelnen Modi im Detail ====&lt;br /&gt;
&lt;br /&gt;
=====Idle Mode=====&lt;br /&gt;
Der Idle-Modus ermöglicht es dem Mikrocontroller von internen&lt;br /&gt;
sowie externen Interrupts aufgeweckt zu werden.&lt;br /&gt;
&lt;br /&gt;
Falls der Analog Comparator nicht gebraucht wird empfiehlt es sich&lt;br /&gt;
den Stromverbrauch im Idle-Modus zu reduzieren indem dieser abgeschaltet wird.&lt;br /&gt;
Das geschieht indem das ACD-Bit (Analog Comparator Disable) im ACSR (Analog Comparator Status Register) gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* SPI&lt;br /&gt;
* UART&lt;br /&gt;
* Analog Comparator&lt;br /&gt;
* ADC&lt;br /&gt;
* Two-Wire Serial Interface (TWI)&lt;br /&gt;
* Timer/Counters&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* Interrupts&lt;br /&gt;
&lt;br /&gt;
=====ADC Noise Reduction Mode=====&lt;br /&gt;
In diesem Modus sind mit dem ADC Messungen höherer Auflösung möglich.&lt;br /&gt;
Wenn der ADC aktiviert ist dann startet er automatisch beim betreten dieses Modus. &lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(I/O)&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* ADC&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* Timer/Counter2&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* SPM/EERPOM Interrupt&lt;br /&gt;
&lt;br /&gt;
=====Power-down Mode=====&lt;br /&gt;
In diesem Modus wird der externe Oszillator gestoppt,&lt;br /&gt;
es sind somit nur noch asynchrone Module aktiv.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* External Reset&lt;br /&gt;
* Watchdog Reset&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
&lt;br /&gt;
=====Power-save Mode=====&lt;br /&gt;
Identisch mir Power-down Mode mit einer Ausnahme:&lt;br /&gt;
&lt;br /&gt;
Wenn der Timer/Counter2 asynchron getaktet wird (AS2-Bit in ASSR-Register gesetzt),&lt;br /&gt;
läuft dieser auch im Power-Down Mode.&lt;br /&gt;
&lt;br /&gt;
Falls dies nicht der Fall ist, d.h. Timer/Counter2 synchron läuft,&lt;br /&gt;
wird von ATMEL der Power-Down Modus empfohlen.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL) mit Ausnahme von clk(ASY)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* Timer/Counter2 Interrupt&lt;br /&gt;
* siehe Power-Down Modus&lt;br /&gt;
&lt;br /&gt;
=====Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-down Mode, der Oszillator läuft jedoch weiter.&lt;br /&gt;
&lt;br /&gt;
=====Extended Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-save Mode, der Oszillator läuft jedoch wie beim Standby Mode weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53108</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53108"/>
		<updated>2010-11-30T14:31:04Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
== Um was geht&#039;s? ==&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen.&lt;br /&gt;
&lt;br /&gt;
Um Module zeitweise abzuschalten können wir die sogenannten Sleep-Modi nutzen,&lt;br /&gt;
andere können wir auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
=== Sleep Modi ===&lt;br /&gt;
&lt;br /&gt;
Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten muss folgendes ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register auf 1 setzen&lt;br /&gt;
# SMx-Bits je nach gewünschtem Modus setzen&lt;br /&gt;
# SLEEP-Befehl ausführen&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann in den SLEEP-Modus und wacht erst wieder&lt;br /&gt;
auf wenn ein geeignetes Signal (je nach Modus) ihn &#039;aufweckt&#039;.&lt;br /&gt;
Er nimmt dann die Arbeit mit der ersten Anweisung hinter dem SLEEP-Befehl wieder auf.&lt;br /&gt;
&lt;br /&gt;
==== Register im Detail ====&lt;br /&gt;
&lt;br /&gt;
MCUCR - MCU Control Register&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit    7     6     5     4&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
    |  SE | SM2 | SM1 | SM0 | ...&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 7 - SE: Sleep Enable&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 6..4 - SM2..0: Sleep Mode Select&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SM2 SM1 SM0 | Sleep Modus&lt;br /&gt;
------------+------------&lt;br /&gt;
 0   0   0  | Idle&lt;br /&gt;
 0   0   1  | ADC Noise Reduction&lt;br /&gt;
 0   1   0  | Power-down&lt;br /&gt;
 0   1   1  | Power-save&lt;br /&gt;
 1   0   0  | Reserved&lt;br /&gt;
 1   0   1  | Reserved&lt;br /&gt;
 1   1   0  | Standby(1)&lt;br /&gt;
 1   1   1  | Extended Standby(1)&lt;br /&gt;
&lt;br /&gt;
(1) Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Die einzelnen Modi im Detail ====&lt;br /&gt;
&lt;br /&gt;
=====Idle Mode=====&lt;br /&gt;
Der Idle-Modus ermöglicht es dem Mikrocontroller von internen&lt;br /&gt;
sowie externen Interrupts aufgeweckt zu werden.&lt;br /&gt;
&lt;br /&gt;
Falls der Analog Comparator nicht gebraucht wird empfiehlt es sich&lt;br /&gt;
den Stromverbrauch im Idle-Modus zu reduzieren indem dieser abgeschaltet wird.&lt;br /&gt;
Das geschieht indem das ACD-Bit (Analog Comparator Disable) im ACSR (Analog Comparator Status Register) gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* SPI&lt;br /&gt;
* UART&lt;br /&gt;
* Analog Comparator&lt;br /&gt;
* ADC&lt;br /&gt;
* Two-Wire Serial Interface (TWI)&lt;br /&gt;
* Timer/Counters&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* Interrupts&lt;br /&gt;
&lt;br /&gt;
=====ADC Noise Reduction Mode=====&lt;br /&gt;
In diesem Modus sind mit dem ADC Messungen höherer Auflösung möglich.&lt;br /&gt;
Wenn der ADC aktiviert ist dann startet er automatisch beim betreten dieses Modus. &lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(I/O)&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* ADC&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* Timer/Counter2&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* SPM/EERPOM Interrupt&lt;br /&gt;
&lt;br /&gt;
=====Power-down Mode=====&lt;br /&gt;
In diesem Modus wird der externe Oszillator gestoppt,&lt;br /&gt;
es sind somit nur noch asynchrone Module aktiv.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* External Reset&lt;br /&gt;
* Watchdog Reset&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
&lt;br /&gt;
=====Power-save Mode=====&lt;br /&gt;
Identisch mir Power-down Mode mit einer Ausnahme:&lt;br /&gt;
&lt;br /&gt;
Wenn Timer/Counter2 asynchron getaktet wird (AS2-Bit in ASSR-Register gesetzt),&lt;br /&gt;
läuft dieser auch im Power-Down Mode.&lt;br /&gt;
&lt;br /&gt;
Falls dies nicht der Fall ist, d.h. Timer/Counter2 synchron läuft,&lt;br /&gt;
wird von ATMEL der Power-Down Modus empfohlen.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL) mit Ausnahme von clk(ASY)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* Timer/Counter2 Interrupt&lt;br /&gt;
* siehe Power-Down Modus&lt;br /&gt;
&lt;br /&gt;
=====Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-down Mode, der Oszillator läuft jedoch weiter.&lt;br /&gt;
&lt;br /&gt;
=====Extended Standby Mode=====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-save Mode, der Oszillator läuft jedoch wie beim Standby Mode weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles Deaktivieren ===&lt;br /&gt;
Einzelne Module können auch manuell deaktviert werden um Strom zu sparen.&lt;br /&gt;
&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53107</id>
		<title>AVR-Tutorial: Power Management</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Power_Management&amp;diff=53107"/>
		<updated>2010-11-30T14:28:14Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: Die Seite wurde neu angelegt: „&amp;#039;&amp;#039;&amp;#039;ACHTUNG!&amp;#039;&amp;#039;&amp;#039; Dieser Artikel befindet sich noch im Aufbau!  == Um was geht&amp;#039;s? == Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wicht…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG!&#039;&#039;&#039;&lt;br /&gt;
Dieser Artikel befindet sich noch im Aufbau!&lt;br /&gt;
&lt;br /&gt;
== Um was geht&#039;s? ==&lt;br /&gt;
Vorallem in batteriebetriebenen Systemen spielt die Leistungsaufnahme eine wichtige Rolle, d.h. sie soll so niedrig wie möglich gehalten werden um eine lange Laufzeit zu erreichen.&lt;br /&gt;
&lt;br /&gt;
Um Module zeitweise abzuschalten können wir die sogenannten Sleep-Modi nutzen,&lt;br /&gt;
andere können wir auch komplett deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Welche Sleep-Modi es gibt hängt vom verwendeten µC ab, dieser Artikel nimmt jedoch Bezug auf den ATmega32.&lt;br /&gt;
&lt;br /&gt;
== Theorie ==&lt;br /&gt;
&lt;br /&gt;
Um einen der verfügbaren Sleep-Modi des ATmega32 zu betreten muss folgendes ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
# Das SE-Bit im MCUCR-Register auf 1 setzen&lt;br /&gt;
# SMx-Bits je nach gewünschtem Modus setzen&lt;br /&gt;
# SLEEP-Befehl ausführen&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller geht dann in den SLEEP-Modus und wacht erst wieder&lt;br /&gt;
auf wenn ein geeignetes Signal (je nach Modus) ihn &#039;aufweckt&#039;.&lt;br /&gt;
Er nimmt dann die Arbeit mit der ersten Anweisung hinter dem SLEEP-Befehl wieder auf.&lt;br /&gt;
&lt;br /&gt;
=== Register im Detail ===&lt;br /&gt;
&lt;br /&gt;
MCUCR - MCU Control Register&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit    7     6     5     4&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
    |  SE | SM2 | SM1 | SM0 | ...&lt;br /&gt;
    +-----+-----+-----+-----+-- -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 7 - SE: Sleep Enable&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesem Bit wird bestimmt ob der Sleep-Befehl ausgeführt wird (1) oder nicht (0).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bit 6..4 - SM2..0: Sleep Mode Select&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mit diesen drei Bits wird der gewünschte Sleep-Modi gewählt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SM2 SM1 SM0 | Sleep Modus&lt;br /&gt;
------------+------------&lt;br /&gt;
 0   0   0  | Idle&lt;br /&gt;
 0   0   1  | ADC Noise Reduction&lt;br /&gt;
 0   1   0  | Power-down&lt;br /&gt;
 0   1   1  | Power-save&lt;br /&gt;
 1   0   0  | Reserved&lt;br /&gt;
 1   0   1  | Reserved&lt;br /&gt;
 1   1   0  | Standby(1)&lt;br /&gt;
 1   1   1  | Extended Standby(1)&lt;br /&gt;
&lt;br /&gt;
(1) Nur verfügbar mit externem Taktgeber&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sleep-Modi im Detail ===&lt;br /&gt;
&lt;br /&gt;
====Idle Mode====&lt;br /&gt;
Der Idle-Modus ermöglicht es dem Mikrocontroller von internen&lt;br /&gt;
sowie externen Interrupts aufgeweckt zu werden.&lt;br /&gt;
&lt;br /&gt;
Falls der Analog Comparator nicht gebraucht wird empfiehlt es sich&lt;br /&gt;
den Stromverbrauch im Idle-Modus zu reduzieren indem dieser abgeschaltet wird.&lt;br /&gt;
Das geschieht indem das ACD-Bit (Analog Comparator Disable) im ACSR (Analog Comparator Status Register) gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* SPI&lt;br /&gt;
* UART&lt;br /&gt;
* Analog Comparator&lt;br /&gt;
* ADC&lt;br /&gt;
* Two-Wire Serial Interface (TWI)&lt;br /&gt;
* Timer/Counters&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* Interrupts&lt;br /&gt;
&lt;br /&gt;
====ADC Noise Reduction Mode====&lt;br /&gt;
In diesem Modus sind mit dem ADC Messungen höherer Auflösung möglich.&lt;br /&gt;
Wenn der ADC aktiviert ist dann startet er automatisch beim betreten dieses Modus. &lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(I/O)&lt;br /&gt;
* clk(CPU)&lt;br /&gt;
* clk(FLASH)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* ADC&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* Timer/Counter2&lt;br /&gt;
* Watchdog&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* SPM/EERPOM Interrupt&lt;br /&gt;
&lt;br /&gt;
====Power-down Mode====&lt;br /&gt;
In diesem Modus wird der externe Oszillator gestoppt,&lt;br /&gt;
es sind somit nur noch asynchrone Module aktiv.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* External Level Interrupts (INT0 / INT1)&lt;br /&gt;
* External Interrupt (INT2)&lt;br /&gt;
* Two-Wire Serial Interface (TWI) Address Match&lt;br /&gt;
* External Reset&lt;br /&gt;
* Watchdog Reset&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
&lt;br /&gt;
====Power-save Mode====&lt;br /&gt;
Identisch mir Power-down Mode mit einer Ausnahme:&lt;br /&gt;
&lt;br /&gt;
Wenn Timer/Counter2 asynchron getaktet wird (AS2-Bit in ASSR-Register gesetzt),&lt;br /&gt;
läuft dieser auch im Power-Down Mode.&lt;br /&gt;
&lt;br /&gt;
Falls dies nicht der Fall ist, d.h. Timer/Counter2 synchron läuft,&lt;br /&gt;
wird von ATMEL der Power-Down Modus empfohlen.&lt;br /&gt;
&lt;br /&gt;
Was wird gestoppt&lt;br /&gt;
* clk(ALL) mit Ausnahme von clk(ASY)&lt;br /&gt;
&lt;br /&gt;
Was kann aufwecken?&lt;br /&gt;
* Timer/Counter2 Interrupt&lt;br /&gt;
* siehe Power-Down Modus&lt;br /&gt;
&lt;br /&gt;
====Standby Mode====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-down Mode, der Oszillator läuft jedoch weiter.&lt;br /&gt;
&lt;br /&gt;
====Extended Standby Mode====&lt;br /&gt;
Hinweis: &#039;&#039;Nur mit externem Oszillator möglich!&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Identisch mir Power-save Mode, der Oszillator läuft jedoch wie beim Standby Mode weiter.&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
todo...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMEL AVR ATmega32 Datenblatt]&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial&amp;diff=53106</id>
		<title>AVR-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial&amp;diff=53106"/>
		<updated>2010-11-30T14:25:40Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Aufbau des Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ausser diesem Tutorial gibt es noch das [[AVR-GCC-Tutorial]] sowie die Artikel in der [[:Kategorie:avr-gcc Tutorial]].&lt;br /&gt;
&lt;br /&gt;
== Aufbau des Tutorials ==&lt;br /&gt;
* Einleitung: Worum geht es überhaupt?&lt;br /&gt;
* [[AVR-Tutorial: Equipment|Benötigte Ausrüstung: Welche Hard- und Software brauche ich, um AVR-Mikrocontroller zu programmieren?]]&lt;br /&gt;
* [[AVR-Tutorial: IO-Grundlagen|I/O-Grundlagen: Wie kann ich Taster und LEDs an einen AVR anschließen und benutzen?]]&lt;br /&gt;
* [[AVR-Tutorial: Logik|Logik: Verschiedene Grundoperationen und Verknüpfungen]]&lt;br /&gt;
* [[AVR-Tutorial: Arithmetik8|Arithmetik: Verschiedene Grundoperationen]]&lt;br /&gt;
* [[AVR-Tutorial: Stack|Der Stack: Was ist der Stack und wie funktionieren Unterprogrammaufrufe?]]&lt;br /&gt;
* [[AVR-Tutorial: LCD|LCD: Ansteuerung eines LC-Displays im 4bit-Modus]]&lt;br /&gt;
* [[AVR-Tutorial: Interrupts|Interrupts: Was sind Interrupts und wie kann ich sie verwenden?]]&lt;br /&gt;
* [[AVR-Tutorial: Vergleiche|Vergleiche: Wie werden Entscheidungen getroffen?]]&lt;br /&gt;
* [[AVR-Tutorial: Mehrfachverzweigung| Mehrfachverzweigung: Eine Variable auf mehrere Werte prüfen.]]&lt;br /&gt;
* [[AVR-Tutorial: UART|Der UART: Wie kann ich Daten zwischen einem Mikrocontroller und einem PC austauschen?]]&lt;br /&gt;
* [[AVR-Tutorial: Speicher|Flash, EEPROM, RAM: Die verschiedenen Speicherarten des AVR und ihre Anwendung.]]&lt;br /&gt;
* [[AVR-Tutorial: Timer|Die Timer: in regelmäßigen Zeitabständen Dinge tun.]]&lt;br /&gt;
* [[AVR-Tutorial: Uhr|Die Timer: Uhr und CTC Modus.]]&lt;br /&gt;
* [[AVR-Tutorial: ADC|Der ADC: Die Brücke von der analogen zur digitalen Welt.]]&lt;br /&gt;
* [[AVR-Tutorial: Tasten|Tasten: Einzelne Tastendrücke und Entprellen.]]&lt;br /&gt;
* [[AVR-Tutorial: PWM|PWM: Ein Timer dimmt eine LED.]]&lt;br /&gt;
* [[AVR-Tutorial: Schieberegister|Schieberegister: Ausgabe-/Eingabeport erweitern.]]&lt;br /&gt;
* [[AVR-Tutorial: SRAM|SRAM: Wenn die vorhandenen Register nicht mehr reichen.]]&lt;br /&gt;
* [[AVR-Tutorial: 7-Segment-Anzeige|7-Segment Anzeigen: Was ist Multiplexing?]]&lt;br /&gt;
* [[AVR-Tutorial: Watchdog|Der Watchdog und dessen Wirkungsweise.]]&lt;br /&gt;
* [[AVR-Tutorial: Power Management|Power Management: Strom sparen]]&lt;br /&gt;
&lt;br /&gt;
Falls ihr irgendwelche Fragen habt, stellt diese bitte im [http://www.mikrocontroller.net/forum/mikrocontroller-elektronik Forum]!&lt;br /&gt;
&lt;br /&gt;
== Was ist ein Mikrocontroller? ==&lt;br /&gt;
Ein Mikrocontroller ist ein Prozessor. Der Unterschied zu PC-Prozessoren besteht darin, dass bei einem Mikrocontroller Speicher, Digital- und Analog-Ein- und -Ausgänge etc. meist auf einem einzigen Chip integriert sind, so dass eine Mikrocontroller-Anwendung oft mit wenigen Bauteilen auskommt. &lt;br /&gt;
&lt;br /&gt;
Mikrocontroller werden als erstes an der Bit-Zahl des internen Datenbusses unterschieden: 4bit, 8bit, 16bit und 32bit. Diese Bit-Zahl kann man als die Länge der Daten interpretieren, die der Controller in einem Befehl verarbeiten kann. Die größte in 8 Bit (= 1 Byte) darstellbare Zahl ist die 255, somit kann ein 8-Bit-Mikrocontroller z.&amp;amp;nbsp;B. in einem Additionsbefehl immer nur Zahlen kleiner-gleich 255 verarbeiten. Zur Bearbeitung von größeren Zahlen werden dann jeweils mehrere Befehle hintereinander benötigt, was natürlich länger dauert. &lt;br /&gt;
Ein Mikrocontroller braucht zum Betrieb, wie jeder andere Prozessor auch, einen Takt. Die maximale Taktfrequenz mit der ein Controller betrieben werden kann, reicht von 1 MHz bei alten Controllern bis hin zu über 100 MHz bei teuren 32-Bittern. Diese Taktfrequenz sagt jedoch noch nichts über die tatsächliche Geschwindigkeit eines Prozessors aus. So wird z.&amp;amp;nbsp;B. bei den meisten 8051-Controllern die Frequenz intern durch 12 geteilt, ein mit 24 MHz getakteter 8051 arbeitet also eigentlich nur mit 2 MHz. Benötigt dieser dann für einen Befehl durchschnittlich 2 Taktzyklen, so bleiben &amp;quot;nur&amp;quot; noch 1 Mio. Befehle pro Sekunde übrig - ein AVR, der ungeteilt mit 8MHz arbeitet und für die meisten Befehle nur einen Zyklus braucht, schafft dagegen fast 8 Mio. Befehle pro Sekunde.&lt;br /&gt;
&lt;br /&gt;
== Wozu ist ein Mikrocontroller gut? ==&lt;br /&gt;
Hier ein paar Beispiele, für welche Aufgaben Mikrocontroller verwendet werden (können): &lt;br /&gt;
&lt;br /&gt;
* Ladegeräte &lt;br /&gt;
* Motorsteuerungen &lt;br /&gt;
* Roboter &lt;br /&gt;
* Messwerterfassung (z.&amp;amp;nbsp;B. Drehzahlmessung im Auto) &lt;br /&gt;
* Temperaturregler &lt;br /&gt;
* MP3-Player &lt;br /&gt;
* Schaltuhren&lt;br /&gt;
* Alarmanlagen&lt;br /&gt;
* LED-Matrizen (Blinkmuster etc.)&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Welchen Mikrocontroller soll ich verwenden? ==&lt;br /&gt;
Typische Anforderungen an einen Mikrocontroller für Hobbyanwender (einige davon konkurrieren miteinander): &lt;br /&gt;
&lt;br /&gt;
* Gute Beschaffbarkeit und geringer Preis &lt;br /&gt;
* Handliche Bauform: Ein Controller mit 20 Pins ist leichter zu handhaben als einer mit 128 &lt;br /&gt;
* Flash-ROM: Der Controller sollte mindestens 1000 mal neu programmiert werden können &lt;br /&gt;
* In-System-Programmierbarkeit (ISP): Man benötigt kein teures Programmiergerät und muss den Controller zur Programmierung nicht aus der Schaltung entfernen &lt;br /&gt;
* Kostenlose Software verfügbar: Assembler bekommt man praktisch immer kostenlos&lt;br /&gt;
&lt;br /&gt;
Weitere Entscheidungskriterien sind im Artikel [[Entscheidung Mikrocontroller]] zusammengefasst.&lt;br /&gt;
&lt;br /&gt;
Viele dieser Anforderungen werden von den [[AVR|8-bit-AVR-Controllern]] von Atmel erfüllt. Deshalb werde ich einen AVR, genauer gesagt den ATmega8, in diesem Tutorial einsetzen.&lt;br /&gt;
&lt;br /&gt;
Und damit kein Missverständnis aufkommt: So etwas wie den &amp;quot;besten&amp;quot; Controller gibt es nicht. Es hängt immer von der Aufgabenstellung ab, welcher Controller &#039;&#039;&#039;gut&#039;&#039;&#039; dafür geeignet ist. Natürlich haben sich einige Controller als Standardtypen in der Praxis durchgesetzt, mit denen man in vielen Fällen ein gutes Auslangen hat und die mit ihrer Leistungsfähigkeit einen weiten Bereich abdecken können. Der ATmega8 ist z.&amp;amp;nbsp;B. so einer. Aber daneben gibt es noch viele andere..&lt;br /&gt;
&lt;br /&gt;
== Assembler, Basic oder C? ==&lt;br /&gt;
Warum ist dieses Tutorial für Assembler geschrieben, wo es doch einen kostenlosen C-Compiler ([[WinAVR]], [[AVR-GCC]]) und einen billigen Basic-Compiler gibt? &lt;br /&gt;
&lt;br /&gt;
Assembler ist für den Einstieg &amp;quot;von der Pike auf&amp;quot; am besten geeignet. Nur wenn man Assembler anwendet, lernt man den Aufbau eines Mikrocontrollers richtig kennen und kann ihn dadurch besser nutzen; außerdem stößt man bei jedem Compiler irgendwann mal auf Probleme, die sich nur oder besser durch das Verwenden von Assemblercode lösen lassen. Und sei es nur, dass man das vom Compiler generierte Assemblerlisting studiert, um zu entscheiden, ob und wie man eine bestimmte Sequenz im C-Code umschreiben soll, um dem Compiler das Optimieren zu ermöglichen/erleichtern.&lt;br /&gt;
&lt;br /&gt;
Allerdings muss auch erwähnt werden, dass das Programmieren in Assembler besonders fehleranfällig ist und dass es damit besonders lange dauert, bis das Programm erste Ergebnisse liefert. Genau aus diesem Grund wurden &amp;quot;höhere&amp;quot; Programmiersprachen erfunden, weil man damit nicht immer wieder &amp;quot;das Rad neu erfinden&amp;quot; muss. Das gilt besonders, wenn vorbereitete Programmblöcke zur Verfügung stehen, die man miteinander kombinieren kann. Wer regelmäßig programmieren und auch längere Programme schreiben möchte, dem sei deshalb geraten, nach diesem Assembler-Tutorial C zu lernen, zum Beispiel mit dem [[AVR-GCC-Tutorial]].&lt;br /&gt;
&lt;br /&gt;
Wer C schon kann, für den bietet es sich an, das Tutorial parallel in C und Assembler abzuarbeiten. Die meisten hier vorgestellten Assemblerprogramme lassen sich relativ einfach in C umsetzen. Dabei sollte großes Augenmerk darauf gelegt werden, dass die dem Programm zugrunde liegende Idee verstanden wurde. Nur so ist ein vernünftiges Umsetzen von Assembler nach C (oder umgekehrt) möglich. Völlig verkehrt wäre es, nach sich entsprechenden &#039;Befehlen&#039; zu suchen und zu glauben, damit hätte man dann ein Programm von Assembler nach C übersetzt.&lt;br /&gt;
&lt;br /&gt;
== Weitere Informationen ==&lt;br /&gt;
&lt;br /&gt;
Weiterführende Informationen u. A. zu den berüchtigten [[AVR Fuses|Fuse-Bits]], zu [[:Kategorie:AVR-Programmer und -Bootloader|Programmier-Hard- und Software]], dem  [[AVR Softwarepool]] und einer Checkliste mit Hinweisen zur Lösung üblicher Probleme finden sich im Hauptartikel [[AVR]]. &lt;br /&gt;
&lt;br /&gt;
[[AVR-Tutorial:_Equipment|vor zum ersten Kapitel]]&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR| ]]&lt;br /&gt;
[[Category:AVR-Tutorial| ]]&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial&amp;diff=53093</id>
		<title>AVR-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial&amp;diff=53093"/>
		<updated>2010-11-30T12:36:23Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Aufbau des Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ausser diesem Tutorial gibt es noch das [[AVR-GCC-Tutorial]] sowie die Artikel in der [[:Kategorie:avr-gcc Tutorial]].&lt;br /&gt;
&lt;br /&gt;
== Aufbau des Tutorials ==&lt;br /&gt;
* Einleitung: Worum geht es überhaupt?&lt;br /&gt;
* [[AVR-Tutorial: Equipment|Benötigte Ausrüstung: Welche Hard- und Software brauche ich, um AVR-Mikrocontroller zu programmieren?]]&lt;br /&gt;
* [[AVR-Tutorial: IO-Grundlagen|I/O-Grundlagen: Wie kann ich Taster und LEDs an einen AVR anschließen und benutzen?]]&lt;br /&gt;
* [[AVR-Tutorial: Logik|Logik: Verschiedene Grundoperationen und Verknüpfungen]]&lt;br /&gt;
* [[AVR-Tutorial: Arithmetik8|Arithmetik: Verschiedene Grundoperationen]]&lt;br /&gt;
* [[AVR-Tutorial: Stack|Der Stack: Was ist der Stack und wie funktionieren Unterprogrammaufrufe?]]&lt;br /&gt;
* [[AVR-Tutorial: LCD|LCD: Ansteuerung eines LC-Displays im 4bit-Modus]]&lt;br /&gt;
* [[AVR-Tutorial: Interrupts|Interrupts: Was sind Interrupts und wie kann ich sie verwenden?]]&lt;br /&gt;
* [[AVR-Tutorial: Vergleiche|Vergleiche: Wie werden Entscheidungen getroffen?]]&lt;br /&gt;
* [[AVR-Tutorial: Mehrfachverzweigung| Mehrfachverzweigung: Eine Variable auf mehrere Werte prüfen.]]&lt;br /&gt;
* [[AVR-Tutorial: UART|Der UART: Wie kann ich Daten zwischen einem Mikrocontroller und einem PC austauschen?]]&lt;br /&gt;
* [[AVR-Tutorial: Speicher|Flash, EEPROM, RAM: Die verschiedenen Speicherarten des AVR und ihre Anwendung.]]&lt;br /&gt;
* [[AVR-Tutorial: Timer|Die Timer: in regelmäßigen Zeitabständen Dinge tun.]]&lt;br /&gt;
* [[AVR-Tutorial: Uhr|Die Timer: Uhr und CTC Modus.]]&lt;br /&gt;
* [[AVR-Tutorial: ADC|Der ADC: Die Brücke von der analogen zur digitalen Welt.]]&lt;br /&gt;
* [[AVR-Tutorial: Tasten|Tasten: Einzelne Tastendrücke und Entprellen.]]&lt;br /&gt;
* [[AVR-Tutorial: PWM|PWM: Ein Timer dimmt eine LED.]]&lt;br /&gt;
* [[AVR-Tutorial: Schieberegister|Schieberegister: Ausgabe-/Eingabeport erweitern.]]&lt;br /&gt;
* [[AVR-Tutorial: SRAM|SRAM: Wenn die vorhandenen Register nicht mehr reichen.]]&lt;br /&gt;
* [[AVR-Tutorial: 7-Segment-Anzeige|7-Segment Anzeigen: Was ist Multiplexing?]]&lt;br /&gt;
* [[AVR-Tutorial: Watchdog|Der Watchdog und dessen Wirkungsweise.]]&lt;br /&gt;
* [[AVR-Tutorial: Sleep-Modi|Power Management: Strom sparen mit den Sleep-Modi]]&lt;br /&gt;
&lt;br /&gt;
Falls ihr irgendwelche Fragen habt, stellt diese bitte im [http://www.mikrocontroller.net/forum/mikrocontroller-elektronik Forum]!&lt;br /&gt;
&lt;br /&gt;
== Was ist ein Mikrocontroller? ==&lt;br /&gt;
Ein Mikrocontroller ist ein Prozessor. Der Unterschied zu PC-Prozessoren besteht darin, dass bei einem Mikrocontroller Speicher, Digital- und Analog-Ein- und -Ausgänge etc. meist auf einem einzigen Chip integriert sind, so dass eine Mikrocontroller-Anwendung oft mit wenigen Bauteilen auskommt. &lt;br /&gt;
&lt;br /&gt;
Mikrocontroller werden als erstes an der Bit-Zahl des internen Datenbusses unterschieden: 4bit, 8bit, 16bit und 32bit. Diese Bit-Zahl kann man als die Länge der Daten interpretieren, die der Controller in einem Befehl verarbeiten kann. Die größte in 8 Bit (= 1 Byte) darstellbare Zahl ist die 255, somit kann ein 8-Bit-Mikrocontroller z.&amp;amp;nbsp;B. in einem Additionsbefehl immer nur Zahlen kleiner-gleich 255 verarbeiten. Zur Bearbeitung von größeren Zahlen werden dann jeweils mehrere Befehle hintereinander benötigt, was natürlich länger dauert. &lt;br /&gt;
Ein Mikrocontroller braucht zum Betrieb, wie jeder andere Prozessor auch, einen Takt. Die maximale Taktfrequenz mit der ein Controller betrieben werden kann, reicht von 1 MHz bei alten Controllern bis hin zu über 100 MHz bei teuren 32-Bittern. Diese Taktfrequenz sagt jedoch noch nichts über die tatsächliche Geschwindigkeit eines Prozessors aus. So wird z.&amp;amp;nbsp;B. bei den meisten 8051-Controllern die Frequenz intern durch 12 geteilt, ein mit 24 MHz getakteter 8051 arbeitet also eigentlich nur mit 2 MHz. Benötigt dieser dann für einen Befehl durchschnittlich 2 Taktzyklen, so bleiben &amp;quot;nur&amp;quot; noch 1 Mio. Befehle pro Sekunde übrig - ein AVR, der ungeteilt mit 8MHz arbeitet und für die meisten Befehle nur einen Zyklus braucht, schafft dagegen fast 8 Mio. Befehle pro Sekunde.&lt;br /&gt;
&lt;br /&gt;
== Wozu ist ein Mikrocontroller gut? ==&lt;br /&gt;
Hier ein paar Beispiele, für welche Aufgaben Mikrocontroller verwendet werden (können): &lt;br /&gt;
&lt;br /&gt;
* Ladegeräte &lt;br /&gt;
* Motorsteuerungen &lt;br /&gt;
* Roboter &lt;br /&gt;
* Messwerterfassung (z.&amp;amp;nbsp;B. Drehzahlmessung im Auto) &lt;br /&gt;
* Temperaturregler &lt;br /&gt;
* MP3-Player &lt;br /&gt;
* Schaltuhren&lt;br /&gt;
* Alarmanlagen&lt;br /&gt;
* LED-Matrizen (Blinkmuster etc.)&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Welchen Mikrocontroller soll ich verwenden? ==&lt;br /&gt;
Typische Anforderungen an einen Mikrocontroller für Hobbyanwender (einige davon konkurrieren miteinander): &lt;br /&gt;
&lt;br /&gt;
* Gute Beschaffbarkeit und geringer Preis &lt;br /&gt;
* Handliche Bauform: Ein Controller mit 20 Pins ist leichter zu handhaben als einer mit 128 &lt;br /&gt;
* Flash-ROM: Der Controller sollte mindestens 1000 mal neu programmiert werden können &lt;br /&gt;
* In-System-Programmierbarkeit (ISP): Man benötigt kein teures Programmiergerät und muss den Controller zur Programmierung nicht aus der Schaltung entfernen &lt;br /&gt;
* Kostenlose Software verfügbar: Assembler bekommt man praktisch immer kostenlos&lt;br /&gt;
&lt;br /&gt;
Weitere Entscheidungskriterien sind im Artikel [[Entscheidung Mikrocontroller]] zusammengefasst.&lt;br /&gt;
&lt;br /&gt;
Viele dieser Anforderungen werden von den [[AVR|8-bit-AVR-Controllern]] von Atmel erfüllt. Deshalb werde ich einen AVR, genauer gesagt den ATmega8, in diesem Tutorial einsetzen.&lt;br /&gt;
&lt;br /&gt;
Und damit kein Missverständnis aufkommt: So etwas wie den &amp;quot;besten&amp;quot; Controller gibt es nicht. Es hängt immer von der Aufgabenstellung ab, welcher Controller &#039;&#039;&#039;gut&#039;&#039;&#039; dafür geeignet ist. Natürlich haben sich einige Controller als Standardtypen in der Praxis durchgesetzt, mit denen man in vielen Fällen ein gutes Auslangen hat und die mit ihrer Leistungsfähigkeit einen weiten Bereich abdecken können. Der ATmega8 ist z.&amp;amp;nbsp;B. so einer. Aber daneben gibt es noch viele andere..&lt;br /&gt;
&lt;br /&gt;
== Assembler, Basic oder C? ==&lt;br /&gt;
Warum ist dieses Tutorial für Assembler geschrieben, wo es doch einen kostenlosen C-Compiler ([[WinAVR]], [[AVR-GCC]]) und einen billigen Basic-Compiler gibt? &lt;br /&gt;
&lt;br /&gt;
Assembler ist für den Einstieg &amp;quot;von der Pike auf&amp;quot; am besten geeignet. Nur wenn man Assembler anwendet, lernt man den Aufbau eines Mikrocontrollers richtig kennen und kann ihn dadurch besser nutzen; außerdem stößt man bei jedem Compiler irgendwann mal auf Probleme, die sich nur oder besser durch das Verwenden von Assemblercode lösen lassen. Und sei es nur, dass man das vom Compiler generierte Assemblerlisting studiert, um zu entscheiden, ob und wie man eine bestimmte Sequenz im C-Code umschreiben soll, um dem Compiler das Optimieren zu ermöglichen/erleichtern.&lt;br /&gt;
&lt;br /&gt;
Allerdings muss auch erwähnt werden, dass das Programmieren in Assembler besonders fehleranfällig ist und dass es damit besonders lange dauert, bis das Programm erste Ergebnisse liefert. Genau aus diesem Grund wurden &amp;quot;höhere&amp;quot; Programmiersprachen erfunden, weil man damit nicht immer wieder &amp;quot;das Rad neu erfinden&amp;quot; muss. Das gilt besonders, wenn vorbereitete Programmblöcke zur Verfügung stehen, die man miteinander kombinieren kann. Wer regelmäßig programmieren und auch längere Programme schreiben möchte, dem sei deshalb geraten, nach diesem Assembler-Tutorial C zu lernen, zum Beispiel mit dem [[AVR-GCC-Tutorial]].&lt;br /&gt;
&lt;br /&gt;
Wer C schon kann, für den bietet es sich an, das Tutorial parallel in C und Assembler abzuarbeiten. Die meisten hier vorgestellten Assemblerprogramme lassen sich relativ einfach in C umsetzen. Dabei sollte großes Augenmerk darauf gelegt werden, dass die dem Programm zugrunde liegende Idee verstanden wurde. Nur so ist ein vernünftiges Umsetzen von Assembler nach C (oder umgekehrt) möglich. Völlig verkehrt wäre es, nach sich entsprechenden &#039;Befehlen&#039; zu suchen und zu glauben, damit hätte man dann ein Programm von Assembler nach C übersetzt.&lt;br /&gt;
&lt;br /&gt;
== Weitere Informationen ==&lt;br /&gt;
&lt;br /&gt;
Weiterführende Informationen u. A. zu den berüchtigten [[AVR Fuses|Fuse-Bits]], zu [[:Kategorie:AVR-Programmer und -Bootloader|Programmier-Hard- und Software]], dem  [[AVR Softwarepool]] und einer Checkliste mit Hinweisen zur Lösung üblicher Probleme finden sich im Hauptartikel [[AVR]]. &lt;br /&gt;
&lt;br /&gt;
[[AVR-Tutorial:_Equipment|vor zum ersten Kapitel]]&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR| ]]&lt;br /&gt;
[[Category:AVR-Tutorial| ]]&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial&amp;diff=53079</id>
		<title>AVR-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial&amp;diff=53079"/>
		<updated>2010-11-30T11:57:27Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Aufbau des Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ausser diesem Tutorial gibt es noch das [[AVR-GCC-Tutorial]] sowie die Artikel in der [[:Kategorie:avr-gcc Tutorial]].&lt;br /&gt;
&lt;br /&gt;
== Aufbau des Tutorials ==&lt;br /&gt;
* Einleitung: Worum geht es überhaupt?&lt;br /&gt;
* [[AVR-Tutorial: Equipment|Benötigte Ausrüstung: Welche Hard- und Software brauche ich, um AVR-Mikrocontroller zu programmieren?]]&lt;br /&gt;
* [[AVR-Tutorial: IO-Grundlagen|I/O-Grundlagen: Wie kann ich Taster und LEDs an einen AVR anschließen und benutzen?]]&lt;br /&gt;
* [[AVR-Tutorial: Logik|Logik: Verschiedene Grundoperationen und Verknüpfungen]]&lt;br /&gt;
* [[AVR-Tutorial: Arithmetik8|Arithmetik: Verschiedene Grundoperationen]]&lt;br /&gt;
* [[AVR-Tutorial: Stack|Der Stack: Was ist der Stack und wie funktionieren Unterprogrammaufrufe?]]&lt;br /&gt;
* [[AVR-Tutorial: LCD|LCD: Ansteuerung eines LC-Displays im 4bit-Modus]]&lt;br /&gt;
* [[AVR-Tutorial: Interrupts|Interrupts: Was sind Interrupts und wie kann ich sie verwenden?]]&lt;br /&gt;
* [[AVR-Tutorial: Vergleiche|Vergleiche: Wie werden Entscheidungen getroffen?]]&lt;br /&gt;
* [[AVR-Tutorial: Mehrfachverzweigung| Mehrfachverzweigung: Eine Variable auf mehrere Werte prüfen.]]&lt;br /&gt;
* [[AVR-Tutorial: UART|Der UART: Wie kann ich Daten zwischen einem Mikrocontroller und einem PC austauschen?]]&lt;br /&gt;
* [[AVR-Tutorial: Speicher|Flash, EEPROM, RAM: Die verschiedenen Speicherarten des AVR und ihre Anwendung.]]&lt;br /&gt;
* [[AVR-Tutorial: Timer|Die Timer: in regelmäßigen Zeitabständen Dinge tun.]]&lt;br /&gt;
* [[AVR-Tutorial: Uhr|Die Timer: Uhr und CTC Modus.]]&lt;br /&gt;
* [[AVR-Tutorial: ADC|Der ADC: Die Brücke von der analogen zur digitalen Welt.]]&lt;br /&gt;
* [[AVR-Tutorial: Tasten|Tasten: Einzelne Tastendrücke und Entprellen.]]&lt;br /&gt;
* [[AVR-Tutorial: PWM|PWM: Ein Timer dimmt eine LED.]]&lt;br /&gt;
* [[AVR-Tutorial: Schieberegister|Schieberegister: Ausgabe-/Eingabeport erweitern.]]&lt;br /&gt;
* [[AVR-Tutorial: SRAM|SRAM: Wenn die vorhandenen Register nicht mehr reichen.]]&lt;br /&gt;
* [[AVR-Tutorial: 7-Segment-Anzeige|7-Segment Anzeigen: Was ist Multiplexing?]]&lt;br /&gt;
* [[AVR-Tutorial: Watchdog|Der Watchdog und dessen Wirkungsweise.]]&lt;br /&gt;
* [[AVR-Tutorial: Sleep-Modi|Strom sparen mit den Sleep-Modi]]&lt;br /&gt;
&lt;br /&gt;
Falls ihr irgendwelche Fragen habt, stellt diese bitte im [http://www.mikrocontroller.net/forum/mikrocontroller-elektronik Forum]!&lt;br /&gt;
&lt;br /&gt;
== Was ist ein Mikrocontroller? ==&lt;br /&gt;
Ein Mikrocontroller ist ein Prozessor. Der Unterschied zu PC-Prozessoren besteht darin, dass bei einem Mikrocontroller Speicher, Digital- und Analog-Ein- und -Ausgänge etc. meist auf einem einzigen Chip integriert sind, so dass eine Mikrocontroller-Anwendung oft mit wenigen Bauteilen auskommt. &lt;br /&gt;
&lt;br /&gt;
Mikrocontroller werden als erstes an der Bit-Zahl des internen Datenbusses unterschieden: 4bit, 8bit, 16bit und 32bit. Diese Bit-Zahl kann man als die Länge der Daten interpretieren, die der Controller in einem Befehl verarbeiten kann. Die größte in 8 Bit (= 1 Byte) darstellbare Zahl ist die 255, somit kann ein 8-Bit-Mikrocontroller z.&amp;amp;nbsp;B. in einem Additionsbefehl immer nur Zahlen kleiner-gleich 255 verarbeiten. Zur Bearbeitung von größeren Zahlen werden dann jeweils mehrere Befehle hintereinander benötigt, was natürlich länger dauert. &lt;br /&gt;
Ein Mikrocontroller braucht zum Betrieb, wie jeder andere Prozessor auch, einen Takt. Die maximale Taktfrequenz mit der ein Controller betrieben werden kann, reicht von 1 MHz bei alten Controllern bis hin zu über 100 MHz bei teuren 32-Bittern. Diese Taktfrequenz sagt jedoch noch nichts über die tatsächliche Geschwindigkeit eines Prozessors aus. So wird z.&amp;amp;nbsp;B. bei den meisten 8051-Controllern die Frequenz intern durch 12 geteilt, ein mit 24 MHz getakteter 8051 arbeitet also eigentlich nur mit 2 MHz. Benötigt dieser dann für einen Befehl durchschnittlich 2 Taktzyklen, so bleiben &amp;quot;nur&amp;quot; noch 1 Mio. Befehle pro Sekunde übrig - ein AVR, der ungeteilt mit 8MHz arbeitet und für die meisten Befehle nur einen Zyklus braucht, schafft dagegen fast 8 Mio. Befehle pro Sekunde.&lt;br /&gt;
&lt;br /&gt;
== Wozu ist ein Mikrocontroller gut? ==&lt;br /&gt;
Hier ein paar Beispiele, für welche Aufgaben Mikrocontroller verwendet werden (können): &lt;br /&gt;
&lt;br /&gt;
* Ladegeräte &lt;br /&gt;
* Motorsteuerungen &lt;br /&gt;
* Roboter &lt;br /&gt;
* Messwerterfassung (z.&amp;amp;nbsp;B. Drehzahlmessung im Auto) &lt;br /&gt;
* Temperaturregler &lt;br /&gt;
* MP3-Player &lt;br /&gt;
* Schaltuhren&lt;br /&gt;
* Alarmanlagen&lt;br /&gt;
* LED-Matrizen (Blinkmuster etc.)&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Welchen Mikrocontroller soll ich verwenden? ==&lt;br /&gt;
Typische Anforderungen an einen Mikrocontroller für Hobbyanwender (einige davon konkurrieren miteinander): &lt;br /&gt;
&lt;br /&gt;
* Gute Beschaffbarkeit und geringer Preis &lt;br /&gt;
* Handliche Bauform: Ein Controller mit 20 Pins ist leichter zu handhaben als einer mit 128 &lt;br /&gt;
* Flash-ROM: Der Controller sollte mindestens 1000 mal neu programmiert werden können &lt;br /&gt;
* In-System-Programmierbarkeit (ISP): Man benötigt kein teures Programmiergerät und muss den Controller zur Programmierung nicht aus der Schaltung entfernen &lt;br /&gt;
* Kostenlose Software verfügbar: Assembler bekommt man praktisch immer kostenlos&lt;br /&gt;
&lt;br /&gt;
Weitere Entscheidungskriterien sind im Artikel [[Entscheidung Mikrocontroller]] zusammengefasst.&lt;br /&gt;
&lt;br /&gt;
Viele dieser Anforderungen werden von den [[AVR|8-bit-AVR-Controllern]] von Atmel erfüllt. Deshalb werde ich einen AVR, genauer gesagt den ATmega8, in diesem Tutorial einsetzen.&lt;br /&gt;
&lt;br /&gt;
Und damit kein Missverständnis aufkommt: So etwas wie den &amp;quot;besten&amp;quot; Controller gibt es nicht. Es hängt immer von der Aufgabenstellung ab, welcher Controller &#039;&#039;&#039;gut&#039;&#039;&#039; dafür geeignet ist. Natürlich haben sich einige Controller als Standardtypen in der Praxis durchgesetzt, mit denen man in vielen Fällen ein gutes Auslangen hat und die mit ihrer Leistungsfähigkeit einen weiten Bereich abdecken können. Der ATmega8 ist z.&amp;amp;nbsp;B. so einer. Aber daneben gibt es noch viele andere..&lt;br /&gt;
&lt;br /&gt;
== Assembler, Basic oder C? ==&lt;br /&gt;
Warum ist dieses Tutorial für Assembler geschrieben, wo es doch einen kostenlosen C-Compiler ([[WinAVR]], [[AVR-GCC]]) und einen billigen Basic-Compiler gibt? &lt;br /&gt;
&lt;br /&gt;
Assembler ist für den Einstieg &amp;quot;von der Pike auf&amp;quot; am besten geeignet. Nur wenn man Assembler anwendet, lernt man den Aufbau eines Mikrocontrollers richtig kennen und kann ihn dadurch besser nutzen; außerdem stößt man bei jedem Compiler irgendwann mal auf Probleme, die sich nur oder besser durch das Verwenden von Assemblercode lösen lassen. Und sei es nur, dass man das vom Compiler generierte Assemblerlisting studiert, um zu entscheiden, ob und wie man eine bestimmte Sequenz im C-Code umschreiben soll, um dem Compiler das Optimieren zu ermöglichen/erleichtern.&lt;br /&gt;
&lt;br /&gt;
Allerdings muss auch erwähnt werden, dass das Programmieren in Assembler besonders fehleranfällig ist und dass es damit besonders lange dauert, bis das Programm erste Ergebnisse liefert. Genau aus diesem Grund wurden &amp;quot;höhere&amp;quot; Programmiersprachen erfunden, weil man damit nicht immer wieder &amp;quot;das Rad neu erfinden&amp;quot; muss. Das gilt besonders, wenn vorbereitete Programmblöcke zur Verfügung stehen, die man miteinander kombinieren kann. Wer regelmäßig programmieren und auch längere Programme schreiben möchte, dem sei deshalb geraten, nach diesem Assembler-Tutorial C zu lernen, zum Beispiel mit dem [[AVR-GCC-Tutorial]].&lt;br /&gt;
&lt;br /&gt;
Wer C schon kann, für den bietet es sich an, das Tutorial parallel in C und Assembler abzuarbeiten. Die meisten hier vorgestellten Assemblerprogramme lassen sich relativ einfach in C umsetzen. Dabei sollte großes Augenmerk darauf gelegt werden, dass die dem Programm zugrunde liegende Idee verstanden wurde. Nur so ist ein vernünftiges Umsetzen von Assembler nach C (oder umgekehrt) möglich. Völlig verkehrt wäre es, nach sich entsprechenden &#039;Befehlen&#039; zu suchen und zu glauben, damit hätte man dann ein Programm von Assembler nach C übersetzt.&lt;br /&gt;
&lt;br /&gt;
== Weitere Informationen ==&lt;br /&gt;
&lt;br /&gt;
Weiterführende Informationen u. A. zu den berüchtigten [[AVR Fuses|Fuse-Bits]], zu [[:Kategorie:AVR-Programmer und -Bootloader|Programmier-Hard- und Software]], dem  [[AVR Softwarepool]] und einer Checkliste mit Hinweisen zur Lösung üblicher Probleme finden sich im Hauptartikel [[AVR]]. &lt;br /&gt;
&lt;br /&gt;
[[AVR-Tutorial:_Equipment|vor zum ersten Kapitel]]&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR| ]]&lt;br /&gt;
[[Category:AVR-Tutorial| ]]&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_16-Bit-Register&amp;diff=53077</id>
		<title>AVR 16-Bit-Register</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_16-Bit-Register&amp;diff=53077"/>
		<updated>2010-11-30T10:36:18Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Makros */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Allgemeines ===&lt;br /&gt;
&lt;br /&gt;
Speziell bei den &#039;&#039;&#039;16-Bit-Timern&#039;&#039;&#039; und auch beim &#039;&#039;&#039;ADC&#039;&#039;&#039; ist es bei allen Zugriffen auf Datenregister erforderlich, dass diese Daten synchronisiert sind. Wenn z.&amp;amp;nbsp;B. bei einem 16-Bit-Timer das High-Byte des Zählregisters gelesen wurde und vor dem Lesezugriff auf das Low-Byte ein Überlauf des Low-Bytes stattfindet, erhält man einen völlig unsinnigen Wert. Auch die Compare-Register müssen synchron geschrieben werden, da es ansonsten zu unerwünschten Compare-Ereignissen kommen kann. &lt;br /&gt;
&lt;br /&gt;
Beim ADC besteht das Problem darin, dass zwischen den Zugriffen auf die beiden Teilregister eine Wandlung beendet werden kann und der ADC ein neues Ergebnis in ADCL und ADCH schreiben will, wodurch High- und Low-Byte nicht zusammenpassen.&lt;br /&gt;
&lt;br /&gt;
Um diese Datenmüllproduktion zu verhindern, gibt es in beiden Fällen eine Synchronisation, die jeweils durch den Zugriff auf das Low-Byte ausgelöst wird:&lt;br /&gt;
* Bei den Timer-Registern (das gilt für alle TCNT-, OCR- und ICR-Register bei den 16-Bit-Timern) wird bei einem &#039;&#039;&#039;Lesezugriff&#039;&#039;&#039; auf das Low-Byte automatisch das High-Byte in ein temporäres Register, das ansonsten nach außen nicht sichtbar ist, geschoben. Greift man nun &#039;&#039;anschließend&#039;&#039; auf das High-Byte zu, dann wird eben dieses temporäre Register gelesen.&lt;br /&gt;
* Bei einem &#039;&#039;&#039;Schreibzugriff&#039;&#039;&#039; auf eines der genannten Register wird das High-Byte in besagtem temporären Register zwischengespeichert und erst beim Schreiben des Low-Bytes werden &#039;&#039;beide&#039;&#039; gleichzeitig in das eigentliche Register übernommen.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet für die Reihenfolge beim &#039;&#039;&#039;Lesezugriff: Erst Low-Byte, dann High-Byte&#039;&#039;&#039; und für den &#039;&#039;&#039;Schreibzugriff: Erst High-Byte, dann Low-Byte&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Des weiteren ist zu beachten, dass es für all diese 16-Bit-Register nur ein einziges temporäres Register gibt, so dass das Auftreten eines Interrupts, in dessen Handler ein solches Register manipuliert wird, bei einem durch ihn unterbrochenen Zugriff i.d.R. zu Datenmüll führt. &#039;&#039;&#039;16-Bit-Zugriffe sind generell nicht atomar!&#039;&#039;&#039; Wenn mit &#039;&#039;&#039;Interrupts&#039;&#039;&#039; gearbeitet wird, kann es erforderlich sein, vor einem solchen Zugriff auf ein 16-Bit-Register die Interrupt-Bearbeitung zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Beim &#039;&#039;&#039;ADC-Datenregister ADCH/ADCL&#039;&#039;&#039; ist die Synchronisierung anders gelöst. Hier wird beim Lesezugriff (ADCH/ADCL sind logischerweise Read-only) auf das Low-Byte ADCL beide Teilregister für Zugriffe seitens des ADC so lange gesperrt, bis das High-Byte ADCH ausgelesen wurde. Dadaurch kann der ADC nach einem Zugriff auf ADCL keinen neuen Wert in ADCH/ADCL ablegen, bis ADCH gelesen wurde. Ergebnisse von Wandlungen, die zwischen einem Zugriff auf ADCL und ADCH beendet werden, gehen verloren!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nach einem Zugriff auf ADCL muss grundsätzlich ADCH gelesen werden!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Beim ADC gibt es für den Fall, dass eine Auflösung von 8 Bit ausreicht, die Möglichkeit, das Ergebnis &amp;quot;linksbündig&amp;quot; in ADCH/ADCL auszurichten, so dass die relevanten 8 MSB in ADCH stehen. In diesem Fall muss bzw. sollte nur ADCH ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
=== Zugriffe in C ===&lt;br /&gt;
&lt;br /&gt;
In beiden Fällen (also sowohl bei den Timern als auch beim ADC) werden von &#039;&#039;&#039;C-Compilern&#039;&#039;&#039; 16-Bit-Pseudo-Register zur Verfügung gestellt (z.&amp;amp;nbsp;B. TCNT1H/TCNT1L &amp;amp;rarr; TCNT1, ADCH/ADCL &amp;amp;rarr; ADC bzw. ADCW), bei deren Verwendung der Compiler automatisch die richtige Zugriffsreihenfolge regelt. &#039;&#039;&#039;In C-Programmen sollten grundsätzlich diese 16-Bit-Register verwendet werden&#039;&#039;&#039;. Sollte trotzdem ein Zugriff auf ein Teilregister erforderlich sein, sind obige Angaben zu berücksichtigen.&lt;br /&gt;
&lt;br /&gt;
Es ist darauf zu achten, dass auch ein Zugriff auf die 16-Bit-Register vom Compiler in zwei 8-Bit-Zugriffe aufgeteilt wird und dementsprechend genauso nicht-atomar ist wie die Einzelzugriffe. Auch hier gilt, dass u.U. die Interrupt-Bearbeitung gesperrt werden muss, um Datenmüll zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
ADC und ADCW sind unterschiedliche Bezeichner für das selbe Registerpaar. Üblicherweise kann man in C-Programmen ADC verwenden, was analog zu den anderen 16-Bit-Registern benannt ist. ADCW (ADC Word) existiert nur deshalb, weil die Headerdateien auch für Assembler vorgesehen sind und es bereits einen Assembler-Befehl namens &#039;&#039;adc&#039;&#039; gibt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: AVR-Tutorial]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Makros ===&lt;br /&gt;
&lt;br /&gt;
Um den Zugriff auf diese 16Bit Register zu vereinfachen&lt;br /&gt;
hast ATMEL in der Application Note AVR072 [http://www.atmel.com/dyn/resources/prod_documents/doc1493.pdf] folgende Makros&lt;br /&gt;
zur freien Verwendung vorgeschlagen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AVR Assembler Macros&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.macro outw&lt;br /&gt;
  cli&lt;br /&gt;
  out @0, @1&lt;br /&gt;
  out @0-1, @2&lt;br /&gt;
  sei&lt;br /&gt;
.endmacro&lt;br /&gt;
&lt;br /&gt;
.macro inw&lt;br /&gt;
  cli&lt;br /&gt;
  in @1, @2-1&lt;br /&gt;
  in @0, @2&lt;br /&gt;
  sei&lt;br /&gt;
.endmacro&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Usage&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.include “8515def.inc”&lt;br /&gt;
&lt;br /&gt;
inw r17, r16, TCNT1H ; Reads the counter value (high, low, adr)&lt;br /&gt;
outw TCNT1H, r17, r16 ; Writes the counter value (adr, high, low)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IAR C MACROS&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;ina90.h&amp;gt;&lt;br /&gt;
#define outw( ADDRESS, VAL )\&lt;br /&gt;
  {\&lt;br /&gt;
  _CLI();&lt;br /&gt;
  ADDRESS = VAL;\&lt;br /&gt;
  _SEI();\&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
#define inw( ADDRESS, VAL )\&lt;br /&gt;
  {\&lt;br /&gt;
  _CLI();&lt;br /&gt;
  VAL = ADDRESS;\&lt;br /&gt;
  _SEI();\&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Usage&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;io8515.h&amp;gt;&lt;br /&gt;
inw( TCNT1, i ) ;/* Reads the counter value */&lt;br /&gt;
outw( TCNT1, i ) ;/* Writes the counter value */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_16-Bit-Register&amp;diff=53076</id>
		<title>AVR 16-Bit-Register</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_16-Bit-Register&amp;diff=53076"/>
		<updated>2010-11-30T10:35:59Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Makros */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Allgemeines ===&lt;br /&gt;
&lt;br /&gt;
Speziell bei den &#039;&#039;&#039;16-Bit-Timern&#039;&#039;&#039; und auch beim &#039;&#039;&#039;ADC&#039;&#039;&#039; ist es bei allen Zugriffen auf Datenregister erforderlich, dass diese Daten synchronisiert sind. Wenn z.&amp;amp;nbsp;B. bei einem 16-Bit-Timer das High-Byte des Zählregisters gelesen wurde und vor dem Lesezugriff auf das Low-Byte ein Überlauf des Low-Bytes stattfindet, erhält man einen völlig unsinnigen Wert. Auch die Compare-Register müssen synchron geschrieben werden, da es ansonsten zu unerwünschten Compare-Ereignissen kommen kann. &lt;br /&gt;
&lt;br /&gt;
Beim ADC besteht das Problem darin, dass zwischen den Zugriffen auf die beiden Teilregister eine Wandlung beendet werden kann und der ADC ein neues Ergebnis in ADCL und ADCH schreiben will, wodurch High- und Low-Byte nicht zusammenpassen.&lt;br /&gt;
&lt;br /&gt;
Um diese Datenmüllproduktion zu verhindern, gibt es in beiden Fällen eine Synchronisation, die jeweils durch den Zugriff auf das Low-Byte ausgelöst wird:&lt;br /&gt;
* Bei den Timer-Registern (das gilt für alle TCNT-, OCR- und ICR-Register bei den 16-Bit-Timern) wird bei einem &#039;&#039;&#039;Lesezugriff&#039;&#039;&#039; auf das Low-Byte automatisch das High-Byte in ein temporäres Register, das ansonsten nach außen nicht sichtbar ist, geschoben. Greift man nun &#039;&#039;anschließend&#039;&#039; auf das High-Byte zu, dann wird eben dieses temporäre Register gelesen.&lt;br /&gt;
* Bei einem &#039;&#039;&#039;Schreibzugriff&#039;&#039;&#039; auf eines der genannten Register wird das High-Byte in besagtem temporären Register zwischengespeichert und erst beim Schreiben des Low-Bytes werden &#039;&#039;beide&#039;&#039; gleichzeitig in das eigentliche Register übernommen.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet für die Reihenfolge beim &#039;&#039;&#039;Lesezugriff: Erst Low-Byte, dann High-Byte&#039;&#039;&#039; und für den &#039;&#039;&#039;Schreibzugriff: Erst High-Byte, dann Low-Byte&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Des weiteren ist zu beachten, dass es für all diese 16-Bit-Register nur ein einziges temporäres Register gibt, so dass das Auftreten eines Interrupts, in dessen Handler ein solches Register manipuliert wird, bei einem durch ihn unterbrochenen Zugriff i.d.R. zu Datenmüll führt. &#039;&#039;&#039;16-Bit-Zugriffe sind generell nicht atomar!&#039;&#039;&#039; Wenn mit &#039;&#039;&#039;Interrupts&#039;&#039;&#039; gearbeitet wird, kann es erforderlich sein, vor einem solchen Zugriff auf ein 16-Bit-Register die Interrupt-Bearbeitung zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Beim &#039;&#039;&#039;ADC-Datenregister ADCH/ADCL&#039;&#039;&#039; ist die Synchronisierung anders gelöst. Hier wird beim Lesezugriff (ADCH/ADCL sind logischerweise Read-only) auf das Low-Byte ADCL beide Teilregister für Zugriffe seitens des ADC so lange gesperrt, bis das High-Byte ADCH ausgelesen wurde. Dadaurch kann der ADC nach einem Zugriff auf ADCL keinen neuen Wert in ADCH/ADCL ablegen, bis ADCH gelesen wurde. Ergebnisse von Wandlungen, die zwischen einem Zugriff auf ADCL und ADCH beendet werden, gehen verloren!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nach einem Zugriff auf ADCL muss grundsätzlich ADCH gelesen werden!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Beim ADC gibt es für den Fall, dass eine Auflösung von 8 Bit ausreicht, die Möglichkeit, das Ergebnis &amp;quot;linksbündig&amp;quot; in ADCH/ADCL auszurichten, so dass die relevanten 8 MSB in ADCH stehen. In diesem Fall muss bzw. sollte nur ADCH ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
=== Zugriffe in C ===&lt;br /&gt;
&lt;br /&gt;
In beiden Fällen (also sowohl bei den Timern als auch beim ADC) werden von &#039;&#039;&#039;C-Compilern&#039;&#039;&#039; 16-Bit-Pseudo-Register zur Verfügung gestellt (z.&amp;amp;nbsp;B. TCNT1H/TCNT1L &amp;amp;rarr; TCNT1, ADCH/ADCL &amp;amp;rarr; ADC bzw. ADCW), bei deren Verwendung der Compiler automatisch die richtige Zugriffsreihenfolge regelt. &#039;&#039;&#039;In C-Programmen sollten grundsätzlich diese 16-Bit-Register verwendet werden&#039;&#039;&#039;. Sollte trotzdem ein Zugriff auf ein Teilregister erforderlich sein, sind obige Angaben zu berücksichtigen.&lt;br /&gt;
&lt;br /&gt;
Es ist darauf zu achten, dass auch ein Zugriff auf die 16-Bit-Register vom Compiler in zwei 8-Bit-Zugriffe aufgeteilt wird und dementsprechend genauso nicht-atomar ist wie die Einzelzugriffe. Auch hier gilt, dass u.U. die Interrupt-Bearbeitung gesperrt werden muss, um Datenmüll zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
ADC und ADCW sind unterschiedliche Bezeichner für das selbe Registerpaar. Üblicherweise kann man in C-Programmen ADC verwenden, was analog zu den anderen 16-Bit-Registern benannt ist. ADCW (ADC Word) existiert nur deshalb, weil die Headerdateien auch für Assembler vorgesehen sind und es bereits einen Assembler-Befehl namens &#039;&#039;adc&#039;&#039; gibt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: AVR-Tutorial]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Makros ===&lt;br /&gt;
&lt;br /&gt;
Um den Zugriff auf diese 16Bit Register zu vereinfachen&lt;br /&gt;
hast ATMEL in der Application Note AVR072 [http://www.atmel.com/dyn/resources/prod_documents/doc1493.pdf] folgende Makros&lt;br /&gt;
zur freien Verwendung vorgeschlagen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AVR Assembler Macros&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.macro outw&lt;br /&gt;
  cli&lt;br /&gt;
  out @0, @1&lt;br /&gt;
  out @0-1, @2&lt;br /&gt;
  sei&lt;br /&gt;
.endmacro&lt;br /&gt;
&lt;br /&gt;
.macro inw&lt;br /&gt;
  cli&lt;br /&gt;
  in @1, @2-1&lt;br /&gt;
  in @0, @2&lt;br /&gt;
  sei&lt;br /&gt;
.endmacro&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.include “8515def.inc”&lt;br /&gt;
&lt;br /&gt;
inw r17, r16, TCNT1H ; Reads the counter value (high, low, adr)&lt;br /&gt;
outw TCNT1H, r17, r16 ; Writes the counter value (adr, high, low)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IAR C MACROS&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;ina90.h&amp;gt;&lt;br /&gt;
#define outw( ADDRESS, VAL )\&lt;br /&gt;
  {\&lt;br /&gt;
  _CLI();&lt;br /&gt;
  ADDRESS = VAL;\&lt;br /&gt;
  _SEI();\&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
#define inw( ADDRESS, VAL )\&lt;br /&gt;
  {\&lt;br /&gt;
  _CLI();&lt;br /&gt;
  VAL = ADDRESS;\&lt;br /&gt;
  _SEI();\&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;io8515.h&amp;gt;&lt;br /&gt;
inw( TCNT1, i ) ;/* Reads the counter value */&lt;br /&gt;
outw( TCNT1, i ) ;/* Writes the counter value */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_16-Bit-Register&amp;diff=53075</id>
		<title>AVR 16-Bit-Register</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_16-Bit-Register&amp;diff=53075"/>
		<updated>2010-11-30T10:35:38Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Makros */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Allgemeines ===&lt;br /&gt;
&lt;br /&gt;
Speziell bei den &#039;&#039;&#039;16-Bit-Timern&#039;&#039;&#039; und auch beim &#039;&#039;&#039;ADC&#039;&#039;&#039; ist es bei allen Zugriffen auf Datenregister erforderlich, dass diese Daten synchronisiert sind. Wenn z.&amp;amp;nbsp;B. bei einem 16-Bit-Timer das High-Byte des Zählregisters gelesen wurde und vor dem Lesezugriff auf das Low-Byte ein Überlauf des Low-Bytes stattfindet, erhält man einen völlig unsinnigen Wert. Auch die Compare-Register müssen synchron geschrieben werden, da es ansonsten zu unerwünschten Compare-Ereignissen kommen kann. &lt;br /&gt;
&lt;br /&gt;
Beim ADC besteht das Problem darin, dass zwischen den Zugriffen auf die beiden Teilregister eine Wandlung beendet werden kann und der ADC ein neues Ergebnis in ADCL und ADCH schreiben will, wodurch High- und Low-Byte nicht zusammenpassen.&lt;br /&gt;
&lt;br /&gt;
Um diese Datenmüllproduktion zu verhindern, gibt es in beiden Fällen eine Synchronisation, die jeweils durch den Zugriff auf das Low-Byte ausgelöst wird:&lt;br /&gt;
* Bei den Timer-Registern (das gilt für alle TCNT-, OCR- und ICR-Register bei den 16-Bit-Timern) wird bei einem &#039;&#039;&#039;Lesezugriff&#039;&#039;&#039; auf das Low-Byte automatisch das High-Byte in ein temporäres Register, das ansonsten nach außen nicht sichtbar ist, geschoben. Greift man nun &#039;&#039;anschließend&#039;&#039; auf das High-Byte zu, dann wird eben dieses temporäre Register gelesen.&lt;br /&gt;
* Bei einem &#039;&#039;&#039;Schreibzugriff&#039;&#039;&#039; auf eines der genannten Register wird das High-Byte in besagtem temporären Register zwischengespeichert und erst beim Schreiben des Low-Bytes werden &#039;&#039;beide&#039;&#039; gleichzeitig in das eigentliche Register übernommen.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet für die Reihenfolge beim &#039;&#039;&#039;Lesezugriff: Erst Low-Byte, dann High-Byte&#039;&#039;&#039; und für den &#039;&#039;&#039;Schreibzugriff: Erst High-Byte, dann Low-Byte&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Des weiteren ist zu beachten, dass es für all diese 16-Bit-Register nur ein einziges temporäres Register gibt, so dass das Auftreten eines Interrupts, in dessen Handler ein solches Register manipuliert wird, bei einem durch ihn unterbrochenen Zugriff i.d.R. zu Datenmüll führt. &#039;&#039;&#039;16-Bit-Zugriffe sind generell nicht atomar!&#039;&#039;&#039; Wenn mit &#039;&#039;&#039;Interrupts&#039;&#039;&#039; gearbeitet wird, kann es erforderlich sein, vor einem solchen Zugriff auf ein 16-Bit-Register die Interrupt-Bearbeitung zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Beim &#039;&#039;&#039;ADC-Datenregister ADCH/ADCL&#039;&#039;&#039; ist die Synchronisierung anders gelöst. Hier wird beim Lesezugriff (ADCH/ADCL sind logischerweise Read-only) auf das Low-Byte ADCL beide Teilregister für Zugriffe seitens des ADC so lange gesperrt, bis das High-Byte ADCH ausgelesen wurde. Dadaurch kann der ADC nach einem Zugriff auf ADCL keinen neuen Wert in ADCH/ADCL ablegen, bis ADCH gelesen wurde. Ergebnisse von Wandlungen, die zwischen einem Zugriff auf ADCL und ADCH beendet werden, gehen verloren!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nach einem Zugriff auf ADCL muss grundsätzlich ADCH gelesen werden!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Beim ADC gibt es für den Fall, dass eine Auflösung von 8 Bit ausreicht, die Möglichkeit, das Ergebnis &amp;quot;linksbündig&amp;quot; in ADCH/ADCL auszurichten, so dass die relevanten 8 MSB in ADCH stehen. In diesem Fall muss bzw. sollte nur ADCH ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
=== Zugriffe in C ===&lt;br /&gt;
&lt;br /&gt;
In beiden Fällen (also sowohl bei den Timern als auch beim ADC) werden von &#039;&#039;&#039;C-Compilern&#039;&#039;&#039; 16-Bit-Pseudo-Register zur Verfügung gestellt (z.&amp;amp;nbsp;B. TCNT1H/TCNT1L &amp;amp;rarr; TCNT1, ADCH/ADCL &amp;amp;rarr; ADC bzw. ADCW), bei deren Verwendung der Compiler automatisch die richtige Zugriffsreihenfolge regelt. &#039;&#039;&#039;In C-Programmen sollten grundsätzlich diese 16-Bit-Register verwendet werden&#039;&#039;&#039;. Sollte trotzdem ein Zugriff auf ein Teilregister erforderlich sein, sind obige Angaben zu berücksichtigen.&lt;br /&gt;
&lt;br /&gt;
Es ist darauf zu achten, dass auch ein Zugriff auf die 16-Bit-Register vom Compiler in zwei 8-Bit-Zugriffe aufgeteilt wird und dementsprechend genauso nicht-atomar ist wie die Einzelzugriffe. Auch hier gilt, dass u.U. die Interrupt-Bearbeitung gesperrt werden muss, um Datenmüll zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
ADC und ADCW sind unterschiedliche Bezeichner für das selbe Registerpaar. Üblicherweise kann man in C-Programmen ADC verwenden, was analog zu den anderen 16-Bit-Registern benannt ist. ADCW (ADC Word) existiert nur deshalb, weil die Headerdateien auch für Assembler vorgesehen sind und es bereits einen Assembler-Befehl namens &#039;&#039;adc&#039;&#039; gibt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: AVR-Tutorial]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Makros ===&lt;br /&gt;
&lt;br /&gt;
Um den Zugriff auf diese 16Bit Register zu vereinfachen&lt;br /&gt;
hast ATMEL in der Application Note AVR072 [http://www.atmel.com/dyn/resources/prod_documents/doc1493.pdf] Makros&lt;br /&gt;
zur freien Verwendung vorgeschlagen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AVR Assembler Macros&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.macro outw&lt;br /&gt;
  cli&lt;br /&gt;
  out @0, @1&lt;br /&gt;
  out @0-1, @2&lt;br /&gt;
  sei&lt;br /&gt;
.endmacro&lt;br /&gt;
&lt;br /&gt;
.macro inw&lt;br /&gt;
  cli&lt;br /&gt;
  in @1, @2-1&lt;br /&gt;
  in @0, @2&lt;br /&gt;
  sei&lt;br /&gt;
.endmacro&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.include “8515def.inc”&lt;br /&gt;
&lt;br /&gt;
inw r17, r16, TCNT1H ; Reads the counter value (high, low, adr)&lt;br /&gt;
outw TCNT1H, r17, r16 ; Writes the counter value (adr, high, low)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IAR C MACROS&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;ina90.h&amp;gt;&lt;br /&gt;
#define outw( ADDRESS, VAL )\&lt;br /&gt;
  {\&lt;br /&gt;
  _CLI();&lt;br /&gt;
  ADDRESS = VAL;\&lt;br /&gt;
  _SEI();\&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
#define inw( ADDRESS, VAL )\&lt;br /&gt;
  {\&lt;br /&gt;
  _CLI();&lt;br /&gt;
  VAL = ADDRESS;\&lt;br /&gt;
  _SEI();\&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;io8515.h&amp;gt;&lt;br /&gt;
inw( TCNT1, i ) ;/* Reads the counter value */&lt;br /&gt;
outw( TCNT1, i ) ;/* Writes the counter value */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_16-Bit-Register&amp;diff=53074</id>
		<title>AVR 16-Bit-Register</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_16-Bit-Register&amp;diff=53074"/>
		<updated>2010-11-30T10:35:21Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: /* Makros */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Allgemeines ===&lt;br /&gt;
&lt;br /&gt;
Speziell bei den &#039;&#039;&#039;16-Bit-Timern&#039;&#039;&#039; und auch beim &#039;&#039;&#039;ADC&#039;&#039;&#039; ist es bei allen Zugriffen auf Datenregister erforderlich, dass diese Daten synchronisiert sind. Wenn z.&amp;amp;nbsp;B. bei einem 16-Bit-Timer das High-Byte des Zählregisters gelesen wurde und vor dem Lesezugriff auf das Low-Byte ein Überlauf des Low-Bytes stattfindet, erhält man einen völlig unsinnigen Wert. Auch die Compare-Register müssen synchron geschrieben werden, da es ansonsten zu unerwünschten Compare-Ereignissen kommen kann. &lt;br /&gt;
&lt;br /&gt;
Beim ADC besteht das Problem darin, dass zwischen den Zugriffen auf die beiden Teilregister eine Wandlung beendet werden kann und der ADC ein neues Ergebnis in ADCL und ADCH schreiben will, wodurch High- und Low-Byte nicht zusammenpassen.&lt;br /&gt;
&lt;br /&gt;
Um diese Datenmüllproduktion zu verhindern, gibt es in beiden Fällen eine Synchronisation, die jeweils durch den Zugriff auf das Low-Byte ausgelöst wird:&lt;br /&gt;
* Bei den Timer-Registern (das gilt für alle TCNT-, OCR- und ICR-Register bei den 16-Bit-Timern) wird bei einem &#039;&#039;&#039;Lesezugriff&#039;&#039;&#039; auf das Low-Byte automatisch das High-Byte in ein temporäres Register, das ansonsten nach außen nicht sichtbar ist, geschoben. Greift man nun &#039;&#039;anschließend&#039;&#039; auf das High-Byte zu, dann wird eben dieses temporäre Register gelesen.&lt;br /&gt;
* Bei einem &#039;&#039;&#039;Schreibzugriff&#039;&#039;&#039; auf eines der genannten Register wird das High-Byte in besagtem temporären Register zwischengespeichert und erst beim Schreiben des Low-Bytes werden &#039;&#039;beide&#039;&#039; gleichzeitig in das eigentliche Register übernommen.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet für die Reihenfolge beim &#039;&#039;&#039;Lesezugriff: Erst Low-Byte, dann High-Byte&#039;&#039;&#039; und für den &#039;&#039;&#039;Schreibzugriff: Erst High-Byte, dann Low-Byte&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Des weiteren ist zu beachten, dass es für all diese 16-Bit-Register nur ein einziges temporäres Register gibt, so dass das Auftreten eines Interrupts, in dessen Handler ein solches Register manipuliert wird, bei einem durch ihn unterbrochenen Zugriff i.d.R. zu Datenmüll führt. &#039;&#039;&#039;16-Bit-Zugriffe sind generell nicht atomar!&#039;&#039;&#039; Wenn mit &#039;&#039;&#039;Interrupts&#039;&#039;&#039; gearbeitet wird, kann es erforderlich sein, vor einem solchen Zugriff auf ein 16-Bit-Register die Interrupt-Bearbeitung zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Beim &#039;&#039;&#039;ADC-Datenregister ADCH/ADCL&#039;&#039;&#039; ist die Synchronisierung anders gelöst. Hier wird beim Lesezugriff (ADCH/ADCL sind logischerweise Read-only) auf das Low-Byte ADCL beide Teilregister für Zugriffe seitens des ADC so lange gesperrt, bis das High-Byte ADCH ausgelesen wurde. Dadaurch kann der ADC nach einem Zugriff auf ADCL keinen neuen Wert in ADCH/ADCL ablegen, bis ADCH gelesen wurde. Ergebnisse von Wandlungen, die zwischen einem Zugriff auf ADCL und ADCH beendet werden, gehen verloren!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nach einem Zugriff auf ADCL muss grundsätzlich ADCH gelesen werden!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Beim ADC gibt es für den Fall, dass eine Auflösung von 8 Bit ausreicht, die Möglichkeit, das Ergebnis &amp;quot;linksbündig&amp;quot; in ADCH/ADCL auszurichten, so dass die relevanten 8 MSB in ADCH stehen. In diesem Fall muss bzw. sollte nur ADCH ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
=== Zugriffe in C ===&lt;br /&gt;
&lt;br /&gt;
In beiden Fällen (also sowohl bei den Timern als auch beim ADC) werden von &#039;&#039;&#039;C-Compilern&#039;&#039;&#039; 16-Bit-Pseudo-Register zur Verfügung gestellt (z.&amp;amp;nbsp;B. TCNT1H/TCNT1L &amp;amp;rarr; TCNT1, ADCH/ADCL &amp;amp;rarr; ADC bzw. ADCW), bei deren Verwendung der Compiler automatisch die richtige Zugriffsreihenfolge regelt. &#039;&#039;&#039;In C-Programmen sollten grundsätzlich diese 16-Bit-Register verwendet werden&#039;&#039;&#039;. Sollte trotzdem ein Zugriff auf ein Teilregister erforderlich sein, sind obige Angaben zu berücksichtigen.&lt;br /&gt;
&lt;br /&gt;
Es ist darauf zu achten, dass auch ein Zugriff auf die 16-Bit-Register vom Compiler in zwei 8-Bit-Zugriffe aufgeteilt wird und dementsprechend genauso nicht-atomar ist wie die Einzelzugriffe. Auch hier gilt, dass u.U. die Interrupt-Bearbeitung gesperrt werden muss, um Datenmüll zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
ADC und ADCW sind unterschiedliche Bezeichner für das selbe Registerpaar. Üblicherweise kann man in C-Programmen ADC verwenden, was analog zu den anderen 16-Bit-Registern benannt ist. ADCW (ADC Word) existiert nur deshalb, weil die Headerdateien auch für Assembler vorgesehen sind und es bereits einen Assembler-Befehl namens &#039;&#039;adc&#039;&#039; gibt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: AVR-Tutorial]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Makros ===&lt;br /&gt;
&lt;br /&gt;
Um eine den Zugriff auf diese 16Bit Register zu vereinfachen&lt;br /&gt;
hast ATMEL in der Application Note AVR072 [http://www.atmel.com/dyn/resources/prod_documents/doc1493.pdf] Makros&lt;br /&gt;
zur freien Verwendung vorgeschlagen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AVR Assembler Macros&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.macro outw&lt;br /&gt;
  cli&lt;br /&gt;
  out @0, @1&lt;br /&gt;
  out @0-1, @2&lt;br /&gt;
  sei&lt;br /&gt;
.endmacro&lt;br /&gt;
&lt;br /&gt;
.macro inw&lt;br /&gt;
  cli&lt;br /&gt;
  in @1, @2-1&lt;br /&gt;
  in @0, @2&lt;br /&gt;
  sei&lt;br /&gt;
.endmacro&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.include “8515def.inc”&lt;br /&gt;
&lt;br /&gt;
inw r17, r16, TCNT1H ; Reads the counter value (high, low, adr)&lt;br /&gt;
outw TCNT1H, r17, r16 ; Writes the counter value (adr, high, low)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IAR C MACROS&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;ina90.h&amp;gt;&lt;br /&gt;
#define outw( ADDRESS, VAL )\&lt;br /&gt;
  {\&lt;br /&gt;
  _CLI();&lt;br /&gt;
  ADDRESS = VAL;\&lt;br /&gt;
  _SEI();\&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
#define inw( ADDRESS, VAL )\&lt;br /&gt;
  {\&lt;br /&gt;
  _CLI();&lt;br /&gt;
  VAL = ADDRESS;\&lt;br /&gt;
  _SEI();\&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;io8515.h&amp;gt;&lt;br /&gt;
inw( TCNT1, i ) ;/* Reads the counter value */&lt;br /&gt;
outw( TCNT1, i ) ;/* Writes the counter value */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_16-Bit-Register&amp;diff=53073</id>
		<title>AVR 16-Bit-Register</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_16-Bit-Register&amp;diff=53073"/>
		<updated>2010-11-30T10:34:46Z</updated>

		<summary type="html">&lt;p&gt;Flood1k4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Allgemeines ===&lt;br /&gt;
&lt;br /&gt;
Speziell bei den &#039;&#039;&#039;16-Bit-Timern&#039;&#039;&#039; und auch beim &#039;&#039;&#039;ADC&#039;&#039;&#039; ist es bei allen Zugriffen auf Datenregister erforderlich, dass diese Daten synchronisiert sind. Wenn z.&amp;amp;nbsp;B. bei einem 16-Bit-Timer das High-Byte des Zählregisters gelesen wurde und vor dem Lesezugriff auf das Low-Byte ein Überlauf des Low-Bytes stattfindet, erhält man einen völlig unsinnigen Wert. Auch die Compare-Register müssen synchron geschrieben werden, da es ansonsten zu unerwünschten Compare-Ereignissen kommen kann. &lt;br /&gt;
&lt;br /&gt;
Beim ADC besteht das Problem darin, dass zwischen den Zugriffen auf die beiden Teilregister eine Wandlung beendet werden kann und der ADC ein neues Ergebnis in ADCL und ADCH schreiben will, wodurch High- und Low-Byte nicht zusammenpassen.&lt;br /&gt;
&lt;br /&gt;
Um diese Datenmüllproduktion zu verhindern, gibt es in beiden Fällen eine Synchronisation, die jeweils durch den Zugriff auf das Low-Byte ausgelöst wird:&lt;br /&gt;
* Bei den Timer-Registern (das gilt für alle TCNT-, OCR- und ICR-Register bei den 16-Bit-Timern) wird bei einem &#039;&#039;&#039;Lesezugriff&#039;&#039;&#039; auf das Low-Byte automatisch das High-Byte in ein temporäres Register, das ansonsten nach außen nicht sichtbar ist, geschoben. Greift man nun &#039;&#039;anschließend&#039;&#039; auf das High-Byte zu, dann wird eben dieses temporäre Register gelesen.&lt;br /&gt;
* Bei einem &#039;&#039;&#039;Schreibzugriff&#039;&#039;&#039; auf eines der genannten Register wird das High-Byte in besagtem temporären Register zwischengespeichert und erst beim Schreiben des Low-Bytes werden &#039;&#039;beide&#039;&#039; gleichzeitig in das eigentliche Register übernommen.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet für die Reihenfolge beim &#039;&#039;&#039;Lesezugriff: Erst Low-Byte, dann High-Byte&#039;&#039;&#039; und für den &#039;&#039;&#039;Schreibzugriff: Erst High-Byte, dann Low-Byte&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Des weiteren ist zu beachten, dass es für all diese 16-Bit-Register nur ein einziges temporäres Register gibt, so dass das Auftreten eines Interrupts, in dessen Handler ein solches Register manipuliert wird, bei einem durch ihn unterbrochenen Zugriff i.d.R. zu Datenmüll führt. &#039;&#039;&#039;16-Bit-Zugriffe sind generell nicht atomar!&#039;&#039;&#039; Wenn mit &#039;&#039;&#039;Interrupts&#039;&#039;&#039; gearbeitet wird, kann es erforderlich sein, vor einem solchen Zugriff auf ein 16-Bit-Register die Interrupt-Bearbeitung zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Beim &#039;&#039;&#039;ADC-Datenregister ADCH/ADCL&#039;&#039;&#039; ist die Synchronisierung anders gelöst. Hier wird beim Lesezugriff (ADCH/ADCL sind logischerweise Read-only) auf das Low-Byte ADCL beide Teilregister für Zugriffe seitens des ADC so lange gesperrt, bis das High-Byte ADCH ausgelesen wurde. Dadaurch kann der ADC nach einem Zugriff auf ADCL keinen neuen Wert in ADCH/ADCL ablegen, bis ADCH gelesen wurde. Ergebnisse von Wandlungen, die zwischen einem Zugriff auf ADCL und ADCH beendet werden, gehen verloren!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nach einem Zugriff auf ADCL muss grundsätzlich ADCH gelesen werden!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Beim ADC gibt es für den Fall, dass eine Auflösung von 8 Bit ausreicht, die Möglichkeit, das Ergebnis &amp;quot;linksbündig&amp;quot; in ADCH/ADCL auszurichten, so dass die relevanten 8 MSB in ADCH stehen. In diesem Fall muss bzw. sollte nur ADCH ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
=== Zugriffe in C ===&lt;br /&gt;
&lt;br /&gt;
In beiden Fällen (also sowohl bei den Timern als auch beim ADC) werden von &#039;&#039;&#039;C-Compilern&#039;&#039;&#039; 16-Bit-Pseudo-Register zur Verfügung gestellt (z.&amp;amp;nbsp;B. TCNT1H/TCNT1L &amp;amp;rarr; TCNT1, ADCH/ADCL &amp;amp;rarr; ADC bzw. ADCW), bei deren Verwendung der Compiler automatisch die richtige Zugriffsreihenfolge regelt. &#039;&#039;&#039;In C-Programmen sollten grundsätzlich diese 16-Bit-Register verwendet werden&#039;&#039;&#039;. Sollte trotzdem ein Zugriff auf ein Teilregister erforderlich sein, sind obige Angaben zu berücksichtigen.&lt;br /&gt;
&lt;br /&gt;
Es ist darauf zu achten, dass auch ein Zugriff auf die 16-Bit-Register vom Compiler in zwei 8-Bit-Zugriffe aufgeteilt wird und dementsprechend genauso nicht-atomar ist wie die Einzelzugriffe. Auch hier gilt, dass u.U. die Interrupt-Bearbeitung gesperrt werden muss, um Datenmüll zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
ADC und ADCW sind unterschiedliche Bezeichner für das selbe Registerpaar. Üblicherweise kann man in C-Programmen ADC verwenden, was analog zu den anderen 16-Bit-Registern benannt ist. ADCW (ADC Word) existiert nur deshalb, weil die Headerdateien auch für Assembler vorgesehen sind und es bereits einen Assembler-Befehl namens &#039;&#039;adc&#039;&#039; gibt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: AVR-Tutorial]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Makros ===&lt;br /&gt;
&lt;br /&gt;
Um eine den Zugriff auf diese 16Bit Register zu vereinfachen&lt;br /&gt;
hast ATMEL in der Application Note AVR072 [http://www.atmel.com/dyn/resources/prod_documents/doc1493.pdf] Makros&lt;br /&gt;
zur freien Verwendung vorgeschlagen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AVR Assembler Macros&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
.macro outw&lt;br /&gt;
  cli&lt;br /&gt;
  out @0, @1&lt;br /&gt;
  out @0-1, @2&lt;br /&gt;
  sei&lt;br /&gt;
.endmacro&lt;br /&gt;
&lt;br /&gt;
.macro inw&lt;br /&gt;
  cli&lt;br /&gt;
  in @1, @2-1&lt;br /&gt;
  in @0, @2&lt;br /&gt;
  sei&lt;br /&gt;
.endmacro&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
.include “8515def.inc”&lt;br /&gt;
&lt;br /&gt;
inw r17, r16, TCNT1H ; Reads the counter value (high, low, adr)&lt;br /&gt;
outw TCNT1H, r17, r16 ; Writes the counter value (adr, high, low)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IAR C MACROS&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#include &amp;lt;ina90.h&amp;gt;&lt;br /&gt;
#define outw( ADDRESS, VAL )\&lt;br /&gt;
  {\&lt;br /&gt;
  _CLI();&lt;br /&gt;
  ADDRESS = VAL;\&lt;br /&gt;
  _SEI();\&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
#define inw( ADDRESS, VAL )\&lt;br /&gt;
  {\&lt;br /&gt;
  _CLI();&lt;br /&gt;
  VAL = ADDRESS;\&lt;br /&gt;
  _SEI();\&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#include &amp;lt;io8515.h&amp;gt;&lt;br /&gt;
inw( TCNT1, i ) ;/* Reads the counter value */&lt;br /&gt;
outw( TCNT1, i ) ;/* Writes the counter value */&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flood1k4</name></author>
	</entry>
</feed>