<?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=Peter+geher</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=Peter+geher"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Peter_geher"/>
	<updated>2026-04-10T12:54:11Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Timer&amp;diff=99070</id>
		<title>AVR-Tutorial: Timer</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Timer&amp;diff=99070"/>
		<updated>2018-04-25T15:09:11Z</updated>

		<summary type="html">&lt;p&gt;Peter geher: /* Weblinks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Timer sind eines der Hauptarbeitspferde in unserem Mikrocontroller. Mit ihrer Hilfe ist es möglich, in regelmäßigen Zeitabständen Aktionen zu veranlassen. Aber Timer können noch mehr!&lt;br /&gt;
* Timer können mit einem externen Pin hochgezählt werden&lt;br /&gt;
* Es gibt Möglichkeiten, bei bestimmten Zählerständen einen Interrupt auslösen zu lassen&lt;br /&gt;
* Timer können aber auch völlig selbstständig Signale an einem Ausgabepin erzeugen&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Aber der Reihe nach und kurz zur Erinnerung: Die Beispiele passen zu einem ATmega8 und ggf. einer Reihe anderer AVR, können bei einigen Typen aber abweichen. &lt;br /&gt;
&lt;br /&gt;
==Was ist ein Timer?==&lt;br /&gt;
&lt;br /&gt;
Ein Timer ist im Grunde nichts anderes als ein bestimmtes Register im Mikrocontroller, das hardwaregesteuert fortlaufend um 1 erhöht (oder verringert) wird (statt &amp;lt;i&amp;gt;um 1 erhöhen&amp;lt;/i&amp;gt; sagt man auch &#039;&#039;&#039;inkrementieren&#039;&#039;&#039;, und das Gegenstück, &#039;&#039;&#039;dekrementieren&#039;&#039;&#039;, bedeutet &amp;lt;i&amp;gt;um 1 verringern&amp;lt;/i&amp;gt;). Anstatt also Befehle im Programm vorzusehen, die regelmäßig ausgeführt werden und ein Register inkrementieren, erledigt dies der Mikrocontroller ganz von alleine. Dazu ist es möglich, den Timer mit dem Systemtakt zu verbinden und so die Genauigkeit des Quarzes auszunutzen, um ein Register regelmäßig und vor allen Dingen unabhängig vom restlichen Programmfluss (!) hochzählen zu lassen.&lt;br /&gt;
&lt;br /&gt;
Davon alleine hätte man aber noch keinen großen Gewinn. Nützlich wird das Ganze erst dann, wenn man bei bestimmten Zählerständen eine Aktion ausführen lassen kann. Einer der &#039;bestimmten Zählerstände&#039; ist zum Beispiel der &#039;&#039;&#039;Overflow&#039;&#039;&#039;. Das Zählregister eines Timers kann natürlich nicht beliebig lange inkrementiert werden – z. B. ist der höchste Zählerstand, den ein 8-Bit-Timer erreichen kann, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt; – 1 = 255. Beim nächsten Inkrementierschritt tritt ein Überlauf (engl. Overflow) auf, der den Timerstand wieder zu 0 werden lässt. Und hier liegt der springende Punkt. Wir können uns nämlich an diesen Overflow &amp;quot;anhängen&amp;quot; und den Controller so konfigurieren, dass beim Auftreten des Timer-Overflows ein Interrupt ausgelöst wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die kann auch alles nochmal im Datenblatt von Atmel zu einigen ATMega Datenblättern nachgelesen werden: http://www.atmel.com/Images/doc8161.pdf&lt;br /&gt;
&lt;br /&gt;
==Der Vorteiler (Prescaler)==&lt;br /&gt;
&lt;br /&gt;
Wenn also der Quarzoszillator mit 4 MHz schwingt, dann würde auch der Timer 4 Millionen mal in der Sekunde erhöht werden. Da der Timer jedes Mal von 0 bis 255 zählt, bevor ein Overflow auftritt, heißt das auch, dass in einer Sekunde 4000000 / 256 = 15625 Overflows vorkommen. Ganz schön schnell! Nur: Oft ist das nicht sinnvoll. Um diese Raten zu verzögern, gibt es den Vorteiler, oder auf Englisch, Prescaler. Er kann z.B. auf die Werte 1, 8, 64, 256 oder 1024 eingestellt werden, je nach Timer (Bitte Datenblatt konsultieren!). Seine Aufgabe ist es, den Systemtakt um den angegebenen Faktor zu teilen. Steht der Vorteiler also auf 1024, so wird nur bei jedem 1024-ten Impuls vom Systemtakt das Timerregister um 1 erhöht. Entsprechend weniger häufig kommen dann natürlich die Overflows. Der Systemtakt sei wieder 4000000. Dann wird der Timer in 1 Sekunde 4000000 / 1024 = 3906,25 mal erhöht. Da der Timer wieder jedesmal bis 255 zählen muss bis ein Overflow auftritt, bedeutet dies, dass in 1 Sekunde 3906,25 / 256 = 15,25 Overflows auftreten.&lt;br /&gt;
&lt;br /&gt;
Systemtakt: 4Mhz&lt;br /&gt;
&lt;br /&gt;
  Vorteiler    Overflows/Sekunde      Zeit zwischen&lt;br /&gt;
                                      2 Overflows [s]&lt;br /&gt;
&lt;br /&gt;
      1            15625                0.000064  =  64 µs&lt;br /&gt;
      8             1953.125            0.000512  = 512 µs&lt;br /&gt;
     64              244.1406           0.004096  ≈   4,1 ms&lt;br /&gt;
    256               61.0351           0.016384  ≈  16,4 ms&lt;br /&gt;
   1024               15.2587           0.065536  ≈  65,5 ms&lt;br /&gt;
&lt;br /&gt;
Die Zeit (in Sekunden) zwischen 2 Overflows lässt sich sehr leicht berechnen:&lt;br /&gt;
&amp;lt;math&amp;gt;t=\frac{2^\text{Bit des Timers} \cdot \text{Vorteiler}}{\text{Systemtakt in Hz}}&amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
==Erste Tests==&lt;br /&gt;
&lt;br /&gt;
Ein Programm, das einen Timer Overflow in Aktion zeigt, könnte z.&amp;amp;nbsp;B. so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
.include &amp;quot;m8def.inc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.def temp = r16&lt;br /&gt;
.def leds = r17&lt;br /&gt;
&lt;br /&gt;
.org 0x0000&lt;br /&gt;
        rjmp    main                  ; Reset Handler&lt;br /&gt;
.org OVF0addr&lt;br /&gt;
        rjmp    timer0_overflow       ; Timer Overflow Handler&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
        ; Stackpointer initialisieren&lt;br /&gt;
        ldi     temp, HIGH(RAMEND)&lt;br /&gt;
        out     SPH, temp&lt;br /&gt;
        ldi     temp, LOW(RAMEND)     &lt;br /&gt;
        out     SPL, temp&lt;br /&gt;
	&lt;br /&gt;
        ldi     temp, 0xFF            ; Port B auf Ausgang&lt;br /&gt;
        out     DDRB, temp&lt;br /&gt;
&lt;br /&gt;
        ldi     leds, 0xFF&lt;br /&gt;
&lt;br /&gt;
        ldi     temp, (1&amp;lt;&amp;lt;CS00)       ; CS00 setzen: Teiler 1&lt;br /&gt;
        out     TCCR0, temp&lt;br /&gt;
&lt;br /&gt;
        ldi     temp, (1&amp;lt;&amp;lt;TOIE0)      ; TOIE0: Interrupt bei Timer Overflow&lt;br /&gt;
        out     TIMSK, temp&lt;br /&gt;
&lt;br /&gt;
        sei&lt;br /&gt;
&lt;br /&gt;
loop:   rjmp    loop&lt;br /&gt;
&lt;br /&gt;
timer0_overflow:                      ; Timer 0 Overflow Handler&lt;br /&gt;
        out     PORTB, leds&lt;br /&gt;
        com     leds&lt;br /&gt;
        reti&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Programm beginnt mit der [[AVR-Tutorial:_Interrupts|Interrupt-Vektoren-Tabelle]]. Dort ist an der Adresse &amp;lt;i&amp;gt;OVF0Addr&amp;lt;/i&amp;gt; ein Sprung zur Marke &amp;lt;i&amp;gt;timer0_overflow&amp;lt;/i&amp;gt; eingetragen. Wenn also ein Overflow Interrupt vom Timer 0 auftritt, so wird dieser Interrupt durch den &#039;&#039;&#039;rjmp&#039;&#039;&#039; weitergeleitet an die Stelle &amp;lt;i&amp;gt;timer0_overflow&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das Hauptprogramm beginnt ganz normal mit der Belegung des Stackpointers. Danach wird der Port B auf Ausgang geschaltet, wir wollen hier wieder die LED anschliessen.&lt;br /&gt;
&lt;br /&gt;
Durch Beschreiben von TCCR0 mit dem Bitmuster 0b00000001, hier ausgedrückt durch (1&amp;lt;&amp;lt;CS00), wird der Vorteiler auf 1 gesetzt. Für die ersten Versuche empfiehlt es sich, das Programm mit dem AVR-Studio zunächst zu simulieren. Würden wir einen größeren Vorteiler benutzen, so müsste man ziemlich oft mittels F11 einen simulierten Schritt ausführen, um eine Änderung im Timerregister zu erreichen.&lt;br /&gt;
&lt;br /&gt;
Die nächsten Anweisungen setzen im TIMSK Register das TOIE0 Bit. Sinn der Sache ist es, dem Timer zu erlauben, bei Erreichen eines Overflow einen Interrupt auszulösen.&lt;br /&gt;
&lt;br /&gt;
Zum Schluss noch die Interrupts generell mittels &#039;&#039;&#039;sei&#039;&#039;&#039; freigeben. Dieser Schritt ist obligatorisch. Im Mikrocontroller können viele Quellen einen Interrupt auslösen. Daraus folgt: Für jede mögliche Quelle muss festgelegt werden, ob sie einen Interrupt erzeugen darf oder nicht. Die Oberhoheit hat aber das globale Interrupt Flag. Mit ihm können alle Interrupts, egal von welcher Quelle sie kommen, unterdrückt werden.&lt;br /&gt;
&lt;br /&gt;
Damit ist die Initialisierung beendet und das Hauptprogramm kann sich schlafen legen. Die &#039;&#039;&#039;loop: rjmp loop&#039;&#039;&#039; Schleife macht genau dieses.&lt;br /&gt;
&lt;br /&gt;
Tritt nun ein Overflow am Timer auf, so wird über den Umweg über die Interrupt Vektor Tabelle der Programmteil &amp;lt;i&amp;gt;timer0_overflow&amp;lt;/i&amp;gt; angesprungen. Dieser gibt einfach nur den Inhalt des Registers leds am Port B aus. Danach wird das leds Register mit einer &#039;&#039;&#039;com&#039;&#039;&#039; Operation negiert, so dass aus allen 0 Bits eine 1 wird und umgekehrt. Die Overflow Behandlung ist damit beendet und mittels &#039;&#039;&#039;reti&#039;&#039;&#039; wird der Interrupt Handler wieder verlassen.&lt;br /&gt;
&lt;br /&gt;
==Simulation im AVR-Studio==&lt;br /&gt;
&lt;br /&gt;
Es lohnt sich, den ganzen Vorgang im AVR-Studio simulieren zu lassen. Dazu am besten in der linken I/O View Ansicht die Einträge für PORTB und TIMER_COUNTER_0 öffnen. Wird mittels F11 durch das Programm gegangen, so sieht man, dass ab dem Moment, ab dem der Vorteiler auf 1 gesetzt wird, der Timer 0 im TCNT0 Register zu zählen anfängt. Mit jedem Druck auf F11 erhöht sich der Zählerstand. Irgendwann ist dann die Endlosschleife loop erreicht. Drücken Sie weiterhin F11 und beobachten sie, wie TCNT0 immer höher zählt, bis der Overflow erreicht wird. In dem Moment, in dem der Overflow erreicht wird, wird der Interrupt ausgelöst (hierfür muss für das Debuggen im AVR-Studio &amp;quot;Mask interrupts while stepping&amp;quot; deaktiviert sein, zu finden in Tools -&amp;gt; Options). Mit dem nächsten F11 landen sie in der Interrupt Vektor Tabelle und von dort geht es weiter zu timer_0_overflow. Weitere Tastendrücke von F11 erledigen dann die Ausgabe auf den Port B, das Invertieren des Registers r17 und der Interrupt ist damit behandelt. Nach dem &#039;&#039;&#039;reti&#039;&#039;&#039; macht der Microcontroller genau an der Stelle weiter, an der er vom Interrupt unterbrochen wurde. Und der Timer 0 hat in der Zwischenzeit weitergezählt! Nach exakt weiteren 256 Schritten, vom Auftreten des ersten Overflows an gerechnet, wird der nächste Overflow ausgelöst.&lt;br /&gt;
&lt;br /&gt;
==Wie schnell schaltet der Port?==&lt;br /&gt;
&lt;br /&gt;
Eine berechtigte Frage. Dazu müssen wir etwas rechnen. Keine Angst, es ist nicht schwer, und wer das Prinzip bisher verstanden hat, der sollte keine Schwierigkeiten haben, die Berechnung nachzuvollziehen.&lt;br /&gt;
&lt;br /&gt;
Der Quarzoszillator schwingt mit 4 MHz. Das heißt, in 1 Sekunde werden 4000000 Taktzyklen generiert. Durch die Wahl des Vorteilers von 1 bedeutet das auch, dass der Timer 4000000 mal in der Sekunde erhöht wird. Von einem Overflow zum nächsten muss der Timer 256 Zählvorgänge ausführen. Also werden in 1 Sekunde 4000000 / 256 = 15625 Overflows generiert. Bei jedem Overflow schalten wir die LEDs jeweils in den anderen Zustand. D.h die LEDs blinken mit einer Frequenz von 7812.5 Hz. Das ist zuviel als dass wir es noch sehen könnten.&lt;br /&gt;
&lt;br /&gt;
Was können wir also tun, um diese Blinkfrequenz zu verringern? Im Moment ist unsere einzige Einflussgröße der Vorteiler. Wie sieht die Rechnung aus, wenn wir einen Vorteiler von 1024 wählen?&lt;br /&gt;
&lt;br /&gt;
Wiederum: Der Systemtakt sei 4 MHz. Durch den Vorteiler von 1024 werden daraus 4000000 / 1024 = 3906.25 Pulse pro Sekunde für den Timer. Der zählt wiederum 256 Zustände von einem Overflow zum nächsten. 3906.25 / 256 = 15.2587. Und wiederum: Im Overflow werden die LEDs ja abwechselnd ein und ausgeschaltet, also dividieren wir noch durch 2: 15.2587 / 2 = 7.629. Also knapp 7 Hz. Diese Frequenz müsste man schon mit freiem Auge sehen. Die LEDs werden ziemlich schnell vor sich hin blinken.&lt;br /&gt;
&lt;br /&gt;
Reicht diese Verzögerung noch immer nicht, dann haben wir 2 Möglichkeiten:&lt;br /&gt;
* Entweder wir benutzen einen anderen Timer. Timer 1 beispielsweise ist ein 16 Bit Timer. Der Timer zählt also nicht von 0 bis 255 sondern von 0 bis 65535. Bei entsprechender Umarbeitung des Programms und einem Vorteiler von 1024 bedeutet das, dass die LEDs einen Ein/Aus Zyklus in 33 Sekunden absolvieren.&lt;br /&gt;
* Oder wir schalten die LEDs nicht bei jedem Timer Overflow um. Man könnte zum Beispiel in einem Register bis 7 zählen und nur dann, wenn dieses Register 7 erreicht hat, wird&lt;br /&gt;
** das Register wieder auf 0 gesetzt und&lt;br /&gt;
** die LEDs umgeschaltet.&lt;br /&gt;
&lt;br /&gt;
==Timer 0==&lt;br /&gt;
&lt;br /&gt;
Timer 0 ist ein 8 Bit Timer.&lt;br /&gt;
&lt;br /&gt;
* Overflow Interrupt&lt;br /&gt;
&lt;br /&gt;
===TCCR0===&lt;br /&gt;
====TCCR - Timer/Counter Control Register====&lt;br /&gt;
{{Byte |TCCR0 |      |      |      |      |      | CS02 | CS01 | CS00 }}&lt;br /&gt;
&lt;br /&gt;
====CS02/CS00 - Clock Select====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
! CS02 || CS01 || CS00 || Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||keine (Der Timer ist angehalten)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 8&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 64&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 256&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1024&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: Externer Takt vom Pin T0, fallende Flanke&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: Externer Takt vom Pin T0, steigende Flanke&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===TIMSK===&lt;br /&gt;
====TIMSK - Timer/Counter Interrupt Mask Register====&lt;br /&gt;
&lt;br /&gt;
{{Byte|TIMSK|      |      |      |      |      |      | OCIE0 | TOIE0 }}&lt;br /&gt;
&lt;br /&gt;
====TOIE0 - Timer 0 Overflow Interrupt Enable====&lt;br /&gt;
Ist dieses Bit gesetzt, so wird beim Auftreten eines Overflows am Timer ein Interrupt ausgelöst.&lt;br /&gt;
&lt;br /&gt;
Anstatt der Schreibweise&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
        ldi     temp, 0b00000001      ; TOIE0: Interrupt bei Timer Overflow&lt;br /&gt;
        out     TIMSK, temp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
ist es besser, die Schreibweise&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
        ldi     temp, 1 &amp;lt;&amp;lt; TOIE0&lt;br /&gt;
        out     TIMSK, temp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
zu wählen, da hier unmittelbar aus dem Ladekommando hervorgeht, welche Bedeutung das gesetzte Bit hat. Die vorher inkludierte m8def.inc definiert dazu alles Notwendige.&lt;br /&gt;
&lt;br /&gt;
==Timer 1==&lt;br /&gt;
&lt;br /&gt;
Timer 1 ist ein 16 Bit Timer&lt;br /&gt;
&lt;br /&gt;
* Overflow Interrupt&lt;br /&gt;
* Clear Timer on Compare Match&lt;br /&gt;
* Input Capture&lt;br /&gt;
* 2 Compare Einheiten&lt;br /&gt;
* div. PWM Modi&lt;br /&gt;
&lt;br /&gt;
===TCCR1B===&lt;br /&gt;
&lt;br /&gt;
{{Byte|TCCR1B| ICNC1| ICES1|      | WGM13| WGM12| CS12 | CS11 | CS10 }}&lt;br /&gt;
&lt;br /&gt;
====CS12/CS10 - Clock Select====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
! CS12 || CS11 || CS10 || Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||keine (Der Timer ist angehalten)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 8&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 64&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 256&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1024&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: Externer Takt vom Pin T1, fallende Flanke&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: Externer Takt vom Pin T1, steigende Flanke&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====ICES1 - Input Capture Edge Select====&lt;br /&gt;
ICES1 = 0 , falling edge&lt;br /&gt;
ICES1 = 1 , rising edge&lt;br /&gt;
&lt;br /&gt;
====ICNC1 - Input Capture Noise Canceler====&lt;br /&gt;
&lt;br /&gt;
===TCCR1A===&lt;br /&gt;
&lt;br /&gt;
{{Byte|TCCR1A|COM1A1|COM1A0|COM1B1|COM1B0|FOC1A |FOC1B |WGM11 |WGM10 }}&lt;br /&gt;
&lt;br /&gt;
===OCR1A===&lt;br /&gt;
&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
===OCR1B===&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
===ICR1===&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
===TIMSK1===&lt;br /&gt;
{{Byte|TIMSK|      |      |TICIE1|OCIE1A|OCIE1B|TOIE1 |      |}}&lt;br /&gt;
&lt;br /&gt;
====TICIE1 - Timer 1 Input Capture Interrupt Enable====&lt;br /&gt;
&lt;br /&gt;
====OCIE1A - Timer 1 Output Compare A Match Interrupt Enable====&lt;br /&gt;
&lt;br /&gt;
====OCIE1B - Timer 1 Output Compare B Match Interrupt Enable====&lt;br /&gt;
&lt;br /&gt;
====TOIE1 - Timer 1 Overflow Interrupt Enable====&lt;br /&gt;
&lt;br /&gt;
==Timer 2==&lt;br /&gt;
Timer 2 ist ein 8 Bit Timer.&lt;br /&gt;
&lt;br /&gt;
* Overflow Interrupt&lt;br /&gt;
* Compare Match Interrupt&lt;br /&gt;
* Clear Timer on Compare Match&lt;br /&gt;
* Phasen korrekte PWM&lt;br /&gt;
&lt;br /&gt;
===TCCR2===&lt;br /&gt;
&lt;br /&gt;
{{Byte|TCCR2| FOC2 | WGM20| COM21| COM20| WGM21| CS22 | CS21 | CS20 }}&lt;br /&gt;
&lt;br /&gt;
====WGM21 - Waveform Generator Mode====&lt;br /&gt;
&lt;br /&gt;
Ist diese Option аktiviert dann wird das Zählregister des Timers (TCNT2) wieder auf 0 gesetzt,&lt;br /&gt;
sobal das Register as Output Compare Register (OCR2) und TCNT2 übereinstimmen.&lt;br /&gt;
Zu beachten ist dabei das wenn das Register kleiner als 255 gestellt ist, wird&lt;br /&gt;
der Timer nicht mehr überschritten und der Interrupt für den Overflow (TIMER2_OVF_vect) nicht mehr ausgelöst.&lt;br /&gt;
Stattdessen gibt es den Interrupt für Compare Match (TIMER2_COMP_vect)&lt;br /&gt;
Die Frequenz für die Interruptauslösung lässt sich dann wie folgt berechnen:&lt;br /&gt;
ISR_Freq = F_CPU : ( Prescaler * ORC2 )&lt;br /&gt;
&lt;br /&gt;
====CS22/CS20 - Clock Select====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
! CS22 || CS21 || CS20 || Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||keine (Der Timer ist angehalten)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 8&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 32&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 64&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 128&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 256&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1024&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===OCR2===&lt;br /&gt;
&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
===TIMSK2===&lt;br /&gt;
{{Byte|TIMSK| OCIE2| TOIE2|      |      |      |      |      |      }}&lt;br /&gt;
&lt;br /&gt;
====OCIE2 - Timer 2 Output Compare Interrupt Enable====&lt;br /&gt;
&lt;br /&gt;
====TOIE2   Timer 2 Overflow Interrupt Enable====&lt;br /&gt;
&lt;br /&gt;
==Was geht noch mit einem Timer?==&lt;br /&gt;
&lt;br /&gt;
Timer sind sehr universelle Microcontroller-Bestandteile. Für weitergehende Studien ist es daher unerlässlich, das entsprechende Datenblatt des Microcontrollers zu studieren. Oft ist es z.&amp;amp;nbsp;B. möglich, dass der Timer bei Erreichen von bestimmten Zählerständen einen Ausgabe-Pin von sich aus ein-/aus-/umschaltet. Er erledigt dann das, was wir oben noch mit einem Interrupt gemacht haben, eigenständig komplett in Hardware. Bei einigen Timern ist es möglich, damit eine [[PWM]] (Pulsweiten-Modulation) aufzubauen.&lt;br /&gt;
&lt;br /&gt;
Ein paar der Timermodule lassen sich auch als Counter verwenden. Damit kann man z.&amp;amp;nbsp;B. die Anzahl externer Ereignisse wie Schaltvorgänge eines Inkrementalgebers bestimmen.&lt;br /&gt;
&lt;br /&gt;
Andere bieten die Möglichkeit, über einen externen Uhrenquarz getaktet zu werden (Anwendung z.&amp;amp;nbsp;B. eine &amp;quot;Echtzeituhr&amp;quot; oder als &amp;quot;Weckfunktion&amp;quot; aus einem Standby/Powerdownmodus).&lt;br /&gt;
&lt;br /&gt;
Durch geschickte Umprogrammierung in Echtzeit lässt sich mit einem Timer eine [[PLL]] aufbauen, die sich fortwährend auf einen Eingangstakt synchronisiert. Damit wird vermieden, dass der Controller ein Signal ständig abfragen (&amp;quot;pollen&amp;quot;) muss, sondern das Signal wird per Timer-Interrupt verarbeitet. Maßgeblich ist die Messung der aktuellen und Schätzung der kommenden Flanke mithilfe eines einstellbaren [[Taktteiler]]-Verhältnisses.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://web.archive.org/web/20170714121847/https://www.uni-koblenz.de/~physik/informatik/MCU/Timer.pdf Timer/Counter und PWM beim ATMega16 Mikrocontroller] Proseminar von Marcel Jakobs, September 2006 (PDF)&lt;br /&gt;
* [http://frank.circleofcurrent.com/cache/avrtimercalc.htm AVR Timer Calculator]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{Navigation_zurückhochvor|&lt;br /&gt;
zurücktext=Speicher|&lt;br /&gt;
zurücklink=AVR-Tutorial: Speicher|&lt;br /&gt;
hochtext=Inhaltsverzeichnis|&lt;br /&gt;
hochlink=AVR-Tutorial|&lt;br /&gt;
vortext=Uhr|&lt;br /&gt;
vorlink=AVR-Tutorial: Uhr}}&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR-Tutorial|Timer]]&lt;br /&gt;
[[Category:Timer und Uhren]]&lt;/div&gt;</summary>
		<author><name>Peter geher</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Atmel_Studio&amp;diff=99051</id>
		<title>Atmel Studio</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Atmel_Studio&amp;diff=99051"/>
		<updated>2018-04-24T06:39:45Z</updated>

		<summary type="html">&lt;p&gt;Peter geher: /* Direktlinks Installer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das &#039;&#039;&#039;Atmel Studio&#039;&#039;&#039; (vor Version 6: &amp;quot;&#039;&#039;&#039;AVR Studio&#039;&#039;&#039;&amp;quot;) ist eine kostenlose Entwicklungsumgebung ([[Editoren/IDEs|IDE]]) für die Programmierung der [[AVR]]-[[Mikrocontroller]] und [[ARM]]-[[Mikrocontroller]] (ab Version 6) von Atmel. Sie basiert ab Version 5 auf der Visual Studio Shell von Microsoft und besteht aus einer Projektverwaltung, einem [[Editoren/IDEs#Texteditoren für Programmierer|Editor]], einem [[AVR-Studio#Debugger|Debugger]] und Werkzeugen zum Beschreiben der Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
Mit dem Atmel Studio kann in [[Assembler]] sowie in [[C]]/[[C-Plusplus|C++]] programmiert werden. Für die Unterstützung von C/C++ musste bis einschließlich Version 4 vor der Installation des AVR Studio der GNU C Compiler für AVRs [[WinAVR]] installiert werden. Ab AVR Studio 5 ist eine vollständige Toolchain zur Entwicklung von C-Projekten enthalten. Atmel bietet weiterhin eine Erweiterung zwecks Erstellung von Projekten mit eingeschränkter C++-Unterstützung an (siehe [[AVR_Studio#Tipps_.26_Tricks|Tipps &amp;amp; Tricks]]).&lt;br /&gt;
&lt;br /&gt;
== Debugger ==&lt;br /&gt;
Die Atmel-Studio-Umgebung sieht unabhängig von der speziellen Debug-Plattform größtenteils identisch aus. Es existieren folgende Debug-Möglichkeiten:&lt;br /&gt;
# [[AVR-Simulation#AVR_Studio|AVR Simulator]]&lt;br /&gt;
# AVR In-Circuit Emulator / [[JTAG]]-Adapter: Atmel-ICE, AVR Dragon, AVR ONE!, JTAGICE3, JTAGICE mkII, SAM-ICE&lt;br /&gt;
&#039;&#039;&#039;Simulation&#039;&#039;&#039;&lt;br /&gt;
* die meisten AVR-Mikrocontroller werden unterstützt&lt;br /&gt;
* z.T langsamer als eine Emulation (insbesondere bei größeren Projekten)&lt;br /&gt;
* Wechselwirkung mit Peripherie nur über vordefinierte Stimuli möglich&lt;br /&gt;
* Anzeige aller Register zu jeder Zeit möglich&lt;br /&gt;
&#039;&#039;&#039;Emulation&#039;&#039;&#039;&lt;br /&gt;
* Unterstützung von Mikrocontrollern plattformabhängig eingeschränkt&lt;br /&gt;
* z.T. schneller als Simulation&lt;br /&gt;
* Debugging in tatsächlicher Hardwareumgebung&lt;br /&gt;
* Register nicht uneingeschränkt lesbar&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
* [[AVR-Studio Bugs]]&lt;br /&gt;
* [[AVR-Simulation]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/193587#1894280 Pfad zum Hexfile]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/237681#2411339 Anzeige der Größe benutzter Speicherbereiche in AVR Studio 5]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/236601#2413654 C++ Templates (beta) für AVR Studio 5] (Vorsicht: kein vollständiger Funktionsumfang, siehe [http://support.atmel.no/bin/customer.exe?=&amp;amp;action=viewKbEntry&amp;amp;id=1001 FAQ])&lt;br /&gt;
* [http://www.rn-wissen.de/index.php/AVR_Studio_5#Eigene_Templates_erzeugen Erstellung eigener Templates in AVR Studio 5]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/267384#new Nicht Atmel Programmer direkt unter AVR Studio 5 oder 6 verwenden z.B. USBasp]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/316052#3420336 AVR Studio 4 und die neue AVR Toolchain - So funktionierts!]&lt;br /&gt;
*[https://www.mikrocontroller.net/topic/445097 AS7 printf auf das Output-Fenster umleiten]&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
=== Offizielle Seite ===&lt;br /&gt;
* https://www.microchip.com/avr-support/atmel-studio-7&lt;br /&gt;
&lt;br /&gt;
=== Direktlinks Installer ===&lt;br /&gt;
[http://www.atmel.com/Images/Atmel-YYYYYB-atmelstudio_Release-Note.pdf Atmel Studio Release Notes] (PDF)&lt;br /&gt;
&lt;br /&gt;
[http://www.microchip.com/avr-support/avr-and-sam-downloads-archive Microchip Downloads Archive]&lt;br /&gt;
&lt;br /&gt;
Die MD5 bzw. SHA1 Checksumme dient zum Überprüfen der Downloads auf Vollständigkeit. Die aktuelle Version steht jeweils zuerst.&lt;br /&gt;
&lt;br /&gt;
; Atmel Studio 7:&lt;br /&gt;
* [http://atmel-studio.s3-website-us-west-2.amazonaws.com/7.0.1645/as-installer-7.0.1645-full.exe Atmel Studio 7-1645 Full Installer] &amp;lt;small&amp;gt;(updated Oktober 2017, 887MB)&amp;lt;/small&amp;gt;&lt;br /&gt;
* [https://s3-us-west-2.amazonaws.com/atmel-studio/7.0.1417/as-installer-7.0.1417-full.exe Atmel Studio 7-1417 Full Installer] &amp;lt;small&amp;gt;(updated März 2017, 866MB)&amp;lt;/small&amp;gt;&lt;br /&gt;
* [http://www.atmel.com/images/as-installer-7.0.1188-full.exe Atmel Studio 7-1188 Full Installer] &amp;lt;small&amp;gt;(updated September 2016, 863MB)&amp;lt;/small&amp;gt;&lt;br /&gt;
* [http://www.atmel.com/images/as-installer-7.0.1006-full.exe Atmel Studio 7-1006 Full Installer] &amp;lt;small&amp;gt;(updated Juni 2016, 856MB)&amp;lt;/small&amp;gt;&lt;br /&gt;
* [http://www.atmel.com/images/as-installer-7.0.934-full.exe Atmel Studio 7-934 Full Installer] &amp;lt;small&amp;gt;(updated Mai 2016, 828MB)&amp;lt;/small&amp;gt;&lt;br /&gt;
* [http://www.atmel.com/images/as-installer-7.0.790-full.exe Atmel Studio 7-790 Full Installer] &amp;lt;small&amp;gt;(updated März 2016, 824MB)&amp;lt;/small&amp;gt;&lt;br /&gt;
* [http://www.atmel.com/images/as-installer-7.0.634-web.exe Atmel Studio 7-634 Web Installer] &amp;lt;small&amp;gt;(SHA1: 3ea8501ccc7e89e6839109927d5c289ff847ab32, updated Nov 2015, 2,4MB)&amp;lt;/small&amp;gt;&lt;br /&gt;
* [http://www.atmel.com/images/as-installer-7.0.634-full.exe Atmel Studio 7-634 Full Installer] &amp;lt;small&amp;gt;(SHA1: 3e4b5c4546c1544d029404de53898fd8e545e254, updated Nov 2015, 734MB)&amp;lt;/small&amp;gt;&lt;br /&gt;
* [http://www.atmel.com/images/as-installer-7.0.594-web.exe Atmel Studio 7-594 Web Installer] &amp;lt;small&amp;gt;(MD5: 563F33F02D81AF3491CB1DCE992A1322, updated Oktober 2015, 2,4MB)&amp;lt;/small&amp;gt;&lt;br /&gt;
* [http://www.atmel.com/images/as-installer-7.0.594-full.exe Atmel Studio 7-594 Full Installer] &amp;lt;small&amp;gt;(MD5: A7DC906E1157B50BD764902CCD65289F, updated Oktober 2015, 729MB)&amp;lt;/small&amp;gt;&lt;br /&gt;
; Atmel Studio 6:&lt;br /&gt;
* [http://web.archive.org/web/20170719173845/http://www.atmel.com/images/AStudio6_2sp2_1563net.exe Atmel Studio 6.2 Service Pack 2 (Build 1563) Full Installer] &amp;lt;small&amp;gt;MD5: 3E0447826DC4B5FD42A5F73F6911E458 SHA-1: 60EFF100EF245B9BBF7910CBD369F7778A110C82 SHA-256: DCD97A19B016F600477A1758FEA2353D4BD980C644CBD6A89D03647E0728A1B8&amp;lt;/small&amp;gt; (775MB, updated February 2015)&lt;br /&gt;
* [http://web.archive.org/web/20170719172514/http://www.atmel.com/images/AStudio6_2sp1_1502net.exe Atmel Studio 6.2 Service Pack 1 (Build 1502) Full Installer] &amp;lt;small&amp;gt;MD5: A348B272B000A1881DB38A2C51FECEB7 SHA-1: ED5924A7B3CBCB06DEE7803EF26C3DCC35AA8EB4 SHA-256: 17335C38149B9B3F80815792C6F9BCB727843234B147FD2FD80EB00682E6D5FD&amp;lt;/small&amp;gt; (721MB, updated Nov 2014) &lt;br /&gt;
* [http://web.archive.org/web/20170719172514/http://www.atmel.com/Images/AStudio6_2_1153net.exe Atmel Studio 6.2 (Build 1153) Full Installer] &amp;lt;small&amp;gt;MD5: 3C62CD17DAF1ECD327E74CBF4DB40CF1 SHA-1: D482D69E10AD61ED5784D797F98EABB30B2FF30A SHA-256: 689EBDB03EFCB4E3EC403F80CD2D0B63A01A492FEFD96F9D5969A5698DAB2FDC&amp;lt;/small&amp;gt; (735MB, updated May 2014)&lt;br /&gt;
* [http://web.archive.org/web/20170719172514/http://www.atmel.com/Images/AStudio62betanet.exe Atmel Studio 6.2 beta Full Installer]  (728MB, updated February 2014)&lt;br /&gt;
* [http://web.archive.org/web/20170719172514/http://www.atmel.com/Images/AStudio61sp2net.exe Atmel Studio 6.1 update 2.0 (build 2730)] (853MB, updated August 2013)&lt;br /&gt;
* [http://web.archive.org/web/20170719172514/http://www.atmel.com/Images/AStudio61sp1_1net.exe Atmel Studio 6.1-2674] (806 MB, 2013/06)&lt;br /&gt;
* [http://web.archive.org/web/20170719172514/http://www.atmel.com/Images/AStudio61net.exe Atmel Studio 6.1-2565] (783 MB, 2013/04)&lt;br /&gt;
* [http://web.archive.org/web/20170719172514/http://www.atmel.com/Images/AtmelStudio-6.1.2440-beta-net.exe Atmel Studio 6.1-2440 (beta)] (639 MB, 2013/03)&lt;br /&gt;
* [http://web.archive.org/web/20170719172514/http://www.atmel.com/Images/as6installer-6.0.1996-net.exe Atmel Studio 6.0-1996 Service Pack 2]&amp;lt;ref&amp;gt;Update-Installer ist leider nicht in Sicht&amp;lt;/ref&amp;gt; (799 MB, 2012/11)&lt;br /&gt;
* [http://web.archive.org/web/20170719172514/http://www.atmel.com/Images/as6installer-stable-servicepack1-6.0.1938.exe Atmel Studio 6.0-1938 Service Pack 1] Upgrade auf Build 1938 (148 MB, updated 2012/09)&lt;br /&gt;
*[http://web.archive.org/web/20170719172514/http://www.atmel.com/Images/as6installer-patch-6.0.1882.exe Atmel Studio 6.0-1882 Patch 2] Bugfix update für Atmel Studio 6.0-1843 und 6.0-1863 (25MB, updated 2012/08) &lt;br /&gt;
*[http://web.archive.org/web/20170719172514/http://www.atmel.com/Images/as6installer-6.0.1843.exe Atmel Studio 6.0-1843]&amp;lt;small&amp;gt;MD5: 55CAD1A86458A3BB946E53190AEEE499&amp;lt;/small&amp;gt; &amp;lt;ref&amp;gt;Atmel Studio 6.0 zeigt die RAM-Nutzung falsch an, egal welche Toolchain genutzt wird. Es addiert die EEPROM-Belegung dazu. [http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;p=963389#963389 Work-Around]&amp;lt;/ref&amp;gt; (743MB, updated 2012/05)&lt;br /&gt;
*[http://web.archive.org/web/20170719172514/http://www.atmel.com/Images/as6installer-6.0.1703-full.exe Atmel Studio 6.0-1703 Beta] (731MB, updated 2012/03)&lt;br /&gt;
&lt;br /&gt;
; Atmel Studio 6 (ohne VSS und .NET):&lt;br /&gt;
* [http://web.archive.org/web/20171115152647/http://www.atmel.com/images/AStudio6_2sp2_1563.exe Atmel Studio 6.2 Service Pack 2 (build 1563) Installer] (560MB, updated February 2015)&lt;br /&gt;
* [http://web.archive.org/web/20171115152647/http://www.atmel.com/images/AStudio6_2sp1_1502.exe Atmel Studio 6.2 Service Pack 1 (build 1502) Installer] (506MB, updated Nov 2014)&lt;br /&gt;
* [http://web.archive.org/web/20171115152647/http://www.atmel.com/Images/AStudio6_2_1153.exe Atmel Studio 6.2 (build 1153) Installer] &amp;lt;small&amp;gt;MD5: 3C62CD17DAF1ECD327E74CBF4DB40CF1&amp;lt;/small&amp;gt; (520MB, updated May 2014)&lt;br /&gt;
* [http://web.archive.org/web/20171115152647/http://www.atmel.com/Images/AStudio62beta.exe Atmel Studio 6.2 beta Installer] (513MB, updated February 2014)&lt;br /&gt;
* [http://web.archive.org/web/20171115152647/http://www.atmel.com/Images/AStudio61sp2.exe Atmel Studio 6.1 update 2.0 (build 2730)] (595MB, updated August 2013)&lt;br /&gt;
* [http://web.archive.org/web/20171115152647/http://www.atmel.com/Images/AStudio61sp1_1.exe Atmel Studio 6.1-2674] (595 MB, 2013/06)&lt;br /&gt;
* [http://web.archive.org/web/20171115152647/http://www.atmel.com/Images/AStudio61.exe Atmel Studio 6.1-2565] (568 MB, 2013/04)&lt;br /&gt;
*[http://web.archive.org/web/20171115152647/http://www.atmel.com/Images/AtmelStudio-6.1.2440-beta.exe Atmel Studio-6.1.2440 beta] (424MB, 2013/03)&lt;br /&gt;
*[http://web.archive.org/web/20171115152647/http://www.atmel.com/Images/as6installer-6.0.1996.exe Atmel Studio-6.0.1996 with Service Pack 2 Installer] (585MB, updated 2012/11)&lt;br /&gt;
*[http://web.archive.org/web/20171115152647/http://www.atmel.com/Images/as6installer-6.0.1843.noVSSnoDotNet.exe Atmel Studio 6.0-1843] (528MB, updated 2012/05)&lt;br /&gt;
*[http://web.archive.org/web/20171115152647/http://www.atmel.com/Images/as6installer-6.0.1703-small.exe Atmel Studio 6.0-1703 Beta] (516MB, updated 2012/03)&lt;br /&gt;
&lt;br /&gt;
; AVR Studio 5:&lt;br /&gt;
&lt;br /&gt;
*[http://www.atmel.com/images/NEWas5installer-stable-5.1.208-full.exe AVR Studio 5.1-208] ASF 2.11.0, Toolchain 3.3.1 (616MB, updated 2012/02)&lt;br /&gt;
*[http://www.atmel.com/Images/as5installer-5.1.148.beta-full.exe AVR Studio 5.1-148 Beta] (523 MB, updated 2011/12)&lt;br /&gt;
&lt;br /&gt;
; AVR Studio 5 (ohne VSS und .NET):&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/images/as5installer-stable-5.1.208-small.exe AVR Studio 5.1-208] ASF 2.11.0, Toolchain 3.3.1 (387 MB, updated 2012/02)&lt;br /&gt;
*[http://www.atmel.com/Images/as5installer-5.1.148.beta-small.exe AVR Studio 5.1-148 Beta] (308 MB, updated 2011/12)&lt;br /&gt;
&lt;br /&gt;
; AVR Studio 4:&lt;br /&gt;
&lt;br /&gt;
*[http://www.atmel.com/Images/AvrStudio4Setup.exe AVR Studio 4.19-730]&amp;lt;small&amp;gt;MD5:609209DB9A1C6191945421299101DC15&amp;lt;/small&amp;gt; (124 MB, updated 2011/09/11)&lt;br /&gt;
*[http://www.atmel.com/Images/AVRStudio4.18Setup.exe AVR Studio 4.18-684] (117 MB, updated July 2009)&lt;br /&gt;
*[http://www.atmel.com/Images/AVRStudio4.18SP3.exe AVR Studio 4.18-716 Service Pack 3] (33 MB, updated July 2009)&lt;br /&gt;
*[http://www.atmel.com/Images/AvrStudio417Setup.exe AVR Studio 4.17-666] (112 MB, updated 07/09)&lt;br /&gt;
*[http://www.atmel.com/Images/AvrStudio416Setup.exe AVR Studio 4.16-628] Letzte Version für Windows 98 (126 MB, updated 02/09)&lt;br /&gt;
*[http://www.atmel.com/Images/aStudio4b589.exe AVR Studio 4.14-589] (89 MB, updated 04/08)&lt;br /&gt;
*[http://www.atmel.com/Images/aStudio4b528.exe AVR Studio 4.13-528] (73 MB, updated 03/07)&lt;br /&gt;
&lt;br /&gt;
=== Direktlinks Zusatzsoftware ===&lt;br /&gt;
====Atmel QTouch====&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/Images/AVRQTouchStudioSetup_VSS_dotNET.exe AVR QTouch Studio] (373 MB, mit .NET, März 2010)&lt;br /&gt;
* [http://www.atmel.com/Images/Atmel_QTouch_Libraries_5.0.exe Atmel QTouch Library 5.0] (34.3MB, April 2011)&lt;br /&gt;
&lt;br /&gt;
====AVR Toolchain====&lt;br /&gt;
* [http://www.atmel.com/images/avr8-gnu-toolchain-installer-3.5.4.91-win32.any.x86.exe AVR Toolchain 3.5.4] (15.2 MB, avr-gcc 4.9.2, binutils 2.26, avr-libc 2.0.0, gdb 7.8, updated 2016/09)&lt;br /&gt;
* [http://www.atmel.com/images/avr8-gnu-toolchain-installer-3.5.1.87-win32.any.x86.exe AVR Toolchain 3.5.1] (14.8 MB, avr-gcc 4.9.2, binutils 2.25, avr-libc 1.8.0svn, gdb 7.8, updated 2016/03)&lt;br /&gt;
* [http://www.atmel.com/images/avr8-gnu-toolchain-installer-3.5.0.85-win32.any.x86.exe AVR Toolchain 3.5.0] (14.7 MB, avr-gcc 4.9.2, binutils 2.25, avr-libc 1.8.0svn, gdb 7.8, updated 2015/09)&lt;br /&gt;
* [http://www.atmel.com/images/avr8-gnu-toolchain-installer-3.4.5.30-win32.any.x86.exe AVR Toolchain 3.4.5] (15.9MB, updated 2014/11)&lt;br /&gt;
* [http://www.atmel.com/images/avr8-gnu-toolchain-installer-3.4.4.24-win32.any.x86.exe AVR Toolchain 3.4.4] (15.6MB, updated 2014/05)&lt;br /&gt;
* [http://www.atmel.com/images/avr-toolchain-installer-3.4.2.1573-win32.win32.x86.exe AVR Toolchain 3.4.2-1573] (86.6 MB, avr-gcc 4.7.2, AVR-Libc 1.8.0, updated 2013/04)&lt;br /&gt;
* [http://www.atmel.com/Images/avr-toolchain-installer-3.4.1.1195-win32.win32.x86.exe AVR Toolchain 3.4.1-1195] (95.9 MB, avr-gcc 4.6.2, AVR-Libc 1.8.0, updated 2012/08)&lt;br /&gt;
* [http://www.atmel.com/Images/avr-toolchain-installer-3.4.0.1146-win32.win32.x86.exe AVR Toolchain 3.4.0-1146] (91 MB, avr-gcc 4.6.2, AVR-Libc 1.8.0, updated 2012/06)&lt;br /&gt;
* [http://www.atmel.com/Images/avr-toolchain-installer-3.3.1.1020-win32.win32.x86.exe AVR Toolchain 3.3.1-1020] (94 MB, avr-gcc 4.5.1, AVR-Libc 1.7.1, updated 2012/04)&lt;br /&gt;
* [http://www.atmel.com/Images/avr-toolchain-installer-3.3.0.710-win32.win32.x86.exe AVR Toolchain 3.3.0-710] (94 MB, avr-gcc 4.5.1, AVR-Libc: 1.7.1, updated 2011/09/11)&lt;br /&gt;
* [http://www.atmel.com/Images/avr-toolchain-installer-3.2.3.579-win32.win32.x86.exe AVR Toolchain 3.2.3-579] (95 MB, avr-gcc 4.5.1, AVR-Libc 1.7.1, updated 2011/06/11, erzeugt Toolchain 3.2.3-314)&lt;br /&gt;
* [http://www.atmel.com/Images/avr-toolchain-installer-3.0.0.240-win32.win32.x86.exe AVR Toolchain 3.0.0-240] (87 MB, avr-gcc 4.4.3, AVR-Libc 1.7.0, updated 2010/09/10)&lt;br /&gt;
&lt;br /&gt;
====Atmel Software Framework====&lt;br /&gt;
&lt;br /&gt;
; Updates für Atmel Studio:&lt;br /&gt;
* [http://www.atmel.com/Images/as-asf341-msi-stable-6.0.0.165-win32.win32.x86.zip Atmel Software Framework 3.4.1.147] für Atmel Studio 6&lt;br /&gt;
* [http://www.atmel.com/Images/as-asf330-msi-stable-6.0.0.144-win32.win32.x86.zip Atmel Software Framework 3.3.0] für Atmel Studio 6&lt;br /&gt;
* [http://www.atmel.com/Images/as5.1-asf-vsix-stable-2.11.1.30-win32.win32.x86.zip Atmel Software Framework 2.11.1.30] für AVR Studio 5&lt;br /&gt;
* [http://www.atmel.com/Images/AVRStudio5-ASF-Update-2.8.1.76.exe Atmel Software Framework 2.8.1.76] für AVR Studio 5&lt;br /&gt;
&lt;br /&gt;
; Standalone:&lt;br /&gt;
* [http://www.atmel.com/images/asf-standalone-archive-3.20.1.101.zip AVR Software Framework 3.20.1.101]&lt;br /&gt;
* [http://www.atmel.com/Images/asf-standalone-archive-3.7.3.69.zip AVR Software Framework 3.7.3.69]&lt;br /&gt;
* [http://www.atmel.com/Images/asf-standalone-archive-3.5.1.62.zip AVR Software Framework 3.5.1.62]&lt;br /&gt;
* [http://www.atmel.com/Images/asf-standalone-archive-2.10.0.zip AVR Software Framework 2.10.0]&lt;br /&gt;
* [http://www.atmel.com/Images/asf-standalone-archive-2.9.0.zip AVR Software Framework 2.9.0]&lt;br /&gt;
&lt;br /&gt;
== Referenzen ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&#039;&#039;&#039;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.microchip.com/avr-support/avr-and-sam-downloads-archive Download-Archiv des Herstellers mit funktionierenden Links zu allen Versionen]&lt;br /&gt;
&#039;&#039;&#039;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.youtube.com/user/AtmelCorporation#g/c/8F325BE889E62E50 YouTube-Playlist: AVR Studio 5 Tutorial]&lt;br /&gt;
* [http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=82994 How to install JTAGICE mkII (and AVR Dragon and AVRISP mkII) on Windows 7 x64] auf avrfreaks.net (ggf. kostenlos registrieren). Siehe auch Hinweis von Denny [http://www.mikrocontroller.net/topic/146857#1476962] im Forum.&lt;br /&gt;
*[http://avr-eclipse.sourceforge.net/wiki/index.php/The_AVR_Eclipse_Plugin AVR Eclipse Plugin]&lt;br /&gt;
*[http://avrstudio5.wordpress.com/ AVR Studio 5 Blog] - Useful hints and tips for installation troubleshooting with the new AVR Studio 5&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]]&lt;br /&gt;
[[Kategorie:Entwicklungstools]]&lt;/div&gt;</summary>
		<author><name>Peter geher</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ISP&amp;diff=99047</id>
		<title>ISP</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ISP&amp;diff=99047"/>
		<updated>2018-04-23T08:24:38Z</updated>

		<summary type="html">&lt;p&gt;Peter geher: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;I&#039;&#039;&#039;n &#039;&#039;&#039;S&#039;&#039;&#039;ystem &#039;&#039;&#039;P&#039;&#039;&#039;rogramming.&lt;br /&gt;
&lt;br /&gt;
Ein &amp;quot;In System&amp;quot; programmierbarer [[Mikrocontroller]] kann programmiert werden, ohne dass er dazu aus der Schaltung entfernt werden muss. Die Voraussetzung dafür ist ein als [[Flash-ROM]] ausgeführter Programmspeicher. Die Kommunikation mit dem ISP-Adapter erfolgt in der Regel über ein serielles Protokoll, z. B. [[JTAG]] oder [[SPI]].&lt;br /&gt;
&lt;br /&gt;
Einen Programmieradapter für AVR-Mikrocontroller ([[AVR In System Programmer]]) und andere [[SPI]]-fähige Controller von Atmel (z. B. 89S52) findet man beispielsweise bei [http://rumil.de/hardware/avrisp.html rumil.de].&lt;br /&gt;
&lt;br /&gt;
Soll ein Controller ausserhalb einer Schaltung programmiert werden, so sind&lt;br /&gt;
dafür [http://www.mikrocontroller.net/articles/AVR_In_System_Programmer#Universelle_Programmieradapter Adapter] notwendig.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://web.archive.org/web/20150802074443/http://www.versaloon.com/ Versaloon] is a full-opensource multi-functional platform based on generic USB_TO_XXX protocol, which can now support more than 10 kinds of interfaces including [[JTAG]], SWD, [[SPI]], [[IIC]] and so on. Programming is supported for: &lt;br /&gt;
** STM8 support(SWIM)&lt;br /&gt;
** STM32 support(ISP/JTAG/SWD) siehe auch Forumbeitrag von Bingo [http://www.mikrocontroller.net/topic/202785]&lt;br /&gt;
** LPC1000 support(ISP/JTAG/SWD)&lt;br /&gt;
** LM3S support(JTAG/SWD)&lt;br /&gt;
** AT91SAM3 support(JTAG/SWD)&lt;br /&gt;
** AT89S5X support(ISP)&lt;br /&gt;
** PSOC1 support(ISSP)&lt;br /&gt;
** MSP430(without TEST) support(JTAG)&lt;br /&gt;
** C8051F support(C2/JTAG)&lt;br /&gt;
** AVR8 support(ISP/JTAG)&lt;br /&gt;
** LPC900 support(ICP)&lt;br /&gt;
** HCS08 support(BDM)&lt;br /&gt;
** HCS12(X) support(BDM)&lt;br /&gt;
** SVF support(JTAG)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:AVR-Programmer und -Bootloader]]&lt;/div&gt;</summary>
		<author><name>Peter geher</name></author>
	</entry>
</feed>