<?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=Restmuell</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=Restmuell"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Restmuell"/>
	<updated>2026-04-11T17:12:57Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ESP8266&amp;diff=98201</id>
		<title>ESP8266</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ESP8266&amp;diff=98201"/>
		<updated>2018-01-12T12:07:23Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: /* Bezugsquellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:ESP8266.jpg|thumb|300px|ESP8266, Funkmodul]]&lt;br /&gt;
Das [[ESP8266]] von dem Hersteller Espressif ist ein programmierbarer WLAN-SoC mit [[UART]]- und [[SPI]]-Schnittstelle. &#039;&#039;&#039;WLAN&#039;&#039;&#039;-Funkmodule mit ESP8266 sind ab 3€ verfügbar. Die UART-Schnitttstelle ermöglicht eine einfache Integration in Mikrocontrollerprojekte.&lt;br /&gt;
&lt;br /&gt;
== Spezifikation ==&lt;br /&gt;
Laut Hersteller &amp;lt;ref&amp;gt;[http://espressif.com/en/products/esp8266 &#039;&#039;Herstellerseite -  unter Details&#039;&#039;] Abgerufen am 26. August 2014.&amp;lt;/ref&amp;gt;. :&lt;br /&gt;
* 802.11 b/g/n&lt;br /&gt;
* Wi-Fi Direct (P2P), soft-AP&lt;br /&gt;
* Integrated TCP/IP protocol stack&lt;br /&gt;
* Integrated TR switch, balun, LNA, power amplifier and matching network&lt;br /&gt;
* Integrated PLLs, regulators, DCXO and power management units&lt;br /&gt;
* +19.5dBm output power in 802.11b mode&lt;br /&gt;
* Power down leakage current of &amp;lt;20µA (bei 2,5V, Flash-Chip nicht mit gerechnet)&lt;br /&gt;
* Integrated low power 32-bit CPU could be used as application processor&lt;br /&gt;
* SDIO 1.1/2.0, SPI, UART&lt;br /&gt;
* STBC, 1×1 MIMO, 2×1 MIMO&lt;br /&gt;
* A-MPDU &amp;amp; A-MSDU aggregation &amp;amp; 0.4ms guard interval&lt;br /&gt;
* Wake up and transmit packets in &amp;lt; 2ms&lt;br /&gt;
* Standby power consumption of &amp;lt; 1.0mW (DTIM3)&lt;br /&gt;
* VCC: 2,5...3,6V (Achtung: Eingänge sind &#039;&#039;&#039;NICHT 5V TOLERANT&#039;&#039;&#039;!)&lt;br /&gt;
Weiterhin:&lt;br /&gt;
* GPIOs, ADC&lt;br /&gt;
&lt;br /&gt;
=== Datendurchsatz/Performanz ===&lt;br /&gt;
[https://www.mikrocontroller.net/topic/342240?page=single#3857630 Beitrag im Forum mit Tests: TCP: bis zu 7 MBit/s]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?f=7&amp;amp;t=24 Beitrag Espressif-Forum: UART loopback: 4.5 Mbps]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?t=2187 Beitrag Espressif-Forum: 300kbps senden und empfangen im TCP passhrough Modus]&amp;lt;br/&amp;gt;&lt;br /&gt;
200-300k Byte/s Senden und Empfangen via TCP und UDP mit C Programm und SDK 1.5.4 (Bei stefanus zuhause)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Bei Verwendung der AT-Firmware (v1.1.0.0 aus SDK 1.5.4) mit einem seriell angeschlossenen Mikrocontroller dauert die Antwort auf ein kurzes Kommando (vom PC an den µC und zurück) typischerweise 100-200ms.&lt;br /&gt;
&lt;br /&gt;
=== Power-/Sleep-Modes ===&lt;br /&gt;
Der Stromverbrauch des ESP8266 ist abhängig von vielen Faktoren, er lässt sich aber durch geschickte Programmierung durchaus deutlich senken.&amp;lt;br/&amp;gt;&lt;br /&gt;
So ist es nicht notwendig, dass das WIFI-Modem oder der Mikrocontroller ständig läuft, um z.B. eine WLAN-Türklingel zu realisieren. Im &amp;quot;Deep-Sleep&amp;quot; würde der ESP8266 dann nur wenige µA verbrauchen, bis er über einen Timer zurückgesetzt wird und die Meldung absetzt.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Stefanus hat 25µA gemessen: [https://www.mikrocontroller.net/topic/425023?goto=4985619#4985619]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?f=6&amp;amp;t=133 Detailierte Übersicht der verschieden Modi und deren Stromverbrauch von Espressif] (nicht mehr aktuell!)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WLAN-Module mit ESP8266 ==&lt;br /&gt;
Es existieren ca. 11 Varianten von chinesischen Herstellern. Beispielsweise mit PCB- oder Keramik-Antenne oder mit u.fl.&lt;br /&gt;
&lt;br /&gt;
* Die Firmware aus SDK 0.9.1 unterstützt bis zu vier gleichzeitige TCP- oder UDP-Verbindungen. &lt;br /&gt;
* Die Firmware aus SDK 1.5.4 unterstützt bis zu fünf gleichzeitige TCP- oder UDP-Verbindungen.&lt;br /&gt;
&lt;br /&gt;
Sie kann sich in vorhandene WLAN-Netze einbuchen, aber auch selbst Access-Point mit DHCP-Server sein. Der Access-Point ist zu Android kompatibel (mit 4.1.2 getestet).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Die Firmware enthält jedoch keinen Router. Mehrere Computer, die mit dem Modul als Access-Point verbunden sind, können keine Verbindung zueinander aufbauen. Das Feature nennt sich AP-Isolation.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
#Produktbeschreibung: [[http://playground.boxtec.ch/doku.php/wireless/esp8266]]&lt;br /&gt;
&lt;br /&gt;
=== Pinbelegung einiger ESP8266-Module ===&lt;br /&gt;
====ESP8266-01====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:ESP8266-PinBelegung1.jpg|Pinbelegung - Groß mit PCB-Antenne&lt;br /&gt;
Datei:ESP8266-PinBelegung2.jpg|Pinbelegung - Klein mit Keramik-Antenne&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
Quelle &amp;lt;ref&amp;gt;[http://pan.baidu.com/share/link?shareid=727869034&amp;amp;uk=1900861665 &#039;&#039;Seller Information&#039;&#039;] Abgerufen am 26. August 2014.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
====ESP8266-07====&lt;br /&gt;
Achtung, beim ESP8266-07-Modul sind einige mit vertauschten Beschriftungen von GPIO4 und GPIO5 unterwegs!!.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ESP8266-12E====&lt;br /&gt;
Das ESP12E-Modul gehört vermutlich wegen der vielen Ports zu den beliebtesten Modulen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller-elektronik.de/?projekt-download=2967 Pinbelegung (PDF)]&lt;br /&gt;
Für dieses Modul gibt es auch ein spezielles Adapter-Projekt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Adapter-ESP12E.jpeg|miniatur|zentriert]]&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller-elektronik.de/esp12e-tutorial-einstieg-mit-dem-esp8266-modul/ Projekt: ESP-12E Adapter und ESP12E Tutorial]&lt;br /&gt;
&lt;br /&gt;
== Möglichkeiten der Nutzung und Programmierung ==&lt;br /&gt;
===== Benutzung einer Firmware =====&lt;br /&gt;
Verschiedene Projekte betreiben die Entwicklung einer Firmware. Man kann die Firmware &amp;quot;einfach nur&amp;quot; flashen und benutzen oder sich auch aktiv an der Entwicklung beteiligen. Es gibt unter anderem folgende Projekte:&lt;br /&gt;
* AT-Befehle: Firmware, mit welcher das Modul über UART angesprochen wird.&lt;br /&gt;
** von Espressif ([https://github.com/espressif/ESP8266_NONOS_SDK/tree/master/bin/at GitHub])&lt;br /&gt;
** von Electrodragon ([http://www.electrodragon.com/w/ESP8266_AT-Command_firmware Forum])&lt;br /&gt;
* Micropython: Firmware, die das Ablaufen von Python-Scripts ermöglicht ([https://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/intro.html Tutorial])&lt;br /&gt;
* NodeMCU: Firmware, die das Ablaufen von Lua-Scripts ermöglicht ([https://github.com/nodemcu/nodemcu-firmware Github])&lt;br /&gt;
* smartJS: Firmware, die das Ausführen von Javascript erlaubt ([https://github.com/cesanta/smart.js Github])&lt;br /&gt;
* Arduino core for ESP8266 WiFi chip: Programmierumgebung &amp;amp; Firmware, die das Ausführen von C-Programmen ermöglicht, im Stil der bekannten Arduino-Plattform. [https://github.com/esp8266/Arduino Github - ink. Anleitung]&lt;br /&gt;
* ESP8266 Basic: Firmware, die das Ausführen von Basic-Programmen und das Editieren über WLAN erlaubt [http://www.esp8266basic.com/]&lt;br /&gt;
* Sming: Einfach zu nutzendes Framework, ähnlich wie Arduino, allerdings mit einem einfachen Makefile pro Projekt und mit Eclipse-Projekten.([https://github.com/SmingHub/Sming Github])&lt;br /&gt;
* ESP-Lisp (BETA): A small fast lisp interpeter for a ESP8266 ([https://github.com/yesco/esp-lisp Github])&lt;br /&gt;
* ESP8266Forth:  Forth for the ESP8266 NodeMCU Amica ([https://github.com/CraigLindley/ESP8266Forth Github])&lt;br /&gt;
* Forthright: Forth for ESP-8266 ([https://github.com/niclash/forthright Github])&lt;br /&gt;
* Punyforth:  FORTH inspired programming language for the ESP8266 ([https://github.com/zeroflag/punyforth Github])&lt;br /&gt;
* ESP-LINK: Wifi-Serial Bridge w/REST&amp;amp;MQTT([https://github.com/jeelabs/esp-link Github])&lt;br /&gt;
* ESPEasy: turn the ESP module into an easy multifunction sensor device for Home Automation solutions like FHEM. Configuration of the ESP Easy is entirely web based ([https://github.com/letscontrolit/ESPEasy])&lt;br /&gt;
&lt;br /&gt;
===== Erstellen (Kompilieren) einer Firmware =====&lt;br /&gt;
Für die Erstellung einer individuellen Firmware gibt es zwei Möglichkeiten:&lt;br /&gt;
* Software Development Kit (SDK): Erstellen einer Firmware mit einer GCC-Toolchain&lt;br /&gt;
* Arduino IDE: Erstellen einer Firmware mit einer Arduino-IDE&lt;br /&gt;
Projekte, die eine Firmware für das ESP8266 entwickeln (siehe vorheriger Abschnitt), benutzen eine dieser beiden Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
=== Firmware flashen/updaten ===&lt;br /&gt;
Typischerweise wird eine kompilierte Firmware per UART-Bootloader des ESP8266-SoC auf einen Flash-Chip eines ESP8266-Moduls geladen. Von dort startet der ESP8266-SoC anschließend die Firmware.&lt;br /&gt;
&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?f=5&amp;amp;t=433 Flash-Download-Tool vom Hersteller] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://github.com/themadinventor/esptool Python-Tool zum Flashen (von Fredrik Ahlberg)] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://github.com/3s1d/esp_prog Extension zum Tool von Fredrik Ahlberg] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/topic/342240?page=2#3857075 Tool zum Flashen (von Christian Klippel)] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://web.archive.org/web/20150502082616/http://defcon-cc.dyndns.org/wiki/ESP8266#Update Anleitung, extern] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/topic/342240?page=3#3810559 Anleitung, Forum]&lt;br /&gt;
&lt;br /&gt;
Der Hersteller veröffentlicht regelmäßig [http://bbs.espressif.com/viewforum.php?f=5 Firmwareupdates] als Bestandteil des esp_iot_sdk. Die Firmware-Dateien befinden sich im Verzeichnis bin. Das Update wird beispielsweise für Firmware 0.9.5 folgendermaßen durchgeführt: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python esptool.py --baud 9600 --port com6 write_flash 0x00000 boot_v1.2.bin 0x01000 at/user1.512.new.bin 0x3e000 blank.bin 0x7e000 blank.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abhängig von der Flashgröße muss man die Firmware ab Version 1.0.1 selbst compilieren. Siehe Diskussion [http://www.esp8266.com/viewtopic.php?p=16515 hier] und [http://bbs.espressif.com/viewtopic.php?f=16&amp;amp;t=400 hier].&lt;br /&gt;
&lt;br /&gt;
=== Nutzung ohne Firmware ===&lt;br /&gt;
Es ist wohl sogar möglich den ESP8266 als SDIO-WLAN-Modul an einem Raspberry Pi zu betreiben. Verwendet wird dabei der Linuxtreiber des ESP8089. Der ESP8266 bootet dann nicht die Firmware aus dem Flash sondern über SDIO.    &lt;br /&gt;
&lt;br /&gt;
https://hackaday.io/project/8678-rpi-wifi&lt;br /&gt;
&lt;br /&gt;
== AT-Befehle für eine Firmware auf Basis des SDK-Beispiels &amp;quot;AT&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Einstellen des Moduls als AP&lt;br /&gt;
&lt;br /&gt;
Da wir nicht wissen, in welchem Modus sich das Modul gerade befindet, fragen wir diesen mit dem &lt;br /&gt;
Befehl AT+CWMODE? ab. Das Modul antwortet mit &lt;br /&gt;
&lt;br /&gt;
    AT+CWMODE?&amp;lt;\r&amp;gt;&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;+CWMODE:1&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    OK&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
In diesem Fall ist das Modul aktuell im Modus 1 (Station) eingestellt. Also ändern wir den Modus auf 2 (AP)&lt;br /&gt;
mit dem Befehl AT+CWMODE=2. Nach diesem Befehl ist ein Reset des Moduls erforderlich, damit die Änderung &lt;br /&gt;
sichtbar wird. Mit dem Befehl AT+RST führen wir diesen durch. Das Modul startet neu und die Stromaufnahme&lt;br /&gt;
steigt auf ca 80 mA. Das Modul ist jetzt als WLAN-AP im Wireless-LAN sichtbar. &lt;br /&gt;
&lt;br /&gt;
Jetzt müssen wir noch einstellen, dass wir mehrere Verbindungen gleichzeitig haben wollen, sowie den TCP-Server starten und einstellen. Mit dem Befehl AT+CIPMUX=1 sagen wir dem Modul, dass wir mehrere Verbindungen haben wollen. Und mit dem Befehl AT+CIPSERVER=1,2526 starten wir den TCP-Server und lassen ihn auf Port 2526 laufen. Sobald sich ein Client verbindet, sendet das Modul &#039;Link&#039; + LF + CR. Beim Trennen einer Verbindung vom Client kommt &#039;Unlink&#039; + LF + CR.&lt;br /&gt;
&lt;br /&gt;
Ab hier können wir uns über einen TCP-Socket auf Port 2526 mit dem Modul verbinden und Daten austauschen. Empfangene Daten werden folgendermaßen angezeigt. Gesendet wurde  &amp;quot;Hallo Leute&amp;quot; + LF + CR.&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
     +IPD,0,11:Hallo Leute&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
     OK&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+IPD kommt immer, 0 ist die erste Verbindung. Wenn 2 Geräte gleichzeitig eine Verbindung aufgebaut haben, steht dort eine 1. 11 Zeichen wurden empfangen, dann kommen die Daten.&lt;br /&gt;
&lt;br /&gt;
Zum Senden von Daten vom Modul zum Client geht man folgenderweise vor. Erstmal sagen wir dem Modul, wieviele Daten wir an welche Verbindung schicken wollen. Mit dem Befehl AT+CIPSEND=0,5 z. B. sagen wir dem Modul wir möchten 5 Bytes an Verbindung 0 senden. Nach diesem Befehl werden die nächsten 5 Zeichen direkt an die Verbindung weitergereicht.&lt;br /&gt;
Sollte keine aktive Verbindung bestehen, sendet das Modul &lt;br /&gt;
     AT+CIPSEND=0,5&amp;lt;\r&amp;gt;&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;link is not&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
ansonsten kommt &lt;br /&gt;
     &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt; &amp;gt;&lt;br /&gt;
und man kann Daten senden. Nach dem Absenden der Daten &#039;Leute&#039; + LF + CR sendet das Modul &lt;br /&gt;
    Leute&amp;lt;\r&amp;gt;&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;busy&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    busy&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    SEND OK&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einstellen des Moduls als Station&lt;br /&gt;
&lt;br /&gt;
== Software Development Kit (SDK) ==&lt;br /&gt;
Mit dem SDK können eigene Applikationen programmiert und die im SDK vorhandenen Beispiele &amp;quot;AT&amp;quot; und &amp;quot;IoT&amp;quot; verändert werden. Das SDK wird vom Hersteller zur Verfügung gestellt (Stand 25.10.2014). Passend zum SDK existiert eine virtuelle Maschine mit eingerichtetem gcc zum Kompilieren. Insbesondere der nun verfügbare gcc basiert auf einer Community-Entwicklung.&lt;br /&gt;
&lt;br /&gt;
[http://bbs.espressif.com/viewforum.php?f=5&amp;amp;sid=3cf7540ab17805367e6a45d2c4682fc9 SDK0.9.2 + virtuelle Linuxmaschine mit eingerichtetem gcc]&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/folderview?id=0B5bwBE9A5dBXaExvdDExVFNrUXM&amp;amp;usp=sharing Alternativlink für die virtuelle Maschine + Anleitung/HOWTO für das Setup sowie für das Kompilieren]&lt;br /&gt;
&lt;br /&gt;
Weiterhin gibt es eine Community Version [https://github.com/esp8266/esp8266-wiki/tree/master/sdk GitHub] die jedoch seit zwei Jahren nicht weiterentwickelt wird.&lt;br /&gt;
&lt;br /&gt;
=== Anmerkung ===&lt;br /&gt;
Mit dem SDK wird der Mikrocontroller programmiert, der sich direkt auf dem ESP8266-SoC-Chip befindet. Dies ist nicht zu verwechseln mit Programmieranleitungen zur UART-Ansteuerung des ESP8266-SoC (meist mit AT-Firmware) mit einem anderen Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
==Checkliste bei Problemen mit dem Modul/Compiler/SDK==&lt;br /&gt;
Bitte berücksichtige bei der Frage nach Hilfestellung zu Deinem Problem die folgende Checkliste.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Problemen mit der AT-Firmware/UART-Ansteuerung mit Mikrocontroller&#039;&#039;&#039;&lt;br /&gt;
# Was nutzt Du für die Stromversorgung?&amp;lt;br/&amp;gt;(Ganz knapp benennen, so dass Rückschlüsse auf Spannung und Stromstärke möglich sind)&lt;br /&gt;
# Welche Firmware-Version verwendest Du und von woher hast Du sie?&lt;br /&gt;
# Welchen Mikrocontroller verwendest Du?&lt;br /&gt;
# Welche Baudrate verwendest Du?&lt;br /&gt;
# &amp;quot;Sieht&amp;quot; das Modul den AP, &amp;quot;sieht&amp;quot; der PC das Modul?&lt;br /&gt;
# Funktioniert ein Connect?&lt;br /&gt;
# Welche AT-Befehlssequenz verwendest Du und was antwortet das Modul?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Problemen mit dem SDK/Compiler&#039;&#039;&#039;&lt;br /&gt;
# Benutzt Du die neuste, offizielle VM?&amp;lt;br/&amp;gt;(Diese ist ausgelegt für das neueste SDK)&lt;br /&gt;
# Benutzt Du das neueste, offizielle SDK? Welche Version benutzt Du?&amp;lt;br/&amp;gt;(Es werden regelmäßig Bugfixes und Erweiterungen eingepflegt)&lt;br /&gt;
# Kannst Du die SDK-Beispiele (IoT,AT) entsprechend der offiziellen Anleitung kompilieren, flashen und läuft es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[https://en.wikipedia.org/wiki/ESP8266 ESP8266-Eintrag auf en.wikipedia.org]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.esp8266.com/ ESP8266-Community-Forum]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://github.com/esp8266 ESP8266 Github mit Wiki und Source-Code-Beispielen]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://hackaday.com/tag/esp8266/ Hackaday-Posts zu ESP8266]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://espressif.com/en/products/esp8266/ ESP8266-Seite des Herstellers]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/ ESP8266-Forum des Herstellers]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller-elektronik.de/nodemcu-esp8266-tutorial-wlan-board-arduino-ide/ ESP8266 und NodeMCU - Tutorial mit Farbdisplay und Temperatursensor]&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://www.mikrocontroller.net/forum/mikrocontroller-elektronik/esp Beiträge im mikrocontroller.net-Forum]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/topic/342878 Sammelbestellungen im mikrocontroller.net-Forum]&lt;br /&gt;
&lt;br /&gt;
[http://esp8266-server.de/ Universelle I2C-Steuerung mittels WLAN-TCP/IP und Webinterface mit ESP8266]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://blog.thomasheldt.de/ Viele Projekte und Informationen zum ESP8266]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://stefanfrings.de/wlan_io/ Projekt I/O-Schnittstellenmodul mit WLAN] (Stefan Frings)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://stefanfrings.de/esp8266/ Dokumentation zum ESP8266 mit Arduino Code-Beispielen] (Stefan Frings)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dokumente === &lt;br /&gt;
[http://neilkolban.com/tech/esp8266/ Kolban’s book on the ESP8266] Sehr empfehlenswert!&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://drive.google.com/folderview?id=0B5bwBE9A5dBXaExvdDExVFNrUXM&amp;amp;usp=sharing Anleitung/HOWTO für das Setup der virtuellen Maschine (SDK) sowie für das Kompilieren]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://nurdspace.nl/ESP8266 Übersetztes Datenblatt]&amp;lt;br /&amp;gt;&lt;br /&gt;
[http://www.electrodragon.com/w/Wi07c AT Instructions Set (English)] und [http://www.electrodragon.com/w/Wi07c#First_time_use_guide Anleitung zum Betrieb an einem Arduino (inkl. Code)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://thomaspfeifer.net/esp8266_wlan_seriell_modul_at_kommandos.htm Beschreibung der AT-Kommandos mit Beispielen]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/229016/Espressif_IoT_AT____v0.1.5.906.pdf Espressif AT Instruction Set(Chinese)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.seeedstudio.com/document/pdf/ESP8266%20Specifications(Chinese).pdf ESP8266 Specifications(Chinese)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://nodemcu.readthedocs.org/en/dev/ NodeMCU-Documentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://cknodemcu.wordpress.com/2015/11/24/building-an-iot-node-for-less-than-15/ Building an IoT Node for less than 15$] (Paper, Kindle via Amazon)&lt;br /&gt;
&lt;br /&gt;
===Daten===&lt;br /&gt;
[http://bbs.espressif.com/viewforum.php?f=5&amp;amp;sid=3cf7540ab17805367e6a45d2c4682fc9 SDK0.9.2 + virtuelle Linux-Maschine mit eingerichtetem gcc]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://drive.google.com/folderview?id=0B5bwBE9A5dBXaExvdDExVFNrUXM&amp;amp;usp=sharing Alternativlink für die virtuelle Maschine]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://onedrive.live.com/#cid=C4DDF72E6EEA3826&amp;amp;id=C4DDF72E6EEA3826%21631 Dateien (Xplorer+SDK+PDF+etc.)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/230185/esp8266_config_v050.exe Config-Tool] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bezugsquellen ===&lt;br /&gt;
[http://espressif.com/en/company/contact/buy-a-sample/ Offizieller Espressif-Vertriebskanal] (Sample Purchase)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.aliexpress.com/wholesale?SearchText=ESP8266 aliexpress.com] ~ 2€&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.banggood.com/?zf=283997 banggood.com] ~ 3.50€&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.ebay.de/ Ebay]&lt;br /&gt;
ab 3€ inkl. Versand, Einzelstückpreis: ESP-01/02/03/04/05&amp;lt;br/&amp;gt;&lt;br /&gt;
(Suchbegriff: ESP8266, Option Artikelstandort: &amp;quot;Weltweit&amp;quot;)&amp;lt;br/&amp;gt;&lt;br /&gt;
(10 Stück ab 27 EUR inkl. Versand; Suchbegriff: 10pcs ESP8266)&amp;lt;br/&amp;gt;&lt;br /&gt;
ab 3.20€ inkl. Versand, Einzelstückpreis: ESP-07/08/09/11&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.electrodragon.com/?s=esp8266&amp;amp;post_type=product electrodragon.com] ~ 3.50€ (zzgl. Versand)&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://www.it-wns.de/themes/suche/index.php?suchekategorie=&amp;amp;sucheallgemein=esp8266 IT-WNS.de] (ESP-01/02/03/06/07/12E) je 3.99€ (zzgl. Versand)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.seeedstudio.com/depot/WiFi-Serial-Transceiver-Module-w-ESP8266-p-1994.html seeedstudio.com] ~ 5.50€&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://shop.in-circuit.de/index.php?cPath=21 In-Circuit.de] ESP-ADC-DIL-Modul mit ESP8266EX 9.90€ Einzelpreis&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.watterott.com/index.php?page=search&amp;amp;desc=off&amp;amp;sdesc=off&amp;amp;keywords=ESP8266 watterott.com] ab ~ 4€ (zzgl. Versand)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.ramser-elektro.at/shop/module-sensoren-adapter-und-co/esp8266-esp12f-wlan-modul www.ramser-elektro.at] ESP12F mit 16mBit Flash ~ 4.90€ (ab 35€ Versandkostenfrei)&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://www.pollin.de/p/espressif-esp-wroom-02-esp8266-wi-fi-modul-810696 www.pollin.de] ESP8266 Wi-Fi Modul ~3,95€ (Versandkosten  innerhalb Deutschlands 4,95 €)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anderes==&lt;br /&gt;
*[http://www.mikrocontroller.net/articles/ESP8266-CPCB PCB für Community-Modul (Vorschlag)]&lt;br /&gt;
* [http://www.mikrocontroller-elektronik.de/esp12e-tutorial-einstieg-mit-dem-esp8266-modul/ ESP8266 - ESP12E mit Arduino IDE programmieren]&lt;br /&gt;
*[http://fkainka.de/esp8266-in-der-arduino-ide/ ESP8266 mit Arduino-IDE programmieren]&lt;br /&gt;
*[http://www.arduinesp.com Arduino-IDE-Integration (ab 1.6.x)]&lt;br /&gt;
*[https://cknodemcu.wordpress.com/ NodeMCU (Lua) Anwendungen]&lt;br /&gt;
*[http://www.mikrocontroller-elektronik.de/esp8266-chip-buecher-projekte-wlan-chip Interessante deutsche Bücher zum ESP8266]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--von [[axhieb]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;br /&gt;
[[Kategorie:Funk]]&lt;br /&gt;
[[Kategorie:Wlan]]&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ESP8266&amp;diff=98200</id>
		<title>ESP8266</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ESP8266&amp;diff=98200"/>
		<updated>2018-01-12T12:06:33Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: /* Bezugsquellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:ESP8266.jpg|thumb|300px|ESP8266, Funkmodul]]&lt;br /&gt;
Das [[ESP8266]] von dem Hersteller Espressif ist ein programmierbarer WLAN-SoC mit [[UART]]- und [[SPI]]-Schnittstelle. &#039;&#039;&#039;WLAN&#039;&#039;&#039;-Funkmodule mit ESP8266 sind ab 3€ verfügbar. Die UART-Schnitttstelle ermöglicht eine einfache Integration in Mikrocontrollerprojekte.&lt;br /&gt;
&lt;br /&gt;
== Spezifikation ==&lt;br /&gt;
Laut Hersteller &amp;lt;ref&amp;gt;[http://espressif.com/en/products/esp8266 &#039;&#039;Herstellerseite -  unter Details&#039;&#039;] Abgerufen am 26. August 2014.&amp;lt;/ref&amp;gt;. :&lt;br /&gt;
* 802.11 b/g/n&lt;br /&gt;
* Wi-Fi Direct (P2P), soft-AP&lt;br /&gt;
* Integrated TCP/IP protocol stack&lt;br /&gt;
* Integrated TR switch, balun, LNA, power amplifier and matching network&lt;br /&gt;
* Integrated PLLs, regulators, DCXO and power management units&lt;br /&gt;
* +19.5dBm output power in 802.11b mode&lt;br /&gt;
* Power down leakage current of &amp;lt;20µA (bei 2,5V, Flash-Chip nicht mit gerechnet)&lt;br /&gt;
* Integrated low power 32-bit CPU could be used as application processor&lt;br /&gt;
* SDIO 1.1/2.0, SPI, UART&lt;br /&gt;
* STBC, 1×1 MIMO, 2×1 MIMO&lt;br /&gt;
* A-MPDU &amp;amp; A-MSDU aggregation &amp;amp; 0.4ms guard interval&lt;br /&gt;
* Wake up and transmit packets in &amp;lt; 2ms&lt;br /&gt;
* Standby power consumption of &amp;lt; 1.0mW (DTIM3)&lt;br /&gt;
* VCC: 2,5...3,6V (Achtung: Eingänge sind &#039;&#039;&#039;NICHT 5V TOLERANT&#039;&#039;&#039;!)&lt;br /&gt;
Weiterhin:&lt;br /&gt;
* GPIOs, ADC&lt;br /&gt;
&lt;br /&gt;
=== Datendurchsatz/Performanz ===&lt;br /&gt;
[https://www.mikrocontroller.net/topic/342240?page=single#3857630 Beitrag im Forum mit Tests: TCP: bis zu 7 MBit/s]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?f=7&amp;amp;t=24 Beitrag Espressif-Forum: UART loopback: 4.5 Mbps]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?t=2187 Beitrag Espressif-Forum: 300kbps senden und empfangen im TCP passhrough Modus]&amp;lt;br/&amp;gt;&lt;br /&gt;
200-300k Byte/s Senden und Empfangen via TCP und UDP mit C Programm und SDK 1.5.4 (Bei stefanus zuhause)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Bei Verwendung der AT-Firmware (v1.1.0.0 aus SDK 1.5.4) mit einem seriell angeschlossenen Mikrocontroller dauert die Antwort auf ein kurzes Kommando (vom PC an den µC und zurück) typischerweise 100-200ms.&lt;br /&gt;
&lt;br /&gt;
=== Power-/Sleep-Modes ===&lt;br /&gt;
Der Stromverbrauch des ESP8266 ist abhängig von vielen Faktoren, er lässt sich aber durch geschickte Programmierung durchaus deutlich senken.&amp;lt;br/&amp;gt;&lt;br /&gt;
So ist es nicht notwendig, dass das WIFI-Modem oder der Mikrocontroller ständig läuft, um z.B. eine WLAN-Türklingel zu realisieren. Im &amp;quot;Deep-Sleep&amp;quot; würde der ESP8266 dann nur wenige µA verbrauchen, bis er über einen Timer zurückgesetzt wird und die Meldung absetzt.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Stefanus hat 25µA gemessen: [https://www.mikrocontroller.net/topic/425023?goto=4985619#4985619]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?f=6&amp;amp;t=133 Detailierte Übersicht der verschieden Modi und deren Stromverbrauch von Espressif] (nicht mehr aktuell!)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WLAN-Module mit ESP8266 ==&lt;br /&gt;
Es existieren ca. 11 Varianten von chinesischen Herstellern. Beispielsweise mit PCB- oder Keramik-Antenne oder mit u.fl.&lt;br /&gt;
&lt;br /&gt;
* Die Firmware aus SDK 0.9.1 unterstützt bis zu vier gleichzeitige TCP- oder UDP-Verbindungen. &lt;br /&gt;
* Die Firmware aus SDK 1.5.4 unterstützt bis zu fünf gleichzeitige TCP- oder UDP-Verbindungen.&lt;br /&gt;
&lt;br /&gt;
Sie kann sich in vorhandene WLAN-Netze einbuchen, aber auch selbst Access-Point mit DHCP-Server sein. Der Access-Point ist zu Android kompatibel (mit 4.1.2 getestet).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Die Firmware enthält jedoch keinen Router. Mehrere Computer, die mit dem Modul als Access-Point verbunden sind, können keine Verbindung zueinander aufbauen. Das Feature nennt sich AP-Isolation.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
#Produktbeschreibung: [[http://playground.boxtec.ch/doku.php/wireless/esp8266]]&lt;br /&gt;
&lt;br /&gt;
=== Pinbelegung einiger ESP8266-Module ===&lt;br /&gt;
====ESP8266-01====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:ESP8266-PinBelegung1.jpg|Pinbelegung - Groß mit PCB-Antenne&lt;br /&gt;
Datei:ESP8266-PinBelegung2.jpg|Pinbelegung - Klein mit Keramik-Antenne&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
Quelle &amp;lt;ref&amp;gt;[http://pan.baidu.com/share/link?shareid=727869034&amp;amp;uk=1900861665 &#039;&#039;Seller Information&#039;&#039;] Abgerufen am 26. August 2014.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
====ESP8266-07====&lt;br /&gt;
Achtung, beim ESP8266-07-Modul sind einige mit vertauschten Beschriftungen von GPIO4 und GPIO5 unterwegs!!.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ESP8266-12E====&lt;br /&gt;
Das ESP12E-Modul gehört vermutlich wegen der vielen Ports zu den beliebtesten Modulen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller-elektronik.de/?projekt-download=2967 Pinbelegung (PDF)]&lt;br /&gt;
Für dieses Modul gibt es auch ein spezielles Adapter-Projekt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Adapter-ESP12E.jpeg|miniatur|zentriert]]&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller-elektronik.de/esp12e-tutorial-einstieg-mit-dem-esp8266-modul/ Projekt: ESP-12E Adapter und ESP12E Tutorial]&lt;br /&gt;
&lt;br /&gt;
== Möglichkeiten der Nutzung und Programmierung ==&lt;br /&gt;
===== Benutzung einer Firmware =====&lt;br /&gt;
Verschiedene Projekte betreiben die Entwicklung einer Firmware. Man kann die Firmware &amp;quot;einfach nur&amp;quot; flashen und benutzen oder sich auch aktiv an der Entwicklung beteiligen. Es gibt unter anderem folgende Projekte:&lt;br /&gt;
* AT-Befehle: Firmware, mit welcher das Modul über UART angesprochen wird.&lt;br /&gt;
** von Espressif ([https://github.com/espressif/ESP8266_NONOS_SDK/tree/master/bin/at GitHub])&lt;br /&gt;
** von Electrodragon ([http://www.electrodragon.com/w/ESP8266_AT-Command_firmware Forum])&lt;br /&gt;
* Micropython: Firmware, die das Ablaufen von Python-Scripts ermöglicht ([https://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/intro.html Tutorial])&lt;br /&gt;
* NodeMCU: Firmware, die das Ablaufen von Lua-Scripts ermöglicht ([https://github.com/nodemcu/nodemcu-firmware Github])&lt;br /&gt;
* smartJS: Firmware, die das Ausführen von Javascript erlaubt ([https://github.com/cesanta/smart.js Github])&lt;br /&gt;
* Arduino core for ESP8266 WiFi chip: Programmierumgebung &amp;amp; Firmware, die das Ausführen von C-Programmen ermöglicht, im Stil der bekannten Arduino-Plattform. [https://github.com/esp8266/Arduino Github - ink. Anleitung]&lt;br /&gt;
* ESP8266 Basic: Firmware, die das Ausführen von Basic-Programmen und das Editieren über WLAN erlaubt [http://www.esp8266basic.com/]&lt;br /&gt;
* Sming: Einfach zu nutzendes Framework, ähnlich wie Arduino, allerdings mit einem einfachen Makefile pro Projekt und mit Eclipse-Projekten.([https://github.com/SmingHub/Sming Github])&lt;br /&gt;
* ESP-Lisp (BETA): A small fast lisp interpeter for a ESP8266 ([https://github.com/yesco/esp-lisp Github])&lt;br /&gt;
* ESP8266Forth:  Forth for the ESP8266 NodeMCU Amica ([https://github.com/CraigLindley/ESP8266Forth Github])&lt;br /&gt;
* Forthright: Forth for ESP-8266 ([https://github.com/niclash/forthright Github])&lt;br /&gt;
* Punyforth:  FORTH inspired programming language for the ESP8266 ([https://github.com/zeroflag/punyforth Github])&lt;br /&gt;
* ESP-LINK: Wifi-Serial Bridge w/REST&amp;amp;MQTT([https://github.com/jeelabs/esp-link Github])&lt;br /&gt;
* ESPEasy: turn the ESP module into an easy multifunction sensor device for Home Automation solutions like FHEM. Configuration of the ESP Easy is entirely web based ([https://github.com/letscontrolit/ESPEasy])&lt;br /&gt;
&lt;br /&gt;
===== Erstellen (Kompilieren) einer Firmware =====&lt;br /&gt;
Für die Erstellung einer individuellen Firmware gibt es zwei Möglichkeiten:&lt;br /&gt;
* Software Development Kit (SDK): Erstellen einer Firmware mit einer GCC-Toolchain&lt;br /&gt;
* Arduino IDE: Erstellen einer Firmware mit einer Arduino-IDE&lt;br /&gt;
Projekte, die eine Firmware für das ESP8266 entwickeln (siehe vorheriger Abschnitt), benutzen eine dieser beiden Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
=== Firmware flashen/updaten ===&lt;br /&gt;
Typischerweise wird eine kompilierte Firmware per UART-Bootloader des ESP8266-SoC auf einen Flash-Chip eines ESP8266-Moduls geladen. Von dort startet der ESP8266-SoC anschließend die Firmware.&lt;br /&gt;
&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?f=5&amp;amp;t=433 Flash-Download-Tool vom Hersteller] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://github.com/themadinventor/esptool Python-Tool zum Flashen (von Fredrik Ahlberg)] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://github.com/3s1d/esp_prog Extension zum Tool von Fredrik Ahlberg] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/topic/342240?page=2#3857075 Tool zum Flashen (von Christian Klippel)] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://web.archive.org/web/20150502082616/http://defcon-cc.dyndns.org/wiki/ESP8266#Update Anleitung, extern] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/topic/342240?page=3#3810559 Anleitung, Forum]&lt;br /&gt;
&lt;br /&gt;
Der Hersteller veröffentlicht regelmäßig [http://bbs.espressif.com/viewforum.php?f=5 Firmwareupdates] als Bestandteil des esp_iot_sdk. Die Firmware-Dateien befinden sich im Verzeichnis bin. Das Update wird beispielsweise für Firmware 0.9.5 folgendermaßen durchgeführt: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python esptool.py --baud 9600 --port com6 write_flash 0x00000 boot_v1.2.bin 0x01000 at/user1.512.new.bin 0x3e000 blank.bin 0x7e000 blank.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abhängig von der Flashgröße muss man die Firmware ab Version 1.0.1 selbst compilieren. Siehe Diskussion [http://www.esp8266.com/viewtopic.php?p=16515 hier] und [http://bbs.espressif.com/viewtopic.php?f=16&amp;amp;t=400 hier].&lt;br /&gt;
&lt;br /&gt;
=== Nutzung ohne Firmware ===&lt;br /&gt;
Es ist wohl sogar möglich den ESP8266 als SDIO-WLAN-Modul an einem Raspberry Pi zu betreiben. Verwendet wird dabei der Linuxtreiber des ESP8089. Der ESP8266 bootet dann nicht die Firmware aus dem Flash sondern über SDIO.    &lt;br /&gt;
&lt;br /&gt;
https://hackaday.io/project/8678-rpi-wifi&lt;br /&gt;
&lt;br /&gt;
== AT-Befehle für eine Firmware auf Basis des SDK-Beispiels &amp;quot;AT&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Einstellen des Moduls als AP&lt;br /&gt;
&lt;br /&gt;
Da wir nicht wissen, in welchem Modus sich das Modul gerade befindet, fragen wir diesen mit dem &lt;br /&gt;
Befehl AT+CWMODE? ab. Das Modul antwortet mit &lt;br /&gt;
&lt;br /&gt;
    AT+CWMODE?&amp;lt;\r&amp;gt;&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;+CWMODE:1&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    OK&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
In diesem Fall ist das Modul aktuell im Modus 1 (Station) eingestellt. Also ändern wir den Modus auf 2 (AP)&lt;br /&gt;
mit dem Befehl AT+CWMODE=2. Nach diesem Befehl ist ein Reset des Moduls erforderlich, damit die Änderung &lt;br /&gt;
sichtbar wird. Mit dem Befehl AT+RST führen wir diesen durch. Das Modul startet neu und die Stromaufnahme&lt;br /&gt;
steigt auf ca 80 mA. Das Modul ist jetzt als WLAN-AP im Wireless-LAN sichtbar. &lt;br /&gt;
&lt;br /&gt;
Jetzt müssen wir noch einstellen, dass wir mehrere Verbindungen gleichzeitig haben wollen, sowie den TCP-Server starten und einstellen. Mit dem Befehl AT+CIPMUX=1 sagen wir dem Modul, dass wir mehrere Verbindungen haben wollen. Und mit dem Befehl AT+CIPSERVER=1,2526 starten wir den TCP-Server und lassen ihn auf Port 2526 laufen. Sobald sich ein Client verbindet, sendet das Modul &#039;Link&#039; + LF + CR. Beim Trennen einer Verbindung vom Client kommt &#039;Unlink&#039; + LF + CR.&lt;br /&gt;
&lt;br /&gt;
Ab hier können wir uns über einen TCP-Socket auf Port 2526 mit dem Modul verbinden und Daten austauschen. Empfangene Daten werden folgendermaßen angezeigt. Gesendet wurde  &amp;quot;Hallo Leute&amp;quot; + LF + CR.&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
     +IPD,0,11:Hallo Leute&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
     OK&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+IPD kommt immer, 0 ist die erste Verbindung. Wenn 2 Geräte gleichzeitig eine Verbindung aufgebaut haben, steht dort eine 1. 11 Zeichen wurden empfangen, dann kommen die Daten.&lt;br /&gt;
&lt;br /&gt;
Zum Senden von Daten vom Modul zum Client geht man folgenderweise vor. Erstmal sagen wir dem Modul, wieviele Daten wir an welche Verbindung schicken wollen. Mit dem Befehl AT+CIPSEND=0,5 z. B. sagen wir dem Modul wir möchten 5 Bytes an Verbindung 0 senden. Nach diesem Befehl werden die nächsten 5 Zeichen direkt an die Verbindung weitergereicht.&lt;br /&gt;
Sollte keine aktive Verbindung bestehen, sendet das Modul &lt;br /&gt;
     AT+CIPSEND=0,5&amp;lt;\r&amp;gt;&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;link is not&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
ansonsten kommt &lt;br /&gt;
     &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt; &amp;gt;&lt;br /&gt;
und man kann Daten senden. Nach dem Absenden der Daten &#039;Leute&#039; + LF + CR sendet das Modul &lt;br /&gt;
    Leute&amp;lt;\r&amp;gt;&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;busy&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    busy&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    SEND OK&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einstellen des Moduls als Station&lt;br /&gt;
&lt;br /&gt;
== Software Development Kit (SDK) ==&lt;br /&gt;
Mit dem SDK können eigene Applikationen programmiert und die im SDK vorhandenen Beispiele &amp;quot;AT&amp;quot; und &amp;quot;IoT&amp;quot; verändert werden. Das SDK wird vom Hersteller zur Verfügung gestellt (Stand 25.10.2014). Passend zum SDK existiert eine virtuelle Maschine mit eingerichtetem gcc zum Kompilieren. Insbesondere der nun verfügbare gcc basiert auf einer Community-Entwicklung.&lt;br /&gt;
&lt;br /&gt;
[http://bbs.espressif.com/viewforum.php?f=5&amp;amp;sid=3cf7540ab17805367e6a45d2c4682fc9 SDK0.9.2 + virtuelle Linuxmaschine mit eingerichtetem gcc]&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/folderview?id=0B5bwBE9A5dBXaExvdDExVFNrUXM&amp;amp;usp=sharing Alternativlink für die virtuelle Maschine + Anleitung/HOWTO für das Setup sowie für das Kompilieren]&lt;br /&gt;
&lt;br /&gt;
Weiterhin gibt es eine Community Version [https://github.com/esp8266/esp8266-wiki/tree/master/sdk GitHub] die jedoch seit zwei Jahren nicht weiterentwickelt wird.&lt;br /&gt;
&lt;br /&gt;
=== Anmerkung ===&lt;br /&gt;
Mit dem SDK wird der Mikrocontroller programmiert, der sich direkt auf dem ESP8266-SoC-Chip befindet. Dies ist nicht zu verwechseln mit Programmieranleitungen zur UART-Ansteuerung des ESP8266-SoC (meist mit AT-Firmware) mit einem anderen Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
==Checkliste bei Problemen mit dem Modul/Compiler/SDK==&lt;br /&gt;
Bitte berücksichtige bei der Frage nach Hilfestellung zu Deinem Problem die folgende Checkliste.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Problemen mit der AT-Firmware/UART-Ansteuerung mit Mikrocontroller&#039;&#039;&#039;&lt;br /&gt;
# Was nutzt Du für die Stromversorgung?&amp;lt;br/&amp;gt;(Ganz knapp benennen, so dass Rückschlüsse auf Spannung und Stromstärke möglich sind)&lt;br /&gt;
# Welche Firmware-Version verwendest Du und von woher hast Du sie?&lt;br /&gt;
# Welchen Mikrocontroller verwendest Du?&lt;br /&gt;
# Welche Baudrate verwendest Du?&lt;br /&gt;
# &amp;quot;Sieht&amp;quot; das Modul den AP, &amp;quot;sieht&amp;quot; der PC das Modul?&lt;br /&gt;
# Funktioniert ein Connect?&lt;br /&gt;
# Welche AT-Befehlssequenz verwendest Du und was antwortet das Modul?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Problemen mit dem SDK/Compiler&#039;&#039;&#039;&lt;br /&gt;
# Benutzt Du die neuste, offizielle VM?&amp;lt;br/&amp;gt;(Diese ist ausgelegt für das neueste SDK)&lt;br /&gt;
# Benutzt Du das neueste, offizielle SDK? Welche Version benutzt Du?&amp;lt;br/&amp;gt;(Es werden regelmäßig Bugfixes und Erweiterungen eingepflegt)&lt;br /&gt;
# Kannst Du die SDK-Beispiele (IoT,AT) entsprechend der offiziellen Anleitung kompilieren, flashen und läuft es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[https://en.wikipedia.org/wiki/ESP8266 ESP8266-Eintrag auf en.wikipedia.org]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.esp8266.com/ ESP8266-Community-Forum]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://github.com/esp8266 ESP8266 Github mit Wiki und Source-Code-Beispielen]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://hackaday.com/tag/esp8266/ Hackaday-Posts zu ESP8266]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://espressif.com/en/products/esp8266/ ESP8266-Seite des Herstellers]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/ ESP8266-Forum des Herstellers]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller-elektronik.de/nodemcu-esp8266-tutorial-wlan-board-arduino-ide/ ESP8266 und NodeMCU - Tutorial mit Farbdisplay und Temperatursensor]&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://www.mikrocontroller.net/forum/mikrocontroller-elektronik/esp Beiträge im mikrocontroller.net-Forum]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/topic/342878 Sammelbestellungen im mikrocontroller.net-Forum]&lt;br /&gt;
&lt;br /&gt;
[http://esp8266-server.de/ Universelle I2C-Steuerung mittels WLAN-TCP/IP und Webinterface mit ESP8266]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://blog.thomasheldt.de/ Viele Projekte und Informationen zum ESP8266]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://stefanfrings.de/wlan_io/ Projekt I/O-Schnittstellenmodul mit WLAN] (Stefan Frings)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://stefanfrings.de/esp8266/ Dokumentation zum ESP8266 mit Arduino Code-Beispielen] (Stefan Frings)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dokumente === &lt;br /&gt;
[http://neilkolban.com/tech/esp8266/ Kolban’s book on the ESP8266] Sehr empfehlenswert!&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://drive.google.com/folderview?id=0B5bwBE9A5dBXaExvdDExVFNrUXM&amp;amp;usp=sharing Anleitung/HOWTO für das Setup der virtuellen Maschine (SDK) sowie für das Kompilieren]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://nurdspace.nl/ESP8266 Übersetztes Datenblatt]&amp;lt;br /&amp;gt;&lt;br /&gt;
[http://www.electrodragon.com/w/Wi07c AT Instructions Set (English)] und [http://www.electrodragon.com/w/Wi07c#First_time_use_guide Anleitung zum Betrieb an einem Arduino (inkl. Code)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://thomaspfeifer.net/esp8266_wlan_seriell_modul_at_kommandos.htm Beschreibung der AT-Kommandos mit Beispielen]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/229016/Espressif_IoT_AT____v0.1.5.906.pdf Espressif AT Instruction Set(Chinese)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.seeedstudio.com/document/pdf/ESP8266%20Specifications(Chinese).pdf ESP8266 Specifications(Chinese)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://nodemcu.readthedocs.org/en/dev/ NodeMCU-Documentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://cknodemcu.wordpress.com/2015/11/24/building-an-iot-node-for-less-than-15/ Building an IoT Node for less than 15$] (Paper, Kindle via Amazon)&lt;br /&gt;
&lt;br /&gt;
===Daten===&lt;br /&gt;
[http://bbs.espressif.com/viewforum.php?f=5&amp;amp;sid=3cf7540ab17805367e6a45d2c4682fc9 SDK0.9.2 + virtuelle Linux-Maschine mit eingerichtetem gcc]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://drive.google.com/folderview?id=0B5bwBE9A5dBXaExvdDExVFNrUXM&amp;amp;usp=sharing Alternativlink für die virtuelle Maschine]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://onedrive.live.com/#cid=C4DDF72E6EEA3826&amp;amp;id=C4DDF72E6EEA3826%21631 Dateien (Xplorer+SDK+PDF+etc.)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/230185/esp8266_config_v050.exe Config-Tool] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bezugsquellen ===&lt;br /&gt;
[http://espressif.com/en/company/contact/buy-a-sample/ Offizieller Espressif-Vertriebskanal] (Sample Purchase)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.aliexpress.com/wholesale?SearchText=ESP8266 aliexpress.com] ~ 2€&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.banggood.com/?zf=283997 banggood.com] ~ 3.50€&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.ebay.de/ Ebay]&lt;br /&gt;
ab 3€ inkl. Versand, Einzelstückpreis: ESP-01/02/03/04/05&amp;lt;br/&amp;gt;&lt;br /&gt;
(Suchbegriff: ESP8266, Option Artikelstandort: &amp;quot;Weltweit&amp;quot;)&amp;lt;br/&amp;gt;&lt;br /&gt;
(10 Stück ab 27 EUR inkl. Versand; Suchbegriff: 10pcs ESP8266)&amp;lt;br/&amp;gt;&lt;br /&gt;
ab 3.20€ inkl. Versand, Einzelstückpreis: ESP-07/08/09/11&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.electrodragon.com/?s=esp8266&amp;amp;post_type=product electrodragon.com] ~ 3.50€ (zzgl. Versand)&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://www.it-wns.de/themes/suche/index.php?suchekategorie=&amp;amp;sucheallgemein=esp8266 IT-WNS.de] (ESP-01/02/03/06/07/12E) je 3.99€ (zzgl. Versand)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.seeedstudio.com/depot/WiFi-Serial-Transceiver-Module-w-ESP8266-p-1994.html seeedstudio.com] ~ 5.50€&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://shop.in-circuit.de/index.php?cPath=21 In-Circuit.de] ESP-ADC-DIL-Modul mit ESP8266EX 9.90€ Einzelpreis&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.watterott.com/index.php?page=search&amp;amp;desc=off&amp;amp;sdesc=off&amp;amp;keywords=ESP8266 watterott.com] ab ~ 4€ (zzgl. Versand)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.ramser-elektro.at/shop/module-sensoren-adapter-und-co/esp8266-esp12f-wlan-modul www.ramser-elektro.at] ESP12F mit 16mBit Flash ~ 4.90€ (ab 35€ Versandkostenfrei)&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://www.pollin.de/p/espressif-esp-wroom-02-esp8266-wi-fi-modul-810696/ www.pollin.de] ESP8266 Wi-Fi Modul ~3,95€ (Versandkosten  innerhalb Deutschlands 4,95 €)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anderes==&lt;br /&gt;
*[http://www.mikrocontroller.net/articles/ESP8266-CPCB PCB für Community-Modul (Vorschlag)]&lt;br /&gt;
* [http://www.mikrocontroller-elektronik.de/esp12e-tutorial-einstieg-mit-dem-esp8266-modul/ ESP8266 - ESP12E mit Arduino IDE programmieren]&lt;br /&gt;
*[http://fkainka.de/esp8266-in-der-arduino-ide/ ESP8266 mit Arduino-IDE programmieren]&lt;br /&gt;
*[http://www.arduinesp.com Arduino-IDE-Integration (ab 1.6.x)]&lt;br /&gt;
*[https://cknodemcu.wordpress.com/ NodeMCU (Lua) Anwendungen]&lt;br /&gt;
*[http://www.mikrocontroller-elektronik.de/esp8266-chip-buecher-projekte-wlan-chip Interessante deutsche Bücher zum ESP8266]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--von [[axhieb]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;br /&gt;
[[Kategorie:Funk]]&lt;br /&gt;
[[Kategorie:Wlan]]&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ESP8266&amp;diff=98164</id>
		<title>ESP8266</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ESP8266&amp;diff=98164"/>
		<updated>2018-01-11T08:24:15Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: /* Bezugsquellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:ESP8266.jpg|thumb|300px|ESP8266, Funkmodul]]&lt;br /&gt;
Das [[ESP8266]] von dem Hersteller Espressif ist ein programmierbarer WLAN-SoC mit [[UART]]- und [[SPI]]-Schnittstelle. &#039;&#039;&#039;WLAN&#039;&#039;&#039;-Funkmodule mit ESP8266 sind ab 3€ verfügbar. Die UART-Schnitttstelle ermöglicht eine einfache Integration in Mikrocontrollerprojekte.&lt;br /&gt;
&lt;br /&gt;
== Spezifikation ==&lt;br /&gt;
Laut Hersteller &amp;lt;ref&amp;gt;[http://espressif.com/en/products/esp8266 &#039;&#039;Herstellerseite -  unter Details&#039;&#039;] Abgerufen am 26. August 2014.&amp;lt;/ref&amp;gt;. :&lt;br /&gt;
* 802.11 b/g/n&lt;br /&gt;
* Wi-Fi Direct (P2P), soft-AP&lt;br /&gt;
* Integrated TCP/IP protocol stack&lt;br /&gt;
* Integrated TR switch, balun, LNA, power amplifier and matching network&lt;br /&gt;
* Integrated PLLs, regulators, DCXO and power management units&lt;br /&gt;
* +19.5dBm output power in 802.11b mode&lt;br /&gt;
* Power down leakage current of &amp;lt;20µA (bei 2,5V, Flash-Chip nicht mit gerechnet)&lt;br /&gt;
* Integrated low power 32-bit CPU could be used as application processor&lt;br /&gt;
* SDIO 1.1/2.0, SPI, UART&lt;br /&gt;
* STBC, 1×1 MIMO, 2×1 MIMO&lt;br /&gt;
* A-MPDU &amp;amp; A-MSDU aggregation &amp;amp; 0.4ms guard interval&lt;br /&gt;
* Wake up and transmit packets in &amp;lt; 2ms&lt;br /&gt;
* Standby power consumption of &amp;lt; 1.0mW (DTIM3)&lt;br /&gt;
* VCC: 2,5...3,6V (Achtung: Eingänge sind &#039;&#039;&#039;NICHT 5V TOLERANT&#039;&#039;&#039;!)&lt;br /&gt;
Weiterhin:&lt;br /&gt;
* GPIOs, ADC&lt;br /&gt;
&lt;br /&gt;
=== Datendurchsatz/Performanz ===&lt;br /&gt;
[https://www.mikrocontroller.net/topic/342240?page=single#3857630 Beitrag im Forum mit Tests: TCP: bis zu 7 MBit/s]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?f=7&amp;amp;t=24 Beitrag Espressif-Forum: UART loopback: 4.5 Mbps]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?t=2187 Beitrag Espressif-Forum: 300kbps senden und empfangen im TCP passhrough Modus]&amp;lt;br/&amp;gt;&lt;br /&gt;
200-300k Byte/s Senden und Empfangen via TCP und UDP mit C Programm und SDK 1.5.4 (Bei stefanus zuhause)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Bei Verwendung der AT-Firmware (v1.1.0.0 aus SDK 1.5.4) mit einem seriell angeschlossenen Mikrocontroller dauert die Antwort auf ein kurzes Kommando (vom PC an den µC und zurück) typischerweise 100-200ms.&lt;br /&gt;
&lt;br /&gt;
=== Power-/Sleep-Modes ===&lt;br /&gt;
Der Stromverbrauch des ESP8266 ist abhängig von vielen Faktoren, er lässt sich aber durch geschickte Programmierung durchaus deutlich senken.&amp;lt;br/&amp;gt;&lt;br /&gt;
So ist es nicht notwendig, dass das WIFI-Modem oder der Mikrocontroller ständig läuft, um z.B. eine WLAN-Türklingel zu realisieren. Im &amp;quot;Deep-Sleep&amp;quot; würde der ESP8266 dann nur wenige µA verbrauchen, bis er über einen Timer zurückgesetzt wird und die Meldung absetzt.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Stefanus hat 25µA gemessen: [https://www.mikrocontroller.net/topic/425023?goto=4985619#4985619]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?f=6&amp;amp;t=133 Detailierte Übersicht der verschieden Modi und deren Stromverbrauch von Espressif] (nicht mehr aktuell!)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WLAN-Module mit ESP8266 ==&lt;br /&gt;
Es existieren ca. 11 Varianten von chinesischen Herstellern. Beispielsweise mit PCB- oder Keramik-Antenne oder mit u.fl.&lt;br /&gt;
&lt;br /&gt;
* Die Firmware aus SDK 0.9.1 unterstützt bis zu vier gleichzeitige TCP- oder UDP-Verbindungen. &lt;br /&gt;
* Die Firmware aus SDK 1.5.4 unterstützt bis zu fünf gleichzeitige TCP- oder UDP-Verbindungen.&lt;br /&gt;
&lt;br /&gt;
Sie kann sich in vorhandene WLAN-Netze einbuchen, aber auch selbst Access-Point mit DHCP-Server sein. Der Access-Point ist zu Android kompatibel (mit 4.1.2 getestet).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Die Firmware enthält jedoch keinen Router. Mehrere Computer, die mit dem Modul als Access-Point verbunden sind, können keine Verbindung zueinander aufbauen. Das Feature nennt sich AP-Isolation.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
#Produktbeschreibung: [[http://playground.boxtec.ch/doku.php/wireless/esp8266]]&lt;br /&gt;
&lt;br /&gt;
=== Pinbelegung einiger ESP8266-Module ===&lt;br /&gt;
====ESP8266-01====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:ESP8266-PinBelegung1.jpg|Pinbelegung - Groß mit PCB-Antenne&lt;br /&gt;
Datei:ESP8266-PinBelegung2.jpg|Pinbelegung - Klein mit Keramik-Antenne&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
Quelle &amp;lt;ref&amp;gt;[http://pan.baidu.com/share/link?shareid=727869034&amp;amp;uk=1900861665 &#039;&#039;Seller Information&#039;&#039;] Abgerufen am 26. August 2014.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
====ESP8266-07====&lt;br /&gt;
Achtung, beim ESP8266-07-Modul sind einige mit vertauschten Beschriftungen von GPIO4 und GPIO5 unterwegs!!.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ESP8266-12E====&lt;br /&gt;
Das ESP12E-Modul gehört vermutlich wegen der vielen Ports zu den beliebtesten Modulen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller-elektronik.de/?projekt-download=2967 Pinbelegung (PDF)]&lt;br /&gt;
Für dieses Modul gibt es auch ein spezielles Adapter-Projekt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Adapter-ESP12E.jpeg|miniatur|zentriert]]&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller-elektronik.de/esp12e-tutorial-einstieg-mit-dem-esp8266-modul/ Projekt: ESP-12E Adapter und ESP12E Tutorial]&lt;br /&gt;
&lt;br /&gt;
== Möglichkeiten der Nutzung und Programmierung ==&lt;br /&gt;
===== Benutzung einer Firmware =====&lt;br /&gt;
Verschiedene Projekte betreiben die Entwicklung einer Firmware. Man kann die Firmware &amp;quot;einfach nur&amp;quot; flashen und benutzen oder sich auch aktiv an der Entwicklung beteiligen. Es gibt unter anderem folgende Projekte:&lt;br /&gt;
* AT-Befehle: Firmware, mit welcher das Modul über UART angesprochen wird.&lt;br /&gt;
** von Espressif ([https://github.com/espressif/ESP8266_NONOS_SDK/tree/master/bin/at GitHub])&lt;br /&gt;
** von Electrodragon ([http://www.electrodragon.com/w/ESP8266_AT-Command_firmware Forum])&lt;br /&gt;
* Micropython: Firmware, die das Ablaufen von Python-Scripts ermöglicht ([https://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/intro.html Tutorial])&lt;br /&gt;
* NodeMCU: Firmware, die das Ablaufen von Lua-Scripts ermöglicht ([https://github.com/nodemcu/nodemcu-firmware Github])&lt;br /&gt;
* smartJS: Firmware, die das Ausführen von Javascript erlaubt ([https://github.com/cesanta/smart.js Github])&lt;br /&gt;
* Arduino core for ESP8266 WiFi chip: Programmierumgebung &amp;amp; Firmware, die das Ausführen von C-Programmen ermöglicht, im Stil der bekannten Arduino-Plattform. [https://github.com/esp8266/Arduino Github - ink. Anleitung]&lt;br /&gt;
* ESP8266 Basic: Firmware, die das Ausführen von Basic-Programmen und das Editieren über WLAN erlaubt [http://www.esp8266basic.com/]&lt;br /&gt;
* Sming: Einfach zu nutzendes Framework, ähnlich wie Arduino, allerdings mit einem einfachen Makefile pro Projekt und mit Eclipse-Projekten.([https://github.com/SmingHub/Sming Github])&lt;br /&gt;
* ESP-Lisp (BETA): A small fast lisp interpeter for a ESP8266 ([https://github.com/yesco/esp-lisp Github])&lt;br /&gt;
* ESP8266Forth:  Forth for the ESP8266 NodeMCU Amica ([https://github.com/CraigLindley/ESP8266Forth Github])&lt;br /&gt;
* Forthright: Forth for ESP-8266 ([https://github.com/niclash/forthright Github])&lt;br /&gt;
* Punyforth:  FORTH inspired programming language for the ESP8266 ([https://github.com/zeroflag/punyforth Github])&lt;br /&gt;
* ESP-LINK: Wifi-Serial Bridge w/REST&amp;amp;MQTT([https://github.com/jeelabs/esp-link Github])&lt;br /&gt;
* ESPEasy: turn the ESP module into an easy multifunction sensor device for Home Automation solutions like FHEM. Configuration of the ESP Easy is entirely web based ([https://github.com/letscontrolit/ESPEasy])&lt;br /&gt;
&lt;br /&gt;
===== Erstellen (Kompilieren) einer Firmware =====&lt;br /&gt;
Für die Erstellung einer individuellen Firmware gibt es zwei Möglichkeiten:&lt;br /&gt;
* Software Development Kit (SDK): Erstellen einer Firmware mit einer GCC-Toolchain&lt;br /&gt;
* Arduino IDE: Erstellen einer Firmware mit einer Arduino-IDE&lt;br /&gt;
Projekte, die eine Firmware für das ESP8266 entwickeln (siehe vorheriger Abschnitt), benutzen eine dieser beiden Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
=== Firmware flashen/updaten ===&lt;br /&gt;
Typischerweise wird eine kompilierte Firmware per UART-Bootloader des ESP8266-SoC auf einen Flash-Chip eines ESP8266-Moduls geladen. Von dort startet der ESP8266-SoC anschließend die Firmware.&lt;br /&gt;
&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?f=5&amp;amp;t=433 Flash-Download-Tool vom Hersteller] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://github.com/themadinventor/esptool Python-Tool zum Flashen (von Fredrik Ahlberg)] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://github.com/3s1d/esp_prog Extension zum Tool von Fredrik Ahlberg] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/topic/342240?page=2#3857075 Tool zum Flashen (von Christian Klippel)] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://web.archive.org/web/20150502082616/http://defcon-cc.dyndns.org/wiki/ESP8266#Update Anleitung, extern] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/topic/342240?page=3#3810559 Anleitung, Forum]&lt;br /&gt;
&lt;br /&gt;
Der Hersteller veröffentlicht regelmäßig [http://bbs.espressif.com/viewforum.php?f=5 Firmwareupdates] als Bestandteil des esp_iot_sdk. Die Firmware-Dateien befinden sich im Verzeichnis bin. Das Update wird beispielsweise für Firmware 0.9.5 folgendermaßen durchgeführt: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python esptool.py --baud 9600 --port com6 write_flash 0x00000 boot_v1.2.bin 0x01000 at/user1.512.new.bin 0x3e000 blank.bin 0x7e000 blank.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abhängig von der Flashgröße muss man die Firmware ab Version 1.0.1 selbst compilieren. Siehe Diskussion [http://www.esp8266.com/viewtopic.php?p=16515 hier] und [http://bbs.espressif.com/viewtopic.php?f=16&amp;amp;t=400 hier].&lt;br /&gt;
&lt;br /&gt;
=== Nutzung ohne Firmware ===&lt;br /&gt;
Es ist wohl sogar möglich den ESP8266 als SDIO-WLAN-Modul an einem Raspberry Pi zu betreiben. Verwendet wird dabei der Linuxtreiber des ESP8089. Der ESP8266 bootet dann nicht die Firmware aus dem Flash sondern über SDIO.    &lt;br /&gt;
&lt;br /&gt;
https://hackaday.io/project/8678-rpi-wifi&lt;br /&gt;
&lt;br /&gt;
== AT-Befehle für eine Firmware auf Basis des SDK-Beispiels &amp;quot;AT&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Einstellen des Moduls als AP&lt;br /&gt;
&lt;br /&gt;
Da wir nicht wissen, in welchem Modus sich das Modul gerade befindet, fragen wir diesen mit dem &lt;br /&gt;
Befehl AT+CWMODE? ab. Das Modul antwortet mit &lt;br /&gt;
&lt;br /&gt;
    AT+CWMODE?&amp;lt;\r&amp;gt;&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;+CWMODE:1&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    OK&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
In diesem Fall ist das Modul aktuell im Modus 1 (Station) eingestellt. Also ändern wir den Modus auf 2 (AP)&lt;br /&gt;
mit dem Befehl AT+CWMODE=2. Nach diesem Befehl ist ein Reset des Moduls erforderlich, damit die Änderung &lt;br /&gt;
sichtbar wird. Mit dem Befehl AT+RST führen wir diesen durch. Das Modul startet neu und die Stromaufnahme&lt;br /&gt;
steigt auf ca 80 mA. Das Modul ist jetzt als WLAN-AP im Wireless-LAN sichtbar. &lt;br /&gt;
&lt;br /&gt;
Jetzt müssen wir noch einstellen, dass wir mehrere Verbindungen gleichzeitig haben wollen, sowie den TCP-Server starten und einstellen. Mit dem Befehl AT+CIPMUX=1 sagen wir dem Modul, dass wir mehrere Verbindungen haben wollen. Und mit dem Befehl AT+CIPSERVER=1,2526 starten wir den TCP-Server und lassen ihn auf Port 2526 laufen. Sobald sich ein Client verbindet, sendet das Modul &#039;Link&#039; + LF + CR. Beim Trennen einer Verbindung vom Client kommt &#039;Unlink&#039; + LF + CR.&lt;br /&gt;
&lt;br /&gt;
Ab hier können wir uns über einen TCP-Socket auf Port 2526 mit dem Modul verbinden und Daten austauschen. Empfangene Daten werden folgendermaßen angezeigt. Gesendet wurde  &amp;quot;Hallo Leute&amp;quot; + LF + CR.&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
     +IPD,0,11:Hallo Leute&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
     OK&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+IPD kommt immer, 0 ist die erste Verbindung. Wenn 2 Geräte gleichzeitig eine Verbindung aufgebaut haben, steht dort eine 1. 11 Zeichen wurden empfangen, dann kommen die Daten.&lt;br /&gt;
&lt;br /&gt;
Zum Senden von Daten vom Modul zum Client geht man folgenderweise vor. Erstmal sagen wir dem Modul, wieviele Daten wir an welche Verbindung schicken wollen. Mit dem Befehl AT+CIPSEND=0,5 z. B. sagen wir dem Modul wir möchten 5 Bytes an Verbindung 0 senden. Nach diesem Befehl werden die nächsten 5 Zeichen direkt an die Verbindung weitergereicht.&lt;br /&gt;
Sollte keine aktive Verbindung bestehen, sendet das Modul &lt;br /&gt;
     AT+CIPSEND=0,5&amp;lt;\r&amp;gt;&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;link is not&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
ansonsten kommt &lt;br /&gt;
     &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt; &amp;gt;&lt;br /&gt;
und man kann Daten senden. Nach dem Absenden der Daten &#039;Leute&#039; + LF + CR sendet das Modul &lt;br /&gt;
    Leute&amp;lt;\r&amp;gt;&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;busy&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    busy&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    SEND OK&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einstellen des Moduls als Station&lt;br /&gt;
&lt;br /&gt;
== Software Development Kit (SDK) ==&lt;br /&gt;
Mit dem SDK können eigene Applikationen programmiert und die im SDK vorhandenen Beispiele &amp;quot;AT&amp;quot; und &amp;quot;IoT&amp;quot; verändert werden. Das SDK wird vom Hersteller zur Verfügung gestellt (Stand 25.10.2014). Passend zum SDK existiert eine virtuelle Maschine mit eingerichtetem gcc zum Kompilieren. Insbesondere der nun verfügbare gcc basiert auf einer Community-Entwicklung.&lt;br /&gt;
&lt;br /&gt;
[http://bbs.espressif.com/viewforum.php?f=5&amp;amp;sid=3cf7540ab17805367e6a45d2c4682fc9 SDK0.9.2 + virtuelle Linuxmaschine mit eingerichtetem gcc]&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/folderview?id=0B5bwBE9A5dBXaExvdDExVFNrUXM&amp;amp;usp=sharing Alternativlink für die virtuelle Maschine + Anleitung/HOWTO für das Setup sowie für das Kompilieren]&lt;br /&gt;
&lt;br /&gt;
Weiterhin gibt es eine Community Version [https://github.com/esp8266/esp8266-wiki/tree/master/sdk GitHub] die jedoch seit zwei Jahren nicht weiterentwickelt wird.&lt;br /&gt;
&lt;br /&gt;
=== Anmerkung ===&lt;br /&gt;
Mit dem SDK wird der Mikrocontroller programmiert, der sich direkt auf dem ESP8266-SoC-Chip befindet. Dies ist nicht zu verwechseln mit Programmieranleitungen zur UART-Ansteuerung des ESP8266-SoC (meist mit AT-Firmware) mit einem anderen Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
==Checkliste bei Problemen mit dem Modul/Compiler/SDK==&lt;br /&gt;
Bitte berücksichtige bei der Frage nach Hilfestellung zu Deinem Problem die folgende Checkliste.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Problemen mit der AT-Firmware/UART-Ansteuerung mit Mikrocontroller&#039;&#039;&#039;&lt;br /&gt;
# Was nutzt Du für die Stromversorgung?&amp;lt;br/&amp;gt;(Ganz knapp benennen, so dass Rückschlüsse auf Spannung und Stromstärke möglich sind)&lt;br /&gt;
# Welche Firmware-Version verwendest Du und von woher hast Du sie?&lt;br /&gt;
# Welchen Mikrocontroller verwendest Du?&lt;br /&gt;
# Welche Baudrate verwendest Du?&lt;br /&gt;
# &amp;quot;Sieht&amp;quot; das Modul den AP, &amp;quot;sieht&amp;quot; der PC das Modul?&lt;br /&gt;
# Funktioniert ein Connect?&lt;br /&gt;
# Welche AT-Befehlssequenz verwendest Du und was antwortet das Modul?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Problemen mit dem SDK/Compiler&#039;&#039;&#039;&lt;br /&gt;
# Benutzt Du die neuste, offizielle VM?&amp;lt;br/&amp;gt;(Diese ist ausgelegt für das neueste SDK)&lt;br /&gt;
# Benutzt Du das neueste, offizielle SDK? Welche Version benutzt Du?&amp;lt;br/&amp;gt;(Es werden regelmäßig Bugfixes und Erweiterungen eingepflegt)&lt;br /&gt;
# Kannst Du die SDK-Beispiele (IoT,AT) entsprechend der offiziellen Anleitung kompilieren, flashen und läuft es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[https://en.wikipedia.org/wiki/ESP8266 ESP8266-Eintrag auf en.wikipedia.org]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.esp8266.com/ ESP8266-Community-Forum]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://github.com/esp8266 ESP8266 Github mit Wiki und Source-Code-Beispielen]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://hackaday.com/tag/esp8266/ Hackaday-Posts zu ESP8266]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://espressif.com/en/products/esp8266/ ESP8266-Seite des Herstellers]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/ ESP8266-Forum des Herstellers]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller-elektronik.de/nodemcu-esp8266-tutorial-wlan-board-arduino-ide/ ESP8266 und NodeMCU - Tutorial mit Farbdisplay und Temperatursensor]&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://www.mikrocontroller.net/forum/mikrocontroller-elektronik/esp Beiträge im mikrocontroller.net-Forum]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/topic/342878 Sammelbestellungen im mikrocontroller.net-Forum]&lt;br /&gt;
&lt;br /&gt;
[http://esp8266-server.de/ Universelle I2C-Steuerung mittels WLAN-TCP/IP und Webinterface mit ESP8266]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://blog.thomasheldt.de/ Viele Projekte und Informationen zum ESP8266]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://stefanfrings.de/wlan_io/ Projekt I/O-Schnittstellenmodul mit WLAN] (Stefan Frings)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://stefanfrings.de/esp8266/ Dokumentation zum ESP8266 mit Arduino Code-Beispielen] (Stefan Frings)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dokumente === &lt;br /&gt;
[http://neilkolban.com/tech/esp8266/ Kolban’s book on the ESP8266] Sehr empfehlenswert!&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://drive.google.com/folderview?id=0B5bwBE9A5dBXaExvdDExVFNrUXM&amp;amp;usp=sharing Anleitung/HOWTO für das Setup der virtuellen Maschine (SDK) sowie für das Kompilieren]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://nurdspace.nl/ESP8266 Übersetztes Datenblatt]&amp;lt;br /&amp;gt;&lt;br /&gt;
[http://www.electrodragon.com/w/Wi07c AT Instructions Set (English)] und [http://www.electrodragon.com/w/Wi07c#First_time_use_guide Anleitung zum Betrieb an einem Arduino (inkl. Code)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://thomaspfeifer.net/esp8266_wlan_seriell_modul_at_kommandos.htm Beschreibung der AT-Kommandos mit Beispielen]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/229016/Espressif_IoT_AT____v0.1.5.906.pdf Espressif AT Instruction Set(Chinese)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.seeedstudio.com/document/pdf/ESP8266%20Specifications(Chinese).pdf ESP8266 Specifications(Chinese)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://nodemcu.readthedocs.org/en/dev/ NodeMCU-Documentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://cknodemcu.wordpress.com/2015/11/24/building-an-iot-node-for-less-than-15/ Building an IoT Node for less than 15$] (Paper, Kindle via Amazon)&lt;br /&gt;
&lt;br /&gt;
===Daten===&lt;br /&gt;
[http://bbs.espressif.com/viewforum.php?f=5&amp;amp;sid=3cf7540ab17805367e6a45d2c4682fc9 SDK0.9.2 + virtuelle Linux-Maschine mit eingerichtetem gcc]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://drive.google.com/folderview?id=0B5bwBE9A5dBXaExvdDExVFNrUXM&amp;amp;usp=sharing Alternativlink für die virtuelle Maschine]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://onedrive.live.com/#cid=C4DDF72E6EEA3826&amp;amp;id=C4DDF72E6EEA3826%21631 Dateien (Xplorer+SDK+PDF+etc.)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/230185/esp8266_config_v050.exe Config-Tool] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bezugsquellen ===&lt;br /&gt;
[http://espressif.com/en/company/contact/buy-a-sample/ Offizieller Espressif-Vertriebskanal] (Sample Purchase)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.aliexpress.com/wholesale?SearchText=ESP8266 aliexpress.com] ~ 2€&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.banggood.com/?zf=283997 banggood.com] ~ 3.50€&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.ebay.de/ Ebay]&lt;br /&gt;
ab 3€ inkl. Versand, Einzelstückpreis: ESP-01/02/03/04/05&amp;lt;br/&amp;gt;&lt;br /&gt;
(Suchbegriff: ESP8266, Option Artikelstandort: &amp;quot;Weltweit&amp;quot;)&amp;lt;br/&amp;gt;&lt;br /&gt;
(10 Stück ab 27 EUR inkl. Versand; Suchbegriff: 10pcs ESP8266)&amp;lt;br/&amp;gt;&lt;br /&gt;
ab 3.20€ inkl. Versand, Einzelstückpreis: ESP-07/08/09/11&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.electrodragon.com/?s=esp8266&amp;amp;post_type=product electrodragon.com] ~ 3.50€ (zzgl. Versand)&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://www.it-wns.de/themes/suche/index.php?suchekategorie=&amp;amp;sucheallgemein=esp8266 IT-WNS.de] (ESP-01/02/03/06/07/12E) je 3.99€ (zzgl. Versand)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.seeedstudio.com/depot/WiFi-Serial-Transceiver-Module-w-ESP8266-p-1994.html seeedstudio.com] ~ 5.50€&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://shop.in-circuit.de/index.php?cPath=21 In-Circuit.de] ESP-ADC-DIL-Modul mit ESP8266EX 9.90€ Einzelpreis&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.watterott.com/index.php?page=search&amp;amp;desc=off&amp;amp;sdesc=off&amp;amp;keywords=ESP8266 watterott.com] ab ~ 4€ (zzgl. Versand)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.ramser-elektro.at/shop/module-sensoren-adapter-und-co/esp8266-esp12f-wlan-modul www.ramser-elektro.at] ESP12F mit 16mBit Flash ~ 4.90€ (ab 35€ Versandkostenfrei)&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://www.pollin.de/p/espressif-esp-wroom-02-esp8266-wi-fi-modul-810696] ESP8266 Wi-Fi Modul ~3,95€ (Versandkosten  innerhalb Deutschlands 4,95 €)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anderes==&lt;br /&gt;
*[http://www.mikrocontroller.net/articles/ESP8266-CPCB PCB für Community-Modul (Vorschlag)]&lt;br /&gt;
* [http://www.mikrocontroller-elektronik.de/esp12e-tutorial-einstieg-mit-dem-esp8266-modul/ ESP8266 - ESP12E mit Arduino IDE programmieren]&lt;br /&gt;
*[http://fkainka.de/esp8266-in-der-arduino-ide/ ESP8266 mit Arduino-IDE programmieren]&lt;br /&gt;
*[http://www.arduinesp.com Arduino-IDE-Integration (ab 1.6.x)]&lt;br /&gt;
*[https://cknodemcu.wordpress.com/ NodeMCU (Lua) Anwendungen]&lt;br /&gt;
*[http://www.mikrocontroller-elektronik.de/esp8266-chip-buecher-projekte-wlan-chip Interessante deutsche Bücher zum ESP8266]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--von [[axhieb]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;br /&gt;
[[Kategorie:Funk]]&lt;br /&gt;
[[Kategorie:Wlan]]&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ESP8266&amp;diff=98163</id>
		<title>ESP8266</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ESP8266&amp;diff=98163"/>
		<updated>2018-01-11T08:19:16Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: /* Bezugsquellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:ESP8266.jpg|thumb|300px|ESP8266, Funkmodul]]&lt;br /&gt;
Das [[ESP8266]] von dem Hersteller Espressif ist ein programmierbarer WLAN-SoC mit [[UART]]- und [[SPI]]-Schnittstelle. &#039;&#039;&#039;WLAN&#039;&#039;&#039;-Funkmodule mit ESP8266 sind ab 3€ verfügbar. Die UART-Schnitttstelle ermöglicht eine einfache Integration in Mikrocontrollerprojekte.&lt;br /&gt;
&lt;br /&gt;
== Spezifikation ==&lt;br /&gt;
Laut Hersteller &amp;lt;ref&amp;gt;[http://espressif.com/en/products/esp8266 &#039;&#039;Herstellerseite -  unter Details&#039;&#039;] Abgerufen am 26. August 2014.&amp;lt;/ref&amp;gt;. :&lt;br /&gt;
* 802.11 b/g/n&lt;br /&gt;
* Wi-Fi Direct (P2P), soft-AP&lt;br /&gt;
* Integrated TCP/IP protocol stack&lt;br /&gt;
* Integrated TR switch, balun, LNA, power amplifier and matching network&lt;br /&gt;
* Integrated PLLs, regulators, DCXO and power management units&lt;br /&gt;
* +19.5dBm output power in 802.11b mode&lt;br /&gt;
* Power down leakage current of &amp;lt;20µA (bei 2,5V, Flash-Chip nicht mit gerechnet)&lt;br /&gt;
* Integrated low power 32-bit CPU could be used as application processor&lt;br /&gt;
* SDIO 1.1/2.0, SPI, UART&lt;br /&gt;
* STBC, 1×1 MIMO, 2×1 MIMO&lt;br /&gt;
* A-MPDU &amp;amp; A-MSDU aggregation &amp;amp; 0.4ms guard interval&lt;br /&gt;
* Wake up and transmit packets in &amp;lt; 2ms&lt;br /&gt;
* Standby power consumption of &amp;lt; 1.0mW (DTIM3)&lt;br /&gt;
* VCC: 2,5...3,6V (Achtung: Eingänge sind &#039;&#039;&#039;NICHT 5V TOLERANT&#039;&#039;&#039;!)&lt;br /&gt;
Weiterhin:&lt;br /&gt;
* GPIOs, ADC&lt;br /&gt;
&lt;br /&gt;
=== Datendurchsatz/Performanz ===&lt;br /&gt;
[https://www.mikrocontroller.net/topic/342240?page=single#3857630 Beitrag im Forum mit Tests: TCP: bis zu 7 MBit/s]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?f=7&amp;amp;t=24 Beitrag Espressif-Forum: UART loopback: 4.5 Mbps]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?t=2187 Beitrag Espressif-Forum: 300kbps senden und empfangen im TCP passhrough Modus]&amp;lt;br/&amp;gt;&lt;br /&gt;
200-300k Byte/s Senden und Empfangen via TCP und UDP mit C Programm und SDK 1.5.4 (Bei stefanus zuhause)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Bei Verwendung der AT-Firmware (v1.1.0.0 aus SDK 1.5.4) mit einem seriell angeschlossenen Mikrocontroller dauert die Antwort auf ein kurzes Kommando (vom PC an den µC und zurück) typischerweise 100-200ms.&lt;br /&gt;
&lt;br /&gt;
=== Power-/Sleep-Modes ===&lt;br /&gt;
Der Stromverbrauch des ESP8266 ist abhängig von vielen Faktoren, er lässt sich aber durch geschickte Programmierung durchaus deutlich senken.&amp;lt;br/&amp;gt;&lt;br /&gt;
So ist es nicht notwendig, dass das WIFI-Modem oder der Mikrocontroller ständig läuft, um z.B. eine WLAN-Türklingel zu realisieren. Im &amp;quot;Deep-Sleep&amp;quot; würde der ESP8266 dann nur wenige µA verbrauchen, bis er über einen Timer zurückgesetzt wird und die Meldung absetzt.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Stefanus hat 25µA gemessen: [https://www.mikrocontroller.net/topic/425023?goto=4985619#4985619]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?f=6&amp;amp;t=133 Detailierte Übersicht der verschieden Modi und deren Stromverbrauch von Espressif] (nicht mehr aktuell!)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WLAN-Module mit ESP8266 ==&lt;br /&gt;
Es existieren ca. 11 Varianten von chinesischen Herstellern. Beispielsweise mit PCB- oder Keramik-Antenne oder mit u.fl.&lt;br /&gt;
&lt;br /&gt;
* Die Firmware aus SDK 0.9.1 unterstützt bis zu vier gleichzeitige TCP- oder UDP-Verbindungen. &lt;br /&gt;
* Die Firmware aus SDK 1.5.4 unterstützt bis zu fünf gleichzeitige TCP- oder UDP-Verbindungen.&lt;br /&gt;
&lt;br /&gt;
Sie kann sich in vorhandene WLAN-Netze einbuchen, aber auch selbst Access-Point mit DHCP-Server sein. Der Access-Point ist zu Android kompatibel (mit 4.1.2 getestet).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Die Firmware enthält jedoch keinen Router. Mehrere Computer, die mit dem Modul als Access-Point verbunden sind, können keine Verbindung zueinander aufbauen. Das Feature nennt sich AP-Isolation.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
#Produktbeschreibung: [[http://playground.boxtec.ch/doku.php/wireless/esp8266]]&lt;br /&gt;
&lt;br /&gt;
=== Pinbelegung einiger ESP8266-Module ===&lt;br /&gt;
====ESP8266-01====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:ESP8266-PinBelegung1.jpg|Pinbelegung - Groß mit PCB-Antenne&lt;br /&gt;
Datei:ESP8266-PinBelegung2.jpg|Pinbelegung - Klein mit Keramik-Antenne&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
Quelle &amp;lt;ref&amp;gt;[http://pan.baidu.com/share/link?shareid=727869034&amp;amp;uk=1900861665 &#039;&#039;Seller Information&#039;&#039;] Abgerufen am 26. August 2014.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
====ESP8266-07====&lt;br /&gt;
Achtung, beim ESP8266-07-Modul sind einige mit vertauschten Beschriftungen von GPIO4 und GPIO5 unterwegs!!.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ESP8266-12E====&lt;br /&gt;
Das ESP12E-Modul gehört vermutlich wegen der vielen Ports zu den beliebtesten Modulen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller-elektronik.de/?projekt-download=2967 Pinbelegung (PDF)]&lt;br /&gt;
Für dieses Modul gibt es auch ein spezielles Adapter-Projekt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Adapter-ESP12E.jpeg|miniatur|zentriert]]&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller-elektronik.de/esp12e-tutorial-einstieg-mit-dem-esp8266-modul/ Projekt: ESP-12E Adapter und ESP12E Tutorial]&lt;br /&gt;
&lt;br /&gt;
== Möglichkeiten der Nutzung und Programmierung ==&lt;br /&gt;
===== Benutzung einer Firmware =====&lt;br /&gt;
Verschiedene Projekte betreiben die Entwicklung einer Firmware. Man kann die Firmware &amp;quot;einfach nur&amp;quot; flashen und benutzen oder sich auch aktiv an der Entwicklung beteiligen. Es gibt unter anderem folgende Projekte:&lt;br /&gt;
* AT-Befehle: Firmware, mit welcher das Modul über UART angesprochen wird.&lt;br /&gt;
** von Espressif ([https://github.com/espressif/ESP8266_NONOS_SDK/tree/master/bin/at GitHub])&lt;br /&gt;
** von Electrodragon ([http://www.electrodragon.com/w/ESP8266_AT-Command_firmware Forum])&lt;br /&gt;
* Micropython: Firmware, die das Ablaufen von Python-Scripts ermöglicht ([https://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/intro.html Tutorial])&lt;br /&gt;
* NodeMCU: Firmware, die das Ablaufen von Lua-Scripts ermöglicht ([https://github.com/nodemcu/nodemcu-firmware Github])&lt;br /&gt;
* smartJS: Firmware, die das Ausführen von Javascript erlaubt ([https://github.com/cesanta/smart.js Github])&lt;br /&gt;
* Arduino core for ESP8266 WiFi chip: Programmierumgebung &amp;amp; Firmware, die das Ausführen von C-Programmen ermöglicht, im Stil der bekannten Arduino-Plattform. [https://github.com/esp8266/Arduino Github - ink. Anleitung]&lt;br /&gt;
* ESP8266 Basic: Firmware, die das Ausführen von Basic-Programmen und das Editieren über WLAN erlaubt [http://www.esp8266basic.com/]&lt;br /&gt;
* Sming: Einfach zu nutzendes Framework, ähnlich wie Arduino, allerdings mit einem einfachen Makefile pro Projekt und mit Eclipse-Projekten.([https://github.com/SmingHub/Sming Github])&lt;br /&gt;
* ESP-Lisp (BETA): A small fast lisp interpeter for a ESP8266 ([https://github.com/yesco/esp-lisp Github])&lt;br /&gt;
* ESP8266Forth:  Forth for the ESP8266 NodeMCU Amica ([https://github.com/CraigLindley/ESP8266Forth Github])&lt;br /&gt;
* Forthright: Forth for ESP-8266 ([https://github.com/niclash/forthright Github])&lt;br /&gt;
* Punyforth:  FORTH inspired programming language for the ESP8266 ([https://github.com/zeroflag/punyforth Github])&lt;br /&gt;
* ESP-LINK: Wifi-Serial Bridge w/REST&amp;amp;MQTT([https://github.com/jeelabs/esp-link Github])&lt;br /&gt;
* ESPEasy: turn the ESP module into an easy multifunction sensor device for Home Automation solutions like FHEM. Configuration of the ESP Easy is entirely web based ([https://github.com/letscontrolit/ESPEasy])&lt;br /&gt;
&lt;br /&gt;
===== Erstellen (Kompilieren) einer Firmware =====&lt;br /&gt;
Für die Erstellung einer individuellen Firmware gibt es zwei Möglichkeiten:&lt;br /&gt;
* Software Development Kit (SDK): Erstellen einer Firmware mit einer GCC-Toolchain&lt;br /&gt;
* Arduino IDE: Erstellen einer Firmware mit einer Arduino-IDE&lt;br /&gt;
Projekte, die eine Firmware für das ESP8266 entwickeln (siehe vorheriger Abschnitt), benutzen eine dieser beiden Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
=== Firmware flashen/updaten ===&lt;br /&gt;
Typischerweise wird eine kompilierte Firmware per UART-Bootloader des ESP8266-SoC auf einen Flash-Chip eines ESP8266-Moduls geladen. Von dort startet der ESP8266-SoC anschließend die Firmware.&lt;br /&gt;
&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?f=5&amp;amp;t=433 Flash-Download-Tool vom Hersteller] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://github.com/themadinventor/esptool Python-Tool zum Flashen (von Fredrik Ahlberg)] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://github.com/3s1d/esp_prog Extension zum Tool von Fredrik Ahlberg] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/topic/342240?page=2#3857075 Tool zum Flashen (von Christian Klippel)] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://web.archive.org/web/20150502082616/http://defcon-cc.dyndns.org/wiki/ESP8266#Update Anleitung, extern] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/topic/342240?page=3#3810559 Anleitung, Forum]&lt;br /&gt;
&lt;br /&gt;
Der Hersteller veröffentlicht regelmäßig [http://bbs.espressif.com/viewforum.php?f=5 Firmwareupdates] als Bestandteil des esp_iot_sdk. Die Firmware-Dateien befinden sich im Verzeichnis bin. Das Update wird beispielsweise für Firmware 0.9.5 folgendermaßen durchgeführt: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python esptool.py --baud 9600 --port com6 write_flash 0x00000 boot_v1.2.bin 0x01000 at/user1.512.new.bin 0x3e000 blank.bin 0x7e000 blank.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abhängig von der Flashgröße muss man die Firmware ab Version 1.0.1 selbst compilieren. Siehe Diskussion [http://www.esp8266.com/viewtopic.php?p=16515 hier] und [http://bbs.espressif.com/viewtopic.php?f=16&amp;amp;t=400 hier].&lt;br /&gt;
&lt;br /&gt;
=== Nutzung ohne Firmware ===&lt;br /&gt;
Es ist wohl sogar möglich den ESP8266 als SDIO-WLAN-Modul an einem Raspberry Pi zu betreiben. Verwendet wird dabei der Linuxtreiber des ESP8089. Der ESP8266 bootet dann nicht die Firmware aus dem Flash sondern über SDIO.    &lt;br /&gt;
&lt;br /&gt;
https://hackaday.io/project/8678-rpi-wifi&lt;br /&gt;
&lt;br /&gt;
== AT-Befehle für eine Firmware auf Basis des SDK-Beispiels &amp;quot;AT&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Einstellen des Moduls als AP&lt;br /&gt;
&lt;br /&gt;
Da wir nicht wissen, in welchem Modus sich das Modul gerade befindet, fragen wir diesen mit dem &lt;br /&gt;
Befehl AT+CWMODE? ab. Das Modul antwortet mit &lt;br /&gt;
&lt;br /&gt;
    AT+CWMODE?&amp;lt;\r&amp;gt;&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;+CWMODE:1&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    OK&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
In diesem Fall ist das Modul aktuell im Modus 1 (Station) eingestellt. Also ändern wir den Modus auf 2 (AP)&lt;br /&gt;
mit dem Befehl AT+CWMODE=2. Nach diesem Befehl ist ein Reset des Moduls erforderlich, damit die Änderung &lt;br /&gt;
sichtbar wird. Mit dem Befehl AT+RST führen wir diesen durch. Das Modul startet neu und die Stromaufnahme&lt;br /&gt;
steigt auf ca 80 mA. Das Modul ist jetzt als WLAN-AP im Wireless-LAN sichtbar. &lt;br /&gt;
&lt;br /&gt;
Jetzt müssen wir noch einstellen, dass wir mehrere Verbindungen gleichzeitig haben wollen, sowie den TCP-Server starten und einstellen. Mit dem Befehl AT+CIPMUX=1 sagen wir dem Modul, dass wir mehrere Verbindungen haben wollen. Und mit dem Befehl AT+CIPSERVER=1,2526 starten wir den TCP-Server und lassen ihn auf Port 2526 laufen. Sobald sich ein Client verbindet, sendet das Modul &#039;Link&#039; + LF + CR. Beim Trennen einer Verbindung vom Client kommt &#039;Unlink&#039; + LF + CR.&lt;br /&gt;
&lt;br /&gt;
Ab hier können wir uns über einen TCP-Socket auf Port 2526 mit dem Modul verbinden und Daten austauschen. Empfangene Daten werden folgendermaßen angezeigt. Gesendet wurde  &amp;quot;Hallo Leute&amp;quot; + LF + CR.&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
     +IPD,0,11:Hallo Leute&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
     OK&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+IPD kommt immer, 0 ist die erste Verbindung. Wenn 2 Geräte gleichzeitig eine Verbindung aufgebaut haben, steht dort eine 1. 11 Zeichen wurden empfangen, dann kommen die Daten.&lt;br /&gt;
&lt;br /&gt;
Zum Senden von Daten vom Modul zum Client geht man folgenderweise vor. Erstmal sagen wir dem Modul, wieviele Daten wir an welche Verbindung schicken wollen. Mit dem Befehl AT+CIPSEND=0,5 z. B. sagen wir dem Modul wir möchten 5 Bytes an Verbindung 0 senden. Nach diesem Befehl werden die nächsten 5 Zeichen direkt an die Verbindung weitergereicht.&lt;br /&gt;
Sollte keine aktive Verbindung bestehen, sendet das Modul &lt;br /&gt;
     AT+CIPSEND=0,5&amp;lt;\r&amp;gt;&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;link is not&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
ansonsten kommt &lt;br /&gt;
     &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt; &amp;gt;&lt;br /&gt;
und man kann Daten senden. Nach dem Absenden der Daten &#039;Leute&#039; + LF + CR sendet das Modul &lt;br /&gt;
    Leute&amp;lt;\r&amp;gt;&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;busy&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    busy&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    SEND OK&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einstellen des Moduls als Station&lt;br /&gt;
&lt;br /&gt;
== Software Development Kit (SDK) ==&lt;br /&gt;
Mit dem SDK können eigene Applikationen programmiert und die im SDK vorhandenen Beispiele &amp;quot;AT&amp;quot; und &amp;quot;IoT&amp;quot; verändert werden. Das SDK wird vom Hersteller zur Verfügung gestellt (Stand 25.10.2014). Passend zum SDK existiert eine virtuelle Maschine mit eingerichtetem gcc zum Kompilieren. Insbesondere der nun verfügbare gcc basiert auf einer Community-Entwicklung.&lt;br /&gt;
&lt;br /&gt;
[http://bbs.espressif.com/viewforum.php?f=5&amp;amp;sid=3cf7540ab17805367e6a45d2c4682fc9 SDK0.9.2 + virtuelle Linuxmaschine mit eingerichtetem gcc]&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/folderview?id=0B5bwBE9A5dBXaExvdDExVFNrUXM&amp;amp;usp=sharing Alternativlink für die virtuelle Maschine + Anleitung/HOWTO für das Setup sowie für das Kompilieren]&lt;br /&gt;
&lt;br /&gt;
Weiterhin gibt es eine Community Version [https://github.com/esp8266/esp8266-wiki/tree/master/sdk GitHub] die jedoch seit zwei Jahren nicht weiterentwickelt wird.&lt;br /&gt;
&lt;br /&gt;
=== Anmerkung ===&lt;br /&gt;
Mit dem SDK wird der Mikrocontroller programmiert, der sich direkt auf dem ESP8266-SoC-Chip befindet. Dies ist nicht zu verwechseln mit Programmieranleitungen zur UART-Ansteuerung des ESP8266-SoC (meist mit AT-Firmware) mit einem anderen Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
==Checkliste bei Problemen mit dem Modul/Compiler/SDK==&lt;br /&gt;
Bitte berücksichtige bei der Frage nach Hilfestellung zu Deinem Problem die folgende Checkliste.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Problemen mit der AT-Firmware/UART-Ansteuerung mit Mikrocontroller&#039;&#039;&#039;&lt;br /&gt;
# Was nutzt Du für die Stromversorgung?&amp;lt;br/&amp;gt;(Ganz knapp benennen, so dass Rückschlüsse auf Spannung und Stromstärke möglich sind)&lt;br /&gt;
# Welche Firmware-Version verwendest Du und von woher hast Du sie?&lt;br /&gt;
# Welchen Mikrocontroller verwendest Du?&lt;br /&gt;
# Welche Baudrate verwendest Du?&lt;br /&gt;
# &amp;quot;Sieht&amp;quot; das Modul den AP, &amp;quot;sieht&amp;quot; der PC das Modul?&lt;br /&gt;
# Funktioniert ein Connect?&lt;br /&gt;
# Welche AT-Befehlssequenz verwendest Du und was antwortet das Modul?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Problemen mit dem SDK/Compiler&#039;&#039;&#039;&lt;br /&gt;
# Benutzt Du die neuste, offizielle VM?&amp;lt;br/&amp;gt;(Diese ist ausgelegt für das neueste SDK)&lt;br /&gt;
# Benutzt Du das neueste, offizielle SDK? Welche Version benutzt Du?&amp;lt;br/&amp;gt;(Es werden regelmäßig Bugfixes und Erweiterungen eingepflegt)&lt;br /&gt;
# Kannst Du die SDK-Beispiele (IoT,AT) entsprechend der offiziellen Anleitung kompilieren, flashen und läuft es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[https://en.wikipedia.org/wiki/ESP8266 ESP8266-Eintrag auf en.wikipedia.org]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.esp8266.com/ ESP8266-Community-Forum]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://github.com/esp8266 ESP8266 Github mit Wiki und Source-Code-Beispielen]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://hackaday.com/tag/esp8266/ Hackaday-Posts zu ESP8266]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://espressif.com/en/products/esp8266/ ESP8266-Seite des Herstellers]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/ ESP8266-Forum des Herstellers]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller-elektronik.de/nodemcu-esp8266-tutorial-wlan-board-arduino-ide/ ESP8266 und NodeMCU - Tutorial mit Farbdisplay und Temperatursensor]&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://www.mikrocontroller.net/forum/mikrocontroller-elektronik/esp Beiträge im mikrocontroller.net-Forum]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/topic/342878 Sammelbestellungen im mikrocontroller.net-Forum]&lt;br /&gt;
&lt;br /&gt;
[http://esp8266-server.de/ Universelle I2C-Steuerung mittels WLAN-TCP/IP und Webinterface mit ESP8266]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://blog.thomasheldt.de/ Viele Projekte und Informationen zum ESP8266]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://stefanfrings.de/wlan_io/ Projekt I/O-Schnittstellenmodul mit WLAN] (Stefan Frings)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://stefanfrings.de/esp8266/ Dokumentation zum ESP8266 mit Arduino Code-Beispielen] (Stefan Frings)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dokumente === &lt;br /&gt;
[http://neilkolban.com/tech/esp8266/ Kolban’s book on the ESP8266] Sehr empfehlenswert!&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://drive.google.com/folderview?id=0B5bwBE9A5dBXaExvdDExVFNrUXM&amp;amp;usp=sharing Anleitung/HOWTO für das Setup der virtuellen Maschine (SDK) sowie für das Kompilieren]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://nurdspace.nl/ESP8266 Übersetztes Datenblatt]&amp;lt;br /&amp;gt;&lt;br /&gt;
[http://www.electrodragon.com/w/Wi07c AT Instructions Set (English)] und [http://www.electrodragon.com/w/Wi07c#First_time_use_guide Anleitung zum Betrieb an einem Arduino (inkl. Code)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://thomaspfeifer.net/esp8266_wlan_seriell_modul_at_kommandos.htm Beschreibung der AT-Kommandos mit Beispielen]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/229016/Espressif_IoT_AT____v0.1.5.906.pdf Espressif AT Instruction Set(Chinese)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.seeedstudio.com/document/pdf/ESP8266%20Specifications(Chinese).pdf ESP8266 Specifications(Chinese)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://nodemcu.readthedocs.org/en/dev/ NodeMCU-Documentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://cknodemcu.wordpress.com/2015/11/24/building-an-iot-node-for-less-than-15/ Building an IoT Node for less than 15$] (Paper, Kindle via Amazon)&lt;br /&gt;
&lt;br /&gt;
===Daten===&lt;br /&gt;
[http://bbs.espressif.com/viewforum.php?f=5&amp;amp;sid=3cf7540ab17805367e6a45d2c4682fc9 SDK0.9.2 + virtuelle Linux-Maschine mit eingerichtetem gcc]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://drive.google.com/folderview?id=0B5bwBE9A5dBXaExvdDExVFNrUXM&amp;amp;usp=sharing Alternativlink für die virtuelle Maschine]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://onedrive.live.com/#cid=C4DDF72E6EEA3826&amp;amp;id=C4DDF72E6EEA3826%21631 Dateien (Xplorer+SDK+PDF+etc.)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/230185/esp8266_config_v050.exe Config-Tool] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bezugsquellen ===&lt;br /&gt;
[http://espressif.com/en/company/contact/buy-a-sample/ Offizieller Espressif-Vertriebskanal] (Sample Purchase)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.aliexpress.com/wholesale?SearchText=ESP8266 aliexpress.com] ~ 2€&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.banggood.com/?zf=283997 banggood.com] ~ 3.50€&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.ebay.de/ Ebay]&lt;br /&gt;
ab 3€ inkl. Versand, Einzelstückpreis: ESP-01/02/03/04/05&amp;lt;br/&amp;gt;&lt;br /&gt;
(Suchbegriff: ESP8266, Option Artikelstandort: &amp;quot;Weltweit&amp;quot;)&amp;lt;br/&amp;gt;&lt;br /&gt;
(10 Stück ab 27 EUR inkl. Versand; Suchbegriff: 10pcs ESP8266)&amp;lt;br/&amp;gt;&lt;br /&gt;
ab 3.20€ inkl. Versand, Einzelstückpreis: ESP-07/08/09/11&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.electrodragon.com/?s=esp8266&amp;amp;post_type=product electrodragon.com] ~ 3.50€ (zzgl. Versand)&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://www.it-wns.de/themes/suche/index.php?suchekategorie=&amp;amp;sucheallgemein=esp8266 IT-WNS.de] (ESP-01/02/03/06/07/12E) je 3.99€ (zzgl. Versand)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.seeedstudio.com/depot/WiFi-Serial-Transceiver-Module-w-ESP8266-p-1994.html seeedstudio.com] ~ 5.50€&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://shop.in-circuit.de/index.php?cPath=21 In-Circuit.de] ESP-ADC-DIL-Modul mit ESP8266EX 9.90€ Einzelpreis&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.watterott.com/index.php?page=search&amp;amp;desc=off&amp;amp;sdesc=off&amp;amp;keywords=ESP8266 watterott.com] ab ~ 4€ (zzgl. Versand)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.ramser-elektro.at/shop/module-sensoren-adapter-und-co/esp8266-esp12f-wlan-modul www.ramser-elektro.at] ESP12F mit 16mBit Flash ~ 4.90€ (ab 35€ Versandkostenfrei)&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://www.pollin.de/p/espressif-esp-wroom-02-esp8266-wi-fi-modul-810696] ESP8266 Wi-Fi Modul ~3,95€ Versandkosten  innerhalb Deutschlands 4,95 €&lt;br /&gt;
&lt;br /&gt;
==Anderes==&lt;br /&gt;
*[http://www.mikrocontroller.net/articles/ESP8266-CPCB PCB für Community-Modul (Vorschlag)]&lt;br /&gt;
* [http://www.mikrocontroller-elektronik.de/esp12e-tutorial-einstieg-mit-dem-esp8266-modul/ ESP8266 - ESP12E mit Arduino IDE programmieren]&lt;br /&gt;
*[http://fkainka.de/esp8266-in-der-arduino-ide/ ESP8266 mit Arduino-IDE programmieren]&lt;br /&gt;
*[http://www.arduinesp.com Arduino-IDE-Integration (ab 1.6.x)]&lt;br /&gt;
*[https://cknodemcu.wordpress.com/ NodeMCU (Lua) Anwendungen]&lt;br /&gt;
*[http://www.mikrocontroller-elektronik.de/esp8266-chip-buecher-projekte-wlan-chip Interessante deutsche Bücher zum ESP8266]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--von [[axhieb]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;br /&gt;
[[Kategorie:Funk]]&lt;br /&gt;
[[Kategorie:Wlan]]&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LED-Matrix&amp;diff=97006</id>
		<title>LED-Matrix</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LED-Matrix&amp;diff=97006"/>
		<updated>2017-08-21T13:21:07Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: /* Spezielle ICs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In einer [[LED]]-Matrix sind jeweils die Kathoden und Anoden der LEDs in Zeilen bzw. Spalten verbunden. Der Vorteil besteht darin, dass weniger Kontakte nach außen geführt und angesteuert werden müssen, ebenso sinkt der Verdrahtungsaufwand im Modul bzw. auf der Platine. Die Ansteuerung erfolgt dabei im sogenannten Multiplexbetrieb. Prinzipiell kann man sowohl die Zeilen als auch die Spalten multiplexen. Die nachfolgende Beschreibung bezieht sich auf das Multiplexen von Spalten.&lt;br /&gt;
&lt;br /&gt;
[[Bild:LEDmatrix_5x7.png|right|thumb|220px|Eine 5&amp;amp;times;7 LED-Matrix]]&lt;br /&gt;
&lt;br /&gt;
==Multiplexbetrieb==&lt;br /&gt;
&lt;br /&gt;
[http://de.wikipedia.org/wiki/Multiplexverfahren Multiplexverfahren (Wikipedia)]&lt;br /&gt;
&lt;br /&gt;
Der Trick einer LED-Matrix besteht darin, dass jeweils immer nur eine Spalte wirklich leuchtet. Die anderen sind ausgeschaltet. Wird nun in schneller Folge jede Spalte einmal angeschaltet, so entsteht aufgrund der Trägheit des menschlichen Auges ein scheinbar vollständiges Bild, bei dem alle LEDs gleichzeitig leuchten. Wird dieser Zyklus schnell genug durchlaufen, ist das Bild flimmerfrei, was ab ca. 100Hz erreicht wird. In Ausnahmefällen kann jedoch eine bewegte LED-Matrix auch bei höheren Multiplexfrequenzen als flimmernd erscheinen, z.&amp;amp;nbsp;B. LED-Bremsleuchten, LED-Anzeigen an Zügen oder Strassenbahnen.&lt;br /&gt;
&lt;br /&gt;
Der Ablauf der Steuerung ist recht einfach:&lt;br /&gt;
&lt;br /&gt;
#alle Spalten ausschalten, Muster für Spalte C1 an Zeilen R1..R7 anlegen, Spalte C1 einschalten&lt;br /&gt;
# Spaltenmultiplexzeit warten&lt;br /&gt;
#alle Spalten ausschalten, Muster für Spalte C2 an Zeilen R1..R7 anlegen, Spalte C2 einschalten&lt;br /&gt;
# Spaltenmultiplexzeit warten&lt;br /&gt;
#alle Spalten ausschalten, Muster für Spalte C3 an Zeilen R1..R7 anlegen, Spalte C3 einschalten&lt;br /&gt;
# Spaltenmultiplexzeit warten&lt;br /&gt;
#alle Spalten ausschalten, Muster für Spalte C4 an Zeilen R1..R7 anlegen, Spalte C4 einschalten&lt;br /&gt;
# Spaltenmultiplexzeit warten&lt;br /&gt;
#alle Spalten ausschalten, Muster für Spalte C5 an Zeilen R1..R7 anlegen, Spalte C5 einschalten&lt;br /&gt;
# Spaltenmultiplexzeit warten&lt;br /&gt;
# Zyklus beginnt bei 1.&lt;br /&gt;
&lt;br /&gt;
Praktisch wird man dazu einen [[Timer]] per [[Interrupt]] verwenden, keine Warteschleifen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:LEDmatrix_timing.png|left|thumb|700px|Multiplexzeitdiagramm]]&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; margin:1em;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!LEDs  ||  IOs  ||  Vorwiderstände &lt;br /&gt;
|-&lt;br /&gt;
|16    ||    8  ||      4      &lt;br /&gt;
|-&lt;br /&gt;
|64    ||   16  ||      8     &lt;br /&gt;
|-&lt;br /&gt;
|1024  ||   64  ||     32     &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Durch Einsatz der Multiplexverfahrens können mit relativ wenigen Ansteuerbauteilen (IO-Pins, Transistoren, Stromquellen) sehr viele LEDs gesteuert werden. Während bei direkter Ansteuerung für jede LED ein IO-Pin sowie eine Stromquelle bzw. Vorwiderstand benötig würde,  ist in einer zweiachsigen LED-Matrix der Aufwand für die Bauteile deutlich geringer:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\text{Anzahl der Bauteile} = 2\text{Anzahl der LEDs pro Reihe}&amp;lt;/math&amp;gt;&lt;br /&gt;
(bei quadratischer Matrix)&lt;br /&gt;
:&amp;lt;math&amp;gt;\text{Anzahl der Bauteile} = \text{Anzahl der LEDs pro Reihe }+\text{ Anzahl der LEDs pro Spalte }&amp;lt;/math&amp;gt;&lt;br /&gt;
(bei rechteckiger Matrix)&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung==&lt;br /&gt;
&lt;br /&gt;
Der verringerte Aufwand an Bauteilen kommt jedoch nicht ohne Nachteile. Da jede Spalte in einer Matrix mit N Spalten immer nur für 1/N der Zeit für einen vollen Bildaufbau aktiv ist, muss in dieser Zeit die gleiche Lichtmenge (=Energie) abgegeben werden, damit die genauso hell erscheint, wie wenn sie konstant mit Strom versorgt wird. Dazu muss der N-fache Strom fliessen. Demensprechend müssen die Vorwiderstände bzw. Stromquellen dimensioniert sein. Doch das führt zu zwei Problemen.&lt;br /&gt;
&lt;br /&gt;
# Der Pulsstrom durch eine LED kann nicht beliebig gesteigert werden. Genaue Angaben dazu gibt es im Datenblatt. Als grobe Abschätzung kann man sagen, dass die meisten LEDs bis etwa 1:10 gemuxt werden können, darüberhinaus werden die Pulsströme zu hoch (20mA Betriebsstrom =&amp;gt; 200 mA Pulsstrom!). Die Steuerung von mehr als 10 Spalten ist dann zwangsweise mit einer Helligkeitsreduktion verbunden, hilft aber, große Matrizen quadratischer zu machen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Die hohen Pulsströme verkraften die LEDs wirklich nur ganz kurz, sie brauchen die Ausschaltzeit um wieder abzukühlen! D.H. Die Ansteuerung des Multiplex darf NIE stehen bleiben, sonst brennen die LEDs durch! Für die Testphase der Matrix sowie Softwareentwicklung sollte man deshalb die Ströme stark verringern, die LEDs sind dann zwar wesenlich dunkler, überleben aber einen Softwareabsturz der Steuerung. Wenn am Ende alles getestet ist und man sich sicher ist daß die Steuerung funktioniert, kann man den Strom der Matrix wieder auf das volle Niveau erhöhen. Um ganz sicher zu gehen kann man einen Watchdog mit minimaler Laufzeit oder ein [[Monoflop]] verwenden, um im Fehlerfall die Stromversorgung bzw. Ansteuerung der LEDs abzuschalten.&lt;br /&gt;
&lt;br /&gt;
Um die Helligkeit der LEDs im Multiplexbetrieb voll zu nutzen muss meistens ein höherer Strom geschaltet werden, als Mikrocontroller es können. Eine [[LED]] muss aufgrund ihrer Kennlinie an einer Stromquelle betrieben werden. Im einfachsten Fall ist das ein in Reihe geschalteter Widerstand an einer Spannungsquelle. Ob man die Zeilen oder Spalten einer Matrix multiplext ist im Prinzip egal, aber manchmal ist es schlicht logisch sinnvoller. So ist z.B. bei einer LED-Laufschrift mit 8 Zeilen und 40 Spalten es sinnvoll, die Zeilen mit 1:8 zu multiplexen und nicht die Spalten mit 1:40! Generell kann man das in einer Schaltung so erkennen. Die gemultiplexte Dimension hat vor den Leistungsschaltern keine Vorwiderstände bzw. Konstantstromquellen sondern geht direkt an die LEDs. &lt;br /&gt;
&lt;br /&gt;
=== Direktbetrieb ===&lt;br /&gt;
&lt;br /&gt;
In einigen Projekten im Internet sieht man LED-Matritzen, die direkt per Mikrocontroller angesteuert werden, ohne Transistoren zwischenzuschalten. Das geht praktisch nur mit Low-Current-LEDs, da reguläre LEDs aufgrund des geringen Stroms sonst zu dunkel wären.&lt;br /&gt;
&lt;br /&gt;
=== Transistoren ===&lt;br /&gt;
&lt;br /&gt;
Das ist der Normalfall. Man kann diskrete [[Transistor|Transistoren]] (z.&amp;amp;nbsp;B. BC846, BC337) benutzen.&lt;br /&gt;
&lt;br /&gt;
Eine praktische Umsetzung kann man hier sehen. Q1-Q8 arbeiten als Emitterfolger ([[Transistor#Kollektorschaltung_(Emitterfolger)|Kollektorschaltung]]), darum gibt es hier auch keine [[Basiswiderstand | Basiswiderstände]]. Q9-Q13 arbeiten ganz einfach in [[Transistor#Emitterschaltung|Emitterschaltung]]. Dadurch braucht man nur NPN Transistoren,  die Schaltung ist dadurch auch relativ schnell. Einziger Nachteil ist ein um ca. 0,5 V höherer Spannungsverlust an Q1-Q8 im Vergleich zu PNP-Transistoren in Emitterschaltung. Das spielt hier aber keine große Rolle, weil bei den roten LEDs mit 2,2V Uf noch ausreichend Spannung für den Vorwiderstand bleibt. Werden z.B. blaue LEDS mit bis zu 4V Uf eingesetzt, dann verbleibt für den Widerstand zuwenig Spannung. Dadurch ändert sich schon bei kleinsten Versorgungsspannungsschwankungen der Strom recht stark.&lt;br /&gt;
&lt;br /&gt;
Ein Schieberegister ist im Prinzip ein Seriell-Parallel-Wandler.&lt;br /&gt;
Das hat mit Multiplexbetrieb eigentlich nichts direkt zu tun, es ist vielmehr eine Erweiterung der IO-Pins (siehe auch [[Porterweiterung mit SPI]] und [[AVR-Tutorial: Schieberegister]]). Wird ein Schieberegister &#039;&#039;nur&#039;&#039; zur Spaltenansteuerung verwendet, ergibt sich der angenehme Sonderfall, dass:&lt;br /&gt;
* Nur zum Weiterschalten der Spalte genau &#039;&#039;ein&#039;&#039; Schiebetakt erforderlich ist&lt;br /&gt;
** spart (etwas) Prozessorzeit&lt;br /&gt;
* die Daten- und Taktleitung für das Schieberegister für zwei weitere Matrix-Spalten zur Verfügung steht&lt;br /&gt;
** spart E/A-Anschlüsse am Mikrocontroller&lt;br /&gt;
** man kommt so einfach auf Spaltenzahl 10 (maximale Lichtausbeute der meisten LEDs) oder 18 (für RGB durch 3 teilbare Spaltenzahl)&lt;br /&gt;
** beim Umschaltvorgang per Zeilentreiber dunkeltasten sollte man ja sowieso&lt;br /&gt;
* ein einfaches Schieberegister ohne Ausgangslatch, etwa 74HC164, verwendet werden kann&lt;br /&gt;
** spart (etwas) Geld und Platz&lt;br /&gt;
&lt;br /&gt;
Eine weitere Schaltung mit Schieberegistern ist im &amp;quot;Retro-Spiel zum Selberbauen&amp;quot; [http://www.elo-web.de/elo/entwicklung-und-projekte/ping-pong Ping-Pong] von Burkhard Kainka verwendet worden. Hier werden die 10 Zeilen mit Atmega8-Portpins über 100 &amp;amp;Omega; Widerstände [http://www.elo-web.de/elo/mikrocontroller-und-programmierung/ping-pong/ping-pong-selbst-programmieren] gegen 12 Schieberegister-Spalten zweier 4094D CMOS-ICs geschaltet, um eine Matrix aus 120 roten SMD-LEDs zu steuern.&lt;br /&gt;
&lt;br /&gt;
[[Bild:LED_Matrix_8x5.png|thumb|right|250px|Multiplexansteuerung mit Schieberegistern und Transistoren]]&lt;br /&gt;
&lt;br /&gt;
==== Berechnung ====&lt;br /&gt;
&lt;br /&gt;
Will man nun seine Schaltung optimal betreiben, muss man ausrechnen wieviel Strom geschaltet werden muss. Wie oben bereits beschrieben, teilt sich der gemultiplexte Strom im Verhältnis 1:N auf die LEDs auf, in diesem Beispiel hier 1:5. Der Treiber für die Zeilen muss diesen im Extremfall kontinuierlich an jedem Ausgang zur Verfügung stellen, wenn nämlich alle LEDs der Matrix aktiv sind. Der Treiber für die Spalten ist pro Kanal nur 1:N der Multiplexzeit aktiv, muss aber währenddessen den gesamten Nennstrom der Matrix schalten können! Das sind schnell mal ein paar Ampere, wie die nachfolgenden Beispiele zeigen!&lt;br /&gt;
&lt;br /&gt;
Gegeben:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Nenn}&amp;lt;/math&amp;gt;: Nennstrom der LEDs: 4mA&lt;br /&gt;
*&amp;lt;math&amp;gt;U_{F}&amp;lt;/math&amp;gt;: Flußspannung der LEDs: 2,2V&lt;br /&gt;
*&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: Multiplexverhältnis (Spalten): 1:5&lt;br /&gt;
*&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;: Zeilen in der Matrix: 8&lt;br /&gt;
* &amp;lt;math&amp;gt;U_{Sat}&amp;lt;/math&amp;gt;: Sättigungsspannung des Low Side Transistors, hier Q9-Q13 mit ca. 0,7V&lt;br /&gt;
* &amp;lt;math&amp;gt;U_{BE}&amp;lt;/math&amp;gt;: Basis-Emitter-Spannung des High Side Transistors, hier Q1-Q8 ca. 0,7V&lt;br /&gt;
&lt;br /&gt;
Gesucht:&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Zeil}&amp;lt;/math&amp;gt;: Dauerstrom der Zeilentreiber = Pulsstrom der LEDs&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Spl}&amp;lt;/math&amp;gt;: Pulsstrom der Spaltentreiber&lt;br /&gt;
*&amp;lt;math&amp;gt;R_V&amp;lt;/math&amp;gt;: Vorwiderstand für LED-Zeilen &lt;br /&gt;
*&amp;lt;math&amp;gt;P_V&amp;lt;/math&amp;gt;: Verlustleistung der Vorwiderstände&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Zeil} = I_{Nenn} \cdot N = 4mA \cdot 5 = 20mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Spl} = I_{Nenn} \cdot N \cdot S = 4mA \cdot 5 \cdot 8 = 160mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V = \frac{U}{I} = \frac{Vcc - U_{Sat} - U_{BE}-U_F}{I_{Nenn} \cdot N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V=\frac{5V-0,7V-0,7V-2,2V}{4mA \cdot 5} \approx 68 \Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V=I_{Zeil}^2 \cdot R = 20mA^2 \cdot 68 \Omega = 27mW&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
=== Treiber ===&lt;br /&gt;
&lt;br /&gt;
Bei großen Anzeigen mit vielen LEDs werden die Pulsströme bisweilen schon recht hoch. Hier wird man dann mehr auf Treiber (z.&amp;amp;nbsp;B. ULN2803) zurück greifen. Vor allem die Schalter für die gemultiplexte Dimension, hier im Beispiel die Zeilen, müssen sehr große Ströme schalten.&lt;br /&gt;
&lt;br /&gt;
[[bild:LED-Matrix-ULN-UDN.png|thumb|right|250px|Multiplexansteuerung mit integrierten Treibern]]&lt;br /&gt;
&lt;br /&gt;
==== „Gemeinsame“ Katode oder Anode? ====&lt;br /&gt;
In einigen Fällen hat man die Wahl, ob man die Katoden oder die Anoden multiplext.&lt;br /&gt;
In einem solchen Fall ist grundsätzlich &amp;lt;i&amp;gt;die&amp;lt;/i&amp;gt; Seite zu multiplexen (= „Spalte“, die Seite &amp;lt;i&amp;gt;ohne&amp;lt;/i&amp;gt; Widerstände), bei der der Bahnwiderstand der Schaltelemente (Mikrocontroller-Ausgänge, Transistoren oder MOSFETs) &amp;lt;i&amp;gt;kleiner&amp;lt;/i&amp;gt; ist.&lt;br /&gt;
&lt;br /&gt;
Benutzt man als Spalten- und Zeilentreiber bipolare Transistoren oder MOSFETs (NPN bzw. n-Kanal für die Katoden und PNP bzw. p-Kanal für die Anoden), so sollten &amp;lt;i&amp;gt;„gemeinsame“ Katoden&amp;lt;/i&amp;gt; gewählt werden, da NPN-Transistoren bzw. n-Kanal-MOSFETs grundsätzlich, sogar als Pärchen, die kleineren Bahnwiderstände haben.&lt;br /&gt;
Die größeren Bahnwiderstände der anderen Seite („Zeilen“) fallen dann nicht ins Gewicht, weil dort ohnehin Vorwiderstände erforderlich sind. In den drei nebenstehenden Schaltplänen ist es auch genau so gemacht.&lt;br /&gt;
&lt;br /&gt;
Die Endlichkeit der Spalten-Bahnwiderstände führen zu Abhängigkeiten der Helligkeit einer LED zu den benachbarten LEDs, und dies ist selbstverständlich zu minimieren.&lt;br /&gt;
&lt;br /&gt;
==== Berechnung ====&lt;br /&gt;
&lt;br /&gt;
Gegeben:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Nenn}&amp;lt;/math&amp;gt;: Nennstrom der LED-Stränge: 15mA&lt;br /&gt;
*&amp;lt;math&amp;gt;U_{F}&amp;lt;/math&amp;gt;: Flußspannung der LED-Stränge: 7V&lt;br /&gt;
*&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: Multiplexverhältnis (Zeilen): 1:4&lt;br /&gt;
*&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;: Spalten in der Matrix 8&lt;br /&gt;
* &amp;lt;math&amp;gt;U_{IC1}&amp;lt;/math&amp;gt;: Sättigungsspannung des Low Side Switch, hier IC1 mit ca. 1V&lt;br /&gt;
* &amp;lt;math&amp;gt;U_{IC2}&amp;lt;/math&amp;gt;: Sättigungsspannung des High Side Switch, hier IC2 mit ca. 2V&lt;br /&gt;
&lt;br /&gt;
Gesucht:&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Spl}&amp;lt;/math&amp;gt;: Dauerstrom der Spaltentreiber = Pulsstrom der LEDs&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Zeil}&amp;lt;/math&amp;gt;: Pulsstrom der Zeilentreiber&lt;br /&gt;
*&amp;lt;math&amp;gt;R_V&amp;lt;/math&amp;gt;: Vorwiderstand für LED-Spalten&lt;br /&gt;
*&amp;lt;math&amp;gt;P_V&amp;lt;/math&amp;gt;: Verlustleistung der Vorwiderstände &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Spl} = I_{Nenn} \cdot N = 15mA \cdot 4 = 60mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Zeil} = I_{Nenn} \cdot N \cdot S = 15mA \cdot 4 \cdot 8 = 480mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V = \frac{U}{I} = \frac{Vcc - U_{IC1} - U_{IC2}-U_F}{I_{Nenn} \cdot N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V=\frac{12V-1V-2V-7V}{15mA \cdot 4}=33 \Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V=I_{Spl}^2 \cdot R_V = 60mA^2 \cdot 33 \Omega = 119mW&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
60mA kann IC2 dauerhaft auf jedem Kanal liefern, 500mA Pulsstrom sind für IC1 schon die absolute Grenze laut Datenblatt. Der Spannungsverlust &amp;lt;math&amp;gt;U_{IC1}&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;U_{IC2}&amp;lt;/math&amp;gt; ist bei diesen relativ alten ICs recht hoch, mit modernen MOSFETs erreicht man hier deutlich kleinere Werte und damit auch kleinere Verlustleistungen bzw. höhere Ströme.&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
=== MOSFETs ===&lt;br /&gt;
&lt;br /&gt;
Bei Strömen über 1A nimmt man heute meist [[FET|MOSFETs]].&lt;br /&gt;
&lt;br /&gt;
[[bild:LED-Matrix-MOSFET.png|thumb|right|250px|Multiplexansteuerung mit MOSFETs]]&lt;br /&gt;
&lt;br /&gt;
==== Berechnung ====&lt;br /&gt;
&lt;br /&gt;
Die Berechnung erfolgt analog zum vorherigen Beispiel, nur mit dem Unterschied, daß die MOSFETs deutlich kleinere Spannungsabfälle zu verzeichnen haben. Damit die MOSFETs schnell schalten werden [[MOSFET-Übersicht| MOSFET-Treiber]] eingesetzt. Zur Not tun es aber auch Mikrocontroller-Ausgänge, die allerdings mit 5 V Speisespannung laufen sollten. Für die P-Kanal MOSFETs nutzt man hier im Beispiel einen echten [[MOSFET-Übersicht##Mosfet-Treiber | MOSFET-Treiber]], die N-Kanal MOSFETS kann man hier mit einem einfachen CMOS-Inverter ansteuern. Das geht bei kleinen Logic Level MOSFETs mit 1-2 nF Gatekapazität noch ausreichend schnell, bei größeren MOSFETs ist auch hier ein echter MOSFET-Treiber nötig. Der berühmt-berüchtigte Gatewiderstand {Serienwiderstand, typisch 22 Ω} kann hier entfallen, die Ausgänge einfacher CMOS-Inverter sind bereits hochohmig genug, um parasitäre Schwingungen zu dämpfen. Nimmt man für den Inverter einen HCT-Typ, so wirkt er gleichzeitig als [[Pegelwandler]] und die Matrix kann mit 3,3-V-Signalen angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Gegeben:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Nenn}&amp;lt;/math&amp;gt;: Nennstrom der LED-Stränge: 25 mA&lt;br /&gt;
*&amp;lt;math&amp;gt;U_{F}&amp;lt;/math&amp;gt;: Flußspannung der LED-Stränge: 9 V&lt;br /&gt;
*&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: Multiplexverhältnis (Zeilen): 1:8&lt;br /&gt;
*&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;: Spalten in der Matrix: 8&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{DS-ON, high}&amp;lt;/math&amp;gt;: Einschaltwiderstand der High Side MOSFETs : 0,25 Ω&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{DS-ON, low}&amp;lt;/math&amp;gt;: Einschaltwiderstand der Low Side MOSFETs: 0,13 Ω&lt;br /&gt;
&lt;br /&gt;
Gesucht:&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Spl}&amp;lt;/math&amp;gt;: Dauerstrom der Spaltentreiber = Pulsstrom der LEDs&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Zeil}&amp;lt;/math&amp;gt;: Pulsstrom der Zeilentreiber&lt;br /&gt;
*&amp;lt;math&amp;gt;R_V&amp;lt;/math&amp;gt;: Vorwiderstand für LED-Spalten &lt;br /&gt;
*&amp;lt;math&amp;gt;P_V&amp;lt;/math&amp;gt;: Verlustleistung der Vorwiderstände&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Spl} = I_{Nenn} \cdot N = 25mA \cdot 8 = 200mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Zeil} = I_{Nenn} \cdot N \cdot S = 25mA \cdot 8 \cdot 8 = 1600mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V = \frac{U}{I} = \frac{Vcc - I_{Spl} \cdot R_{DS-ON, high} - I_{Zeil} \cdot R_{DS-ON, low} -U_F}{I_{Spl}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V=\frac{12V - 0,2A \cdot 0,25 \Omega - 1,6A \cdot 0,13 \Omega -9V}{0,2A} \approx 13 \Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V=I_{Spl}^2 \cdot R_V = 200mA^2 \cdot 13 \Omega = 520mW&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der gesparte Spannungsabfall über den MOSFETs genutzt, um LEDs mit höherer Flußspannung in Reihe schalten, womit der Wirkungsgrad ansteigt. Liegt die LED-Betriebsspannung über 15V braucht man einen sogenannten [[Treiber | High Side Driver]], weil dann die Gates der P-Kanal MOSFETs nicht mehr direkt angesteuert werden können. Ein einfaches Beispiel findet man [http://www.mikrocontroller.net/attachment/34752/P_FET.png hier].&lt;br /&gt;
&lt;br /&gt;
===Dimmen===&lt;br /&gt;
&lt;br /&gt;
Multiplexen kann auch mit [[PWM]] kombiniert werden. Dabei ist die Multiplexzeit einer Spalte gleich der PWM-Periodendauer. Allerdings kann hier der Rechenaufwand für die CPU schon recht hoch werden, da die meisten Mikrocontroller nicht so viele PWM-Kanäle in Hardware zur Verfügung stellen und die PWM in Software nachgebildet werden muss ([[Soft-PWM]]).&lt;br /&gt;
&lt;br /&gt;
Falls die Multiplexzeit klein genug gewählt wird, kann man in Grenzen auch per gezieltem Ein- und Abschalten in Grenzen eine Dimmfunktion erreichen. Um hier allerdings noch flimmerfreie Ergebnisse zu erzielen, sollte die Multiplexfrequenz mit den geplanten Dimmstufen multipliziert werden (bspw. 16 Dimmstufen bei 100 Hz Multiplexfrequenz = 1600 Hz angepasste Multiplexfrequenz), was die Rechenzeit wiederum schnell in die Höhe treiben kann. Dimmen selbst erreicht man dann mit entsprechend angepassten Schaltzeiten (bspw. 25% Helligkeit = 4x LED an, 12x LED aus bei insgesamt 16 Dimmstufen, dann von vorne).&lt;br /&gt;
&lt;br /&gt;
In Anbetracht ausgeklügelter Soft-PWM-Algorithmen spielt dieser zweite Lösungsansatz nur eine untergeordnete Rolle, etwa:&lt;br /&gt;
* um Code zu sparen&lt;br /&gt;
* um Gate-Umladevorgänge bei geringen Helligkeiten zu minimieren&lt;br /&gt;
&lt;br /&gt;
=== Spezielle ICs ===&lt;br /&gt;
&lt;br /&gt;
Neben den typischen Treiberbausteinen für möglichst hohe Ströme, die weiter unten aufgeführt sind, gibt es auch noch integrierte Lösungen für das direkte Betreiben einer LED-Matrix an der [[SPI]] oder [[I2C]]-Schnittstelle. Beispiele sind hier MAXIM 7219 und 7221 oder AS1100-08/15-18 für 8x8 LED-Matrizen oder 8x8-Segmentanzeigen. Zwischen beiden Modi wird per Software gewechselt. Die ICs bieten einige Vorteile, wie automatische Dimmung und großzügiges Freischaufeln von CPU-Kapazität auf dem Mikrocontroller. Außerdem können die ICs dank SPI kaskadiert werden wie normale [[AVR-Tutorial: Schieberegister|Schieberegister]] und somit eine nahezu unbegrenzte Zahl an LEDs ansteuern. Allerdings ist der Strom für die integrierten Stromsenken auf etwa 50 mA begrenzt, was bei einigen Displays zu wenig sein kann. Hier muss man wieder Vor- und Nachteile abwägen. Weitere ICs bei [http://www.maxim-ic.com Maxim] umfassen Standardfälle wie 5x7 Matrizen oder 7-, 10-, 14-Segment LED-Anzeigen mit 4 bis 16 Stellen. Diese ICs gibt es dann allerdings leider nicht bei den [[Elektronikversender|Standardversandhändlern]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Bauteil                  || Beschreibung                          || Bezugsquelle&lt;br /&gt;
|-&lt;br /&gt;
|ULN2803                  || 8fach NPN-Transistorarray, 500mA      || Conrad&lt;br /&gt;
|-&lt;br /&gt;
|ULN2003                  || 7fach NPN-Transistorarray, 500mA      ||&lt;br /&gt;
|-&lt;br /&gt;
|UDN2981                  || 8fach High Side Treiber, 500mA        || Unter dem Namen: MIC2981 zu finden&lt;br /&gt;
|-&lt;br /&gt;
|TLC5921                  || 16 Bit-Schieberegister plus Latch&amp;lt;BR&amp;gt; mit Konstantstromsenken, max. 80mA pro Ausgang       ||&lt;br /&gt;
|-&lt;br /&gt;
|TLC5922                  &lt;br /&gt;
|| 16 Bit-Schieberegister plus Latch mit Konstantstromsenken, max. 80mA pro Ausgang&amp;lt;BR&amp;gt;Dimmung jedes einzelnen Kanals mit 7 Bit möglich, pinkompatibel zum TLC5921      ||&lt;br /&gt;
|-&lt;br /&gt;
|TLC5940 || 16 Bit-Schieberegister plus Latch mit Konstantstromsenken, max. 120mA pro Ausgang&amp;lt;BR&amp;gt;Dimmung jedes einzelnen Kanals mit 6 Bit plus 12 Bit PWM möglich, kompatibel mit AS1112 || mouser.com, [https://hbe-shop.de]&lt;br /&gt;
|-&lt;br /&gt;
|CAT4016&lt;br /&gt;
|| 16 Bit-Schieberegister/Latch mit Konstantstromsenken(max. 100mA), günstig || Farnell&lt;br /&gt;
|-&lt;br /&gt;
|TPIC6B595&lt;br /&gt;
|| 8-Bit Schieberegister + Leistungstreiber, 500mA      || Reichelt&lt;br /&gt;
|-&lt;br /&gt;
|IRF7304                  || 2fach P-Kanal MOSFET, 3,5A, SO-8 Gehäuse ||&lt;br /&gt;
|-&lt;br /&gt;
|MAX7219                  || Seriell angesteuerter 8x8 Matrizentreiber, kompatibel mit AS110x ||&lt;br /&gt;
|-&lt;br /&gt;
|MAX7221                  || Seriell angesteuerter 8x8 Matrizentreiber, kompatibel mit AS110x ||&lt;br /&gt;
|-&lt;br /&gt;
|AS1100-08                || Seriell angesteuerter 8x8 Matrizentreiber, kompatibel mit MAX72xx || [http://www.austriamicrosystems.com/AS1106 AS1106]&lt;br /&gt;
|-&lt;br /&gt;
|AS1115/17                || I²C angesteuerter 8x8 Matrizentreiber mit Diagnose &amp;amp; Tastenerkennung|| [http://www.austriamicrosystems.com/AS1115 AS1115]&lt;br /&gt;
|-&lt;br /&gt;
|AS1116/18                || Seriell angesteuerter 8x8 Matrizentreiber mit Diagnose|| [http://www.austriamicrosystems.com/AS1116 AS1116]&lt;br /&gt;
|-&lt;br /&gt;
|AS1119            || I²C angesteuerter 144LEDs Matrizentreiber mit Animationsspeicher, Diagnose und ChargePump||[http://www.austriamicrosystems.com/AS1119 AS1119]&lt;br /&gt;
|-&lt;br /&gt;
|AS1130            || I²C angesteuerter 132 LEDs Matrizentreiber mit Animationsspeicher, Scroll Funktion &amp;amp; Diagnose||[http://www.austriamicrosystems.com/AS1130 AS1130]&lt;br /&gt;
|-&lt;br /&gt;
|AS1112            || 15V 16Kanal LED Treiber, max. 100mA pro Ausgang&amp;lt;BR&amp;gt;Dimmung jedes einzelnen Kanals mit 6 Bit plus 12 Bit PWM möglich, Diagnosefunktion, kompatibel mit TLC594x ||[http://www.austriamicrosystems.com/AS1112 AS1112]&lt;br /&gt;
|-&lt;br /&gt;
|AS1121            || 30V 16Kanal LED Treiber, max. 40mA pro Ausgang&amp;lt;BR&amp;gt;Dimmung jedes einzelnen Kanals mit 6 Bit plus 12 Bit PWM möglich, Diagnosefunktion ||[http://www.austriamicrosystems.com/AS1121 AS1121]&lt;br /&gt;
|-&lt;br /&gt;
|AS1123            || 5V 16Kanal LED Treiber, max. 40mA pro Ausgang&amp;lt;BR&amp;gt;Low Power, Diagnosefunktion ||[http://www.austriamicrosystems.com/AS1123 AS1123]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.starchips.com.tw/pdf/datasheet/SCT2024V01_03.pdf SCT2024]            || 17V 16Kanal LED Konstantstrom Treiber, max. 45mA pro Ausgang&amp;lt;BR&amp;gt; ||tme&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[bild:LED-Matrix-TLC5921.png|thumb|right|250px|Multiplexansteuerung mit Special-ICs]]&lt;br /&gt;
&lt;br /&gt;
==== Berechnung ====&lt;br /&gt;
&lt;br /&gt;
Der TLC5921 und seine zahlreichen [http://focus.ti.com/paramsearch/docs/parametricsearch.tsp?family=analog&amp;amp;familyId=480&amp;amp;uiTemplateId=NODE_STRY_PGE_T Kollegen] von [http://www.ti.com Texas Instruments] bieten eine komfortable Möglichkeit zur Ansteuerung von LED-Matrizen. Der TLC5921 besitzt 16 Ausgänge, welche als [[Konstantstromquelle]] arbeiten. Der Konstantstrom wird dabei über einen Widerstand eingestellt. Es entfallen somit die Vorwiderstände. Der Vorteil ist, dass Schwankungen der LED-Flußspannung oder Versorgungsspannung ausgeglichen werden, ohne dass die Helligkeit der LEDs sich dabei ändert. Außerdem erlauben die besseren Typen der Baureihe wie z.B. der TLC5922 eine Dimmung der einzelnen Kanäle. Doch Vorsicht! Die zulässige Verlustleistung des ICs ist groß, ca. 4W mit ausreichender [[Kühlkörper#Die_Platine_als_Kühlkörper |Kühlung]], aber nicht endlos. Denn die Restspannung aus Betriebsspannung minus LED-Flußspannung fällt über dem IC ab! Als Minimum gilt je nach Strom 0,5-1V, welches über dem TLC5921 abfallen muss, damit er korrekt arbeitet. Nach oben wird die Grenze durch die Verlustleistung und max. Spannung von 17V gesetzt. Weiterhin ist zu beachten, dass hier das Multiplexing der Zeilen und Spalten vertauscht wurde.&lt;br /&gt;
&lt;br /&gt;
Gegeben&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Nenn}&amp;lt;/math&amp;gt;: Nennstrom der LED-Stränge: 10mA&lt;br /&gt;
*&amp;lt;math&amp;gt;U_{F}&amp;lt;/math&amp;gt;: Flußspannung der LED-Stränge: 9V&lt;br /&gt;
*&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: Multiplexverhältnis (Zeilen): 1:8&lt;br /&gt;
*&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;: Spalten in der Matrix: 8&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{DS-ON, high}&amp;lt;/math&amp;gt;: Einschaltwiderstand der High Side MOSFETs : &amp;lt;math&amp;gt;0,25\Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gesucht:&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Spl}&amp;lt;/math&amp;gt;: Dauerstrom der Spaltentreiber = Pulsstrom der LEDs&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Zeil}&amp;lt;/math&amp;gt;: Pulsstrom der Zeilentreiber&lt;br /&gt;
*&amp;lt;math&amp;gt;P_V&amp;lt;/math&amp;gt;: Verlustleistung des TLC5921&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Spl} = I_{Nenn} \cdot N = 10mA \cdot 8 = 80mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Zeil} = I_{Nenn} \cdot N \cdot S = 10mA \cdot 8 \cdot 8 = 640mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V=I_{Spl} \cdot S \cdot U_{Rest} = I_{Spl} \cdot S \cdot (Vcc - U_F - I_{Zeil} \cdot R_{DS-ON, high})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V= 80mA \cdot 8 \cdot (12V - 9V - 640mA \cdot 0,25 \Omega) = 1{,}82W&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[LED]]&lt;br /&gt;
* [[LED cube]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/209988#new Forenbeitrag]: Nachleuchten beim Multiplexen vermeiden&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/343254#3789125 Forumsbeitrag]: TLC5947 flackert bei der Ansteuerung&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/353071?goto=3947567#3947567 Forumsbeitrag:] TLC5947 und ATmega16 Bitmanipulation&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/405432?goto=4707793#4707793 Forumsbeitrag]: Beispiele für die Retro-Spielkonsole PONG&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=%2Bled+%2Bmatrix&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4&amp;amp;forums%5B%5D=6 Beiträge zum Thema LED-Matrix im Forum]&lt;br /&gt;
* [http://www.ps-blnkd.de/LED-Matrix.htm Modulare 16x16 RGB-LED-Matrix] &lt;br /&gt;
* [http://members.ziggo.nl/electro1/avr/dotmatrix.htm Dotmatrix mit ATtiny2313 ansteuern, engl.]&lt;br /&gt;
* [http://www.braindrum.de/tools/leddotmatrix/leddotmatrix.htm LED-Dotmatrix mit ATmega16 ansteuern]&lt;br /&gt;
* Open Project [http://www.tiletoy.org/ TileToy] is a modular, electronic game prototype for tangible LED game tiles (PIC). [http://www.youtube.com/watch?v=XVmhlLvJNHc Youtube-Video]&lt;br /&gt;
* [http://www.kalanda.com/scroller-de-7x5-leds-basado-en-micro-attiny2313.html Eine 5x7 Matrix mit ATtiny2313 angesteuert, spanisch]&lt;br /&gt;
* [http://www.saccade.com/writing/projects/Puzzlemation/Puzzlemation.html Modulare Dotmatrixanzeige, engl.]&lt;br /&gt;
* [http://spritesmods.com/?art=ledmatrix Dotmatrix, engl.]&lt;br /&gt;
* [http://www.harbaum.org/till/ledmatrix/ Große LED-Matrix mit RS232 Ansteuerung, engl.]&lt;br /&gt;
* [https://www.das-labor.org/wiki/Blinken_Borgs Blinken_Borgs] Diverse Projekte von &#039;&#039;Das Labor&#039;&#039;&lt;br /&gt;
* [http://www.werkzeugh.at/intern/deflatable-led-matrix/ Eine aufblasbare LED-Matrix! (404)]&lt;br /&gt;
* [http://metalab.at/wiki/MetaLEDs 8x48 LED-Matrix]&lt;br /&gt;
* [http://www.das-labor.org/wiki/Blinken_Borgs LED-Würfel mit 5^3 RGB-LEDs]&lt;br /&gt;
* [http://www.ulrichradig.de/home/index.php/avr/avr-mega-dis LED-Matrix bei Ulrich Radig]&lt;br /&gt;
* [http://www.elo-web.de/elo/entwicklung-und-projekte/ping-pong/laufschrift Eine kleine Laufschrift auf der Ping-Pong-Platine] von Sascha Bader (C, Atmega8)&lt;br /&gt;
* [http://www.sparkfun.com/tutorials/47 12 Fuß (3,6m) Wanduhr auf Sparkfun.com]&lt;br /&gt;
* [http://www.decadecounter.com/vta/articleview.php?item=879 Gigantic 5x7 LED Matrix] by AnubisTTP&lt;br /&gt;
* [http://klautesblog.blogspot.com/search/label/LED%20Matrix Mikes LED Matrix (21 x 21 LEDs)] by klaute&lt;br /&gt;
* [http://blinkenlights.net/ Blinkenlights] keine LEDs, aber groß (CCC)!&lt;br /&gt;
* Die riesige LED Tafel am [http://money.howstuffworks.com/nasdaq-marketsite-tower.htm Time Square] in New York, 105m hoch und 1 MW Spitzenverbrauch!&lt;br /&gt;
* Nochmal ein Artikel zur [http://bits.blogs.nytimes.com/2008/11/20/towering-led-sign-will-light-times-square/ Time Square LED-Wand] &lt;br /&gt;
* [http://wiki.niftylight.de niftylight] open-source Software um LED Matrix Ansteuerung zu erleichtern&lt;br /&gt;
* [http://www.dsw-elektronik.de/Dot-mat1.html DSW-Elektronik], Hersteller elektromechanischer Matrixelemente&lt;br /&gt;
* [http://www.crafted.de/photonenbanner.php LULI Photonenbanner 96x24]&lt;br /&gt;
* [http://www.ehajo.de/baus%C3%A4tze/smd-baus%C3%A4tze/blinkenlights-led-matrix.html Blinkenlights-Bausatz von eHaJo, Atmega32u2 mit 8x8 LEDs]&lt;br /&gt;
* [https://sites.google.com/site/artcfox/demystifying-the-tlc5940 demystifying-the-tlc5940] Umfassende Erklärung zur Ansteuerung eines TLC5940, engl.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Displays und Anzeigen]]&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LED-Matrix&amp;diff=97005</id>
		<title>LED-Matrix</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LED-Matrix&amp;diff=97005"/>
		<updated>2017-08-21T13:20:49Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: /* Spezielle ICs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In einer [[LED]]-Matrix sind jeweils die Kathoden und Anoden der LEDs in Zeilen bzw. Spalten verbunden. Der Vorteil besteht darin, dass weniger Kontakte nach außen geführt und angesteuert werden müssen, ebenso sinkt der Verdrahtungsaufwand im Modul bzw. auf der Platine. Die Ansteuerung erfolgt dabei im sogenannten Multiplexbetrieb. Prinzipiell kann man sowohl die Zeilen als auch die Spalten multiplexen. Die nachfolgende Beschreibung bezieht sich auf das Multiplexen von Spalten.&lt;br /&gt;
&lt;br /&gt;
[[Bild:LEDmatrix_5x7.png|right|thumb|220px|Eine 5&amp;amp;times;7 LED-Matrix]]&lt;br /&gt;
&lt;br /&gt;
==Multiplexbetrieb==&lt;br /&gt;
&lt;br /&gt;
[http://de.wikipedia.org/wiki/Multiplexverfahren Multiplexverfahren (Wikipedia)]&lt;br /&gt;
&lt;br /&gt;
Der Trick einer LED-Matrix besteht darin, dass jeweils immer nur eine Spalte wirklich leuchtet. Die anderen sind ausgeschaltet. Wird nun in schneller Folge jede Spalte einmal angeschaltet, so entsteht aufgrund der Trägheit des menschlichen Auges ein scheinbar vollständiges Bild, bei dem alle LEDs gleichzeitig leuchten. Wird dieser Zyklus schnell genug durchlaufen, ist das Bild flimmerfrei, was ab ca. 100Hz erreicht wird. In Ausnahmefällen kann jedoch eine bewegte LED-Matrix auch bei höheren Multiplexfrequenzen als flimmernd erscheinen, z.&amp;amp;nbsp;B. LED-Bremsleuchten, LED-Anzeigen an Zügen oder Strassenbahnen.&lt;br /&gt;
&lt;br /&gt;
Der Ablauf der Steuerung ist recht einfach:&lt;br /&gt;
&lt;br /&gt;
#alle Spalten ausschalten, Muster für Spalte C1 an Zeilen R1..R7 anlegen, Spalte C1 einschalten&lt;br /&gt;
# Spaltenmultiplexzeit warten&lt;br /&gt;
#alle Spalten ausschalten, Muster für Spalte C2 an Zeilen R1..R7 anlegen, Spalte C2 einschalten&lt;br /&gt;
# Spaltenmultiplexzeit warten&lt;br /&gt;
#alle Spalten ausschalten, Muster für Spalte C3 an Zeilen R1..R7 anlegen, Spalte C3 einschalten&lt;br /&gt;
# Spaltenmultiplexzeit warten&lt;br /&gt;
#alle Spalten ausschalten, Muster für Spalte C4 an Zeilen R1..R7 anlegen, Spalte C4 einschalten&lt;br /&gt;
# Spaltenmultiplexzeit warten&lt;br /&gt;
#alle Spalten ausschalten, Muster für Spalte C5 an Zeilen R1..R7 anlegen, Spalte C5 einschalten&lt;br /&gt;
# Spaltenmultiplexzeit warten&lt;br /&gt;
# Zyklus beginnt bei 1.&lt;br /&gt;
&lt;br /&gt;
Praktisch wird man dazu einen [[Timer]] per [[Interrupt]] verwenden, keine Warteschleifen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:LEDmatrix_timing.png|left|thumb|700px|Multiplexzeitdiagramm]]&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; margin:1em;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!LEDs  ||  IOs  ||  Vorwiderstände &lt;br /&gt;
|-&lt;br /&gt;
|16    ||    8  ||      4      &lt;br /&gt;
|-&lt;br /&gt;
|64    ||   16  ||      8     &lt;br /&gt;
|-&lt;br /&gt;
|1024  ||   64  ||     32     &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Durch Einsatz der Multiplexverfahrens können mit relativ wenigen Ansteuerbauteilen (IO-Pins, Transistoren, Stromquellen) sehr viele LEDs gesteuert werden. Während bei direkter Ansteuerung für jede LED ein IO-Pin sowie eine Stromquelle bzw. Vorwiderstand benötig würde,  ist in einer zweiachsigen LED-Matrix der Aufwand für die Bauteile deutlich geringer:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\text{Anzahl der Bauteile} = 2\text{Anzahl der LEDs pro Reihe}&amp;lt;/math&amp;gt;&lt;br /&gt;
(bei quadratischer Matrix)&lt;br /&gt;
:&amp;lt;math&amp;gt;\text{Anzahl der Bauteile} = \text{Anzahl der LEDs pro Reihe }+\text{ Anzahl der LEDs pro Spalte }&amp;lt;/math&amp;gt;&lt;br /&gt;
(bei rechteckiger Matrix)&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung==&lt;br /&gt;
&lt;br /&gt;
Der verringerte Aufwand an Bauteilen kommt jedoch nicht ohne Nachteile. Da jede Spalte in einer Matrix mit N Spalten immer nur für 1/N der Zeit für einen vollen Bildaufbau aktiv ist, muss in dieser Zeit die gleiche Lichtmenge (=Energie) abgegeben werden, damit die genauso hell erscheint, wie wenn sie konstant mit Strom versorgt wird. Dazu muss der N-fache Strom fliessen. Demensprechend müssen die Vorwiderstände bzw. Stromquellen dimensioniert sein. Doch das führt zu zwei Problemen.&lt;br /&gt;
&lt;br /&gt;
# Der Pulsstrom durch eine LED kann nicht beliebig gesteigert werden. Genaue Angaben dazu gibt es im Datenblatt. Als grobe Abschätzung kann man sagen, dass die meisten LEDs bis etwa 1:10 gemuxt werden können, darüberhinaus werden die Pulsströme zu hoch (20mA Betriebsstrom =&amp;gt; 200 mA Pulsstrom!). Die Steuerung von mehr als 10 Spalten ist dann zwangsweise mit einer Helligkeitsreduktion verbunden, hilft aber, große Matrizen quadratischer zu machen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Die hohen Pulsströme verkraften die LEDs wirklich nur ganz kurz, sie brauchen die Ausschaltzeit um wieder abzukühlen! D.H. Die Ansteuerung des Multiplex darf NIE stehen bleiben, sonst brennen die LEDs durch! Für die Testphase der Matrix sowie Softwareentwicklung sollte man deshalb die Ströme stark verringern, die LEDs sind dann zwar wesenlich dunkler, überleben aber einen Softwareabsturz der Steuerung. Wenn am Ende alles getestet ist und man sich sicher ist daß die Steuerung funktioniert, kann man den Strom der Matrix wieder auf das volle Niveau erhöhen. Um ganz sicher zu gehen kann man einen Watchdog mit minimaler Laufzeit oder ein [[Monoflop]] verwenden, um im Fehlerfall die Stromversorgung bzw. Ansteuerung der LEDs abzuschalten.&lt;br /&gt;
&lt;br /&gt;
Um die Helligkeit der LEDs im Multiplexbetrieb voll zu nutzen muss meistens ein höherer Strom geschaltet werden, als Mikrocontroller es können. Eine [[LED]] muss aufgrund ihrer Kennlinie an einer Stromquelle betrieben werden. Im einfachsten Fall ist das ein in Reihe geschalteter Widerstand an einer Spannungsquelle. Ob man die Zeilen oder Spalten einer Matrix multiplext ist im Prinzip egal, aber manchmal ist es schlicht logisch sinnvoller. So ist z.B. bei einer LED-Laufschrift mit 8 Zeilen und 40 Spalten es sinnvoll, die Zeilen mit 1:8 zu multiplexen und nicht die Spalten mit 1:40! Generell kann man das in einer Schaltung so erkennen. Die gemultiplexte Dimension hat vor den Leistungsschaltern keine Vorwiderstände bzw. Konstantstromquellen sondern geht direkt an die LEDs. &lt;br /&gt;
&lt;br /&gt;
=== Direktbetrieb ===&lt;br /&gt;
&lt;br /&gt;
In einigen Projekten im Internet sieht man LED-Matritzen, die direkt per Mikrocontroller angesteuert werden, ohne Transistoren zwischenzuschalten. Das geht praktisch nur mit Low-Current-LEDs, da reguläre LEDs aufgrund des geringen Stroms sonst zu dunkel wären.&lt;br /&gt;
&lt;br /&gt;
=== Transistoren ===&lt;br /&gt;
&lt;br /&gt;
Das ist der Normalfall. Man kann diskrete [[Transistor|Transistoren]] (z.&amp;amp;nbsp;B. BC846, BC337) benutzen.&lt;br /&gt;
&lt;br /&gt;
Eine praktische Umsetzung kann man hier sehen. Q1-Q8 arbeiten als Emitterfolger ([[Transistor#Kollektorschaltung_(Emitterfolger)|Kollektorschaltung]]), darum gibt es hier auch keine [[Basiswiderstand | Basiswiderstände]]. Q9-Q13 arbeiten ganz einfach in [[Transistor#Emitterschaltung|Emitterschaltung]]. Dadurch braucht man nur NPN Transistoren,  die Schaltung ist dadurch auch relativ schnell. Einziger Nachteil ist ein um ca. 0,5 V höherer Spannungsverlust an Q1-Q8 im Vergleich zu PNP-Transistoren in Emitterschaltung. Das spielt hier aber keine große Rolle, weil bei den roten LEDs mit 2,2V Uf noch ausreichend Spannung für den Vorwiderstand bleibt. Werden z.B. blaue LEDS mit bis zu 4V Uf eingesetzt, dann verbleibt für den Widerstand zuwenig Spannung. Dadurch ändert sich schon bei kleinsten Versorgungsspannungsschwankungen der Strom recht stark.&lt;br /&gt;
&lt;br /&gt;
Ein Schieberegister ist im Prinzip ein Seriell-Parallel-Wandler.&lt;br /&gt;
Das hat mit Multiplexbetrieb eigentlich nichts direkt zu tun, es ist vielmehr eine Erweiterung der IO-Pins (siehe auch [[Porterweiterung mit SPI]] und [[AVR-Tutorial: Schieberegister]]). Wird ein Schieberegister &#039;&#039;nur&#039;&#039; zur Spaltenansteuerung verwendet, ergibt sich der angenehme Sonderfall, dass:&lt;br /&gt;
* Nur zum Weiterschalten der Spalte genau &#039;&#039;ein&#039;&#039; Schiebetakt erforderlich ist&lt;br /&gt;
** spart (etwas) Prozessorzeit&lt;br /&gt;
* die Daten- und Taktleitung für das Schieberegister für zwei weitere Matrix-Spalten zur Verfügung steht&lt;br /&gt;
** spart E/A-Anschlüsse am Mikrocontroller&lt;br /&gt;
** man kommt so einfach auf Spaltenzahl 10 (maximale Lichtausbeute der meisten LEDs) oder 18 (für RGB durch 3 teilbare Spaltenzahl)&lt;br /&gt;
** beim Umschaltvorgang per Zeilentreiber dunkeltasten sollte man ja sowieso&lt;br /&gt;
* ein einfaches Schieberegister ohne Ausgangslatch, etwa 74HC164, verwendet werden kann&lt;br /&gt;
** spart (etwas) Geld und Platz&lt;br /&gt;
&lt;br /&gt;
Eine weitere Schaltung mit Schieberegistern ist im &amp;quot;Retro-Spiel zum Selberbauen&amp;quot; [http://www.elo-web.de/elo/entwicklung-und-projekte/ping-pong Ping-Pong] von Burkhard Kainka verwendet worden. Hier werden die 10 Zeilen mit Atmega8-Portpins über 100 &amp;amp;Omega; Widerstände [http://www.elo-web.de/elo/mikrocontroller-und-programmierung/ping-pong/ping-pong-selbst-programmieren] gegen 12 Schieberegister-Spalten zweier 4094D CMOS-ICs geschaltet, um eine Matrix aus 120 roten SMD-LEDs zu steuern.&lt;br /&gt;
&lt;br /&gt;
[[Bild:LED_Matrix_8x5.png|thumb|right|250px|Multiplexansteuerung mit Schieberegistern und Transistoren]]&lt;br /&gt;
&lt;br /&gt;
==== Berechnung ====&lt;br /&gt;
&lt;br /&gt;
Will man nun seine Schaltung optimal betreiben, muss man ausrechnen wieviel Strom geschaltet werden muss. Wie oben bereits beschrieben, teilt sich der gemultiplexte Strom im Verhältnis 1:N auf die LEDs auf, in diesem Beispiel hier 1:5. Der Treiber für die Zeilen muss diesen im Extremfall kontinuierlich an jedem Ausgang zur Verfügung stellen, wenn nämlich alle LEDs der Matrix aktiv sind. Der Treiber für die Spalten ist pro Kanal nur 1:N der Multiplexzeit aktiv, muss aber währenddessen den gesamten Nennstrom der Matrix schalten können! Das sind schnell mal ein paar Ampere, wie die nachfolgenden Beispiele zeigen!&lt;br /&gt;
&lt;br /&gt;
Gegeben:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Nenn}&amp;lt;/math&amp;gt;: Nennstrom der LEDs: 4mA&lt;br /&gt;
*&amp;lt;math&amp;gt;U_{F}&amp;lt;/math&amp;gt;: Flußspannung der LEDs: 2,2V&lt;br /&gt;
*&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: Multiplexverhältnis (Spalten): 1:5&lt;br /&gt;
*&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;: Zeilen in der Matrix: 8&lt;br /&gt;
* &amp;lt;math&amp;gt;U_{Sat}&amp;lt;/math&amp;gt;: Sättigungsspannung des Low Side Transistors, hier Q9-Q13 mit ca. 0,7V&lt;br /&gt;
* &amp;lt;math&amp;gt;U_{BE}&amp;lt;/math&amp;gt;: Basis-Emitter-Spannung des High Side Transistors, hier Q1-Q8 ca. 0,7V&lt;br /&gt;
&lt;br /&gt;
Gesucht:&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Zeil}&amp;lt;/math&amp;gt;: Dauerstrom der Zeilentreiber = Pulsstrom der LEDs&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Spl}&amp;lt;/math&amp;gt;: Pulsstrom der Spaltentreiber&lt;br /&gt;
*&amp;lt;math&amp;gt;R_V&amp;lt;/math&amp;gt;: Vorwiderstand für LED-Zeilen &lt;br /&gt;
*&amp;lt;math&amp;gt;P_V&amp;lt;/math&amp;gt;: Verlustleistung der Vorwiderstände&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Zeil} = I_{Nenn} \cdot N = 4mA \cdot 5 = 20mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Spl} = I_{Nenn} \cdot N \cdot S = 4mA \cdot 5 \cdot 8 = 160mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V = \frac{U}{I} = \frac{Vcc - U_{Sat} - U_{BE}-U_F}{I_{Nenn} \cdot N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V=\frac{5V-0,7V-0,7V-2,2V}{4mA \cdot 5} \approx 68 \Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V=I_{Zeil}^2 \cdot R = 20mA^2 \cdot 68 \Omega = 27mW&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
=== Treiber ===&lt;br /&gt;
&lt;br /&gt;
Bei großen Anzeigen mit vielen LEDs werden die Pulsströme bisweilen schon recht hoch. Hier wird man dann mehr auf Treiber (z.&amp;amp;nbsp;B. ULN2803) zurück greifen. Vor allem die Schalter für die gemultiplexte Dimension, hier im Beispiel die Zeilen, müssen sehr große Ströme schalten.&lt;br /&gt;
&lt;br /&gt;
[[bild:LED-Matrix-ULN-UDN.png|thumb|right|250px|Multiplexansteuerung mit integrierten Treibern]]&lt;br /&gt;
&lt;br /&gt;
==== „Gemeinsame“ Katode oder Anode? ====&lt;br /&gt;
In einigen Fällen hat man die Wahl, ob man die Katoden oder die Anoden multiplext.&lt;br /&gt;
In einem solchen Fall ist grundsätzlich &amp;lt;i&amp;gt;die&amp;lt;/i&amp;gt; Seite zu multiplexen (= „Spalte“, die Seite &amp;lt;i&amp;gt;ohne&amp;lt;/i&amp;gt; Widerstände), bei der der Bahnwiderstand der Schaltelemente (Mikrocontroller-Ausgänge, Transistoren oder MOSFETs) &amp;lt;i&amp;gt;kleiner&amp;lt;/i&amp;gt; ist.&lt;br /&gt;
&lt;br /&gt;
Benutzt man als Spalten- und Zeilentreiber bipolare Transistoren oder MOSFETs (NPN bzw. n-Kanal für die Katoden und PNP bzw. p-Kanal für die Anoden), so sollten &amp;lt;i&amp;gt;„gemeinsame“ Katoden&amp;lt;/i&amp;gt; gewählt werden, da NPN-Transistoren bzw. n-Kanal-MOSFETs grundsätzlich, sogar als Pärchen, die kleineren Bahnwiderstände haben.&lt;br /&gt;
Die größeren Bahnwiderstände der anderen Seite („Zeilen“) fallen dann nicht ins Gewicht, weil dort ohnehin Vorwiderstände erforderlich sind. In den drei nebenstehenden Schaltplänen ist es auch genau so gemacht.&lt;br /&gt;
&lt;br /&gt;
Die Endlichkeit der Spalten-Bahnwiderstände führen zu Abhängigkeiten der Helligkeit einer LED zu den benachbarten LEDs, und dies ist selbstverständlich zu minimieren.&lt;br /&gt;
&lt;br /&gt;
==== Berechnung ====&lt;br /&gt;
&lt;br /&gt;
Gegeben:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Nenn}&amp;lt;/math&amp;gt;: Nennstrom der LED-Stränge: 15mA&lt;br /&gt;
*&amp;lt;math&amp;gt;U_{F}&amp;lt;/math&amp;gt;: Flußspannung der LED-Stränge: 7V&lt;br /&gt;
*&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: Multiplexverhältnis (Zeilen): 1:4&lt;br /&gt;
*&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;: Spalten in der Matrix 8&lt;br /&gt;
* &amp;lt;math&amp;gt;U_{IC1}&amp;lt;/math&amp;gt;: Sättigungsspannung des Low Side Switch, hier IC1 mit ca. 1V&lt;br /&gt;
* &amp;lt;math&amp;gt;U_{IC2}&amp;lt;/math&amp;gt;: Sättigungsspannung des High Side Switch, hier IC2 mit ca. 2V&lt;br /&gt;
&lt;br /&gt;
Gesucht:&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Spl}&amp;lt;/math&amp;gt;: Dauerstrom der Spaltentreiber = Pulsstrom der LEDs&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Zeil}&amp;lt;/math&amp;gt;: Pulsstrom der Zeilentreiber&lt;br /&gt;
*&amp;lt;math&amp;gt;R_V&amp;lt;/math&amp;gt;: Vorwiderstand für LED-Spalten&lt;br /&gt;
*&amp;lt;math&amp;gt;P_V&amp;lt;/math&amp;gt;: Verlustleistung der Vorwiderstände &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Spl} = I_{Nenn} \cdot N = 15mA \cdot 4 = 60mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Zeil} = I_{Nenn} \cdot N \cdot S = 15mA \cdot 4 \cdot 8 = 480mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V = \frac{U}{I} = \frac{Vcc - U_{IC1} - U_{IC2}-U_F}{I_{Nenn} \cdot N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V=\frac{12V-1V-2V-7V}{15mA \cdot 4}=33 \Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V=I_{Spl}^2 \cdot R_V = 60mA^2 \cdot 33 \Omega = 119mW&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
60mA kann IC2 dauerhaft auf jedem Kanal liefern, 500mA Pulsstrom sind für IC1 schon die absolute Grenze laut Datenblatt. Der Spannungsverlust &amp;lt;math&amp;gt;U_{IC1}&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;U_{IC2}&amp;lt;/math&amp;gt; ist bei diesen relativ alten ICs recht hoch, mit modernen MOSFETs erreicht man hier deutlich kleinere Werte und damit auch kleinere Verlustleistungen bzw. höhere Ströme.&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
=== MOSFETs ===&lt;br /&gt;
&lt;br /&gt;
Bei Strömen über 1A nimmt man heute meist [[FET|MOSFETs]].&lt;br /&gt;
&lt;br /&gt;
[[bild:LED-Matrix-MOSFET.png|thumb|right|250px|Multiplexansteuerung mit MOSFETs]]&lt;br /&gt;
&lt;br /&gt;
==== Berechnung ====&lt;br /&gt;
&lt;br /&gt;
Die Berechnung erfolgt analog zum vorherigen Beispiel, nur mit dem Unterschied, daß die MOSFETs deutlich kleinere Spannungsabfälle zu verzeichnen haben. Damit die MOSFETs schnell schalten werden [[MOSFET-Übersicht| MOSFET-Treiber]] eingesetzt. Zur Not tun es aber auch Mikrocontroller-Ausgänge, die allerdings mit 5 V Speisespannung laufen sollten. Für die P-Kanal MOSFETs nutzt man hier im Beispiel einen echten [[MOSFET-Übersicht##Mosfet-Treiber | MOSFET-Treiber]], die N-Kanal MOSFETS kann man hier mit einem einfachen CMOS-Inverter ansteuern. Das geht bei kleinen Logic Level MOSFETs mit 1-2 nF Gatekapazität noch ausreichend schnell, bei größeren MOSFETs ist auch hier ein echter MOSFET-Treiber nötig. Der berühmt-berüchtigte Gatewiderstand {Serienwiderstand, typisch 22 Ω} kann hier entfallen, die Ausgänge einfacher CMOS-Inverter sind bereits hochohmig genug, um parasitäre Schwingungen zu dämpfen. Nimmt man für den Inverter einen HCT-Typ, so wirkt er gleichzeitig als [[Pegelwandler]] und die Matrix kann mit 3,3-V-Signalen angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Gegeben:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Nenn}&amp;lt;/math&amp;gt;: Nennstrom der LED-Stränge: 25 mA&lt;br /&gt;
*&amp;lt;math&amp;gt;U_{F}&amp;lt;/math&amp;gt;: Flußspannung der LED-Stränge: 9 V&lt;br /&gt;
*&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: Multiplexverhältnis (Zeilen): 1:8&lt;br /&gt;
*&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;: Spalten in der Matrix: 8&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{DS-ON, high}&amp;lt;/math&amp;gt;: Einschaltwiderstand der High Side MOSFETs : 0,25 Ω&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{DS-ON, low}&amp;lt;/math&amp;gt;: Einschaltwiderstand der Low Side MOSFETs: 0,13 Ω&lt;br /&gt;
&lt;br /&gt;
Gesucht:&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Spl}&amp;lt;/math&amp;gt;: Dauerstrom der Spaltentreiber = Pulsstrom der LEDs&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Zeil}&amp;lt;/math&amp;gt;: Pulsstrom der Zeilentreiber&lt;br /&gt;
*&amp;lt;math&amp;gt;R_V&amp;lt;/math&amp;gt;: Vorwiderstand für LED-Spalten &lt;br /&gt;
*&amp;lt;math&amp;gt;P_V&amp;lt;/math&amp;gt;: Verlustleistung der Vorwiderstände&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Spl} = I_{Nenn} \cdot N = 25mA \cdot 8 = 200mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Zeil} = I_{Nenn} \cdot N \cdot S = 25mA \cdot 8 \cdot 8 = 1600mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V = \frac{U}{I} = \frac{Vcc - I_{Spl} \cdot R_{DS-ON, high} - I_{Zeil} \cdot R_{DS-ON, low} -U_F}{I_{Spl}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V=\frac{12V - 0,2A \cdot 0,25 \Omega - 1,6A \cdot 0,13 \Omega -9V}{0,2A} \approx 13 \Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V=I_{Spl}^2 \cdot R_V = 200mA^2 \cdot 13 \Omega = 520mW&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der gesparte Spannungsabfall über den MOSFETs genutzt, um LEDs mit höherer Flußspannung in Reihe schalten, womit der Wirkungsgrad ansteigt. Liegt die LED-Betriebsspannung über 15V braucht man einen sogenannten [[Treiber | High Side Driver]], weil dann die Gates der P-Kanal MOSFETs nicht mehr direkt angesteuert werden können. Ein einfaches Beispiel findet man [http://www.mikrocontroller.net/attachment/34752/P_FET.png hier].&lt;br /&gt;
&lt;br /&gt;
===Dimmen===&lt;br /&gt;
&lt;br /&gt;
Multiplexen kann auch mit [[PWM]] kombiniert werden. Dabei ist die Multiplexzeit einer Spalte gleich der PWM-Periodendauer. Allerdings kann hier der Rechenaufwand für die CPU schon recht hoch werden, da die meisten Mikrocontroller nicht so viele PWM-Kanäle in Hardware zur Verfügung stellen und die PWM in Software nachgebildet werden muss ([[Soft-PWM]]).&lt;br /&gt;
&lt;br /&gt;
Falls die Multiplexzeit klein genug gewählt wird, kann man in Grenzen auch per gezieltem Ein- und Abschalten in Grenzen eine Dimmfunktion erreichen. Um hier allerdings noch flimmerfreie Ergebnisse zu erzielen, sollte die Multiplexfrequenz mit den geplanten Dimmstufen multipliziert werden (bspw. 16 Dimmstufen bei 100 Hz Multiplexfrequenz = 1600 Hz angepasste Multiplexfrequenz), was die Rechenzeit wiederum schnell in die Höhe treiben kann. Dimmen selbst erreicht man dann mit entsprechend angepassten Schaltzeiten (bspw. 25% Helligkeit = 4x LED an, 12x LED aus bei insgesamt 16 Dimmstufen, dann von vorne).&lt;br /&gt;
&lt;br /&gt;
In Anbetracht ausgeklügelter Soft-PWM-Algorithmen spielt dieser zweite Lösungsansatz nur eine untergeordnete Rolle, etwa:&lt;br /&gt;
* um Code zu sparen&lt;br /&gt;
* um Gate-Umladevorgänge bei geringen Helligkeiten zu minimieren&lt;br /&gt;
&lt;br /&gt;
=== Spezielle ICs ===&lt;br /&gt;
&lt;br /&gt;
Neben den typischen Treiberbausteinen für möglichst hohe Ströme, die weiter unten aufgeführt sind, gibt es auch noch integrierte Lösungen für das direkte Betreiben einer LED-Matrix an der [[SPI]] oder [[I2C]]-Schnittstelle. Beispiele sind hier MAXIM 7219 und 7221 oder AS1100-08/15-18 für 8x8 LED-Matrizen oder 8x8-Segmentanzeigen. Zwischen beiden Modi wird per Software gewechselt. Die ICs bieten einige Vorteile, wie automatische Dimmung und großzügiges Freischaufeln von CPU-Kapazität auf dem Mikrocontroller. Außerdem können die ICs dank SPI kaskadiert werden wie normale [[AVR-Tutorial: Schieberegister|Schieberegister]] und somit eine nahezu unbegrenzte Zahl an LEDs ansteuern. Allerdings ist der Strom für die integrierten Stromsenken auf etwa 50 mA begrenzt, was bei einigen Displays zu wenig sein kann. Hier muss man wieder Vor- und Nachteile abwägen. Weitere ICs bei [http://www.maxim-ic.com Maxim] umfassen Standardfälle wie 5x7 Matrizen oder 7-, 10-, 14-Segment LED-Anzeigen mit 4 bis 16 Stellen. Diese ICs gibt es dann allerdings leider nicht bei den [[Elektronikversender|Standardversandhändlern]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Bauteil                  || Beschreibung                          || Bezugsquelle&lt;br /&gt;
|-&lt;br /&gt;
|ULN2803                  || 8fach NPN-Transistorarray, 500mA      || Conrad&lt;br /&gt;
|-&lt;br /&gt;
|ULN2003                  || 7fach NPN-Transistorarray, 500mA      ||&lt;br /&gt;
|-&lt;br /&gt;
|UDN2981                  || 8fach High Side Treiber, 500mA        || Unter dem Namen: MIC2981 zu finden&lt;br /&gt;
|-&lt;br /&gt;
|TLC5921                  || 16 Bit-Schieberegister plus Latch&amp;lt;BR&amp;gt; mit Konstantstromsenken, max. 80mA pro Ausgang       ||&lt;br /&gt;
|-&lt;br /&gt;
|TLC5922                  &lt;br /&gt;
|| 16 Bit-Schieberegister plus Latch mit Konstantstromsenken, max. 80mA pro Ausgang&amp;lt;BR&amp;gt;Dimmung jedes einzelnen Kanals mit 7 Bit möglich, pinkompatibel zum TLC5921      ||&lt;br /&gt;
|-&lt;br /&gt;
|TLC5940 || 16 Bit-Schieberegister plus Latch mit Konstantstromsenken, max. 120mA pro Ausgang&amp;lt;BR&amp;gt;Dimmung jedes einzelnen Kanals mit 6 Bit plus 12 Bit PWM möglich, kompatibel mit AS1112 || mouser.com, [https://hbe-shop.de]&lt;br /&gt;
|-&lt;br /&gt;
|CAT4016&lt;br /&gt;
|| 16 Bit-Schieberegister/Latch mit Konstantstromsenken(max. 100mA), günstig || Farnell&lt;br /&gt;
|-&lt;br /&gt;
|TPIC6B595&lt;br /&gt;
|| 8-Bit Schieberegister + Leistungstreiber, 500mA      || Rei&lt;br /&gt;
|-&lt;br /&gt;
|IRF7304                  || 2fach P-Kanal MOSFET, 3,5A, SO-8 Gehäuse ||&lt;br /&gt;
|-&lt;br /&gt;
|MAX7219                  || Seriell angesteuerter 8x8 Matrizentreiber, kompatibel mit AS110x ||&lt;br /&gt;
|-&lt;br /&gt;
|MAX7221                  || Seriell angesteuerter 8x8 Matrizentreiber, kompatibel mit AS110x ||&lt;br /&gt;
|-&lt;br /&gt;
|AS1100-08                || Seriell angesteuerter 8x8 Matrizentreiber, kompatibel mit MAX72xx || [http://www.austriamicrosystems.com/AS1106 AS1106]&lt;br /&gt;
|-&lt;br /&gt;
|AS1115/17                || I²C angesteuerter 8x8 Matrizentreiber mit Diagnose &amp;amp; Tastenerkennung|| [http://www.austriamicrosystems.com/AS1115 AS1115]&lt;br /&gt;
|-&lt;br /&gt;
|AS1116/18                || Seriell angesteuerter 8x8 Matrizentreiber mit Diagnose|| [http://www.austriamicrosystems.com/AS1116 AS1116]&lt;br /&gt;
|-&lt;br /&gt;
|AS1119            || I²C angesteuerter 144LEDs Matrizentreiber mit Animationsspeicher, Diagnose und ChargePump||[http://www.austriamicrosystems.com/AS1119 AS1119]&lt;br /&gt;
|-&lt;br /&gt;
|AS1130            || I²C angesteuerter 132 LEDs Matrizentreiber mit Animationsspeicher, Scroll Funktion &amp;amp; Diagnose||[http://www.austriamicrosystems.com/AS1130 AS1130]&lt;br /&gt;
|-&lt;br /&gt;
|AS1112            || 15V 16Kanal LED Treiber, max. 100mA pro Ausgang&amp;lt;BR&amp;gt;Dimmung jedes einzelnen Kanals mit 6 Bit plus 12 Bit PWM möglich, Diagnosefunktion, kompatibel mit TLC594x ||[http://www.austriamicrosystems.com/AS1112 AS1112]&lt;br /&gt;
|-&lt;br /&gt;
|AS1121            || 30V 16Kanal LED Treiber, max. 40mA pro Ausgang&amp;lt;BR&amp;gt;Dimmung jedes einzelnen Kanals mit 6 Bit plus 12 Bit PWM möglich, Diagnosefunktion ||[http://www.austriamicrosystems.com/AS1121 AS1121]&lt;br /&gt;
|-&lt;br /&gt;
|AS1123            || 5V 16Kanal LED Treiber, max. 40mA pro Ausgang&amp;lt;BR&amp;gt;Low Power, Diagnosefunktion ||[http://www.austriamicrosystems.com/AS1123 AS1123]&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.starchips.com.tw/pdf/datasheet/SCT2024V01_03.pdf SCT2024]            || 17V 16Kanal LED Konstantstrom Treiber, max. 45mA pro Ausgang&amp;lt;BR&amp;gt; ||tme&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[bild:LED-Matrix-TLC5921.png|thumb|right|250px|Multiplexansteuerung mit Special-ICs]]&lt;br /&gt;
&lt;br /&gt;
==== Berechnung ====&lt;br /&gt;
&lt;br /&gt;
Der TLC5921 und seine zahlreichen [http://focus.ti.com/paramsearch/docs/parametricsearch.tsp?family=analog&amp;amp;familyId=480&amp;amp;uiTemplateId=NODE_STRY_PGE_T Kollegen] von [http://www.ti.com Texas Instruments] bieten eine komfortable Möglichkeit zur Ansteuerung von LED-Matrizen. Der TLC5921 besitzt 16 Ausgänge, welche als [[Konstantstromquelle]] arbeiten. Der Konstantstrom wird dabei über einen Widerstand eingestellt. Es entfallen somit die Vorwiderstände. Der Vorteil ist, dass Schwankungen der LED-Flußspannung oder Versorgungsspannung ausgeglichen werden, ohne dass die Helligkeit der LEDs sich dabei ändert. Außerdem erlauben die besseren Typen der Baureihe wie z.B. der TLC5922 eine Dimmung der einzelnen Kanäle. Doch Vorsicht! Die zulässige Verlustleistung des ICs ist groß, ca. 4W mit ausreichender [[Kühlkörper#Die_Platine_als_Kühlkörper |Kühlung]], aber nicht endlos. Denn die Restspannung aus Betriebsspannung minus LED-Flußspannung fällt über dem IC ab! Als Minimum gilt je nach Strom 0,5-1V, welches über dem TLC5921 abfallen muss, damit er korrekt arbeitet. Nach oben wird die Grenze durch die Verlustleistung und max. Spannung von 17V gesetzt. Weiterhin ist zu beachten, dass hier das Multiplexing der Zeilen und Spalten vertauscht wurde.&lt;br /&gt;
&lt;br /&gt;
Gegeben&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Nenn}&amp;lt;/math&amp;gt;: Nennstrom der LED-Stränge: 10mA&lt;br /&gt;
*&amp;lt;math&amp;gt;U_{F}&amp;lt;/math&amp;gt;: Flußspannung der LED-Stränge: 9V&lt;br /&gt;
*&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: Multiplexverhältnis (Zeilen): 1:8&lt;br /&gt;
*&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;: Spalten in der Matrix: 8&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{DS-ON, high}&amp;lt;/math&amp;gt;: Einschaltwiderstand der High Side MOSFETs : &amp;lt;math&amp;gt;0,25\Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gesucht:&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Spl}&amp;lt;/math&amp;gt;: Dauerstrom der Spaltentreiber = Pulsstrom der LEDs&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Zeil}&amp;lt;/math&amp;gt;: Pulsstrom der Zeilentreiber&lt;br /&gt;
*&amp;lt;math&amp;gt;P_V&amp;lt;/math&amp;gt;: Verlustleistung des TLC5921&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Spl} = I_{Nenn} \cdot N = 10mA \cdot 8 = 80mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Zeil} = I_{Nenn} \cdot N \cdot S = 10mA \cdot 8 \cdot 8 = 640mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V=I_{Spl} \cdot S \cdot U_{Rest} = I_{Spl} \cdot S \cdot (Vcc - U_F - I_{Zeil} \cdot R_{DS-ON, high})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V= 80mA \cdot 8 \cdot (12V - 9V - 640mA \cdot 0,25 \Omega) = 1{,}82W&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[LED]]&lt;br /&gt;
* [[LED cube]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/209988#new Forenbeitrag]: Nachleuchten beim Multiplexen vermeiden&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/343254#3789125 Forumsbeitrag]: TLC5947 flackert bei der Ansteuerung&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/353071?goto=3947567#3947567 Forumsbeitrag:] TLC5947 und ATmega16 Bitmanipulation&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/405432?goto=4707793#4707793 Forumsbeitrag]: Beispiele für die Retro-Spielkonsole PONG&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=%2Bled+%2Bmatrix&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4&amp;amp;forums%5B%5D=6 Beiträge zum Thema LED-Matrix im Forum]&lt;br /&gt;
* [http://www.ps-blnkd.de/LED-Matrix.htm Modulare 16x16 RGB-LED-Matrix] &lt;br /&gt;
* [http://members.ziggo.nl/electro1/avr/dotmatrix.htm Dotmatrix mit ATtiny2313 ansteuern, engl.]&lt;br /&gt;
* [http://www.braindrum.de/tools/leddotmatrix/leddotmatrix.htm LED-Dotmatrix mit ATmega16 ansteuern]&lt;br /&gt;
* Open Project [http://www.tiletoy.org/ TileToy] is a modular, electronic game prototype for tangible LED game tiles (PIC). [http://www.youtube.com/watch?v=XVmhlLvJNHc Youtube-Video]&lt;br /&gt;
* [http://www.kalanda.com/scroller-de-7x5-leds-basado-en-micro-attiny2313.html Eine 5x7 Matrix mit ATtiny2313 angesteuert, spanisch]&lt;br /&gt;
* [http://www.saccade.com/writing/projects/Puzzlemation/Puzzlemation.html Modulare Dotmatrixanzeige, engl.]&lt;br /&gt;
* [http://spritesmods.com/?art=ledmatrix Dotmatrix, engl.]&lt;br /&gt;
* [http://www.harbaum.org/till/ledmatrix/ Große LED-Matrix mit RS232 Ansteuerung, engl.]&lt;br /&gt;
* [https://www.das-labor.org/wiki/Blinken_Borgs Blinken_Borgs] Diverse Projekte von &#039;&#039;Das Labor&#039;&#039;&lt;br /&gt;
* [http://www.werkzeugh.at/intern/deflatable-led-matrix/ Eine aufblasbare LED-Matrix! (404)]&lt;br /&gt;
* [http://metalab.at/wiki/MetaLEDs 8x48 LED-Matrix]&lt;br /&gt;
* [http://www.das-labor.org/wiki/Blinken_Borgs LED-Würfel mit 5^3 RGB-LEDs]&lt;br /&gt;
* [http://www.ulrichradig.de/home/index.php/avr/avr-mega-dis LED-Matrix bei Ulrich Radig]&lt;br /&gt;
* [http://www.elo-web.de/elo/entwicklung-und-projekte/ping-pong/laufschrift Eine kleine Laufschrift auf der Ping-Pong-Platine] von Sascha Bader (C, Atmega8)&lt;br /&gt;
* [http://www.sparkfun.com/tutorials/47 12 Fuß (3,6m) Wanduhr auf Sparkfun.com]&lt;br /&gt;
* [http://www.decadecounter.com/vta/articleview.php?item=879 Gigantic 5x7 LED Matrix] by AnubisTTP&lt;br /&gt;
* [http://klautesblog.blogspot.com/search/label/LED%20Matrix Mikes LED Matrix (21 x 21 LEDs)] by klaute&lt;br /&gt;
* [http://blinkenlights.net/ Blinkenlights] keine LEDs, aber groß (CCC)!&lt;br /&gt;
* Die riesige LED Tafel am [http://money.howstuffworks.com/nasdaq-marketsite-tower.htm Time Square] in New York, 105m hoch und 1 MW Spitzenverbrauch!&lt;br /&gt;
* Nochmal ein Artikel zur [http://bits.blogs.nytimes.com/2008/11/20/towering-led-sign-will-light-times-square/ Time Square LED-Wand] &lt;br /&gt;
* [http://wiki.niftylight.de niftylight] open-source Software um LED Matrix Ansteuerung zu erleichtern&lt;br /&gt;
* [http://www.dsw-elektronik.de/Dot-mat1.html DSW-Elektronik], Hersteller elektromechanischer Matrixelemente&lt;br /&gt;
* [http://www.crafted.de/photonenbanner.php LULI Photonenbanner 96x24]&lt;br /&gt;
* [http://www.ehajo.de/baus%C3%A4tze/smd-baus%C3%A4tze/blinkenlights-led-matrix.html Blinkenlights-Bausatz von eHaJo, Atmega32u2 mit 8x8 LEDs]&lt;br /&gt;
* [https://sites.google.com/site/artcfox/demystifying-the-tlc5940 demystifying-the-tlc5940] Umfassende Erklärung zur Ansteuerung eines TLC5940, engl.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Displays und Anzeigen]]&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Restmuell&amp;diff=96698</id>
		<title>Benutzer:Restmuell</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Restmuell&amp;diff=96698"/>
		<updated>2017-06-26T14:26:45Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projekte&lt;br /&gt;
&lt;br /&gt;
AVR-Simulator:&lt;br /&gt;
https://www.mikrocontroller.net/topic/420097&lt;br /&gt;
&lt;br /&gt;
Grafische Ausgabe von Messwertlogs:&lt;br /&gt;
https://www.mikrocontroller.net/topic/403842&lt;br /&gt;
Nachfolge für den CSV-Viewer https://www.mikrocontroller.net/topic/179827&lt;br /&gt;
&lt;br /&gt;
Fuseeditor, grafische Benutzeroberfläche für AVRdude:&lt;br /&gt;
https://www.mikrocontroller.net/topic/402931&lt;br /&gt;
&lt;br /&gt;
Tankstelle für MP3-Player (zufällige Playlist), erster Versuch mit FLTK:&lt;br /&gt;
https://www.mikrocontroller.net/topic/401153&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Restmuell&amp;diff=95705</id>
		<title>Benutzer:Restmuell</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Restmuell&amp;diff=95705"/>
		<updated>2017-03-14T18:00:08Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projekte&lt;br /&gt;
&lt;br /&gt;
AVR-Simulator:&lt;br /&gt;
https://www.mikrocontroller.net/topic/420097&lt;br /&gt;
Wird noch ein Weilchen in Arbeit bleiben.&lt;br /&gt;
&lt;br /&gt;
Grafische Ausgabe von Messwertlogs:&lt;br /&gt;
https://www.mikrocontroller.net/topic/403842&lt;br /&gt;
Nachfolge für den CSV-Viewer https://www.mikrocontroller.net/topic/179827&lt;br /&gt;
&lt;br /&gt;
Fuseeditor, grafische Benutzeroberfläche für AVRdude:&lt;br /&gt;
https://www.mikrocontroller.net/topic/402931&lt;br /&gt;
&lt;br /&gt;
Tankstelle für MP3-Player (zufällige Playlist), erster Versuch mit FLTK:&lt;br /&gt;
https://www.mikrocontroller.net/topic/401153&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Restmuell&amp;diff=95373</id>
		<title>Benutzer:Restmuell</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Restmuell&amp;diff=95373"/>
		<updated>2017-02-26T14:55:55Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: Die Seite wurde neu angelegt: „Projekte:  AVR-Simulator https://www.mikrocontroller.net/topic/420097  Grafische Ausgabe von Messwertlogs https://www.mikrocontroller.net/topic/403842  Fuseedi…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projekte:&lt;br /&gt;
&lt;br /&gt;
AVR-Simulator&lt;br /&gt;
https://www.mikrocontroller.net/topic/420097&lt;br /&gt;
&lt;br /&gt;
Grafische Ausgabe von Messwertlogs&lt;br /&gt;
https://www.mikrocontroller.net/topic/403842&lt;br /&gt;
&lt;br /&gt;
Fuseeditor, grafische Benutzeroberfläche für AVRdude&lt;br /&gt;
https://www.mikrocontroller.net/topic/402931&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Ddd_c.png&amp;diff=95273</id>
		<title>Datei:Ddd c.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Ddd_c.png&amp;diff=95273"/>
		<updated>2017-02-12T07:41:52Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: Restmuell lud eine neue Version von Datei:Ddd c.png hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Ddd_c.png&amp;diff=95262</id>
		<title>Datei:Ddd c.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Ddd_c.png&amp;diff=95262"/>
		<updated>2017-02-11T14:27:14Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: Restmuell lud eine neue Version von Datei:Ddd c.png hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Ddd_c.png&amp;diff=95261</id>
		<title>Datei:Ddd c.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Ddd_c.png&amp;diff=95261"/>
		<updated>2017-02-11T14:19:04Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: Restmuell lud eine neue Version von Datei:Ddd c.png hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Ddd_c.png&amp;diff=95260</id>
		<title>Datei:Ddd c.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Ddd_c.png&amp;diff=95260"/>
		<updated>2017-02-11T14:17:17Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: Restmuell lud eine neue Version von Datei:Ddd c.png hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Ddd_asm.png&amp;diff=95259</id>
		<title>Datei:Ddd asm.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Ddd_asm.png&amp;diff=95259"/>
		<updated>2017-02-11T14:15:07Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Ddd_c.png&amp;diff=95258</id>
		<title>Datei:Ddd c.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Ddd_c.png&amp;diff=95258"/>
		<updated>2017-02-11T14:14:40Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95257</id>
		<title>AVR-Simulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95257"/>
		<updated>2017-02-11T14:13:04Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: Bilber überarbeitet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:AVR]]&lt;br /&gt;
== SimulAVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/simulavr/ SimulAVR] ist ein Simulator, der einige Prozessoren der AVR-Familie auf einem PC-Hostsystem (Windows, Linux, Mac OS X) simulieren kann. Dieser Simulator ist auch im [[WinAVR]]-Paket enthalten (/WinAVR/bin/simulavr.exe).&lt;br /&gt;
&lt;br /&gt;
Eine Verwendung von SimulAVR ist das sog. Signal Tracing, d.h. das aufzeichnen von Änderungen der diversen Register (z.B. der Pins eines I/O-Ports) in eine VCD-Datei. Auch wenn die Laufzeit des Simulators oft langsamer als die der Hardware ist, entsprechen diese Aufzeichnungen auf den CPU-Takt genau dem, was auf der Hardware passieren würde. Wie diese Aufzeichnungen gemacht werden ist bei SimulAVR selbst kaum dokumentiert, doch bei RepRap gibt es eine kleine [http://reprap.org/wiki/SimulAVR#Signal_tracing SimulAVR Anleitung], die eine gute Passage dazu enthält.&lt;br /&gt;
&lt;br /&gt;
Die Hauptanwendung von SimulAVR dürfte das Debuggen sein. Dafür wird SimulAVR über ein dazu passendes Frontend bedient. GDB und Insight sind zwei, ebenfalls in WinAVR enthaltene, Programme, die ein solches Frontend bilden. &lt;br /&gt;
&lt;br /&gt;
Wer &amp;quot;textorientiertes&amp;quot; Debugging mag, oder beispielsweise &#039;&#039;emacs&#039;&#039; als Frontend verwenden möchte, der nutzt den [[GDB]], den GNU Debugger. Er ist im WinAVR-Paket enthalten (/WinAVR/bin/avr-gdb.exe). Wer gleich eine grafische Benutzeroberfläche (GUI) verwenden möchte, nutzt Insight (welches intern ebenfalls den GDB verwendet). &lt;br /&gt;
&lt;br /&gt;
Beide Debugger, also GDB oder Insight, benötigen ein Backend. Entweder handelt es sich dabei um einen ICE/[[JTAG]]-Debugger wie z.&amp;amp;nbsp;B. [http://avarice.sourceforge.net/ AVaRICE] als Interface zu einem realen AVR-Mikrocontroller oder um einen Simulator.&lt;br /&gt;
&lt;br /&gt;
=== Starten von SimulAVR ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:SimulAVR-Display.png|right|220px]]&lt;br /&gt;
Um SimulAVR mit default-Parametern zu starten, reicht es aus, folgende Zeile in einer Shell/Eingabeaufforderung einzugeben:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SimulAVR startet dann mit den defaultparametern und stellt einen GDBServer-Prozess auf dem lokalen oder entfernten Host auf Port 1212 zur Verfügung.&lt;br /&gt;
Das &#039;&#039;Backend&#039;&#039; der Simulation ist nun Einsatzbereit.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist, SimulAVR mit Display zu starten. Dann werden während der Ausführung die Werte der Register und dem RAM angezeigt (siehe Bild).&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -P simulavr-disp -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht der unterstützten AVR-Prozessoren und der SimulAVR spezifischen Parameter bekommt man durch folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr --help&lt;br /&gt;
&lt;br /&gt;
=== Starten des GDB ===&lt;br /&gt;
&lt;br /&gt;
Um das (vorläufige) Frontend GDB zu starten, reicht folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb&lt;br /&gt;
&lt;br /&gt;
Der GDB meldet sich mit folgendem Bildschirm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Current directory is c:/WinAVR/testprj4/&lt;br /&gt;
GNU gdb 6.1&lt;br /&gt;
Copyright 2004 Free Software Foundation, Inc.&lt;br /&gt;
GDB is free software, covered by the GNU General Public License, and you are&lt;br /&gt;
welcome to change it and/or distribute copies of it under certain conditions.&lt;br /&gt;
Type &amp;quot;show copying&amp;quot; to see the conditions.&lt;br /&gt;
There is absolutely no warranty for GDB.  Type &amp;quot;show warranty&amp;quot; for details.&lt;br /&gt;
This GDB was configured as &amp;quot;--host=i686-pc-cygwin --target=avr&amp;quot;.&lt;br /&gt;
(gdb) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(gdb)&#039;&#039;&#039; ist der Prompt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soll während dem Debuggen der Quellcode angezeigt werden, der zur Zeit ausgeführt wird, kann GDB wie folgt gestartet werden.&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb -tui&lt;br /&gt;
&lt;br /&gt;
Beim (gdb) prompt dann das Layout auf Assembler umschalten.,&lt;br /&gt;
&lt;br /&gt;
 (gdb) layout asm&lt;br /&gt;
&lt;br /&gt;
=== Simulieren/Debuggen ===&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss dem GDB die gewünschte Datei (vorher mittels entsprechendem &#039;&#039;Makefile&#039;&#039; erzeugt) bekannt gemacht werden. Es ist darauf zu achten, dass das Programm mit Debugsymbolen kompiliert wurde.&lt;br /&gt;
&lt;br /&gt;
 (gdb) file main.elf &lt;br /&gt;
 Reading symbols from main.elf...done.&lt;br /&gt;
&lt;br /&gt;
Als nächstes muss dem GDB mitgeteilt werden, welches Ziel (target) er als Backend verwenden soll:&lt;br /&gt;
&lt;br /&gt;
 (gdb) target remote localhost:1212&lt;br /&gt;
&lt;br /&gt;
oder kürzer:&lt;br /&gt;
&lt;br /&gt;
 (gdb) targ rem :1212&lt;br /&gt;
 Remote debugging using :1212&lt;br /&gt;
 0x00000000 in __vectors ()&lt;br /&gt;
&lt;br /&gt;
Jetzt muss das Programm in den Simulator geladen werden:&lt;br /&gt;
&lt;br /&gt;
 (gdb) load&lt;br /&gt;
 Loading section .data, size 0x32 lma 0x1bc&lt;br /&gt;
 Loading section .text, size 0x1bc lma 0x0&lt;br /&gt;
 Start address 0x0, load size 494&lt;br /&gt;
 Transfer rate: 3952 bits in &amp;lt;1 sec, 30 bytes/write.&lt;br /&gt;
&lt;br /&gt;
Da diese 3 Schritte üblicherweise, bei jedem Start einer Simulationssitzung ausgeführt werden müssen, können sie zeilenweise in eine Textdatei (Vorschlag: gdb.conf) geschrieben werden, diese Datei wird dem gdb dann mit dem Parameter &amp;quot;-x&amp;quot; (eXecute) mitgegeben:&lt;br /&gt;
&lt;br /&gt;
avr-gdb -x gdb.conf&lt;br /&gt;
&lt;br /&gt;
Damit der Simulator nicht das gesamte Programm abarbeitet, sollte man &#039;&#039;breakpoints&#039;&#039; setzen.&lt;br /&gt;
Den Ersten am besten bei &#039;&#039;main&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) b main&lt;br /&gt;
 Breakpoint 1 at 0xd2: file main.c, line 16.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man das Programm im Simulator mit &#039;&#039;continue&#039;&#039; starten:&lt;br /&gt;
&lt;br /&gt;
 (gdb) c&lt;br /&gt;
 Continuing.&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des zuvor gesetzten &#039;&#039;breakpoints&#039;&#039; stoppt GDB und meldet:&lt;br /&gt;
&lt;br /&gt;
 Breakpoint 1, main () at main.c:16&lt;br /&gt;
 (gdb)&lt;br /&gt;
&lt;br /&gt;
Eine Liste der verfügbaren debug-befehle des GDB findet sich durch die Eingabe von &#039;&#039;&#039;help&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Data Display Debugger ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:ddd_c.png|right|200px]]&lt;br /&gt;
Eine sehr komfortable Benutzeroberfläche zum gdb erhält man mit dem Programm &amp;quot;ddd&amp;quot; (Data Display Debugger), https://de.wikipedia.org/wiki/Data_Display_Debugger&lt;br /&gt;
&lt;br /&gt;
Diesem gibt man beim Aufruf mit, welcher gdb, mit welcher Verbindung zum Ziel genutzt werden soll. Falls das Startscript, wie oben genutzt werden soll z.B.:&lt;br /&gt;
&lt;br /&gt;
ddd --debugger &amp;quot;avr-gdb -x gdb.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Wenn das Projekt mit den entsprechenden Debug-Informationen übersetzt wurde, dann zeigt der DDD die Zeile im Quelltext (auch bei Assemblerteilen), Variableninhalte lassen sich inspizieren, indem der Mauszeiger drauf positioniert wird.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ddd_asm.png|right|200px]]&lt;br /&gt;
&lt;br /&gt;
=== ToDo ===&lt;br /&gt;
&lt;br /&gt;
[TODO] Einige häufige GDB-Commands als Beispiel einfügen.&lt;br /&gt;
&lt;br /&gt;
== VMLab ==&lt;br /&gt;
&lt;br /&gt;
[http://www.amctools.com/vmlab.htm VMLab] ist eine komplette Freeware-IDE mit Debugger und Simulator für MS-Windows. VMLab arbeitet mit [[WinAVR]] zusammen und kann AVR-Peripheriehardware simulieren. Leider hat der Autor von VMLab die Entwicklung im Jahr 2006 eingestellt, da dem Projekt nicht der gewünschte kommerzielle Erfolg vergönnt war. Die aktuelle Version ist 3.15 von Oktober 2009.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* Forumsbeitrag [http://www.mikrocontroller.net/topic/24494#714662 VMLAB Bug bei Stackpointer/Interrupt?]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/85212#716727 Workaround]&lt;br /&gt;
&lt;br /&gt;
== AVR Studio ==&lt;br /&gt;
&lt;br /&gt;
[[Bild: AVR-Studio_Simulation.png|thumb|right|250px|Simulator-Ansicht in AVR Studio]]&lt;br /&gt;
[[AVR-Studio|AVR Studio]] von Atmel enthält neben dem Übersetzungsteil, dem Debuggingteil auch einen Simulatorteil. Eine Übersicht über alle drei Programmteile gibt der Powerpoint-Vortrag [http://ece353.ecs.umass.edu/lab2/labc-lectureslides2012.pptx AVR Studio: The comprehensive tutorial] (MS PowerPoint &#039;&#039;2007&#039;&#039;) von Jeremy Gummeson und Brendan Kemp.&lt;br /&gt;
&lt;br /&gt;
Wenn nur ein Breakpoint gesetzt ist, kann mit F5 das Programm einen Abarbeitungszyklus machen. Die Bearbeitung bleibt dann wieder beim Breakpoint stehen. Mit der Stoppuhr kann dann die Zeit für den abgearbeiteten Programmteil gemessen werden. Mit der rechten Mouse-Taste kann die Stoppuhr zurückgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Ausführliche Anleitung zum Ablauf einer Simulation:  [http://www2.tech.purdue.edu/ecet/courses/ecet309/Reference_Materials/Simulation_AVR_Studio_4.pdf Tutorial der Purdue University] (engl., PDF) (link tot!)&lt;br /&gt;
&lt;br /&gt;
Externe Signale können mit den Tools HAPSIM oder über eine Stimulidatei in den Simulator eingespeist werden. &lt;br /&gt;
&lt;br /&gt;
Zu beachten ist, dass sich mit der Einführung des AVR Simulator 2, welcher  Vorteile wie Unterstützung von [[I2C|TWI]] bietet, das Datenformat für extern zugeführte Stimuli-Files geändert hat. Eine kleine Einführung inkl. Beispiel bietet die im AVR-Studio enthaltene Hilfe:&lt;br /&gt;
:AVR Studio Help → AVR Tools User Guide → Simulator → Simulator2 Stimuli&lt;br /&gt;
&lt;br /&gt;
=== HAPSIM ===&lt;br /&gt;
&lt;br /&gt;
[http://www.helmix.at/hapsim/index.htm HAPSIM] (Helmis AVR Periphery Simulator) ist ein Tool zur graphischen Simulation von Tasten, [[LED]], [[LCD]] und Terminalfunktionen in AVR Studio. (deutsch/engl., Windows, Freeware). Hinweise zur Installation von Hapsim nach einem AVR Studio Update stehen im [http://www.mikrocontroller.net/topic/118668 Forum]. HAPSIM kann nur mit AVRStudio 4.x verwendet werden, für den Fall, dass die Domain selbst nicht funktioniert kann folgender [http://members.aon.at/helmi/hapsim.htm Direktlink] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Stimuli ===&lt;br /&gt;
&lt;br /&gt;
Über eine sog. Stimuli-Datei lassen sich von ausserhalb Signale dem AVR Studio zuführen. Informationen zum Aufbau einer Stimulidatei finden sich in obigem &amp;quot;AVR Studio: The comprehensive tutorial&amp;quot; und bei Atmel ([http://support.atmel.com/bin/customer.exe?=&amp;amp;action=viewKbEntry&amp;amp;id=46 What is the format of the AVR Studio simulator stimuli files?]). Der [http://www.hot.ee/nppcsoftware/ Stimuli Generator for AVR Studio] ist eine Freeware für die Erzeugung von Stimulidateien und deren grafischen Darstellung. Für dieses Programm ist .NET 1.1 oder 2.0 erforderlich. Ein Python-Script zum Umwandeln der Stimuli-Log Datei in eine vcd-Datei, welche z.B. in gtkwave betrachtet werden kann, ist [https://github.com/althebaker43/avr_lcd/blob/8b177cc492d2e9a814bd21671c2267a6d3044811/atmel_studio/avr_lcd/stim2vcd.py hier] verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== LogAnalyser ===&lt;br /&gt;
&lt;br /&gt;
[http://www.dresco.co.uk/LogAnalyser/ LogAnalyser] v1.00 (c) 2008 Jon Escombe is a graphical &amp;quot;logic analyser&amp;quot; style display of Atmel AVR Studio simulator log files. The project is built using the (excellent) zedGraph charting class library, and the source code is made available under GPL license. Requires Windows XP and .NET framework 2.0 to run.&lt;br /&gt;
&lt;br /&gt;
=== TCPSimDBG ===&lt;br /&gt;
&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=74350 TCPSimDBG] ist ein Plugin für [[AVR-Studio]] um Remote Simulating/Debugging über TCP/IP durchzuführen. Ein TCP/IP-Terminal oder Serverprogramm kann sich mit dem Simulator/Debugger von AVR-Studio verbinden und Informationen aus dem Debugprozess abrufen und ändern. Damit lassen sich virtuelle Geräte (Devices) eingerichten. (Atmel SDK Lizenz, Windows XP, 2003, Vista .NET 3.5 erforderlich)&lt;br /&gt;
&lt;br /&gt;
=== AVR Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
[http://www.coynetechsystems.com/avrlogicanalyzer/index.php AVR Logic Analyzer] von Coyne Technology Systems ist ein AVR Studio Plugin zur grafischen Anzeige der simulierten I/O-Ports.&lt;br /&gt;
(kommerziell)&lt;br /&gt;
&lt;br /&gt;
== Avrora ==&lt;br /&gt;
[http://avrora.sourceforge.net/ Avrora], a research project of the UCLA Compilers Group, is a set of simulation and analysis tools for programs written for the AVR microcontroller produced by Atmel and the Mica2 sensor nodes. Avrora contains a flexible framework for simulating and analyzing assembly programs, providing a clean Java API and infrastructure for experimentation, profiling, and analysis.&lt;br /&gt;
&lt;br /&gt;
== Proteus VSM for Atmel AVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.labcenter-electronics.com/products/avr.cfm Proteus VSM for Atmel AVR] ist ein kommerzieller AVR Simulator. &lt;br /&gt;
&lt;br /&gt;
In der Codesammlung gibt es dafür ein [http://www.mikrocontroller.net/topic/118974#1072449 Virtuelles AVR Funk Pollin Simulationsmodell] von Daniel Cagara.&lt;br /&gt;
&lt;br /&gt;
== CrossWorks for AVR == &lt;br /&gt;
&lt;br /&gt;
[http://rowley.co.uk/avr/index.htm CrossWorks for AVR] besitzt einen &#039;&#039;core simulator&#039;&#039; für AVRs. (Windows, Mac OS X, Linux, Solaris)&lt;br /&gt;
&lt;br /&gt;
== simavr ==&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/simavr simavr] is a new AVR simulator from Michel &amp;quot;buserror&amp;quot; Pollet for linux, or any platform that uses avr-gcc. It uses avr-gcc own register definition to simplify creating new targets for supported AVR devices.&lt;br /&gt;
&lt;br /&gt;
The status of the project is the core works at about 98% (ie, it works, but there is a known bug). The supported IOs are eeprom, IO ports (including pin interupts), 8 bits timers (well, one of mode of the myriad) and a simple UART that makes “printf” work.&lt;br /&gt;
&lt;br /&gt;
gdb support is planned next.&lt;br /&gt;
&lt;br /&gt;
Lizenz: GPL v3&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=86665 Diskussion bei avrfreaks.net]&lt;br /&gt;
&lt;br /&gt;
== avrtest ==&lt;br /&gt;
&lt;br /&gt;
avrtest ist ein freier AVR Core-Simulator, der zur Ausführung der avr-gcc Testsuite verwendet wird. Über spezielle &amp;quot;magische SFRs&amp;quot; können bestimmte Aktionen ausgelöst werden wie z.B. definierter Programmabbruch oder die Ausgabe eines Zeichens auf Console, so daß ein Programm wie&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    printf (&amp;quot;Hallo Welt!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
analoge Resultate bringt wie ein Programm, das nativ auf dem Rechner ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
avrtest ist Open Source, einfach gehalten und auf Geschwindigkeit getrimmt. Die Eingabe von Stimuli ist nicht möglich, und interne Peripherie wird nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
* Lizenz: GPL v2 oder höher&lt;br /&gt;
* Betriebssysteme: Windows, Linux, etc. Eigentlich keine Einschränkung, da es sich um ein Open-Source Projekt handelt.&lt;br /&gt;
&lt;br /&gt;
=== Weblinks ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/p/winavr/code/HEAD/tree/trunk/avrtest/ avrtest: Projekt und README bei sourceforge]&lt;br /&gt;
* [http://lists.gnu.org/archive/html/avr-gcc-list/2011-06/msg00015.html Beschreibung in der avr-gcc-list Mailingliste (en)]&lt;br /&gt;
&lt;br /&gt;
== BASCOM AVR ==&lt;br /&gt;
&lt;br /&gt;
In [http://www.mcselec.com/ BASCOM AVR] ist ein Simulatorteil enthalten und damit ist auch die Simulation von Geräten (LCD, UART) möglich. BASCOM AVR wird von MCS Electronics verkauft (89€) und ist ein unter Windows laufender [[Basic|BASIC]] [[Compiler]] für Atmel AVR Mikrocontroller. Eine auf 4 KB Codegröße eingeschränkte Demoversion ist kostenlos erhältlich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ldi r16,0x10&lt;br /&gt;
LDI r17,0x12&lt;br /&gt;
ADD R16,R17&lt;br /&gt;
strt : rjmp strt&lt;br /&gt;
&lt;br /&gt;
== MacSim - AVR simulator for OS X ==&lt;br /&gt;
[http://www.fracturedsoftware.com/macsimavr/ MacSim Alpha 4]&lt;br /&gt;
&lt;br /&gt;
Einschränkungen u.A.:  &amp;quot;There are currently no timers, interrupts, or EEPROM. The processor is &#039;generic&#039; and has fixed size data and instruction memories.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95256</id>
		<title>AVR-Simulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95256"/>
		<updated>2017-02-11T12:12:19Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:AVR]]&lt;br /&gt;
== SimulAVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/simulavr/ SimulAVR] ist ein Simulator, der einige Prozessoren der AVR-Familie auf einem PC-Hostsystem (Windows, Linux, Mac OS X) simulieren kann. Dieser Simulator ist auch im [[WinAVR]]-Paket enthalten (/WinAVR/bin/simulavr.exe).&lt;br /&gt;
&lt;br /&gt;
Eine Verwendung von SimulAVR ist das sog. Signal Tracing, d.h. das aufzeichnen von Änderungen der diversen Register (z.B. der Pins eines I/O-Ports) in eine VCD-Datei. Auch wenn die Laufzeit des Simulators oft langsamer als die der Hardware ist, entsprechen diese Aufzeichnungen auf den CPU-Takt genau dem, was auf der Hardware passieren würde. Wie diese Aufzeichnungen gemacht werden ist bei SimulAVR selbst kaum dokumentiert, doch bei RepRap gibt es eine kleine [http://reprap.org/wiki/SimulAVR#Signal_tracing SimulAVR Anleitung], die eine gute Passage dazu enthält.&lt;br /&gt;
&lt;br /&gt;
Die Hauptanwendung von SimulAVR dürfte das Debuggen sein. Dafür wird SimulAVR über ein dazu passendes Frontend bedient. GDB und Insight sind zwei, ebenfalls in WinAVR enthaltene, Programme, die ein solches Frontend bilden. &lt;br /&gt;
&lt;br /&gt;
Wer &amp;quot;textorientiertes&amp;quot; Debugging mag, oder beispielsweise &#039;&#039;emacs&#039;&#039; als Frontend verwenden möchte, der nutzt den [[GDB]], den GNU Debugger. Er ist im WinAVR-Paket enthalten (/WinAVR/bin/avr-gdb.exe). Wer gleich eine grafische Benutzeroberfläche (GUI) verwenden möchte, nutzt Insight (welches intern ebenfalls den GDB verwendet). &lt;br /&gt;
&lt;br /&gt;
Beide Debugger, also GDB oder Insight, benötigen ein Backend. Entweder handelt es sich dabei um einen ICE/[[JTAG]]-Debugger wie z.&amp;amp;nbsp;B. [http://avarice.sourceforge.net/ AVaRICE] als Interface zu einem realen AVR-Mikrocontroller oder um einen Simulator.&lt;br /&gt;
&lt;br /&gt;
=== Starten von SimulAVR ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:SimulAVR-Display.png|right|220px]]&lt;br /&gt;
Um SimulAVR mit default-Parametern zu starten, reicht es aus, folgende Zeile in einer Shell/Eingabeaufforderung einzugeben:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SimulAVR startet dann mit den defaultparametern und stellt einen GDBServer-Prozess auf dem lokalen oder entfernten Host auf Port 1212 zur Verfügung.&lt;br /&gt;
Das &#039;&#039;Backend&#039;&#039; der Simulation ist nun Einsatzbereit.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist, SimulAVR mit Display zu starten. Dann werden während der Ausführung die Werte der Register und dem RAM angezeigt (siehe Bild).&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -P simulavr-disp -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht der unterstützten AVR-Prozessoren und der SimulAVR spezifischen Parameter bekommt man durch folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr --help&lt;br /&gt;
&lt;br /&gt;
=== Starten des GDB ===&lt;br /&gt;
&lt;br /&gt;
Um das (vorläufige) Frontend GDB zu starten, reicht folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb&lt;br /&gt;
&lt;br /&gt;
Der GDB meldet sich mit folgendem Bildschirm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Current directory is c:/WinAVR/testprj4/&lt;br /&gt;
GNU gdb 6.1&lt;br /&gt;
Copyright 2004 Free Software Foundation, Inc.&lt;br /&gt;
GDB is free software, covered by the GNU General Public License, and you are&lt;br /&gt;
welcome to change it and/or distribute copies of it under certain conditions.&lt;br /&gt;
Type &amp;quot;show copying&amp;quot; to see the conditions.&lt;br /&gt;
There is absolutely no warranty for GDB.  Type &amp;quot;show warranty&amp;quot; for details.&lt;br /&gt;
This GDB was configured as &amp;quot;--host=i686-pc-cygwin --target=avr&amp;quot;.&lt;br /&gt;
(gdb) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(gdb)&#039;&#039;&#039; ist der Prompt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soll während dem Debuggen der Quellcode angezeigt werden, der zur Zeit ausgeführt wird, kann GDB wie folgt gestartet werden.&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb -tui&lt;br /&gt;
&lt;br /&gt;
Beim (gdb) prompt dann das Layout auf Assembler umschalten.,&lt;br /&gt;
&lt;br /&gt;
 (gdb) layout asm&lt;br /&gt;
&lt;br /&gt;
=== Simulieren/Debuggen ===&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss dem GDB die gewünschte Datei (vorher mittels entsprechendem &#039;&#039;Makefile&#039;&#039; erzeugt) bekannt gemacht werden. Es ist darauf zu achten, dass das Programm mit Debugsymbolen kompiliert wurde.&lt;br /&gt;
&lt;br /&gt;
 (gdb) file main.elf &lt;br /&gt;
 Reading symbols from main.elf...done.&lt;br /&gt;
&lt;br /&gt;
Als nächstes muss dem GDB mitgeteilt werden, welches Ziel (target) er als Backend verwenden soll:&lt;br /&gt;
&lt;br /&gt;
 (gdb) target remote localhost:1212&lt;br /&gt;
&lt;br /&gt;
oder kürzer:&lt;br /&gt;
&lt;br /&gt;
 (gdb) targ rem :1212&lt;br /&gt;
 Remote debugging using :1212&lt;br /&gt;
 0x00000000 in __vectors ()&lt;br /&gt;
&lt;br /&gt;
Jetzt muss das Programm in den Simulator geladen werden:&lt;br /&gt;
&lt;br /&gt;
 (gdb) load&lt;br /&gt;
 Loading section .data, size 0x32 lma 0x1bc&lt;br /&gt;
 Loading section .text, size 0x1bc lma 0x0&lt;br /&gt;
 Start address 0x0, load size 494&lt;br /&gt;
 Transfer rate: 3952 bits in &amp;lt;1 sec, 30 bytes/write.&lt;br /&gt;
&lt;br /&gt;
Da diese 3 Schritte üblicherweise, bei jedem Start einer Simulationssitzung ausgeführt werden müssen, können sie zeilenweise in eine Textdatei (Vorschlag: gdb.conf) geschrieben werden, diese Datei wird dem gdb dann mit dem Parameter &amp;quot;-x&amp;quot; (eXecute) mitgegeben:&lt;br /&gt;
&lt;br /&gt;
avr-gdb -x gdb.conf&lt;br /&gt;
&lt;br /&gt;
Damit der Simulator nicht das gesamte Programm abarbeitet, sollte man &#039;&#039;breakpoints&#039;&#039; setzen.&lt;br /&gt;
Den Ersten am besten bei &#039;&#039;main&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) b main&lt;br /&gt;
 Breakpoint 1 at 0xd2: file main.c, line 16.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man das Programm im Simulator mit &#039;&#039;continue&#039;&#039; starten:&lt;br /&gt;
&lt;br /&gt;
 (gdb) c&lt;br /&gt;
 Continuing.&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des zuvor gesetzten &#039;&#039;breakpoints&#039;&#039; stoppt GDB und meldet:&lt;br /&gt;
&lt;br /&gt;
 Breakpoint 1, main () at main.c:16&lt;br /&gt;
 (gdb)&lt;br /&gt;
&lt;br /&gt;
Eine Liste der verfügbaren debug-befehle des GDB findet sich durch die Eingabe von &#039;&#039;&#039;help&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Data Display Debugger ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Bildschirmfoto vom 2017-02-11 12-32-28.png|right|200px]]&lt;br /&gt;
Eine sehr komfortable Benutzeroberfläche zum gdb erhält man mit dem Programm &amp;quot;ddd&amp;quot; (Data Display Debugger), https://de.wikipedia.org/wiki/Data_Display_Debugger&lt;br /&gt;
&lt;br /&gt;
Diesem gibt man beim Aufruf mit, welcher gdb, mit welcher Verbindung zum Ziel genutzt werden soll. Falls das Startscript, wie oben genutzt werden soll z.B.:&lt;br /&gt;
&lt;br /&gt;
ddd --debugger &amp;quot;avr-gdb -x gdb.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Wenn das Projekt mit den entsprechenden Debug-Informationen übersetzt wurde, dann zeigt der DDD die Zeile im Quelltext (auch bei Assemblerteilen), Variableninhalte lassen sich inspizieren, indem der Mauszeiger drauf positioniert wird.&lt;br /&gt;
&lt;br /&gt;
=== ToDo ===&lt;br /&gt;
&lt;br /&gt;
[TODO] Einige häufige GDB-Commands als Beispiel einfügen.&lt;br /&gt;
&lt;br /&gt;
== VMLab ==&lt;br /&gt;
&lt;br /&gt;
[http://www.amctools.com/vmlab.htm VMLab] ist eine komplette Freeware-IDE mit Debugger und Simulator für MS-Windows. VMLab arbeitet mit [[WinAVR]] zusammen und kann AVR-Peripheriehardware simulieren. Leider hat der Autor von VMLab die Entwicklung im Jahr 2006 eingestellt, da dem Projekt nicht der gewünschte kommerzielle Erfolg vergönnt war. Die aktuelle Version ist 3.15 von Oktober 2009.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* Forumsbeitrag [http://www.mikrocontroller.net/topic/24494#714662 VMLAB Bug bei Stackpointer/Interrupt?]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/85212#716727 Workaround]&lt;br /&gt;
&lt;br /&gt;
== AVR Studio ==&lt;br /&gt;
&lt;br /&gt;
[[Bild: AVR-Studio_Simulation.png|thumb|right|250px|Simulator-Ansicht in AVR Studio]]&lt;br /&gt;
[[AVR-Studio|AVR Studio]] von Atmel enthält neben dem Übersetzungsteil, dem Debuggingteil auch einen Simulatorteil. Eine Übersicht über alle drei Programmteile gibt der Powerpoint-Vortrag [http://ece353.ecs.umass.edu/lab2/labc-lectureslides2012.pptx AVR Studio: The comprehensive tutorial] (MS PowerPoint &#039;&#039;2007&#039;&#039;) von Jeremy Gummeson und Brendan Kemp.&lt;br /&gt;
&lt;br /&gt;
Wenn nur ein Breakpoint gesetzt ist, kann mit F5 das Programm einen Abarbeitungszyklus machen. Die Bearbeitung bleibt dann wieder beim Breakpoint stehen. Mit der Stoppuhr kann dann die Zeit für den abgearbeiteten Programmteil gemessen werden. Mit der rechten Mouse-Taste kann die Stoppuhr zurückgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Ausführliche Anleitung zum Ablauf einer Simulation:  [http://www2.tech.purdue.edu/ecet/courses/ecet309/Reference_Materials/Simulation_AVR_Studio_4.pdf Tutorial der Purdue University] (engl., PDF) (link tot!)&lt;br /&gt;
&lt;br /&gt;
Externe Signale können mit den Tools HAPSIM oder über eine Stimulidatei in den Simulator eingespeist werden. &lt;br /&gt;
&lt;br /&gt;
Zu beachten ist, dass sich mit der Einführung des AVR Simulator 2, welcher  Vorteile wie Unterstützung von [[I2C|TWI]] bietet, das Datenformat für extern zugeführte Stimuli-Files geändert hat. Eine kleine Einführung inkl. Beispiel bietet die im AVR-Studio enthaltene Hilfe:&lt;br /&gt;
:AVR Studio Help → AVR Tools User Guide → Simulator → Simulator2 Stimuli&lt;br /&gt;
&lt;br /&gt;
=== HAPSIM ===&lt;br /&gt;
&lt;br /&gt;
[http://www.helmix.at/hapsim/index.htm HAPSIM] (Helmis AVR Periphery Simulator) ist ein Tool zur graphischen Simulation von Tasten, [[LED]], [[LCD]] und Terminalfunktionen in AVR Studio. (deutsch/engl., Windows, Freeware). Hinweise zur Installation von Hapsim nach einem AVR Studio Update stehen im [http://www.mikrocontroller.net/topic/118668 Forum]. HAPSIM kann nur mit AVRStudio 4.x verwendet werden, für den Fall, dass die Domain selbst nicht funktioniert kann folgender [http://members.aon.at/helmi/hapsim.htm Direktlink] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Stimuli ===&lt;br /&gt;
&lt;br /&gt;
Über eine sog. Stimuli-Datei lassen sich von ausserhalb Signale dem AVR Studio zuführen. Informationen zum Aufbau einer Stimulidatei finden sich in obigem &amp;quot;AVR Studio: The comprehensive tutorial&amp;quot; und bei Atmel ([http://support.atmel.com/bin/customer.exe?=&amp;amp;action=viewKbEntry&amp;amp;id=46 What is the format of the AVR Studio simulator stimuli files?]). Der [http://www.hot.ee/nppcsoftware/ Stimuli Generator for AVR Studio] ist eine Freeware für die Erzeugung von Stimulidateien und deren grafischen Darstellung. Für dieses Programm ist .NET 1.1 oder 2.0 erforderlich. Ein Python-Script zum Umwandeln der Stimuli-Log Datei in eine vcd-Datei, welche z.B. in gtkwave betrachtet werden kann, ist [https://github.com/althebaker43/avr_lcd/blob/8b177cc492d2e9a814bd21671c2267a6d3044811/atmel_studio/avr_lcd/stim2vcd.py hier] verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== LogAnalyser ===&lt;br /&gt;
&lt;br /&gt;
[http://www.dresco.co.uk/LogAnalyser/ LogAnalyser] v1.00 (c) 2008 Jon Escombe is a graphical &amp;quot;logic analyser&amp;quot; style display of Atmel AVR Studio simulator log files. The project is built using the (excellent) zedGraph charting class library, and the source code is made available under GPL license. Requires Windows XP and .NET framework 2.0 to run.&lt;br /&gt;
&lt;br /&gt;
=== TCPSimDBG ===&lt;br /&gt;
&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=74350 TCPSimDBG] ist ein Plugin für [[AVR-Studio]] um Remote Simulating/Debugging über TCP/IP durchzuführen. Ein TCP/IP-Terminal oder Serverprogramm kann sich mit dem Simulator/Debugger von AVR-Studio verbinden und Informationen aus dem Debugprozess abrufen und ändern. Damit lassen sich virtuelle Geräte (Devices) eingerichten. (Atmel SDK Lizenz, Windows XP, 2003, Vista .NET 3.5 erforderlich)&lt;br /&gt;
&lt;br /&gt;
=== AVR Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
[http://www.coynetechsystems.com/avrlogicanalyzer/index.php AVR Logic Analyzer] von Coyne Technology Systems ist ein AVR Studio Plugin zur grafischen Anzeige der simulierten I/O-Ports.&lt;br /&gt;
(kommerziell)&lt;br /&gt;
&lt;br /&gt;
== Avrora ==&lt;br /&gt;
[http://avrora.sourceforge.net/ Avrora], a research project of the UCLA Compilers Group, is a set of simulation and analysis tools for programs written for the AVR microcontroller produced by Atmel and the Mica2 sensor nodes. Avrora contains a flexible framework for simulating and analyzing assembly programs, providing a clean Java API and infrastructure for experimentation, profiling, and analysis.&lt;br /&gt;
&lt;br /&gt;
== Proteus VSM for Atmel AVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.labcenter-electronics.com/products/avr.cfm Proteus VSM for Atmel AVR] ist ein kommerzieller AVR Simulator. &lt;br /&gt;
&lt;br /&gt;
In der Codesammlung gibt es dafür ein [http://www.mikrocontroller.net/topic/118974#1072449 Virtuelles AVR Funk Pollin Simulationsmodell] von Daniel Cagara.&lt;br /&gt;
&lt;br /&gt;
== CrossWorks for AVR == &lt;br /&gt;
&lt;br /&gt;
[http://rowley.co.uk/avr/index.htm CrossWorks for AVR] besitzt einen &#039;&#039;core simulator&#039;&#039; für AVRs. (Windows, Mac OS X, Linux, Solaris)&lt;br /&gt;
&lt;br /&gt;
== simavr ==&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/simavr simavr] is a new AVR simulator from Michel &amp;quot;buserror&amp;quot; Pollet for linux, or any platform that uses avr-gcc. It uses avr-gcc own register definition to simplify creating new targets for supported AVR devices.&lt;br /&gt;
&lt;br /&gt;
The status of the project is the core works at about 98% (ie, it works, but there is a known bug). The supported IOs are eeprom, IO ports (including pin interupts), 8 bits timers (well, one of mode of the myriad) and a simple UART that makes “printf” work.&lt;br /&gt;
&lt;br /&gt;
gdb support is planned next.&lt;br /&gt;
&lt;br /&gt;
Lizenz: GPL v3&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=86665 Diskussion bei avrfreaks.net]&lt;br /&gt;
&lt;br /&gt;
== avrtest ==&lt;br /&gt;
&lt;br /&gt;
avrtest ist ein freier AVR Core-Simulator, der zur Ausführung der avr-gcc Testsuite verwendet wird. Über spezielle &amp;quot;magische SFRs&amp;quot; können bestimmte Aktionen ausgelöst werden wie z.B. definierter Programmabbruch oder die Ausgabe eines Zeichens auf Console, so daß ein Programm wie&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    printf (&amp;quot;Hallo Welt!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
analoge Resultate bringt wie ein Programm, das nativ auf dem Rechner ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
avrtest ist Open Source, einfach gehalten und auf Geschwindigkeit getrimmt. Die Eingabe von Stimuli ist nicht möglich, und interne Peripherie wird nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
* Lizenz: GPL v2 oder höher&lt;br /&gt;
* Betriebssysteme: Windows, Linux, etc. Eigentlich keine Einschränkung, da es sich um ein Open-Source Projekt handelt.&lt;br /&gt;
&lt;br /&gt;
=== Weblinks ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/p/winavr/code/HEAD/tree/trunk/avrtest/ avrtest: Projekt und README bei sourceforge]&lt;br /&gt;
* [http://lists.gnu.org/archive/html/avr-gcc-list/2011-06/msg00015.html Beschreibung in der avr-gcc-list Mailingliste (en)]&lt;br /&gt;
&lt;br /&gt;
== BASCOM AVR ==&lt;br /&gt;
&lt;br /&gt;
In [http://www.mcselec.com/ BASCOM AVR] ist ein Simulatorteil enthalten und damit ist auch die Simulation von Geräten (LCD, UART) möglich. BASCOM AVR wird von MCS Electronics verkauft (89€) und ist ein unter Windows laufender [[Basic|BASIC]] [[Compiler]] für Atmel AVR Mikrocontroller. Eine auf 4 KB Codegröße eingeschränkte Demoversion ist kostenlos erhältlich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ldi r16,0x10&lt;br /&gt;
LDI r17,0x12&lt;br /&gt;
ADD R16,R17&lt;br /&gt;
strt : rjmp strt&lt;br /&gt;
&lt;br /&gt;
== MacSim - AVR simulator for OS X ==&lt;br /&gt;
[http://www.fracturedsoftware.com/macsimavr/ MacSim Alpha 4]&lt;br /&gt;
&lt;br /&gt;
Einschränkungen u.A.:  &amp;quot;There are currently no timers, interrupts, or EEPROM. The processor is &#039;generic&#039; and has fixed size data and instruction memories.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:AVR-Simulation&amp;diff=95255</id>
		<title>Diskussion:AVR-Simulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:AVR-Simulation&amp;diff=95255"/>
		<updated>2017-02-11T12:06:16Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Normalerweise bin ich ja dafür eher mal mehrere Seiten zusammenzufassen, aber in diesem Fall denke ich dass eine eigene Seite für gdb/simulavr sinnvoller ist. --[[Benutzer:Andreas|Andreas]] 21:27, 7. Okt 2004 (CEST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ich wollte den Leuten, die sich auf diese Klickibunti-Oberflächen stürzen wie auf warme Semmeln, die Scheu vor gdb und Konsorten nehmen. Deswegen habe ich das alles auf einer Seite zusammengefasst. --[[Benutzer:OldBug|Patrick]] 09:37, 8. Okt 2004 (CEST)&lt;br /&gt;
&lt;br /&gt;
Bin auch dafür, simulavr + avr-gdb und gegebenenfalls ddd als quasi zusammengehörende Einheit abzuhandeln&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95254</id>
		<title>AVR-Simulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95254"/>
		<updated>2017-02-11T11:48:59Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:AVR]]&lt;br /&gt;
== SimulAVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/simulavr/ SimulAVR] ist ein Simulator, der einige Prozessoren der AVR-Familie auf einem PC-Hostsystem (Windows, Linux, Mac OS X) simulieren kann. Dieser Simulator ist auch im [[WinAVR]]-Paket enthalten (/WinAVR/bin/simulavr.exe).&lt;br /&gt;
&lt;br /&gt;
Eine Verwendung von SimulAVR ist das sog. Signal Tracing, d.h. das aufzeichnen von Änderungen der diversen Register (z.B. der Pins eines I/O-Ports) in eine VCD-Datei. Auch wenn die Laufzeit des Simulators oft langsamer als die der Hardware ist, entsprechen diese Aufzeichnungen auf den CPU-Takt genau dem, was auf der Hardware passieren würde. Wie diese Aufzeichnungen gemacht werden ist bei SimulAVR selbst kaum dokumentiert, doch bei RepRap gibt es eine kleine [http://reprap.org/wiki/SimulAVR#Signal_tracing SimulAVR Anleitung], die eine gute Passage dazu enthält.&lt;br /&gt;
&lt;br /&gt;
Die Hauptanwendung von SimulAVR dürfte das Debuggen sein. Dafür wird SimulAVR über ein dazu passendes Frontend bedient. GDB und Insight sind zwei, ebenfalls in WinAVR enthaltene, Programme, die ein solches Frontend bilden. &lt;br /&gt;
&lt;br /&gt;
Wer &amp;quot;textorientiertes&amp;quot; Debugging mag, oder beispielsweise &#039;&#039;emacs&#039;&#039; als Frontend verwenden möchte, der nutzt den [[GDB]], den GNU Debugger. Er ist im WinAVR-Paket enthalten (/WinAVR/bin/avr-gdb.exe). Wer gleich eine grafische Benutzeroberfläche (GUI) verwenden möchte, nutzt Insight (welches intern ebenfalls den GDB verwendet). &lt;br /&gt;
&lt;br /&gt;
Beide Debugger, also GDB oder Insight, benötigen ein Backend. Entweder handelt es sich dabei um einen ICE/[[JTAG]]-Debugger wie z.&amp;amp;nbsp;B. [http://avarice.sourceforge.net/ AVaRICE] als Interface zu einem realen AVR-Mikrocontroller oder um einen Simulator.&lt;br /&gt;
&lt;br /&gt;
=== Starten von SimulAVR ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:SimulAVR-Display.png|right|220px]]&lt;br /&gt;
Um SimulAVR mit default-Parametern zu starten, reicht es aus, folgende Zeile in einer Shell/Eingabeaufforderung einzugeben:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SimulAVR startet dann mit den defaultparametern und stellt einen GDBServer-Prozess auf dem lokalen oder entfernten Host auf Port 1212 zur Verfügung.&lt;br /&gt;
Das &#039;&#039;Backend&#039;&#039; der Simulation ist nun Einsatzbereit.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist, SimulAVR mit Display zu starten. Dann werden während der Ausführung die Werte der Register und dem RAM angezeigt (siehe Bild).&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -P simulavr-disp -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht der unterstützten AVR-Prozessoren und der SimulAVR spezifischen Parameter bekommt man durch folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr --help&lt;br /&gt;
&lt;br /&gt;
=== Starten des GDB ===&lt;br /&gt;
&lt;br /&gt;
Um das (vorläufige) Frontend GDB zu starten, reicht folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb&lt;br /&gt;
&lt;br /&gt;
Der GDB meldet sich mit folgendem Bildschirm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Current directory is c:/WinAVR/testprj4/&lt;br /&gt;
GNU gdb 6.1&lt;br /&gt;
Copyright 2004 Free Software Foundation, Inc.&lt;br /&gt;
GDB is free software, covered by the GNU General Public License, and you are&lt;br /&gt;
welcome to change it and/or distribute copies of it under certain conditions.&lt;br /&gt;
Type &amp;quot;show copying&amp;quot; to see the conditions.&lt;br /&gt;
There is absolutely no warranty for GDB.  Type &amp;quot;show warranty&amp;quot; for details.&lt;br /&gt;
This GDB was configured as &amp;quot;--host=i686-pc-cygwin --target=avr&amp;quot;.&lt;br /&gt;
(gdb) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(gdb)&#039;&#039;&#039; ist der Prompt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soll während dem Debuggen der Quellcode angezeigt werden, der zur Zeit ausgeführt wird, kann GDB wie folgt gestartet werden.&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb -tui&lt;br /&gt;
&lt;br /&gt;
Beim (gdb) prompt dann das Layout auf Assembler umschalten.,&lt;br /&gt;
&lt;br /&gt;
 (gdb) layout asm&lt;br /&gt;
&lt;br /&gt;
=== Simulieren/Debuggen ===&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss dem GDB die gewünschte Datei (vorher mittels entsprechendem &#039;&#039;Makefile&#039;&#039; erzeugt) bekannt gemacht werden. Es ist darauf zu achten, dass das Programm mit Debugsymbolen kompiliert wurde.&lt;br /&gt;
&lt;br /&gt;
 (gdb) file main.elf &lt;br /&gt;
 Reading symbols from main.elf...done.&lt;br /&gt;
&lt;br /&gt;
Als nächstes muss dem GDB mitgeteilt werden, welches Ziel (target) er als Backend verwenden soll:&lt;br /&gt;
&lt;br /&gt;
 (gdb) target remote localhost:1212&lt;br /&gt;
&lt;br /&gt;
oder kürzer:&lt;br /&gt;
&lt;br /&gt;
 (gdb) targ rem :1212&lt;br /&gt;
 Remote debugging using :1212&lt;br /&gt;
 0x00000000 in __vectors ()&lt;br /&gt;
&lt;br /&gt;
Jetzt muss das Programm in den Simulator geladen werden:&lt;br /&gt;
&lt;br /&gt;
 (gdb) load&lt;br /&gt;
 Loading section .data, size 0x32 lma 0x1bc&lt;br /&gt;
 Loading section .text, size 0x1bc lma 0x0&lt;br /&gt;
 Start address 0x0, load size 494&lt;br /&gt;
 Transfer rate: 3952 bits in &amp;lt;1 sec, 30 bytes/write.&lt;br /&gt;
&lt;br /&gt;
Da diese 3 Schritte üblicherweise, bei jedem Start einer Simulationssitzung ausgeführt werden müssen, kann man sie zeilenweise in eine Textdatei (Vorschlag: gdb.conf) geschrieben werden, diese Datei wird dem gdb dann mit dem Parameter &amp;quot;-x&amp;quot; (eXecute) mitgegeben:&lt;br /&gt;
&lt;br /&gt;
avr-gdb -x gdb.conf&lt;br /&gt;
&lt;br /&gt;
Damit der Simulator nicht das gesamte Programm abarbeitet, sollte man &#039;&#039;breakpoints&#039;&#039; setzen.&lt;br /&gt;
Den Ersten am besten bei &#039;&#039;main&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) b main&lt;br /&gt;
 Breakpoint 1 at 0xd2: file main.c, line 16.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man das Programm im Simulator mit &#039;&#039;continue&#039;&#039; starten:&lt;br /&gt;
&lt;br /&gt;
 (gdb) c&lt;br /&gt;
 Continuing.&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des zuvor gesetzten &#039;&#039;breakpoints&#039;&#039; stoppt GDB und meldet:&lt;br /&gt;
&lt;br /&gt;
 Breakpoint 1, main () at main.c:16&lt;br /&gt;
 (gdb)&lt;br /&gt;
&lt;br /&gt;
Eine Liste der verfügbaren debug-befehle des GDB findet sich durch die Eingabe von &#039;&#039;&#039;help&#039;&#039;&#039;.&lt;br /&gt;
=== Data Display Debugger ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Bildschirmfoto vom 2017-02-11 12-32-28.png|right|200px]]&lt;br /&gt;
Eine sehr komfortable Benutzeroberfläche zum gdb erhält man mit dem Programm &amp;quot;ddd&amp;quot; (Data Display Debugger), https://de.wikipedia.org/wiki/Data_Display_Debugger&lt;br /&gt;
&lt;br /&gt;
Diesem gibt man beim Aufruf mit, welcher gdb, mit welcher Verbindung zum Ziel genutzt werden soll. Falls das Startscript, wie oben genutzt werden soll z.B.:&lt;br /&gt;
&lt;br /&gt;
ddd --debugger &amp;quot;avr-gdb -x gdb.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Wenn das Projekt mit den entsprechenden Debug-Informationen übersetzt wurde, dann zeigt der DDD die Zeile im Quelltext (auch bei Assemblerteilen), Variableninhalte lassen sich inspizieren, indem der Mauszeiger drauf positioniert wird.&lt;br /&gt;
&lt;br /&gt;
=== ToDo ===&lt;br /&gt;
&lt;br /&gt;
[TODO] Einige häufige GDB-Commands als Beispiel einfügen.&lt;br /&gt;
&lt;br /&gt;
== VMLab ==&lt;br /&gt;
&lt;br /&gt;
[http://www.amctools.com/vmlab.htm VMLab] ist eine komplette Freeware-IDE mit Debugger und Simulator für MS-Windows. VMLab arbeitet mit [[WinAVR]] zusammen und kann AVR-Peripheriehardware simulieren. Leider hat der Autor von VMLab die Entwicklung im Jahr 2006 eingestellt, da dem Projekt nicht der gewünschte kommerzielle Erfolg vergönnt war. Die aktuelle Version ist 3.15 von Oktober 2009.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* Forumsbeitrag [http://www.mikrocontroller.net/topic/24494#714662 VMLAB Bug bei Stackpointer/Interrupt?]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/85212#716727 Workaround]&lt;br /&gt;
&lt;br /&gt;
== AVR Studio ==&lt;br /&gt;
&lt;br /&gt;
[[Bild: AVR-Studio_Simulation.png|thumb|right|250px|Simulator-Ansicht in AVR Studio]]&lt;br /&gt;
[[AVR-Studio|AVR Studio]] von Atmel enthält neben dem Übersetzungsteil, dem Debuggingteil auch einen Simulatorteil. Eine Übersicht über alle drei Programmteile gibt der Powerpoint-Vortrag [http://ece353.ecs.umass.edu/lab2/labc-lectureslides2012.pptx AVR Studio: The comprehensive tutorial] (MS PowerPoint &#039;&#039;2007&#039;&#039;) von Jeremy Gummeson und Brendan Kemp.&lt;br /&gt;
&lt;br /&gt;
Wenn nur ein Breakpoint gesetzt ist, kann mit F5 das Programm einen Abarbeitungszyklus machen. Die Bearbeitung bleibt dann wieder beim Breakpoint stehen. Mit der Stoppuhr kann dann die Zeit für den abgearbeiteten Programmteil gemessen werden. Mit der rechten Mouse-Taste kann die Stoppuhr zurückgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Ausführliche Anleitung zum Ablauf einer Simulation:  [http://www2.tech.purdue.edu/ecet/courses/ecet309/Reference_Materials/Simulation_AVR_Studio_4.pdf Tutorial der Purdue University] (engl., PDF) (link tot!)&lt;br /&gt;
&lt;br /&gt;
Externe Signale können mit den Tools HAPSIM oder über eine Stimulidatei in den Simulator eingespeist werden. &lt;br /&gt;
&lt;br /&gt;
Zu beachten ist, dass sich mit der Einführung des AVR Simulator 2, welcher  Vorteile wie Unterstützung von [[I2C|TWI]] bietet, das Datenformat für extern zugeführte Stimuli-Files geändert hat. Eine kleine Einführung inkl. Beispiel bietet die im AVR-Studio enthaltene Hilfe:&lt;br /&gt;
:AVR Studio Help → AVR Tools User Guide → Simulator → Simulator2 Stimuli&lt;br /&gt;
&lt;br /&gt;
=== HAPSIM ===&lt;br /&gt;
&lt;br /&gt;
[http://www.helmix.at/hapsim/index.htm HAPSIM] (Helmis AVR Periphery Simulator) ist ein Tool zur graphischen Simulation von Tasten, [[LED]], [[LCD]] und Terminalfunktionen in AVR Studio. (deutsch/engl., Windows, Freeware). Hinweise zur Installation von Hapsim nach einem AVR Studio Update stehen im [http://www.mikrocontroller.net/topic/118668 Forum]. HAPSIM kann nur mit AVRStudio 4.x verwendet werden, für den Fall, dass die Domain selbst nicht funktioniert kann folgender [http://members.aon.at/helmi/hapsim.htm Direktlink] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Stimuli ===&lt;br /&gt;
&lt;br /&gt;
Über eine sog. Stimuli-Datei lassen sich von ausserhalb Signale dem AVR Studio zuführen. Informationen zum Aufbau einer Stimulidatei finden sich in obigem &amp;quot;AVR Studio: The comprehensive tutorial&amp;quot; und bei Atmel ([http://support.atmel.com/bin/customer.exe?=&amp;amp;action=viewKbEntry&amp;amp;id=46 What is the format of the AVR Studio simulator stimuli files?]). Der [http://www.hot.ee/nppcsoftware/ Stimuli Generator for AVR Studio] ist eine Freeware für die Erzeugung von Stimulidateien und deren grafischen Darstellung. Für dieses Programm ist .NET 1.1 oder 2.0 erforderlich. Ein Python-Script zum Umwandeln der Stimuli-Log Datei in eine vcd-Datei, welche z.B. in gtkwave betrachtet werden kann, ist [https://github.com/althebaker43/avr_lcd/blob/8b177cc492d2e9a814bd21671c2267a6d3044811/atmel_studio/avr_lcd/stim2vcd.py hier] verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== LogAnalyser ===&lt;br /&gt;
&lt;br /&gt;
[http://www.dresco.co.uk/LogAnalyser/ LogAnalyser] v1.00 (c) 2008 Jon Escombe is a graphical &amp;quot;logic analyser&amp;quot; style display of Atmel AVR Studio simulator log files. The project is built using the (excellent) zedGraph charting class library, and the source code is made available under GPL license. Requires Windows XP and .NET framework 2.0 to run.&lt;br /&gt;
&lt;br /&gt;
=== TCPSimDBG ===&lt;br /&gt;
&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=74350 TCPSimDBG] ist ein Plugin für [[AVR-Studio]] um Remote Simulating/Debugging über TCP/IP durchzuführen. Ein TCP/IP-Terminal oder Serverprogramm kann sich mit dem Simulator/Debugger von AVR-Studio verbinden und Informationen aus dem Debugprozess abrufen und ändern. Damit lassen sich virtuelle Geräte (Devices) eingerichten. (Atmel SDK Lizenz, Windows XP, 2003, Vista .NET 3.5 erforderlich)&lt;br /&gt;
&lt;br /&gt;
=== AVR Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
[http://www.coynetechsystems.com/avrlogicanalyzer/index.php AVR Logic Analyzer] von Coyne Technology Systems ist ein AVR Studio Plugin zur grafischen Anzeige der simulierten I/O-Ports.&lt;br /&gt;
(kommerziell)&lt;br /&gt;
&lt;br /&gt;
== Avrora ==&lt;br /&gt;
[http://avrora.sourceforge.net/ Avrora], a research project of the UCLA Compilers Group, is a set of simulation and analysis tools for programs written for the AVR microcontroller produced by Atmel and the Mica2 sensor nodes. Avrora contains a flexible framework for simulating and analyzing assembly programs, providing a clean Java API and infrastructure for experimentation, profiling, and analysis.&lt;br /&gt;
&lt;br /&gt;
== Proteus VSM for Atmel AVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.labcenter-electronics.com/products/avr.cfm Proteus VSM for Atmel AVR] ist ein kommerzieller AVR Simulator. &lt;br /&gt;
&lt;br /&gt;
In der Codesammlung gibt es dafür ein [http://www.mikrocontroller.net/topic/118974#1072449 Virtuelles AVR Funk Pollin Simulationsmodell] von Daniel Cagara.&lt;br /&gt;
&lt;br /&gt;
== CrossWorks for AVR == &lt;br /&gt;
&lt;br /&gt;
[http://rowley.co.uk/avr/index.htm CrossWorks for AVR] besitzt einen &#039;&#039;core simulator&#039;&#039; für AVRs. (Windows, Mac OS X, Linux, Solaris)&lt;br /&gt;
&lt;br /&gt;
== simavr ==&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/simavr simavr] is a new AVR simulator from Michel &amp;quot;buserror&amp;quot; Pollet for linux, or any platform that uses avr-gcc. It uses avr-gcc own register definition to simplify creating new targets for supported AVR devices.&lt;br /&gt;
&lt;br /&gt;
The status of the project is the core works at about 98% (ie, it works, but there is a known bug). The supported IOs are eeprom, IO ports (including pin interupts), 8 bits timers (well, one of mode of the myriad) and a simple UART that makes “printf” work.&lt;br /&gt;
&lt;br /&gt;
gdb support is planned next.&lt;br /&gt;
&lt;br /&gt;
Lizenz: GPL v3&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=86665 Diskussion bei avrfreaks.net]&lt;br /&gt;
&lt;br /&gt;
== avrtest ==&lt;br /&gt;
&lt;br /&gt;
avrtest ist ein freier AVR Core-Simulator, der zur Ausführung der avr-gcc Testsuite verwendet wird. Über spezielle &amp;quot;magische SFRs&amp;quot; können bestimmte Aktionen ausgelöst werden wie z.B. definierter Programmabbruch oder die Ausgabe eines Zeichens auf Console, so daß ein Programm wie&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    printf (&amp;quot;Hallo Welt!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
analoge Resultate bringt wie ein Programm, das nativ auf dem Rechner ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
avrtest ist Open Source, einfach gehalten und auf Geschwindigkeit getrimmt. Die Eingabe von Stimuli ist nicht möglich, und interne Peripherie wird nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
* Lizenz: GPL v2 oder höher&lt;br /&gt;
* Betriebssysteme: Windows, Linux, etc. Eigentlich keine Einschränkung, da es sich um ein Open-Source Projekt handelt.&lt;br /&gt;
&lt;br /&gt;
=== Weblinks ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/p/winavr/code/HEAD/tree/trunk/avrtest/ avrtest: Projekt und README bei sourceforge]&lt;br /&gt;
* [http://lists.gnu.org/archive/html/avr-gcc-list/2011-06/msg00015.html Beschreibung in der avr-gcc-list Mailingliste (en)]&lt;br /&gt;
&lt;br /&gt;
== BASCOM AVR ==&lt;br /&gt;
&lt;br /&gt;
In [http://www.mcselec.com/ BASCOM AVR] ist ein Simulatorteil enthalten und damit ist auch die Simulation von Geräten (LCD, UART) möglich. BASCOM AVR wird von MCS Electronics verkauft (89€) und ist ein unter Windows laufender [[Basic|BASIC]] [[Compiler]] für Atmel AVR Mikrocontroller. Eine auf 4 KB Codegröße eingeschränkte Demoversion ist kostenlos erhältlich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ldi r16,0x10&lt;br /&gt;
LDI r17,0x12&lt;br /&gt;
ADD R16,R17&lt;br /&gt;
strt : rjmp strt&lt;br /&gt;
&lt;br /&gt;
== MacSim - AVR simulator for OS X ==&lt;br /&gt;
[http://www.fracturedsoftware.com/macsimavr/ MacSim Alpha 4]&lt;br /&gt;
&lt;br /&gt;
Einschränkungen u.A.:  &amp;quot;There are currently no timers, interrupts, or EEPROM. The processor is &#039;generic&#039; and has fixed size data and instruction memories.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95253</id>
		<title>AVR-Simulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95253"/>
		<updated>2017-02-11T11:48:04Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:AVR]]&lt;br /&gt;
== SimulAVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/simulavr/ SimulAVR] ist ein Simulator, der einige Prozessoren der AVR-Familie auf einem PC-Hostsystem (Windows, Linux, Mac OS X) simulieren kann. Dieser Simulator ist auch im [[WinAVR]]-Paket enthalten (/WinAVR/bin/simulavr.exe).&lt;br /&gt;
&lt;br /&gt;
Eine Verwendung von SimulAVR ist das sog. Signal Tracing, d.h. das aufzeichnen von Änderungen der diversen Register (z.B. der Pins eines I/O-Ports) in eine VCD-Datei. Auch wenn die Laufzeit des Simulators oft langsamer als die der Hardware ist, entsprechen diese Aufzeichnungen auf den CPU-Takt genau dem, was auf der Hardware passieren würde. Wie diese Aufzeichnungen gemacht werden ist bei SimulAVR selbst kaum dokumentiert, doch bei RepRap gibt es eine kleine [http://reprap.org/wiki/SimulAVR#Signal_tracing SimulAVR Anleitung], die eine gute Passage dazu enthält.&lt;br /&gt;
&lt;br /&gt;
Die Hauptanwendung von SimulAVR dürfte das Debuggen sein. Dafür wird SimulAVR über ein dazu passendes Frontend bedient. GDB und Insight sind zwei, ebenfalls in WinAVR enthaltene, Programme, die ein solches Frontend bilden. &lt;br /&gt;
&lt;br /&gt;
Wer &amp;quot;textorientiertes&amp;quot; Debugging mag, oder beispielsweise &#039;&#039;emacs&#039;&#039; als Frontend verwenden möchte, der nutzt den [[GDB]], den GNU Debugger. Er ist im WinAVR-Paket enthalten (/WinAVR/bin/avr-gdb.exe). Wer gleich eine grafische Benutzeroberfläche (GUI) verwenden möchte, nutzt Insight (welches intern ebenfalls den GDB verwendet). &lt;br /&gt;
&lt;br /&gt;
Beide Debugger, also GDB oder Insight, benötigen ein Backend. Entweder handelt es sich dabei um einen ICE/[[JTAG]]-Debugger wie z.&amp;amp;nbsp;B. [http://avarice.sourceforge.net/ AVaRICE] als Interface zu einem realen AVR-Mikrocontroller oder um einen Simulator.&lt;br /&gt;
&lt;br /&gt;
=== Starten von SimulAVR ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:SimulAVR-Display.png|right|220px]]&lt;br /&gt;
Um SimulAVR mit default-Parametern zu starten, reicht es aus, folgende Zeile in einer Shell/Eingabeaufforderung einzugeben:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SimulAVR startet dann mit den defaultparametern und stellt einen GDBServer-Prozess auf dem lokalen oder entfernten Host auf Port 1212 zur Verfügung.&lt;br /&gt;
Das &#039;&#039;Backend&#039;&#039; der Simulation ist nun Einsatzbereit.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist, SimulAVR mit Display zu starten. Dann werden während der Ausführung die Werte der Register und dem RAM angezeigt (siehe Bild).&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -P simulavr-disp -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht der unterstützten AVR-Prozessoren und der SimulAVR spezifischen Parameter bekommt man durch folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr --help&lt;br /&gt;
&lt;br /&gt;
=== Starten des GDB ===&lt;br /&gt;
&lt;br /&gt;
Um das (vorläufige) Frontend GDB zu starten, reicht folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb&lt;br /&gt;
&lt;br /&gt;
Der GDB meldet sich mit folgendem Bildschirm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Current directory is c:/WinAVR/testprj4/&lt;br /&gt;
GNU gdb 6.1&lt;br /&gt;
Copyright 2004 Free Software Foundation, Inc.&lt;br /&gt;
GDB is free software, covered by the GNU General Public License, and you are&lt;br /&gt;
welcome to change it and/or distribute copies of it under certain conditions.&lt;br /&gt;
Type &amp;quot;show copying&amp;quot; to see the conditions.&lt;br /&gt;
There is absolutely no warranty for GDB.  Type &amp;quot;show warranty&amp;quot; for details.&lt;br /&gt;
This GDB was configured as &amp;quot;--host=i686-pc-cygwin --target=avr&amp;quot;.&lt;br /&gt;
(gdb) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(gdb)&#039;&#039;&#039; ist der Prompt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soll während dem Debuggen der Quellcode angezeigt werden, der zur Zeit ausgeführt wird, kann GDB wie folgt gestartet werden.&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb -tui&lt;br /&gt;
&lt;br /&gt;
Beim (gdb) prompt dann das Layout auf Assembler umschalten.,&lt;br /&gt;
&lt;br /&gt;
 (gdb) layout asm&lt;br /&gt;
&lt;br /&gt;
=== Simulieren/Debuggen ===&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss dem GDB die gewünschte Datei (vorher mittels entsprechendem &#039;&#039;Makefile&#039;&#039; erzeugt) bekannt gemacht werden. Es ist darauf zu achten, dass das Programm mit Debugsymbolen kompiliert wurde.&lt;br /&gt;
&lt;br /&gt;
 (gdb) file main.elf &lt;br /&gt;
 Reading symbols from main.elf...done.&lt;br /&gt;
&lt;br /&gt;
Als nächstes muss dem GDB mitgeteilt werden, welches Ziel (target) er als Backend verwenden soll:&lt;br /&gt;
&lt;br /&gt;
 (gdb) target remote localhost:1212&lt;br /&gt;
&lt;br /&gt;
oder kürzer:&lt;br /&gt;
&lt;br /&gt;
 (gdb) targ rem :1212&lt;br /&gt;
 Remote debugging using :1212&lt;br /&gt;
 0x00000000 in __vectors ()&lt;br /&gt;
&lt;br /&gt;
Jetzt muss das Programm in den Simulator geladen werden:&lt;br /&gt;
&lt;br /&gt;
 (gdb) load&lt;br /&gt;
 Loading section .data, size 0x32 lma 0x1bc&lt;br /&gt;
 Loading section .text, size 0x1bc lma 0x0&lt;br /&gt;
 Start address 0x0, load size 494&lt;br /&gt;
 Transfer rate: 3952 bits in &amp;lt;1 sec, 30 bytes/write.&lt;br /&gt;
&lt;br /&gt;
Da diese 3 Schritte üblicherweise, bei jedem Start einer Simulationssitzung ausgeführt werden müssen, kann man sie zeilenweise in eine Textdatei (Vorschlag: gdb.conf) geschrieben werden, diese Datei wird dem gdb dann mit dem Parameter &amp;quot;-x&amp;quot; (eXecute) mitgegeben:&lt;br /&gt;
&lt;br /&gt;
avr-gdb -x gdb.conf&lt;br /&gt;
&lt;br /&gt;
Damit der Simulator nicht das gesamte Programm abarbeitet, sollte man &#039;&#039;breakpoints&#039;&#039; setzen.&lt;br /&gt;
Den Ersten am besten bei &#039;&#039;main&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) b main&lt;br /&gt;
 Breakpoint 1 at 0xd2: file main.c, line 16.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man das Programm im Simulator mit &#039;&#039;continue&#039;&#039; starten:&lt;br /&gt;
&lt;br /&gt;
 (gdb) c&lt;br /&gt;
 Continuing.&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des zuvor gesetzten &#039;&#039;breakpoints&#039;&#039; stoppt GDB und meldet:&lt;br /&gt;
&lt;br /&gt;
 Breakpoint 1, main () at main.c:16&lt;br /&gt;
 (gdb)&lt;br /&gt;
&lt;br /&gt;
Eine Liste der verfügbaren debug-befehle des GDB findet sich durch die Eingabe von &#039;&#039;&#039;help&#039;&#039;&#039;.&lt;br /&gt;
=== Data Display Debugger ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Bildschirmfoto vom 2017-02-11 12-32-28.png|right|200px]]&lt;br /&gt;
Eine sehr komfortable Benutzeroberfläche zum gdb erhält man mit dem Programm &amp;quot;ddd&amp;quot; (Data Display Debugger), https://de.wikipedia.org/wiki/Data_Display_Debugger&lt;br /&gt;
&lt;br /&gt;
Diesem gibt man beim Aufruf mit, welcher gdb, mit welcher Verbindung zum Ziel genutzt werden soll, falls das Startscript, wie oben genutzt werden soll z.B.:&lt;br /&gt;
&lt;br /&gt;
ddd --debugger &amp;quot;avr-gdb -x gdb.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Wenn das Projekt mit den entsprechenden Debug-Informationen übersetzt wurde, dann zeigt der DDD die Zeile im Quelltext (auch bei Assemblerteilen), Variableninhalte lassen sich inspizieren, indem der Mauszeiger drauf positioniert wird.&lt;br /&gt;
&lt;br /&gt;
=== ToDo ===&lt;br /&gt;
&lt;br /&gt;
[TODO] Einige häufige GDB-Commands als Beispiel einfügen.&lt;br /&gt;
&lt;br /&gt;
== VMLab ==&lt;br /&gt;
&lt;br /&gt;
[http://www.amctools.com/vmlab.htm VMLab] ist eine komplette Freeware-IDE mit Debugger und Simulator für MS-Windows. VMLab arbeitet mit [[WinAVR]] zusammen und kann AVR-Peripheriehardware simulieren. Leider hat der Autor von VMLab die Entwicklung im Jahr 2006 eingestellt, da dem Projekt nicht der gewünschte kommerzielle Erfolg vergönnt war. Die aktuelle Version ist 3.15 von Oktober 2009.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* Forumsbeitrag [http://www.mikrocontroller.net/topic/24494#714662 VMLAB Bug bei Stackpointer/Interrupt?]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/85212#716727 Workaround]&lt;br /&gt;
&lt;br /&gt;
== AVR Studio ==&lt;br /&gt;
&lt;br /&gt;
[[Bild: AVR-Studio_Simulation.png|thumb|right|250px|Simulator-Ansicht in AVR Studio]]&lt;br /&gt;
[[AVR-Studio|AVR Studio]] von Atmel enthält neben dem Übersetzungsteil, dem Debuggingteil auch einen Simulatorteil. Eine Übersicht über alle drei Programmteile gibt der Powerpoint-Vortrag [http://ece353.ecs.umass.edu/lab2/labc-lectureslides2012.pptx AVR Studio: The comprehensive tutorial] (MS PowerPoint &#039;&#039;2007&#039;&#039;) von Jeremy Gummeson und Brendan Kemp.&lt;br /&gt;
&lt;br /&gt;
Wenn nur ein Breakpoint gesetzt ist, kann mit F5 das Programm einen Abarbeitungszyklus machen. Die Bearbeitung bleibt dann wieder beim Breakpoint stehen. Mit der Stoppuhr kann dann die Zeit für den abgearbeiteten Programmteil gemessen werden. Mit der rechten Mouse-Taste kann die Stoppuhr zurückgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Ausführliche Anleitung zum Ablauf einer Simulation:  [http://www2.tech.purdue.edu/ecet/courses/ecet309/Reference_Materials/Simulation_AVR_Studio_4.pdf Tutorial der Purdue University] (engl., PDF) (link tot!)&lt;br /&gt;
&lt;br /&gt;
Externe Signale können mit den Tools HAPSIM oder über eine Stimulidatei in den Simulator eingespeist werden. &lt;br /&gt;
&lt;br /&gt;
Zu beachten ist, dass sich mit der Einführung des AVR Simulator 2, welcher  Vorteile wie Unterstützung von [[I2C|TWI]] bietet, das Datenformat für extern zugeführte Stimuli-Files geändert hat. Eine kleine Einführung inkl. Beispiel bietet die im AVR-Studio enthaltene Hilfe:&lt;br /&gt;
:AVR Studio Help → AVR Tools User Guide → Simulator → Simulator2 Stimuli&lt;br /&gt;
&lt;br /&gt;
=== HAPSIM ===&lt;br /&gt;
&lt;br /&gt;
[http://www.helmix.at/hapsim/index.htm HAPSIM] (Helmis AVR Periphery Simulator) ist ein Tool zur graphischen Simulation von Tasten, [[LED]], [[LCD]] und Terminalfunktionen in AVR Studio. (deutsch/engl., Windows, Freeware). Hinweise zur Installation von Hapsim nach einem AVR Studio Update stehen im [http://www.mikrocontroller.net/topic/118668 Forum]. HAPSIM kann nur mit AVRStudio 4.x verwendet werden, für den Fall, dass die Domain selbst nicht funktioniert kann folgender [http://members.aon.at/helmi/hapsim.htm Direktlink] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Stimuli ===&lt;br /&gt;
&lt;br /&gt;
Über eine sog. Stimuli-Datei lassen sich von ausserhalb Signale dem AVR Studio zuführen. Informationen zum Aufbau einer Stimulidatei finden sich in obigem &amp;quot;AVR Studio: The comprehensive tutorial&amp;quot; und bei Atmel ([http://support.atmel.com/bin/customer.exe?=&amp;amp;action=viewKbEntry&amp;amp;id=46 What is the format of the AVR Studio simulator stimuli files?]). Der [http://www.hot.ee/nppcsoftware/ Stimuli Generator for AVR Studio] ist eine Freeware für die Erzeugung von Stimulidateien und deren grafischen Darstellung. Für dieses Programm ist .NET 1.1 oder 2.0 erforderlich. Ein Python-Script zum Umwandeln der Stimuli-Log Datei in eine vcd-Datei, welche z.B. in gtkwave betrachtet werden kann, ist [https://github.com/althebaker43/avr_lcd/blob/8b177cc492d2e9a814bd21671c2267a6d3044811/atmel_studio/avr_lcd/stim2vcd.py hier] verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== LogAnalyser ===&lt;br /&gt;
&lt;br /&gt;
[http://www.dresco.co.uk/LogAnalyser/ LogAnalyser] v1.00 (c) 2008 Jon Escombe is a graphical &amp;quot;logic analyser&amp;quot; style display of Atmel AVR Studio simulator log files. The project is built using the (excellent) zedGraph charting class library, and the source code is made available under GPL license. Requires Windows XP and .NET framework 2.0 to run.&lt;br /&gt;
&lt;br /&gt;
=== TCPSimDBG ===&lt;br /&gt;
&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=74350 TCPSimDBG] ist ein Plugin für [[AVR-Studio]] um Remote Simulating/Debugging über TCP/IP durchzuführen. Ein TCP/IP-Terminal oder Serverprogramm kann sich mit dem Simulator/Debugger von AVR-Studio verbinden und Informationen aus dem Debugprozess abrufen und ändern. Damit lassen sich virtuelle Geräte (Devices) eingerichten. (Atmel SDK Lizenz, Windows XP, 2003, Vista .NET 3.5 erforderlich)&lt;br /&gt;
&lt;br /&gt;
=== AVR Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
[http://www.coynetechsystems.com/avrlogicanalyzer/index.php AVR Logic Analyzer] von Coyne Technology Systems ist ein AVR Studio Plugin zur grafischen Anzeige der simulierten I/O-Ports.&lt;br /&gt;
(kommerziell)&lt;br /&gt;
&lt;br /&gt;
== Avrora ==&lt;br /&gt;
[http://avrora.sourceforge.net/ Avrora], a research project of the UCLA Compilers Group, is a set of simulation and analysis tools for programs written for the AVR microcontroller produced by Atmel and the Mica2 sensor nodes. Avrora contains a flexible framework for simulating and analyzing assembly programs, providing a clean Java API and infrastructure for experimentation, profiling, and analysis.&lt;br /&gt;
&lt;br /&gt;
== Proteus VSM for Atmel AVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.labcenter-electronics.com/products/avr.cfm Proteus VSM for Atmel AVR] ist ein kommerzieller AVR Simulator. &lt;br /&gt;
&lt;br /&gt;
In der Codesammlung gibt es dafür ein [http://www.mikrocontroller.net/topic/118974#1072449 Virtuelles AVR Funk Pollin Simulationsmodell] von Daniel Cagara.&lt;br /&gt;
&lt;br /&gt;
== CrossWorks for AVR == &lt;br /&gt;
&lt;br /&gt;
[http://rowley.co.uk/avr/index.htm CrossWorks for AVR] besitzt einen &#039;&#039;core simulator&#039;&#039; für AVRs. (Windows, Mac OS X, Linux, Solaris)&lt;br /&gt;
&lt;br /&gt;
== simavr ==&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/simavr simavr] is a new AVR simulator from Michel &amp;quot;buserror&amp;quot; Pollet for linux, or any platform that uses avr-gcc. It uses avr-gcc own register definition to simplify creating new targets for supported AVR devices.&lt;br /&gt;
&lt;br /&gt;
The status of the project is the core works at about 98% (ie, it works, but there is a known bug). The supported IOs are eeprom, IO ports (including pin interupts), 8 bits timers (well, one of mode of the myriad) and a simple UART that makes “printf” work.&lt;br /&gt;
&lt;br /&gt;
gdb support is planned next.&lt;br /&gt;
&lt;br /&gt;
Lizenz: GPL v3&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=86665 Diskussion bei avrfreaks.net]&lt;br /&gt;
&lt;br /&gt;
== avrtest ==&lt;br /&gt;
&lt;br /&gt;
avrtest ist ein freier AVR Core-Simulator, der zur Ausführung der avr-gcc Testsuite verwendet wird. Über spezielle &amp;quot;magische SFRs&amp;quot; können bestimmte Aktionen ausgelöst werden wie z.B. definierter Programmabbruch oder die Ausgabe eines Zeichens auf Console, so daß ein Programm wie&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    printf (&amp;quot;Hallo Welt!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
analoge Resultate bringt wie ein Programm, das nativ auf dem Rechner ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
avrtest ist Open Source, einfach gehalten und auf Geschwindigkeit getrimmt. Die Eingabe von Stimuli ist nicht möglich, und interne Peripherie wird nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
* Lizenz: GPL v2 oder höher&lt;br /&gt;
* Betriebssysteme: Windows, Linux, etc. Eigentlich keine Einschränkung, da es sich um ein Open-Source Projekt handelt.&lt;br /&gt;
&lt;br /&gt;
=== Weblinks ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/p/winavr/code/HEAD/tree/trunk/avrtest/ avrtest: Projekt und README bei sourceforge]&lt;br /&gt;
* [http://lists.gnu.org/archive/html/avr-gcc-list/2011-06/msg00015.html Beschreibung in der avr-gcc-list Mailingliste (en)]&lt;br /&gt;
&lt;br /&gt;
== BASCOM AVR ==&lt;br /&gt;
&lt;br /&gt;
In [http://www.mcselec.com/ BASCOM AVR] ist ein Simulatorteil enthalten und damit ist auch die Simulation von Geräten (LCD, UART) möglich. BASCOM AVR wird von MCS Electronics verkauft (89€) und ist ein unter Windows laufender [[Basic|BASIC]] [[Compiler]] für Atmel AVR Mikrocontroller. Eine auf 4 KB Codegröße eingeschränkte Demoversion ist kostenlos erhältlich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ldi r16,0x10&lt;br /&gt;
LDI r17,0x12&lt;br /&gt;
ADD R16,R17&lt;br /&gt;
strt : rjmp strt&lt;br /&gt;
&lt;br /&gt;
== MacSim - AVR simulator for OS X ==&lt;br /&gt;
[http://www.fracturedsoftware.com/macsimavr/ MacSim Alpha 4]&lt;br /&gt;
&lt;br /&gt;
Einschränkungen u.A.:  &amp;quot;There are currently no timers, interrupts, or EEPROM. The processor is &#039;generic&#039; and has fixed size data and instruction memories.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95252</id>
		<title>AVR-Simulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95252"/>
		<updated>2017-02-11T11:46:49Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:AVR]]&lt;br /&gt;
== SimulAVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/simulavr/ SimulAVR] ist ein Simulator, der einige Prozessoren der AVR-Familie auf einem PC-Hostsystem (Windows, Linux, Mac OS X) simulieren kann. Dieser Simulator ist auch im [[WinAVR]]-Paket enthalten (/WinAVR/bin/simulavr.exe).&lt;br /&gt;
&lt;br /&gt;
Eine Verwendung von SimulAVR ist das sog. Signal Tracing, d.h. das aufzeichnen von Änderungen der diversen Register (z.B. der Pins eines I/O-Ports) in eine VCD-Datei. Auch wenn die Laufzeit des Simulators oft langsamer als die der Hardware ist, entsprechen diese Aufzeichnungen auf den CPU-Takt genau dem, was auf der Hardware passieren würde. Wie diese Aufzeichnungen gemacht werden ist bei SimulAVR selbst kaum dokumentiert, doch bei RepRap gibt es eine kleine [http://reprap.org/wiki/SimulAVR#Signal_tracing SimulAVR Anleitung], die eine gute Passage dazu enthält.&lt;br /&gt;
&lt;br /&gt;
Die Hauptanwendung von SimulAVR dürfte das Debuggen sein. Dafür wird SimulAVR über ein dazu passendes Frontend bedient. GDB und Insight sind zwei, ebenfalls in WinAVR enthaltene, Programme, die ein solches Frontend bilden. &lt;br /&gt;
&lt;br /&gt;
Wer &amp;quot;textorientiertes&amp;quot; Debugging mag, oder beispielsweise &#039;&#039;emacs&#039;&#039; als Frontend verwenden möchte, der nutzt den [[GDB]], den GNU Debugger. Er ist im WinAVR-Paket enthalten (/WinAVR/bin/avr-gdb.exe). Wer gleich eine grafische Benutzeroberfläche (GUI) verwenden möchte, nutzt Insight (welches intern ebenfalls den GDB verwendet). &lt;br /&gt;
&lt;br /&gt;
Beide Debugger, also GDB oder Insight, benötigen ein Backend. Entweder handelt es sich dabei um einen ICE/[[JTAG]]-Debugger wie z.&amp;amp;nbsp;B. [http://avarice.sourceforge.net/ AVaRICE] als Interface zu einem realen AVR-Mikrocontroller oder um einen Simulator.&lt;br /&gt;
&lt;br /&gt;
=== Starten von SimulAVR ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:SimulAVR-Display.png|right|220px]]&lt;br /&gt;
Um SimulAVR mit default-Parametern zu starten, reicht es aus, folgende Zeile in einer Shell/Eingabeaufforderung einzugeben:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SimulAVR startet dann mit den defaultparametern und stellt einen GDBServer-Prozess auf dem lokalen oder entfernten Host auf Port 1212 zur Verfügung.&lt;br /&gt;
Das &#039;&#039;Backend&#039;&#039; der Simulation ist nun Einsatzbereit.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist, SimulAVR mit Display zu starten. Dann werden während der Ausführung die Werte der Register und dem RAM angezeigt (siehe Bild).&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -P simulavr-disp -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht der unterstützten AVR-Prozessoren und der SimulAVR spezifischen Parameter bekommt man durch folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr --help&lt;br /&gt;
&lt;br /&gt;
=== Starten des GDB ===&lt;br /&gt;
&lt;br /&gt;
Um das (vorläufige) Frontend GDB zu starten, reicht folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb&lt;br /&gt;
&lt;br /&gt;
Der GDB meldet sich mit folgendem Bildschirm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Current directory is c:/WinAVR/testprj4/&lt;br /&gt;
GNU gdb 6.1&lt;br /&gt;
Copyright 2004 Free Software Foundation, Inc.&lt;br /&gt;
GDB is free software, covered by the GNU General Public License, and you are&lt;br /&gt;
welcome to change it and/or distribute copies of it under certain conditions.&lt;br /&gt;
Type &amp;quot;show copying&amp;quot; to see the conditions.&lt;br /&gt;
There is absolutely no warranty for GDB.  Type &amp;quot;show warranty&amp;quot; for details.&lt;br /&gt;
This GDB was configured as &amp;quot;--host=i686-pc-cygwin --target=avr&amp;quot;.&lt;br /&gt;
(gdb) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(gdb)&#039;&#039;&#039; ist der Prompt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soll während dem Debuggen der Quellcode angezeigt werden, der zur Zeit ausgeführt wird, kann GDB wie folgt gestartet werden.&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb -tui&lt;br /&gt;
&lt;br /&gt;
Beim (gdb) prompt dann das Layout auf Assembler umschalten.,&lt;br /&gt;
&lt;br /&gt;
 (gdb) layout asm&lt;br /&gt;
&lt;br /&gt;
=== Simulieren/Debuggen ===&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss dem GDB die gewünschte Datei (vorher mittels entsprechendem &#039;&#039;Makefile&#039;&#039; erzeugt) bekannt gemacht werden. Es ist darauf zu achten, dass das Programm mit Debugsymbolen kompiliert wurde.&lt;br /&gt;
&lt;br /&gt;
 (gdb) file main.elf &lt;br /&gt;
 Reading symbols from main.elf...done.&lt;br /&gt;
&lt;br /&gt;
Als nächstes muss dem GDB mitgeteilt werden, welches Ziel (target) er als Backend verwenden soll:&lt;br /&gt;
&lt;br /&gt;
 (gdb) target remote localhost:1212&lt;br /&gt;
&lt;br /&gt;
oder kürzer:&lt;br /&gt;
&lt;br /&gt;
 (gdb) targ rem :1212&lt;br /&gt;
 Remote debugging using :1212&lt;br /&gt;
 0x00000000 in __vectors ()&lt;br /&gt;
&lt;br /&gt;
Jetzt muss das Programm in den Simulator geladen werden:&lt;br /&gt;
&lt;br /&gt;
 (gdb) load&lt;br /&gt;
 Loading section .data, size 0x32 lma 0x1bc&lt;br /&gt;
 Loading section .text, size 0x1bc lma 0x0&lt;br /&gt;
 Start address 0x0, load size 494&lt;br /&gt;
 Transfer rate: 3952 bits in &amp;lt;1 sec, 30 bytes/write.&lt;br /&gt;
&lt;br /&gt;
Da diese 3 Schritte üblicherweise, bei jedem Start einer Simulationssitzung ausgeführt werden müssen, kann man sie zeilenweise in eine Textdatei (Vorschlag: gdb.conf) geschrieben werden, diese Datei wird dem gdb dann mit dem Parameter &amp;quot;-x&amp;quot; (eXecute) mitgegeben:&lt;br /&gt;
&lt;br /&gt;
avr-gdb -x gdb.conf&lt;br /&gt;
&lt;br /&gt;
Damit der Simulator nicht das gesamte Programm abarbeitet, sollte man &#039;&#039;breakpoints&#039;&#039; setzen.&lt;br /&gt;
Den Ersten am besten bei &#039;&#039;main&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) b main&lt;br /&gt;
 Breakpoint 1 at 0xd2: file main.c, line 16.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man das Programm im Simulator mit &#039;&#039;continue&#039;&#039; starten:&lt;br /&gt;
&lt;br /&gt;
 (gdb) c&lt;br /&gt;
 Continuing.&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des zuvor gesetzten &#039;&#039;breakpoints&#039;&#039; stoppt GDB und meldet:&lt;br /&gt;
&lt;br /&gt;
 Breakpoint 1, main () at main.c:16&lt;br /&gt;
 (gdb)&lt;br /&gt;
&lt;br /&gt;
Eine Liste der verfügbaren debug-befehle des GDB findet sich durch die Eingabe von &#039;&#039;&#039;help&#039;&#039;&#039;.&lt;br /&gt;
=== Data Display Debugger ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Bildschirmfoto vom 2017-02-11 12-32-28.png]|right|200px]&lt;br /&gt;
Eine sehr komfortable Benutzeroberfläche zum gdb erhält man mit dem Programm &amp;quot;ddd&amp;quot; (Data Display Debugger), https://de.wikipedia.org/wiki/Data_Display_Debugger&lt;br /&gt;
&lt;br /&gt;
Diesem gibt man beim Aufruf mit, welcher gdb, mit welcher Verbindung zum Ziel genutzt werden soll, falls das Startscript, wie oben genutzt werden soll z.B.:&lt;br /&gt;
&lt;br /&gt;
ddd --debugger &amp;quot;avr-gdb -x gdb.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Wenn das Projekt mit den entsprechenden Debug-Informationen übersetzt wurde, dann zeigt der DDD die Zeile im Quelltext (auch bei Assemblerteilen), Variableninhalte lassen sich inspizieren, indem der Mauszeiger drauf positioniert wird.&lt;br /&gt;
&lt;br /&gt;
[TODO] Einige häufige GDB-Commands als Beispiel einfügen.&lt;br /&gt;
&lt;br /&gt;
== VMLab ==&lt;br /&gt;
&lt;br /&gt;
[http://www.amctools.com/vmlab.htm VMLab] ist eine komplette Freeware-IDE mit Debugger und Simulator für MS-Windows. VMLab arbeitet mit [[WinAVR]] zusammen und kann AVR-Peripheriehardware simulieren. Leider hat der Autor von VMLab die Entwicklung im Jahr 2006 eingestellt, da dem Projekt nicht der gewünschte kommerzielle Erfolg vergönnt war. Die aktuelle Version ist 3.15 von Oktober 2009.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* Forumsbeitrag [http://www.mikrocontroller.net/topic/24494#714662 VMLAB Bug bei Stackpointer/Interrupt?]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/85212#716727 Workaround]&lt;br /&gt;
&lt;br /&gt;
== AVR Studio ==&lt;br /&gt;
&lt;br /&gt;
[[Bild: AVR-Studio_Simulation.png|thumb|right|250px|Simulator-Ansicht in AVR Studio]]&lt;br /&gt;
[[AVR-Studio|AVR Studio]] von Atmel enthält neben dem Übersetzungsteil, dem Debuggingteil auch einen Simulatorteil. Eine Übersicht über alle drei Programmteile gibt der Powerpoint-Vortrag [http://ece353.ecs.umass.edu/lab2/labc-lectureslides2012.pptx AVR Studio: The comprehensive tutorial] (MS PowerPoint &#039;&#039;2007&#039;&#039;) von Jeremy Gummeson und Brendan Kemp.&lt;br /&gt;
&lt;br /&gt;
Wenn nur ein Breakpoint gesetzt ist, kann mit F5 das Programm einen Abarbeitungszyklus machen. Die Bearbeitung bleibt dann wieder beim Breakpoint stehen. Mit der Stoppuhr kann dann die Zeit für den abgearbeiteten Programmteil gemessen werden. Mit der rechten Mouse-Taste kann die Stoppuhr zurückgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Ausführliche Anleitung zum Ablauf einer Simulation:  [http://www2.tech.purdue.edu/ecet/courses/ecet309/Reference_Materials/Simulation_AVR_Studio_4.pdf Tutorial der Purdue University] (engl., PDF) (link tot!)&lt;br /&gt;
&lt;br /&gt;
Externe Signale können mit den Tools HAPSIM oder über eine Stimulidatei in den Simulator eingespeist werden. &lt;br /&gt;
&lt;br /&gt;
Zu beachten ist, dass sich mit der Einführung des AVR Simulator 2, welcher  Vorteile wie Unterstützung von [[I2C|TWI]] bietet, das Datenformat für extern zugeführte Stimuli-Files geändert hat. Eine kleine Einführung inkl. Beispiel bietet die im AVR-Studio enthaltene Hilfe:&lt;br /&gt;
:AVR Studio Help → AVR Tools User Guide → Simulator → Simulator2 Stimuli&lt;br /&gt;
&lt;br /&gt;
=== HAPSIM ===&lt;br /&gt;
&lt;br /&gt;
[http://www.helmix.at/hapsim/index.htm HAPSIM] (Helmis AVR Periphery Simulator) ist ein Tool zur graphischen Simulation von Tasten, [[LED]], [[LCD]] und Terminalfunktionen in AVR Studio. (deutsch/engl., Windows, Freeware). Hinweise zur Installation von Hapsim nach einem AVR Studio Update stehen im [http://www.mikrocontroller.net/topic/118668 Forum]. HAPSIM kann nur mit AVRStudio 4.x verwendet werden, für den Fall, dass die Domain selbst nicht funktioniert kann folgender [http://members.aon.at/helmi/hapsim.htm Direktlink] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Stimuli ===&lt;br /&gt;
&lt;br /&gt;
Über eine sog. Stimuli-Datei lassen sich von ausserhalb Signale dem AVR Studio zuführen. Informationen zum Aufbau einer Stimulidatei finden sich in obigem &amp;quot;AVR Studio: The comprehensive tutorial&amp;quot; und bei Atmel ([http://support.atmel.com/bin/customer.exe?=&amp;amp;action=viewKbEntry&amp;amp;id=46 What is the format of the AVR Studio simulator stimuli files?]). Der [http://www.hot.ee/nppcsoftware/ Stimuli Generator for AVR Studio] ist eine Freeware für die Erzeugung von Stimulidateien und deren grafischen Darstellung. Für dieses Programm ist .NET 1.1 oder 2.0 erforderlich. Ein Python-Script zum Umwandeln der Stimuli-Log Datei in eine vcd-Datei, welche z.B. in gtkwave betrachtet werden kann, ist [https://github.com/althebaker43/avr_lcd/blob/8b177cc492d2e9a814bd21671c2267a6d3044811/atmel_studio/avr_lcd/stim2vcd.py hier] verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== LogAnalyser ===&lt;br /&gt;
&lt;br /&gt;
[http://www.dresco.co.uk/LogAnalyser/ LogAnalyser] v1.00 (c) 2008 Jon Escombe is a graphical &amp;quot;logic analyser&amp;quot; style display of Atmel AVR Studio simulator log files. The project is built using the (excellent) zedGraph charting class library, and the source code is made available under GPL license. Requires Windows XP and .NET framework 2.0 to run.&lt;br /&gt;
&lt;br /&gt;
=== TCPSimDBG ===&lt;br /&gt;
&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=74350 TCPSimDBG] ist ein Plugin für [[AVR-Studio]] um Remote Simulating/Debugging über TCP/IP durchzuführen. Ein TCP/IP-Terminal oder Serverprogramm kann sich mit dem Simulator/Debugger von AVR-Studio verbinden und Informationen aus dem Debugprozess abrufen und ändern. Damit lassen sich virtuelle Geräte (Devices) eingerichten. (Atmel SDK Lizenz, Windows XP, 2003, Vista .NET 3.5 erforderlich)&lt;br /&gt;
&lt;br /&gt;
=== AVR Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
[http://www.coynetechsystems.com/avrlogicanalyzer/index.php AVR Logic Analyzer] von Coyne Technology Systems ist ein AVR Studio Plugin zur grafischen Anzeige der simulierten I/O-Ports.&lt;br /&gt;
(kommerziell)&lt;br /&gt;
&lt;br /&gt;
== Avrora ==&lt;br /&gt;
[http://avrora.sourceforge.net/ Avrora], a research project of the UCLA Compilers Group, is a set of simulation and analysis tools for programs written for the AVR microcontroller produced by Atmel and the Mica2 sensor nodes. Avrora contains a flexible framework for simulating and analyzing assembly programs, providing a clean Java API and infrastructure for experimentation, profiling, and analysis.&lt;br /&gt;
&lt;br /&gt;
== Proteus VSM for Atmel AVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.labcenter-electronics.com/products/avr.cfm Proteus VSM for Atmel AVR] ist ein kommerzieller AVR Simulator. &lt;br /&gt;
&lt;br /&gt;
In der Codesammlung gibt es dafür ein [http://www.mikrocontroller.net/topic/118974#1072449 Virtuelles AVR Funk Pollin Simulationsmodell] von Daniel Cagara.&lt;br /&gt;
&lt;br /&gt;
== CrossWorks for AVR == &lt;br /&gt;
&lt;br /&gt;
[http://rowley.co.uk/avr/index.htm CrossWorks for AVR] besitzt einen &#039;&#039;core simulator&#039;&#039; für AVRs. (Windows, Mac OS X, Linux, Solaris)&lt;br /&gt;
&lt;br /&gt;
== simavr ==&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/simavr simavr] is a new AVR simulator from Michel &amp;quot;buserror&amp;quot; Pollet for linux, or any platform that uses avr-gcc. It uses avr-gcc own register definition to simplify creating new targets for supported AVR devices.&lt;br /&gt;
&lt;br /&gt;
The status of the project is the core works at about 98% (ie, it works, but there is a known bug). The supported IOs are eeprom, IO ports (including pin interupts), 8 bits timers (well, one of mode of the myriad) and a simple UART that makes “printf” work.&lt;br /&gt;
&lt;br /&gt;
gdb support is planned next.&lt;br /&gt;
&lt;br /&gt;
Lizenz: GPL v3&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=86665 Diskussion bei avrfreaks.net]&lt;br /&gt;
&lt;br /&gt;
== avrtest ==&lt;br /&gt;
&lt;br /&gt;
avrtest ist ein freier AVR Core-Simulator, der zur Ausführung der avr-gcc Testsuite verwendet wird. Über spezielle &amp;quot;magische SFRs&amp;quot; können bestimmte Aktionen ausgelöst werden wie z.B. definierter Programmabbruch oder die Ausgabe eines Zeichens auf Console, so daß ein Programm wie&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    printf (&amp;quot;Hallo Welt!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
analoge Resultate bringt wie ein Programm, das nativ auf dem Rechner ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
avrtest ist Open Source, einfach gehalten und auf Geschwindigkeit getrimmt. Die Eingabe von Stimuli ist nicht möglich, und interne Peripherie wird nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
* Lizenz: GPL v2 oder höher&lt;br /&gt;
* Betriebssysteme: Windows, Linux, etc. Eigentlich keine Einschränkung, da es sich um ein Open-Source Projekt handelt.&lt;br /&gt;
&lt;br /&gt;
=== Weblinks ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/p/winavr/code/HEAD/tree/trunk/avrtest/ avrtest: Projekt und README bei sourceforge]&lt;br /&gt;
* [http://lists.gnu.org/archive/html/avr-gcc-list/2011-06/msg00015.html Beschreibung in der avr-gcc-list Mailingliste (en)]&lt;br /&gt;
&lt;br /&gt;
== BASCOM AVR ==&lt;br /&gt;
&lt;br /&gt;
In [http://www.mcselec.com/ BASCOM AVR] ist ein Simulatorteil enthalten und damit ist auch die Simulation von Geräten (LCD, UART) möglich. BASCOM AVR wird von MCS Electronics verkauft (89€) und ist ein unter Windows laufender [[Basic|BASIC]] [[Compiler]] für Atmel AVR Mikrocontroller. Eine auf 4 KB Codegröße eingeschränkte Demoversion ist kostenlos erhältlich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ldi r16,0x10&lt;br /&gt;
LDI r17,0x12&lt;br /&gt;
ADD R16,R17&lt;br /&gt;
strt : rjmp strt&lt;br /&gt;
&lt;br /&gt;
== MacSim - AVR simulator for OS X ==&lt;br /&gt;
[http://www.fracturedsoftware.com/macsimavr/ MacSim Alpha 4]&lt;br /&gt;
&lt;br /&gt;
Einschränkungen u.A.:  &amp;quot;There are currently no timers, interrupts, or EEPROM. The processor is &#039;generic&#039; and has fixed size data and instruction memories.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95251</id>
		<title>AVR-Simulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95251"/>
		<updated>2017-02-11T11:43:48Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:AVR]]&lt;br /&gt;
== SimulAVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/simulavr/ SimulAVR] ist ein Simulator, der einige Prozessoren der AVR-Familie auf einem PC-Hostsystem (Windows, Linux, Mac OS X) simulieren kann. Dieser Simulator ist auch im [[WinAVR]]-Paket enthalten (/WinAVR/bin/simulavr.exe).&lt;br /&gt;
&lt;br /&gt;
Eine Verwendung von SimulAVR ist das sog. Signal Tracing, d.h. das aufzeichnen von Änderungen der diversen Register (z.B. der Pins eines I/O-Ports) in eine VCD-Datei. Auch wenn die Laufzeit des Simulators oft langsamer als die der Hardware ist, entsprechen diese Aufzeichnungen auf den CPU-Takt genau dem, was auf der Hardware passieren würde. Wie diese Aufzeichnungen gemacht werden ist bei SimulAVR selbst kaum dokumentiert, doch bei RepRap gibt es eine kleine [http://reprap.org/wiki/SimulAVR#Signal_tracing SimulAVR Anleitung], die eine gute Passage dazu enthält.&lt;br /&gt;
&lt;br /&gt;
Die Hauptanwendung von SimulAVR dürfte das Debuggen sein. Dafür wird SimulAVR über ein dazu passendes Frontend bedient. GDB und Insight sind zwei, ebenfalls in WinAVR enthaltene, Programme, die ein solches Frontend bilden. &lt;br /&gt;
&lt;br /&gt;
Wer &amp;quot;textorientiertes&amp;quot; Debugging mag, oder beispielsweise &#039;&#039;emacs&#039;&#039; als Frontend verwenden möchte, der nutzt den [[GDB]], den GNU Debugger. Er ist im WinAVR-Paket enthalten (/WinAVR/bin/avr-gdb.exe). Wer gleich eine grafische Benutzeroberfläche (GUI) verwenden möchte, nutzt Insight (welches intern ebenfalls den GDB verwendet). &lt;br /&gt;
&lt;br /&gt;
Beide Debugger, also GDB oder Insight, benötigen ein Backend. Entweder handelt es sich dabei um einen ICE/[[JTAG]]-Debugger wie z.&amp;amp;nbsp;B. [http://avarice.sourceforge.net/ AVaRICE] als Interface zu einem realen AVR-Mikrocontroller oder um einen Simulator.&lt;br /&gt;
&lt;br /&gt;
=== Starten von SimulAVR ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:SimulAVR-Display.png|right|220px]]&lt;br /&gt;
Um SimulAVR mit default-Parametern zu starten, reicht es aus, folgende Zeile in einer Shell/Eingabeaufforderung einzugeben:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SimulAVR startet dann mit den defaultparametern und stellt einen GDBServer-Prozess auf dem lokalen oder entfernten Host auf Port 1212 zur Verfügung.&lt;br /&gt;
Das &#039;&#039;Backend&#039;&#039; der Simulation ist nun Einsatzbereit.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist, SimulAVR mit Display zu starten. Dann werden während der Ausführung die Werte der Register und dem RAM angezeigt (siehe Bild).&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -P simulavr-disp -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht der unterstützten AVR-Prozessoren und der SimulAVR spezifischen Parameter bekommt man durch folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr --help&lt;br /&gt;
&lt;br /&gt;
=== Starten des GDB ===&lt;br /&gt;
&lt;br /&gt;
Um das (vorläufige) Frontend GDB zu starten, reicht folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb&lt;br /&gt;
&lt;br /&gt;
Der GDB meldet sich mit folgendem Bildschirm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Current directory is c:/WinAVR/testprj4/&lt;br /&gt;
GNU gdb 6.1&lt;br /&gt;
Copyright 2004 Free Software Foundation, Inc.&lt;br /&gt;
GDB is free software, covered by the GNU General Public License, and you are&lt;br /&gt;
welcome to change it and/or distribute copies of it under certain conditions.&lt;br /&gt;
Type &amp;quot;show copying&amp;quot; to see the conditions.&lt;br /&gt;
There is absolutely no warranty for GDB.  Type &amp;quot;show warranty&amp;quot; for details.&lt;br /&gt;
This GDB was configured as &amp;quot;--host=i686-pc-cygwin --target=avr&amp;quot;.&lt;br /&gt;
(gdb) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(gdb)&#039;&#039;&#039; ist der Prompt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soll während dem Debuggen der Quellcode angezeigt werden, der zur Zeit ausgeführt wird, kann GDB wie folgt gestartet werden.&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb -tui&lt;br /&gt;
&lt;br /&gt;
Beim (gdb) prompt dann das Layout auf Assembler umschalten.,&lt;br /&gt;
&lt;br /&gt;
 (gdb) layout asm&lt;br /&gt;
&lt;br /&gt;
=== Simulieren/Debuggen ===&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss dem GDB die gewünschte Datei (vorher mittels entsprechendem &#039;&#039;Makefile&#039;&#039; erzeugt) bekannt gemacht werden. Es ist darauf zu achten, dass das Programm mit Debugsymbolen kompiliert wurde.&lt;br /&gt;
&lt;br /&gt;
 (gdb) file main.elf &lt;br /&gt;
 Reading symbols from main.elf...done.&lt;br /&gt;
&lt;br /&gt;
Als nächstes muss dem GDB mitgeteilt werden, welches Ziel (target) er als Backend verwenden soll:&lt;br /&gt;
&lt;br /&gt;
 (gdb) target remote localhost:1212&lt;br /&gt;
&lt;br /&gt;
oder kürzer:&lt;br /&gt;
&lt;br /&gt;
 (gdb) targ rem :1212&lt;br /&gt;
 Remote debugging using :1212&lt;br /&gt;
 0x00000000 in __vectors ()&lt;br /&gt;
&lt;br /&gt;
Jetzt muss das Programm in den Simulator geladen werden:&lt;br /&gt;
&lt;br /&gt;
 (gdb) load&lt;br /&gt;
 Loading section .data, size 0x32 lma 0x1bc&lt;br /&gt;
 Loading section .text, size 0x1bc lma 0x0&lt;br /&gt;
 Start address 0x0, load size 494&lt;br /&gt;
 Transfer rate: 3952 bits in &amp;lt;1 sec, 30 bytes/write.&lt;br /&gt;
&lt;br /&gt;
Da diese 3 Schritte üblicherweise, bei jedem Start einer Simulationssitzung ausgeführt werden müssen, kann man sie zeilenweise in eine Textdatei (Vorschlag: gdb.conf) geschrieben werden, diese Datei wird dem gdb dann mit dem Parameter &amp;quot;-x&amp;quot; (eXecute) mitgegeben:&lt;br /&gt;
&lt;br /&gt;
avr-gdb -x gdb.conf&lt;br /&gt;
&lt;br /&gt;
Damit der Simulator nicht das gesamte Programm abarbeitet, sollte man &#039;&#039;breakpoints&#039;&#039; setzen.&lt;br /&gt;
Den Ersten am besten bei &#039;&#039;main&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) b main&lt;br /&gt;
 Breakpoint 1 at 0xd2: file main.c, line 16.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man das Programm im Simulator mit &#039;&#039;continue&#039;&#039; starten:&lt;br /&gt;
&lt;br /&gt;
 (gdb) c&lt;br /&gt;
 Continuing.&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des zuvor gesetzten &#039;&#039;breakpoints&#039;&#039; stoppt GDB und meldet:&lt;br /&gt;
&lt;br /&gt;
 Breakpoint 1, main () at main.c:16&lt;br /&gt;
 (gdb)&lt;br /&gt;
&lt;br /&gt;
Eine Liste der verfügbaren debug-befehle des GDB findet sich durch die Eingabe von &#039;&#039;&#039;help&#039;&#039;&#039;.&lt;br /&gt;
=== Data Display Debugger ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Bildschirmfoto vom 2017-02-11 12-32-28.png]|right]&lt;br /&gt;
Eine sehr komfortable Benutzeroberfläche zum gdb erhält man mit dem Programm &amp;quot;ddd&amp;quot; (Data Display Debugger), https://de.wikipedia.org/wiki/Data_Display_Debugger&lt;br /&gt;
&lt;br /&gt;
Diesem gibt man beim Aufruf mit, welcher gdb, mit welcher Verbindung zum Ziel genutzt werden soll, falls das Startscript, wie oben genutzt werden soll z.B.:&lt;br /&gt;
&lt;br /&gt;
ddd --debugger &amp;quot;avr-gdb -x gdb.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Wenn das Projekt mit den entsprechenden Debug-Informationen übersetzt wurde, dann zeigt der DDD die Zeile im Quelltext (auch bei Assemblerteilen), Variableninhalte lassen sich inspizieren, indem der Mauszeiger drauf positioniert wird.&lt;br /&gt;
&lt;br /&gt;
[TODO] Einige häufige GDB-Commands als Beispiel einfügen.&lt;br /&gt;
&lt;br /&gt;
== VMLab ==&lt;br /&gt;
&lt;br /&gt;
[http://www.amctools.com/vmlab.htm VMLab] ist eine komplette Freeware-IDE mit Debugger und Simulator für MS-Windows. VMLab arbeitet mit [[WinAVR]] zusammen und kann AVR-Peripheriehardware simulieren. Leider hat der Autor von VMLab die Entwicklung im Jahr 2006 eingestellt, da dem Projekt nicht der gewünschte kommerzielle Erfolg vergönnt war. Die aktuelle Version ist 3.15 von Oktober 2009.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* Forumsbeitrag [http://www.mikrocontroller.net/topic/24494#714662 VMLAB Bug bei Stackpointer/Interrupt?]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/85212#716727 Workaround]&lt;br /&gt;
&lt;br /&gt;
== AVR Studio ==&lt;br /&gt;
&lt;br /&gt;
[[Bild: AVR-Studio_Simulation.png|thumb|right|250px|Simulator-Ansicht in AVR Studio]]&lt;br /&gt;
[[AVR-Studio|AVR Studio]] von Atmel enthält neben dem Übersetzungsteil, dem Debuggingteil auch einen Simulatorteil. Eine Übersicht über alle drei Programmteile gibt der Powerpoint-Vortrag [http://ece353.ecs.umass.edu/lab2/labc-lectureslides2012.pptx AVR Studio: The comprehensive tutorial] (MS PowerPoint &#039;&#039;2007&#039;&#039;) von Jeremy Gummeson und Brendan Kemp.&lt;br /&gt;
&lt;br /&gt;
Wenn nur ein Breakpoint gesetzt ist, kann mit F5 das Programm einen Abarbeitungszyklus machen. Die Bearbeitung bleibt dann wieder beim Breakpoint stehen. Mit der Stoppuhr kann dann die Zeit für den abgearbeiteten Programmteil gemessen werden. Mit der rechten Mouse-Taste kann die Stoppuhr zurückgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Ausführliche Anleitung zum Ablauf einer Simulation:  [http://www2.tech.purdue.edu/ecet/courses/ecet309/Reference_Materials/Simulation_AVR_Studio_4.pdf Tutorial der Purdue University] (engl., PDF) (link tot!)&lt;br /&gt;
&lt;br /&gt;
Externe Signale können mit den Tools HAPSIM oder über eine Stimulidatei in den Simulator eingespeist werden. &lt;br /&gt;
&lt;br /&gt;
Zu beachten ist, dass sich mit der Einführung des AVR Simulator 2, welcher  Vorteile wie Unterstützung von [[I2C|TWI]] bietet, das Datenformat für extern zugeführte Stimuli-Files geändert hat. Eine kleine Einführung inkl. Beispiel bietet die im AVR-Studio enthaltene Hilfe:&lt;br /&gt;
:AVR Studio Help → AVR Tools User Guide → Simulator → Simulator2 Stimuli&lt;br /&gt;
&lt;br /&gt;
=== HAPSIM ===&lt;br /&gt;
&lt;br /&gt;
[http://www.helmix.at/hapsim/index.htm HAPSIM] (Helmis AVR Periphery Simulator) ist ein Tool zur graphischen Simulation von Tasten, [[LED]], [[LCD]] und Terminalfunktionen in AVR Studio. (deutsch/engl., Windows, Freeware). Hinweise zur Installation von Hapsim nach einem AVR Studio Update stehen im [http://www.mikrocontroller.net/topic/118668 Forum]. HAPSIM kann nur mit AVRStudio 4.x verwendet werden, für den Fall, dass die Domain selbst nicht funktioniert kann folgender [http://members.aon.at/helmi/hapsim.htm Direktlink] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Stimuli ===&lt;br /&gt;
&lt;br /&gt;
Über eine sog. Stimuli-Datei lassen sich von ausserhalb Signale dem AVR Studio zuführen. Informationen zum Aufbau einer Stimulidatei finden sich in obigem &amp;quot;AVR Studio: The comprehensive tutorial&amp;quot; und bei Atmel ([http://support.atmel.com/bin/customer.exe?=&amp;amp;action=viewKbEntry&amp;amp;id=46 What is the format of the AVR Studio simulator stimuli files?]). Der [http://www.hot.ee/nppcsoftware/ Stimuli Generator for AVR Studio] ist eine Freeware für die Erzeugung von Stimulidateien und deren grafischen Darstellung. Für dieses Programm ist .NET 1.1 oder 2.0 erforderlich. Ein Python-Script zum Umwandeln der Stimuli-Log Datei in eine vcd-Datei, welche z.B. in gtkwave betrachtet werden kann, ist [https://github.com/althebaker43/avr_lcd/blob/8b177cc492d2e9a814bd21671c2267a6d3044811/atmel_studio/avr_lcd/stim2vcd.py hier] verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== LogAnalyser ===&lt;br /&gt;
&lt;br /&gt;
[http://www.dresco.co.uk/LogAnalyser/ LogAnalyser] v1.00 (c) 2008 Jon Escombe is a graphical &amp;quot;logic analyser&amp;quot; style display of Atmel AVR Studio simulator log files. The project is built using the (excellent) zedGraph charting class library, and the source code is made available under GPL license. Requires Windows XP and .NET framework 2.0 to run.&lt;br /&gt;
&lt;br /&gt;
=== TCPSimDBG ===&lt;br /&gt;
&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=74350 TCPSimDBG] ist ein Plugin für [[AVR-Studio]] um Remote Simulating/Debugging über TCP/IP durchzuführen. Ein TCP/IP-Terminal oder Serverprogramm kann sich mit dem Simulator/Debugger von AVR-Studio verbinden und Informationen aus dem Debugprozess abrufen und ändern. Damit lassen sich virtuelle Geräte (Devices) eingerichten. (Atmel SDK Lizenz, Windows XP, 2003, Vista .NET 3.5 erforderlich)&lt;br /&gt;
&lt;br /&gt;
=== AVR Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
[http://www.coynetechsystems.com/avrlogicanalyzer/index.php AVR Logic Analyzer] von Coyne Technology Systems ist ein AVR Studio Plugin zur grafischen Anzeige der simulierten I/O-Ports.&lt;br /&gt;
(kommerziell)&lt;br /&gt;
&lt;br /&gt;
== Avrora ==&lt;br /&gt;
[http://avrora.sourceforge.net/ Avrora], a research project of the UCLA Compilers Group, is a set of simulation and analysis tools for programs written for the AVR microcontroller produced by Atmel and the Mica2 sensor nodes. Avrora contains a flexible framework for simulating and analyzing assembly programs, providing a clean Java API and infrastructure for experimentation, profiling, and analysis.&lt;br /&gt;
&lt;br /&gt;
== Proteus VSM for Atmel AVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.labcenter-electronics.com/products/avr.cfm Proteus VSM for Atmel AVR] ist ein kommerzieller AVR Simulator. &lt;br /&gt;
&lt;br /&gt;
In der Codesammlung gibt es dafür ein [http://www.mikrocontroller.net/topic/118974#1072449 Virtuelles AVR Funk Pollin Simulationsmodell] von Daniel Cagara.&lt;br /&gt;
&lt;br /&gt;
== CrossWorks for AVR == &lt;br /&gt;
&lt;br /&gt;
[http://rowley.co.uk/avr/index.htm CrossWorks for AVR] besitzt einen &#039;&#039;core simulator&#039;&#039; für AVRs. (Windows, Mac OS X, Linux, Solaris)&lt;br /&gt;
&lt;br /&gt;
== simavr ==&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/simavr simavr] is a new AVR simulator from Michel &amp;quot;buserror&amp;quot; Pollet for linux, or any platform that uses avr-gcc. It uses avr-gcc own register definition to simplify creating new targets for supported AVR devices.&lt;br /&gt;
&lt;br /&gt;
The status of the project is the core works at about 98% (ie, it works, but there is a known bug). The supported IOs are eeprom, IO ports (including pin interupts), 8 bits timers (well, one of mode of the myriad) and a simple UART that makes “printf” work.&lt;br /&gt;
&lt;br /&gt;
gdb support is planned next.&lt;br /&gt;
&lt;br /&gt;
Lizenz: GPL v3&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=86665 Diskussion bei avrfreaks.net]&lt;br /&gt;
&lt;br /&gt;
== avrtest ==&lt;br /&gt;
&lt;br /&gt;
avrtest ist ein freier AVR Core-Simulator, der zur Ausführung der avr-gcc Testsuite verwendet wird. Über spezielle &amp;quot;magische SFRs&amp;quot; können bestimmte Aktionen ausgelöst werden wie z.B. definierter Programmabbruch oder die Ausgabe eines Zeichens auf Console, so daß ein Programm wie&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    printf (&amp;quot;Hallo Welt!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
analoge Resultate bringt wie ein Programm, das nativ auf dem Rechner ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
avrtest ist Open Source, einfach gehalten und auf Geschwindigkeit getrimmt. Die Eingabe von Stimuli ist nicht möglich, und interne Peripherie wird nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
* Lizenz: GPL v2 oder höher&lt;br /&gt;
* Betriebssysteme: Windows, Linux, etc. Eigentlich keine Einschränkung, da es sich um ein Open-Source Projekt handelt.&lt;br /&gt;
&lt;br /&gt;
=== Weblinks ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/p/winavr/code/HEAD/tree/trunk/avrtest/ avrtest: Projekt und README bei sourceforge]&lt;br /&gt;
* [http://lists.gnu.org/archive/html/avr-gcc-list/2011-06/msg00015.html Beschreibung in der avr-gcc-list Mailingliste (en)]&lt;br /&gt;
&lt;br /&gt;
== BASCOM AVR ==&lt;br /&gt;
&lt;br /&gt;
In [http://www.mcselec.com/ BASCOM AVR] ist ein Simulatorteil enthalten und damit ist auch die Simulation von Geräten (LCD, UART) möglich. BASCOM AVR wird von MCS Electronics verkauft (89€) und ist ein unter Windows laufender [[Basic|BASIC]] [[Compiler]] für Atmel AVR Mikrocontroller. Eine auf 4 KB Codegröße eingeschränkte Demoversion ist kostenlos erhältlich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ldi r16,0x10&lt;br /&gt;
LDI r17,0x12&lt;br /&gt;
ADD R16,R17&lt;br /&gt;
strt : rjmp strt&lt;br /&gt;
&lt;br /&gt;
== MacSim - AVR simulator for OS X ==&lt;br /&gt;
[http://www.fracturedsoftware.com/macsimavr/ MacSim Alpha 4]&lt;br /&gt;
&lt;br /&gt;
Einschränkungen u.A.:  &amp;quot;There are currently no timers, interrupts, or EEPROM. The processor is &#039;generic&#039; and has fixed size data and instruction memories.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95250</id>
		<title>AVR-Simulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95250"/>
		<updated>2017-02-11T11:42:29Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: Layout angepasst&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:AVR]]&lt;br /&gt;
== SimulAVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/simulavr/ SimulAVR] ist ein Simulator, der einige Prozessoren der AVR-Familie auf einem PC-Hostsystem (Windows, Linux, Mac OS X) simulieren kann. Dieser Simulator ist auch im [[WinAVR]]-Paket enthalten (/WinAVR/bin/simulavr.exe).&lt;br /&gt;
&lt;br /&gt;
Eine Verwendung von SimulAVR ist das sog. Signal Tracing, d.h. das aufzeichnen von Änderungen der diversen Register (z.B. der Pins eines I/O-Ports) in eine VCD-Datei. Auch wenn die Laufzeit des Simulators oft langsamer als die der Hardware ist, entsprechen diese Aufzeichnungen auf den CPU-Takt genau dem, was auf der Hardware passieren würde. Wie diese Aufzeichnungen gemacht werden ist bei SimulAVR selbst kaum dokumentiert, doch bei RepRap gibt es eine kleine [http://reprap.org/wiki/SimulAVR#Signal_tracing SimulAVR Anleitung], die eine gute Passage dazu enthält.&lt;br /&gt;
&lt;br /&gt;
Die Hauptanwendung von SimulAVR dürfte das Debuggen sein. Dafür wird SimulAVR über ein dazu passendes Frontend bedient. GDB und Insight sind zwei, ebenfalls in WinAVR enthaltene, Programme, die ein solches Frontend bilden. &lt;br /&gt;
&lt;br /&gt;
Wer &amp;quot;textorientiertes&amp;quot; Debugging mag, oder beispielsweise &#039;&#039;emacs&#039;&#039; als Frontend verwenden möchte, der nutzt den [[GDB]], den GNU Debugger. Er ist im WinAVR-Paket enthalten (/WinAVR/bin/avr-gdb.exe). Wer gleich eine grafische Benutzeroberfläche (GUI) verwenden möchte, nutzt Insight (welches intern ebenfalls den GDB verwendet). &lt;br /&gt;
&lt;br /&gt;
Beide Debugger, also GDB oder Insight, benötigen ein Backend. Entweder handelt es sich dabei um einen ICE/[[JTAG]]-Debugger wie z.&amp;amp;nbsp;B. [http://avarice.sourceforge.net/ AVaRICE] als Interface zu einem realen AVR-Mikrocontroller oder um einen Simulator.&lt;br /&gt;
&lt;br /&gt;
=== Starten von SimulAVR ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:SimulAVR-Display.png|right|220px]]&lt;br /&gt;
Um SimulAVR mit default-Parametern zu starten, reicht es aus, folgende Zeile in einer Shell/Eingabeaufforderung einzugeben:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SimulAVR startet dann mit den defaultparametern und stellt einen GDBServer-Prozess auf dem lokalen oder entfernten Host auf Port 1212 zur Verfügung.&lt;br /&gt;
Das &#039;&#039;Backend&#039;&#039; der Simulation ist nun Einsatzbereit.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist, SimulAVR mit Display zu starten. Dann werden während der Ausführung die Werte der Register und dem RAM angezeigt (siehe Bild).&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -P simulavr-disp -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht der unterstützten AVR-Prozessoren und der SimulAVR spezifischen Parameter bekommt man durch folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr --help&lt;br /&gt;
&lt;br /&gt;
=== Starten des GDB ===&lt;br /&gt;
&lt;br /&gt;
Um das (vorläufige) Frontend GDB zu starten, reicht folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb&lt;br /&gt;
&lt;br /&gt;
Der GDB meldet sich mit folgendem Bildschirm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Current directory is c:/WinAVR/testprj4/&lt;br /&gt;
GNU gdb 6.1&lt;br /&gt;
Copyright 2004 Free Software Foundation, Inc.&lt;br /&gt;
GDB is free software, covered by the GNU General Public License, and you are&lt;br /&gt;
welcome to change it and/or distribute copies of it under certain conditions.&lt;br /&gt;
Type &amp;quot;show copying&amp;quot; to see the conditions.&lt;br /&gt;
There is absolutely no warranty for GDB.  Type &amp;quot;show warranty&amp;quot; for details.&lt;br /&gt;
This GDB was configured as &amp;quot;--host=i686-pc-cygwin --target=avr&amp;quot;.&lt;br /&gt;
(gdb) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(gdb)&#039;&#039;&#039; ist der Prompt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soll während dem Debuggen der Quellcode angezeigt werden, der zur Zeit ausgeführt wird, kann GDB wie folgt gestartet werden.&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb -tui&lt;br /&gt;
&lt;br /&gt;
Beim (gdb) prompt dann das Layout auf Assembler umschalten.,&lt;br /&gt;
&lt;br /&gt;
 (gdb) layout asm&lt;br /&gt;
&lt;br /&gt;
=== Simulieren/Debuggen ===&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss dem GDB die gewünschte Datei (vorher mittels entsprechendem &#039;&#039;Makefile&#039;&#039; erzeugt) bekannt gemacht werden. Es ist darauf zu achten, dass das Programm mit Debugsymbolen kompiliert wurde.&lt;br /&gt;
&lt;br /&gt;
 (gdb) file main.elf &lt;br /&gt;
 Reading symbols from main.elf...done.&lt;br /&gt;
&lt;br /&gt;
Als nächstes muss dem GDB mitgeteilt werden, welches Ziel (target) er als Backend verwenden soll:&lt;br /&gt;
&lt;br /&gt;
 (gdb) target remote localhost:1212&lt;br /&gt;
&lt;br /&gt;
oder kürzer:&lt;br /&gt;
&lt;br /&gt;
 (gdb) targ rem :1212&lt;br /&gt;
 Remote debugging using :1212&lt;br /&gt;
 0x00000000 in __vectors ()&lt;br /&gt;
&lt;br /&gt;
Jetzt muss das Programm in den Simulator geladen werden:&lt;br /&gt;
&lt;br /&gt;
 (gdb) load&lt;br /&gt;
 Loading section .data, size 0x32 lma 0x1bc&lt;br /&gt;
 Loading section .text, size 0x1bc lma 0x0&lt;br /&gt;
 Start address 0x0, load size 494&lt;br /&gt;
 Transfer rate: 3952 bits in &amp;lt;1 sec, 30 bytes/write.&lt;br /&gt;
&lt;br /&gt;
Da diese 3 Schritte üblicherweise, bei jedem Start einer Simulationssitzung ausgeführt werden müssen, kann man sie zeilenweise in eine Textdatei (Vorschlag: gdb.conf) geschrieben werden, diese Datei wird dem gdb dann mit dem Parameter &amp;quot;-x&amp;quot; (eXecute) mitgegeben:&lt;br /&gt;
&lt;br /&gt;
avr-gdb -x gdb.conf&lt;br /&gt;
&lt;br /&gt;
Damit der Simulator nicht das gesamte Programm abarbeitet, sollte man &#039;&#039;breakpoints&#039;&#039; setzen.&lt;br /&gt;
Den Ersten am besten bei &#039;&#039;main&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) b main&lt;br /&gt;
 Breakpoint 1 at 0xd2: file main.c, line 16.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man das Programm im Simulator mit &#039;&#039;continue&#039;&#039; starten:&lt;br /&gt;
&lt;br /&gt;
 (gdb) c&lt;br /&gt;
 Continuing.&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des zuvor gesetzten &#039;&#039;breakpoints&#039;&#039; stoppt GDB und meldet:&lt;br /&gt;
&lt;br /&gt;
 Breakpoint 1, main () at main.c:16&lt;br /&gt;
 (gdb)&lt;br /&gt;
&lt;br /&gt;
Eine Liste der verfügbaren debug-befehle des GDB findet sich durch die Eingabe von &#039;&#039;&#039;help&#039;&#039;&#039;.&lt;br /&gt;
=== Data Display Debugger ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Bildschirmfoto vom 2017-02-11 12-32-28.png]|right|220px]&lt;br /&gt;
Eine sehr komfortable Benutzeroberfläche zum gdb erhält man mit dem Programm &amp;quot;ddd&amp;quot; (Data Display Debugger), https://de.wikipedia.org/wiki/Data_Display_Debugger&lt;br /&gt;
&lt;br /&gt;
Diesem gibt man beim Aufruf mit, welcher gdb, mit welcher Verbindung zum Ziel genutzt werden soll, falls das Startscript, wie oben genutzt werden soll z.B.:&lt;br /&gt;
&lt;br /&gt;
ddd --debugger &amp;quot;avr-gdb -x gdb.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Wenn das Projekt mit den entsprechenden Debug-Informationen übersetzt wurde, dann zeigt der DDD die Zeile im Quelltext (auch bei Assemblerteilen), Variableninhalte lassen sich inspizieren, indem der Mauszeiger drauf positioniert wird.&lt;br /&gt;
&lt;br /&gt;
[TODO] Einige häufige GDB-Commands als Beispiel einfügen.&lt;br /&gt;
&lt;br /&gt;
== VMLab ==&lt;br /&gt;
&lt;br /&gt;
[http://www.amctools.com/vmlab.htm VMLab] ist eine komplette Freeware-IDE mit Debugger und Simulator für MS-Windows. VMLab arbeitet mit [[WinAVR]] zusammen und kann AVR-Peripheriehardware simulieren. Leider hat der Autor von VMLab die Entwicklung im Jahr 2006 eingestellt, da dem Projekt nicht der gewünschte kommerzielle Erfolg vergönnt war. Die aktuelle Version ist 3.15 von Oktober 2009.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* Forumsbeitrag [http://www.mikrocontroller.net/topic/24494#714662 VMLAB Bug bei Stackpointer/Interrupt?]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/85212#716727 Workaround]&lt;br /&gt;
&lt;br /&gt;
== AVR Studio ==&lt;br /&gt;
&lt;br /&gt;
[[Bild: AVR-Studio_Simulation.png|thumb|right|250px|Simulator-Ansicht in AVR Studio]]&lt;br /&gt;
[[AVR-Studio|AVR Studio]] von Atmel enthält neben dem Übersetzungsteil, dem Debuggingteil auch einen Simulatorteil. Eine Übersicht über alle drei Programmteile gibt der Powerpoint-Vortrag [http://ece353.ecs.umass.edu/lab2/labc-lectureslides2012.pptx AVR Studio: The comprehensive tutorial] (MS PowerPoint &#039;&#039;2007&#039;&#039;) von Jeremy Gummeson und Brendan Kemp.&lt;br /&gt;
&lt;br /&gt;
Wenn nur ein Breakpoint gesetzt ist, kann mit F5 das Programm einen Abarbeitungszyklus machen. Die Bearbeitung bleibt dann wieder beim Breakpoint stehen. Mit der Stoppuhr kann dann die Zeit für den abgearbeiteten Programmteil gemessen werden. Mit der rechten Mouse-Taste kann die Stoppuhr zurückgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Ausführliche Anleitung zum Ablauf einer Simulation:  [http://www2.tech.purdue.edu/ecet/courses/ecet309/Reference_Materials/Simulation_AVR_Studio_4.pdf Tutorial der Purdue University] (engl., PDF) (link tot!)&lt;br /&gt;
&lt;br /&gt;
Externe Signale können mit den Tools HAPSIM oder über eine Stimulidatei in den Simulator eingespeist werden. &lt;br /&gt;
&lt;br /&gt;
Zu beachten ist, dass sich mit der Einführung des AVR Simulator 2, welcher  Vorteile wie Unterstützung von [[I2C|TWI]] bietet, das Datenformat für extern zugeführte Stimuli-Files geändert hat. Eine kleine Einführung inkl. Beispiel bietet die im AVR-Studio enthaltene Hilfe:&lt;br /&gt;
:AVR Studio Help → AVR Tools User Guide → Simulator → Simulator2 Stimuli&lt;br /&gt;
&lt;br /&gt;
=== HAPSIM ===&lt;br /&gt;
&lt;br /&gt;
[http://www.helmix.at/hapsim/index.htm HAPSIM] (Helmis AVR Periphery Simulator) ist ein Tool zur graphischen Simulation von Tasten, [[LED]], [[LCD]] und Terminalfunktionen in AVR Studio. (deutsch/engl., Windows, Freeware). Hinweise zur Installation von Hapsim nach einem AVR Studio Update stehen im [http://www.mikrocontroller.net/topic/118668 Forum]. HAPSIM kann nur mit AVRStudio 4.x verwendet werden, für den Fall, dass die Domain selbst nicht funktioniert kann folgender [http://members.aon.at/helmi/hapsim.htm Direktlink] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Stimuli ===&lt;br /&gt;
&lt;br /&gt;
Über eine sog. Stimuli-Datei lassen sich von ausserhalb Signale dem AVR Studio zuführen. Informationen zum Aufbau einer Stimulidatei finden sich in obigem &amp;quot;AVR Studio: The comprehensive tutorial&amp;quot; und bei Atmel ([http://support.atmel.com/bin/customer.exe?=&amp;amp;action=viewKbEntry&amp;amp;id=46 What is the format of the AVR Studio simulator stimuli files?]). Der [http://www.hot.ee/nppcsoftware/ Stimuli Generator for AVR Studio] ist eine Freeware für die Erzeugung von Stimulidateien und deren grafischen Darstellung. Für dieses Programm ist .NET 1.1 oder 2.0 erforderlich. Ein Python-Script zum Umwandeln der Stimuli-Log Datei in eine vcd-Datei, welche z.B. in gtkwave betrachtet werden kann, ist [https://github.com/althebaker43/avr_lcd/blob/8b177cc492d2e9a814bd21671c2267a6d3044811/atmel_studio/avr_lcd/stim2vcd.py hier] verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== LogAnalyser ===&lt;br /&gt;
&lt;br /&gt;
[http://www.dresco.co.uk/LogAnalyser/ LogAnalyser] v1.00 (c) 2008 Jon Escombe is a graphical &amp;quot;logic analyser&amp;quot; style display of Atmel AVR Studio simulator log files. The project is built using the (excellent) zedGraph charting class library, and the source code is made available under GPL license. Requires Windows XP and .NET framework 2.0 to run.&lt;br /&gt;
&lt;br /&gt;
=== TCPSimDBG ===&lt;br /&gt;
&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=74350 TCPSimDBG] ist ein Plugin für [[AVR-Studio]] um Remote Simulating/Debugging über TCP/IP durchzuführen. Ein TCP/IP-Terminal oder Serverprogramm kann sich mit dem Simulator/Debugger von AVR-Studio verbinden und Informationen aus dem Debugprozess abrufen und ändern. Damit lassen sich virtuelle Geräte (Devices) eingerichten. (Atmel SDK Lizenz, Windows XP, 2003, Vista .NET 3.5 erforderlich)&lt;br /&gt;
&lt;br /&gt;
=== AVR Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
[http://www.coynetechsystems.com/avrlogicanalyzer/index.php AVR Logic Analyzer] von Coyne Technology Systems ist ein AVR Studio Plugin zur grafischen Anzeige der simulierten I/O-Ports.&lt;br /&gt;
(kommerziell)&lt;br /&gt;
&lt;br /&gt;
== Avrora ==&lt;br /&gt;
[http://avrora.sourceforge.net/ Avrora], a research project of the UCLA Compilers Group, is a set of simulation and analysis tools for programs written for the AVR microcontroller produced by Atmel and the Mica2 sensor nodes. Avrora contains a flexible framework for simulating and analyzing assembly programs, providing a clean Java API and infrastructure for experimentation, profiling, and analysis.&lt;br /&gt;
&lt;br /&gt;
== Proteus VSM for Atmel AVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.labcenter-electronics.com/products/avr.cfm Proteus VSM for Atmel AVR] ist ein kommerzieller AVR Simulator. &lt;br /&gt;
&lt;br /&gt;
In der Codesammlung gibt es dafür ein [http://www.mikrocontroller.net/topic/118974#1072449 Virtuelles AVR Funk Pollin Simulationsmodell] von Daniel Cagara.&lt;br /&gt;
&lt;br /&gt;
== CrossWorks for AVR == &lt;br /&gt;
&lt;br /&gt;
[http://rowley.co.uk/avr/index.htm CrossWorks for AVR] besitzt einen &#039;&#039;core simulator&#039;&#039; für AVRs. (Windows, Mac OS X, Linux, Solaris)&lt;br /&gt;
&lt;br /&gt;
== simavr ==&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/simavr simavr] is a new AVR simulator from Michel &amp;quot;buserror&amp;quot; Pollet for linux, or any platform that uses avr-gcc. It uses avr-gcc own register definition to simplify creating new targets for supported AVR devices.&lt;br /&gt;
&lt;br /&gt;
The status of the project is the core works at about 98% (ie, it works, but there is a known bug). The supported IOs are eeprom, IO ports (including pin interupts), 8 bits timers (well, one of mode of the myriad) and a simple UART that makes “printf” work.&lt;br /&gt;
&lt;br /&gt;
gdb support is planned next.&lt;br /&gt;
&lt;br /&gt;
Lizenz: GPL v3&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=86665 Diskussion bei avrfreaks.net]&lt;br /&gt;
&lt;br /&gt;
== avrtest ==&lt;br /&gt;
&lt;br /&gt;
avrtest ist ein freier AVR Core-Simulator, der zur Ausführung der avr-gcc Testsuite verwendet wird. Über spezielle &amp;quot;magische SFRs&amp;quot; können bestimmte Aktionen ausgelöst werden wie z.B. definierter Programmabbruch oder die Ausgabe eines Zeichens auf Console, so daß ein Programm wie&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    printf (&amp;quot;Hallo Welt!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
analoge Resultate bringt wie ein Programm, das nativ auf dem Rechner ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
avrtest ist Open Source, einfach gehalten und auf Geschwindigkeit getrimmt. Die Eingabe von Stimuli ist nicht möglich, und interne Peripherie wird nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
* Lizenz: GPL v2 oder höher&lt;br /&gt;
* Betriebssysteme: Windows, Linux, etc. Eigentlich keine Einschränkung, da es sich um ein Open-Source Projekt handelt.&lt;br /&gt;
&lt;br /&gt;
=== Weblinks ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/p/winavr/code/HEAD/tree/trunk/avrtest/ avrtest: Projekt und README bei sourceforge]&lt;br /&gt;
* [http://lists.gnu.org/archive/html/avr-gcc-list/2011-06/msg00015.html Beschreibung in der avr-gcc-list Mailingliste (en)]&lt;br /&gt;
&lt;br /&gt;
== BASCOM AVR ==&lt;br /&gt;
&lt;br /&gt;
In [http://www.mcselec.com/ BASCOM AVR] ist ein Simulatorteil enthalten und damit ist auch die Simulation von Geräten (LCD, UART) möglich. BASCOM AVR wird von MCS Electronics verkauft (89€) und ist ein unter Windows laufender [[Basic|BASIC]] [[Compiler]] für Atmel AVR Mikrocontroller. Eine auf 4 KB Codegröße eingeschränkte Demoversion ist kostenlos erhältlich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ldi r16,0x10&lt;br /&gt;
LDI r17,0x12&lt;br /&gt;
ADD R16,R17&lt;br /&gt;
strt : rjmp strt&lt;br /&gt;
&lt;br /&gt;
== MacSim - AVR simulator for OS X ==&lt;br /&gt;
[http://www.fracturedsoftware.com/macsimavr/ MacSim Alpha 4]&lt;br /&gt;
&lt;br /&gt;
Einschränkungen u.A.:  &amp;quot;There are currently no timers, interrupts, or EEPROM. The processor is &#039;generic&#039; and has fixed size data and instruction memories.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95249</id>
		<title>AVR-Simulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95249"/>
		<updated>2017-02-11T11:41:49Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: Screenshot zugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:AVR]]&lt;br /&gt;
== SimulAVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/simulavr/ SimulAVR] ist ein Simulator, der einige Prozessoren der AVR-Familie auf einem PC-Hostsystem (Windows, Linux, Mac OS X) simulieren kann. Dieser Simulator ist auch im [[WinAVR]]-Paket enthalten (/WinAVR/bin/simulavr.exe).&lt;br /&gt;
&lt;br /&gt;
Eine Verwendung von SimulAVR ist das sog. Signal Tracing, d.h. das aufzeichnen von Änderungen der diversen Register (z.B. der Pins eines I/O-Ports) in eine VCD-Datei. Auch wenn die Laufzeit des Simulators oft langsamer als die der Hardware ist, entsprechen diese Aufzeichnungen auf den CPU-Takt genau dem, was auf der Hardware passieren würde. Wie diese Aufzeichnungen gemacht werden ist bei SimulAVR selbst kaum dokumentiert, doch bei RepRap gibt es eine kleine [http://reprap.org/wiki/SimulAVR#Signal_tracing SimulAVR Anleitung], die eine gute Passage dazu enthält.&lt;br /&gt;
&lt;br /&gt;
Die Hauptanwendung von SimulAVR dürfte das Debuggen sein. Dafür wird SimulAVR über ein dazu passendes Frontend bedient. GDB und Insight sind zwei, ebenfalls in WinAVR enthaltene, Programme, die ein solches Frontend bilden. &lt;br /&gt;
&lt;br /&gt;
Wer &amp;quot;textorientiertes&amp;quot; Debugging mag, oder beispielsweise &#039;&#039;emacs&#039;&#039; als Frontend verwenden möchte, der nutzt den [[GDB]], den GNU Debugger. Er ist im WinAVR-Paket enthalten (/WinAVR/bin/avr-gdb.exe). Wer gleich eine grafische Benutzeroberfläche (GUI) verwenden möchte, nutzt Insight (welches intern ebenfalls den GDB verwendet). &lt;br /&gt;
&lt;br /&gt;
Beide Debugger, also GDB oder Insight, benötigen ein Backend. Entweder handelt es sich dabei um einen ICE/[[JTAG]]-Debugger wie z.&amp;amp;nbsp;B. [http://avarice.sourceforge.net/ AVaRICE] als Interface zu einem realen AVR-Mikrocontroller oder um einen Simulator.&lt;br /&gt;
&lt;br /&gt;
=== Starten von SimulAVR ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:SimulAVR-Display.png|right|220px]]&lt;br /&gt;
Um SimulAVR mit default-Parametern zu starten, reicht es aus, folgende Zeile in einer Shell/Eingabeaufforderung einzugeben:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SimulAVR startet dann mit den defaultparametern und stellt einen GDBServer-Prozess auf dem lokalen oder entfernten Host auf Port 1212 zur Verfügung.&lt;br /&gt;
Das &#039;&#039;Backend&#039;&#039; der Simulation ist nun Einsatzbereit.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist, SimulAVR mit Display zu starten. Dann werden während der Ausführung die Werte der Register und dem RAM angezeigt (siehe Bild).&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -P simulavr-disp -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht der unterstützten AVR-Prozessoren und der SimulAVR spezifischen Parameter bekommt man durch folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr --help&lt;br /&gt;
&lt;br /&gt;
=== Starten des GDB ===&lt;br /&gt;
&lt;br /&gt;
Um das (vorläufige) Frontend GDB zu starten, reicht folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb&lt;br /&gt;
&lt;br /&gt;
Der GDB meldet sich mit folgendem Bildschirm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Current directory is c:/WinAVR/testprj4/&lt;br /&gt;
GNU gdb 6.1&lt;br /&gt;
Copyright 2004 Free Software Foundation, Inc.&lt;br /&gt;
GDB is free software, covered by the GNU General Public License, and you are&lt;br /&gt;
welcome to change it and/or distribute copies of it under certain conditions.&lt;br /&gt;
Type &amp;quot;show copying&amp;quot; to see the conditions.&lt;br /&gt;
There is absolutely no warranty for GDB.  Type &amp;quot;show warranty&amp;quot; for details.&lt;br /&gt;
This GDB was configured as &amp;quot;--host=i686-pc-cygwin --target=avr&amp;quot;.&lt;br /&gt;
(gdb) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(gdb)&#039;&#039;&#039; ist der Prompt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soll während dem Debuggen der Quellcode angezeigt werden, der zur Zeit ausgeführt wird, kann GDB wie folgt gestartet werden.&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb -tui&lt;br /&gt;
&lt;br /&gt;
Beim (gdb) prompt dann das Layout auf Assembler umschalten.,&lt;br /&gt;
&lt;br /&gt;
 (gdb) layout asm&lt;br /&gt;
&lt;br /&gt;
=== Simulieren/Debuggen ===&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss dem GDB die gewünschte Datei (vorher mittels entsprechendem &#039;&#039;Makefile&#039;&#039; erzeugt) bekannt gemacht werden. Es ist darauf zu achten, dass das Programm mit Debugsymbolen kompiliert wurde.&lt;br /&gt;
&lt;br /&gt;
 (gdb) file main.elf &lt;br /&gt;
 Reading symbols from main.elf...done.&lt;br /&gt;
&lt;br /&gt;
Als nächstes muss dem GDB mitgeteilt werden, welches Ziel (target) er als Backend verwenden soll:&lt;br /&gt;
&lt;br /&gt;
 (gdb) target remote localhost:1212&lt;br /&gt;
&lt;br /&gt;
oder kürzer:&lt;br /&gt;
&lt;br /&gt;
 (gdb) targ rem :1212&lt;br /&gt;
 Remote debugging using :1212&lt;br /&gt;
 0x00000000 in __vectors ()&lt;br /&gt;
&lt;br /&gt;
Jetzt muss das Programm in den Simulator geladen werden:&lt;br /&gt;
&lt;br /&gt;
 (gdb) load&lt;br /&gt;
 Loading section .data, size 0x32 lma 0x1bc&lt;br /&gt;
 Loading section .text, size 0x1bc lma 0x0&lt;br /&gt;
 Start address 0x0, load size 494&lt;br /&gt;
 Transfer rate: 3952 bits in &amp;lt;1 sec, 30 bytes/write.&lt;br /&gt;
&lt;br /&gt;
Da diese 3 Schritte üblicherweise, bei jedem Start einer Simulationssitzung ausgeführt werden müssen, kann man sie zeilenweise in eine Textdatei (Vorschlag: gdb.conf) geschrieben werden, diese Datei wird dem gdb dann mit dem Parameter &amp;quot;-x&amp;quot; (eXecute) mitgegeben:&lt;br /&gt;
&lt;br /&gt;
avr-gdb -x gdb.conf&lt;br /&gt;
&lt;br /&gt;
Damit der Simulator nicht das gesamte Programm abarbeitet, sollte man &#039;&#039;breakpoints&#039;&#039; setzen.&lt;br /&gt;
Den Ersten am besten bei &#039;&#039;main&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) b main&lt;br /&gt;
 Breakpoint 1 at 0xd2: file main.c, line 16.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man das Programm im Simulator mit &#039;&#039;continue&#039;&#039; starten:&lt;br /&gt;
&lt;br /&gt;
 (gdb) c&lt;br /&gt;
 Continuing.&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des zuvor gesetzten &#039;&#039;breakpoints&#039;&#039; stoppt GDB und meldet:&lt;br /&gt;
&lt;br /&gt;
 Breakpoint 1, main () at main.c:16&lt;br /&gt;
 (gdb)&lt;br /&gt;
&lt;br /&gt;
Eine Liste der verfügbaren debug-befehle des GDB findet sich durch die Eingabe von &#039;&#039;&#039;help&#039;&#039;&#039;.&lt;br /&gt;
=== Data Display Debugger ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Bildschirmfoto vom 2017-02-11 12-32-28.png]]&lt;br /&gt;
Eine sehr komfortable Benutzeroberfläche zum gdb erhält man mit dem Programm &amp;quot;ddd&amp;quot; (Data Display Debugger), https://de.wikipedia.org/wiki/Data_Display_Debugger&lt;br /&gt;
&lt;br /&gt;
Diesem gibt man beim Aufruf mit, welcher gdb, mit welcher Verbindung zum Ziel genutzt werden soll, falls das Startscript, wie oben genutzt werden soll z.B.:&lt;br /&gt;
&lt;br /&gt;
ddd --debugger &amp;quot;avr-gdb -x gdb.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Wenn das Projekt mit den entsprechenden Debug-Informationen übersetzt wurde, dann zeigt der DDD die Zeile im Quelltext (auch bei Assemblerteilen), Variableninhalte lassen sich inspizieren, indem der Mauszeiger drauf positioniert wird.&lt;br /&gt;
&lt;br /&gt;
[TODO] Einige häufige GDB-Commands als Beispiel einfügen.&lt;br /&gt;
&lt;br /&gt;
== VMLab ==&lt;br /&gt;
&lt;br /&gt;
[http://www.amctools.com/vmlab.htm VMLab] ist eine komplette Freeware-IDE mit Debugger und Simulator für MS-Windows. VMLab arbeitet mit [[WinAVR]] zusammen und kann AVR-Peripheriehardware simulieren. Leider hat der Autor von VMLab die Entwicklung im Jahr 2006 eingestellt, da dem Projekt nicht der gewünschte kommerzielle Erfolg vergönnt war. Die aktuelle Version ist 3.15 von Oktober 2009.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* Forumsbeitrag [http://www.mikrocontroller.net/topic/24494#714662 VMLAB Bug bei Stackpointer/Interrupt?]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/85212#716727 Workaround]&lt;br /&gt;
&lt;br /&gt;
== AVR Studio ==&lt;br /&gt;
&lt;br /&gt;
[[Bild: AVR-Studio_Simulation.png|thumb|right|250px|Simulator-Ansicht in AVR Studio]]&lt;br /&gt;
[[AVR-Studio|AVR Studio]] von Atmel enthält neben dem Übersetzungsteil, dem Debuggingteil auch einen Simulatorteil. Eine Übersicht über alle drei Programmteile gibt der Powerpoint-Vortrag [http://ece353.ecs.umass.edu/lab2/labc-lectureslides2012.pptx AVR Studio: The comprehensive tutorial] (MS PowerPoint &#039;&#039;2007&#039;&#039;) von Jeremy Gummeson und Brendan Kemp.&lt;br /&gt;
&lt;br /&gt;
Wenn nur ein Breakpoint gesetzt ist, kann mit F5 das Programm einen Abarbeitungszyklus machen. Die Bearbeitung bleibt dann wieder beim Breakpoint stehen. Mit der Stoppuhr kann dann die Zeit für den abgearbeiteten Programmteil gemessen werden. Mit der rechten Mouse-Taste kann die Stoppuhr zurückgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Ausführliche Anleitung zum Ablauf einer Simulation:  [http://www2.tech.purdue.edu/ecet/courses/ecet309/Reference_Materials/Simulation_AVR_Studio_4.pdf Tutorial der Purdue University] (engl., PDF) (link tot!)&lt;br /&gt;
&lt;br /&gt;
Externe Signale können mit den Tools HAPSIM oder über eine Stimulidatei in den Simulator eingespeist werden. &lt;br /&gt;
&lt;br /&gt;
Zu beachten ist, dass sich mit der Einführung des AVR Simulator 2, welcher  Vorteile wie Unterstützung von [[I2C|TWI]] bietet, das Datenformat für extern zugeführte Stimuli-Files geändert hat. Eine kleine Einführung inkl. Beispiel bietet die im AVR-Studio enthaltene Hilfe:&lt;br /&gt;
:AVR Studio Help → AVR Tools User Guide → Simulator → Simulator2 Stimuli&lt;br /&gt;
&lt;br /&gt;
=== HAPSIM ===&lt;br /&gt;
&lt;br /&gt;
[http://www.helmix.at/hapsim/index.htm HAPSIM] (Helmis AVR Periphery Simulator) ist ein Tool zur graphischen Simulation von Tasten, [[LED]], [[LCD]] und Terminalfunktionen in AVR Studio. (deutsch/engl., Windows, Freeware). Hinweise zur Installation von Hapsim nach einem AVR Studio Update stehen im [http://www.mikrocontroller.net/topic/118668 Forum]. HAPSIM kann nur mit AVRStudio 4.x verwendet werden, für den Fall, dass die Domain selbst nicht funktioniert kann folgender [http://members.aon.at/helmi/hapsim.htm Direktlink] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Stimuli ===&lt;br /&gt;
&lt;br /&gt;
Über eine sog. Stimuli-Datei lassen sich von ausserhalb Signale dem AVR Studio zuführen. Informationen zum Aufbau einer Stimulidatei finden sich in obigem &amp;quot;AVR Studio: The comprehensive tutorial&amp;quot; und bei Atmel ([http://support.atmel.com/bin/customer.exe?=&amp;amp;action=viewKbEntry&amp;amp;id=46 What is the format of the AVR Studio simulator stimuli files?]). Der [http://www.hot.ee/nppcsoftware/ Stimuli Generator for AVR Studio] ist eine Freeware für die Erzeugung von Stimulidateien und deren grafischen Darstellung. Für dieses Programm ist .NET 1.1 oder 2.0 erforderlich. Ein Python-Script zum Umwandeln der Stimuli-Log Datei in eine vcd-Datei, welche z.B. in gtkwave betrachtet werden kann, ist [https://github.com/althebaker43/avr_lcd/blob/8b177cc492d2e9a814bd21671c2267a6d3044811/atmel_studio/avr_lcd/stim2vcd.py hier] verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== LogAnalyser ===&lt;br /&gt;
&lt;br /&gt;
[http://www.dresco.co.uk/LogAnalyser/ LogAnalyser] v1.00 (c) 2008 Jon Escombe is a graphical &amp;quot;logic analyser&amp;quot; style display of Atmel AVR Studio simulator log files. The project is built using the (excellent) zedGraph charting class library, and the source code is made available under GPL license. Requires Windows XP and .NET framework 2.0 to run.&lt;br /&gt;
&lt;br /&gt;
=== TCPSimDBG ===&lt;br /&gt;
&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=74350 TCPSimDBG] ist ein Plugin für [[AVR-Studio]] um Remote Simulating/Debugging über TCP/IP durchzuführen. Ein TCP/IP-Terminal oder Serverprogramm kann sich mit dem Simulator/Debugger von AVR-Studio verbinden und Informationen aus dem Debugprozess abrufen und ändern. Damit lassen sich virtuelle Geräte (Devices) eingerichten. (Atmel SDK Lizenz, Windows XP, 2003, Vista .NET 3.5 erforderlich)&lt;br /&gt;
&lt;br /&gt;
=== AVR Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
[http://www.coynetechsystems.com/avrlogicanalyzer/index.php AVR Logic Analyzer] von Coyne Technology Systems ist ein AVR Studio Plugin zur grafischen Anzeige der simulierten I/O-Ports.&lt;br /&gt;
(kommerziell)&lt;br /&gt;
&lt;br /&gt;
== Avrora ==&lt;br /&gt;
[http://avrora.sourceforge.net/ Avrora], a research project of the UCLA Compilers Group, is a set of simulation and analysis tools for programs written for the AVR microcontroller produced by Atmel and the Mica2 sensor nodes. Avrora contains a flexible framework for simulating and analyzing assembly programs, providing a clean Java API and infrastructure for experimentation, profiling, and analysis.&lt;br /&gt;
&lt;br /&gt;
== Proteus VSM for Atmel AVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.labcenter-electronics.com/products/avr.cfm Proteus VSM for Atmel AVR] ist ein kommerzieller AVR Simulator. &lt;br /&gt;
&lt;br /&gt;
In der Codesammlung gibt es dafür ein [http://www.mikrocontroller.net/topic/118974#1072449 Virtuelles AVR Funk Pollin Simulationsmodell] von Daniel Cagara.&lt;br /&gt;
&lt;br /&gt;
== CrossWorks for AVR == &lt;br /&gt;
&lt;br /&gt;
[http://rowley.co.uk/avr/index.htm CrossWorks for AVR] besitzt einen &#039;&#039;core simulator&#039;&#039; für AVRs. (Windows, Mac OS X, Linux, Solaris)&lt;br /&gt;
&lt;br /&gt;
== simavr ==&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/simavr simavr] is a new AVR simulator from Michel &amp;quot;buserror&amp;quot; Pollet for linux, or any platform that uses avr-gcc. It uses avr-gcc own register definition to simplify creating new targets for supported AVR devices.&lt;br /&gt;
&lt;br /&gt;
The status of the project is the core works at about 98% (ie, it works, but there is a known bug). The supported IOs are eeprom, IO ports (including pin interupts), 8 bits timers (well, one of mode of the myriad) and a simple UART that makes “printf” work.&lt;br /&gt;
&lt;br /&gt;
gdb support is planned next.&lt;br /&gt;
&lt;br /&gt;
Lizenz: GPL v3&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=86665 Diskussion bei avrfreaks.net]&lt;br /&gt;
&lt;br /&gt;
== avrtest ==&lt;br /&gt;
&lt;br /&gt;
avrtest ist ein freier AVR Core-Simulator, der zur Ausführung der avr-gcc Testsuite verwendet wird. Über spezielle &amp;quot;magische SFRs&amp;quot; können bestimmte Aktionen ausgelöst werden wie z.B. definierter Programmabbruch oder die Ausgabe eines Zeichens auf Console, so daß ein Programm wie&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    printf (&amp;quot;Hallo Welt!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
analoge Resultate bringt wie ein Programm, das nativ auf dem Rechner ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
avrtest ist Open Source, einfach gehalten und auf Geschwindigkeit getrimmt. Die Eingabe von Stimuli ist nicht möglich, und interne Peripherie wird nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
* Lizenz: GPL v2 oder höher&lt;br /&gt;
* Betriebssysteme: Windows, Linux, etc. Eigentlich keine Einschränkung, da es sich um ein Open-Source Projekt handelt.&lt;br /&gt;
&lt;br /&gt;
=== Weblinks ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/p/winavr/code/HEAD/tree/trunk/avrtest/ avrtest: Projekt und README bei sourceforge]&lt;br /&gt;
* [http://lists.gnu.org/archive/html/avr-gcc-list/2011-06/msg00015.html Beschreibung in der avr-gcc-list Mailingliste (en)]&lt;br /&gt;
&lt;br /&gt;
== BASCOM AVR ==&lt;br /&gt;
&lt;br /&gt;
In [http://www.mcselec.com/ BASCOM AVR] ist ein Simulatorteil enthalten und damit ist auch die Simulation von Geräten (LCD, UART) möglich. BASCOM AVR wird von MCS Electronics verkauft (89€) und ist ein unter Windows laufender [[Basic|BASIC]] [[Compiler]] für Atmel AVR Mikrocontroller. Eine auf 4 KB Codegröße eingeschränkte Demoversion ist kostenlos erhältlich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ldi r16,0x10&lt;br /&gt;
LDI r17,0x12&lt;br /&gt;
ADD R16,R17&lt;br /&gt;
strt : rjmp strt&lt;br /&gt;
&lt;br /&gt;
== MacSim - AVR simulator for OS X ==&lt;br /&gt;
[http://www.fracturedsoftware.com/macsimavr/ MacSim Alpha 4]&lt;br /&gt;
&lt;br /&gt;
Einschränkungen u.A.:  &amp;quot;There are currently no timers, interrupts, or EEPROM. The processor is &#039;generic&#039; and has fixed size data and instruction memories.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95248</id>
		<title>AVR-Simulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95248"/>
		<updated>2017-02-11T11:39:35Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: /* Data Display Debugger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:AVR]]&lt;br /&gt;
== SimulAVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/simulavr/ SimulAVR] ist ein Simulator, der einige Prozessoren der AVR-Familie auf einem PC-Hostsystem (Windows, Linux, Mac OS X) simulieren kann. Dieser Simulator ist auch im [[WinAVR]]-Paket enthalten (/WinAVR/bin/simulavr.exe).&lt;br /&gt;
&lt;br /&gt;
Eine Verwendung von SimulAVR ist das sog. Signal Tracing, d.h. das aufzeichnen von Änderungen der diversen Register (z.B. der Pins eines I/O-Ports) in eine VCD-Datei. Auch wenn die Laufzeit des Simulators oft langsamer als die der Hardware ist, entsprechen diese Aufzeichnungen auf den CPU-Takt genau dem, was auf der Hardware passieren würde. Wie diese Aufzeichnungen gemacht werden ist bei SimulAVR selbst kaum dokumentiert, doch bei RepRap gibt es eine kleine [http://reprap.org/wiki/SimulAVR#Signal_tracing SimulAVR Anleitung], die eine gute Passage dazu enthält.&lt;br /&gt;
&lt;br /&gt;
Die Hauptanwendung von SimulAVR dürfte das Debuggen sein. Dafür wird SimulAVR über ein dazu passendes Frontend bedient. GDB und Insight sind zwei, ebenfalls in WinAVR enthaltene, Programme, die ein solches Frontend bilden. &lt;br /&gt;
&lt;br /&gt;
Wer &amp;quot;textorientiertes&amp;quot; Debugging mag, oder beispielsweise &#039;&#039;emacs&#039;&#039; als Frontend verwenden möchte, der nutzt den [[GDB]], den GNU Debugger. Er ist im WinAVR-Paket enthalten (/WinAVR/bin/avr-gdb.exe). Wer gleich eine grafische Benutzeroberfläche (GUI) verwenden möchte, nutzt Insight (welches intern ebenfalls den GDB verwendet). &lt;br /&gt;
&lt;br /&gt;
Beide Debugger, also GDB oder Insight, benötigen ein Backend. Entweder handelt es sich dabei um einen ICE/[[JTAG]]-Debugger wie z.&amp;amp;nbsp;B. [http://avarice.sourceforge.net/ AVaRICE] als Interface zu einem realen AVR-Mikrocontroller oder um einen Simulator.&lt;br /&gt;
&lt;br /&gt;
=== Starten von SimulAVR ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:SimulAVR-Display.png|right|220px]]&lt;br /&gt;
Um SimulAVR mit default-Parametern zu starten, reicht es aus, folgende Zeile in einer Shell/Eingabeaufforderung einzugeben:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SimulAVR startet dann mit den defaultparametern und stellt einen GDBServer-Prozess auf dem lokalen oder entfernten Host auf Port 1212 zur Verfügung.&lt;br /&gt;
Das &#039;&#039;Backend&#039;&#039; der Simulation ist nun Einsatzbereit.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist, SimulAVR mit Display zu starten. Dann werden während der Ausführung die Werte der Register und dem RAM angezeigt (siehe Bild).&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -P simulavr-disp -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht der unterstützten AVR-Prozessoren und der SimulAVR spezifischen Parameter bekommt man durch folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr --help&lt;br /&gt;
&lt;br /&gt;
=== Starten des GDB ===&lt;br /&gt;
&lt;br /&gt;
Um das (vorläufige) Frontend GDB zu starten, reicht folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb&lt;br /&gt;
&lt;br /&gt;
Der GDB meldet sich mit folgendem Bildschirm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Current directory is c:/WinAVR/testprj4/&lt;br /&gt;
GNU gdb 6.1&lt;br /&gt;
Copyright 2004 Free Software Foundation, Inc.&lt;br /&gt;
GDB is free software, covered by the GNU General Public License, and you are&lt;br /&gt;
welcome to change it and/or distribute copies of it under certain conditions.&lt;br /&gt;
Type &amp;quot;show copying&amp;quot; to see the conditions.&lt;br /&gt;
There is absolutely no warranty for GDB.  Type &amp;quot;show warranty&amp;quot; for details.&lt;br /&gt;
This GDB was configured as &amp;quot;--host=i686-pc-cygwin --target=avr&amp;quot;.&lt;br /&gt;
(gdb) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(gdb)&#039;&#039;&#039; ist der Prompt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soll während dem Debuggen der Quellcode angezeigt werden, der zur Zeit ausgeführt wird, kann GDB wie folgt gestartet werden.&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb -tui&lt;br /&gt;
&lt;br /&gt;
Beim (gdb) prompt dann das Layout auf Assembler umschalten.,&lt;br /&gt;
&lt;br /&gt;
 (gdb) layout asm&lt;br /&gt;
&lt;br /&gt;
=== Simulieren/Debuggen ===&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss dem GDB die gewünschte Datei (vorher mittels entsprechendem &#039;&#039;Makefile&#039;&#039; erzeugt) bekannt gemacht werden. Es ist darauf zu achten, dass das Programm mit Debugsymbolen kompiliert wurde.&lt;br /&gt;
&lt;br /&gt;
 (gdb) file main.elf &lt;br /&gt;
 Reading symbols from main.elf...done.&lt;br /&gt;
&lt;br /&gt;
Als nächstes muss dem GDB mitgeteilt werden, welches Ziel (target) er als Backend verwenden soll:&lt;br /&gt;
&lt;br /&gt;
 (gdb) target remote localhost:1212&lt;br /&gt;
&lt;br /&gt;
oder kürzer:&lt;br /&gt;
&lt;br /&gt;
 (gdb) targ rem :1212&lt;br /&gt;
 Remote debugging using :1212&lt;br /&gt;
 0x00000000 in __vectors ()&lt;br /&gt;
&lt;br /&gt;
Jetzt muss das Programm in den Simulator geladen werden:&lt;br /&gt;
&lt;br /&gt;
 (gdb) load&lt;br /&gt;
 Loading section .data, size 0x32 lma 0x1bc&lt;br /&gt;
 Loading section .text, size 0x1bc lma 0x0&lt;br /&gt;
 Start address 0x0, load size 494&lt;br /&gt;
 Transfer rate: 3952 bits in &amp;lt;1 sec, 30 bytes/write.&lt;br /&gt;
&lt;br /&gt;
Da diese 3 Schritte üblicherweise, bei jedem Start einer Simulationssitzung ausgeführt werden müssen, kann man sie zeilenweise in eine Textdatei (Vorschlag: gdb.conf) geschrieben werden, diese Datei wird dem gdb dann mit dem Parameter &amp;quot;-x&amp;quot; (eXecute) mitgegeben:&lt;br /&gt;
&lt;br /&gt;
avr-gdb -x gdb.conf&lt;br /&gt;
&lt;br /&gt;
Damit der Simulator nicht das gesamte Programm abarbeitet, sollte man &#039;&#039;breakpoints&#039;&#039; setzen.&lt;br /&gt;
Den Ersten am besten bei &#039;&#039;main&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) b main&lt;br /&gt;
 Breakpoint 1 at 0xd2: file main.c, line 16.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man das Programm im Simulator mit &#039;&#039;continue&#039;&#039; starten:&lt;br /&gt;
&lt;br /&gt;
 (gdb) c&lt;br /&gt;
 Continuing.&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des zuvor gesetzten &#039;&#039;breakpoints&#039;&#039; stoppt GDB und meldet:&lt;br /&gt;
&lt;br /&gt;
 Breakpoint 1, main () at main.c:16&lt;br /&gt;
 (gdb)&lt;br /&gt;
&lt;br /&gt;
Eine Liste der verfügbaren debug-befehle des GDB findet sich durch die Eingabe von &#039;&#039;&#039;help&#039;&#039;&#039;.&lt;br /&gt;
=== Data Display Debugger ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Bildschirmfoto vom 2017-02-11 12-32-28.png]|right|200px]]&lt;br /&gt;
Eine sehr komfortable Benutzeroberfläche zum gdb erhält man mit dem Programm &amp;quot;ddd&amp;quot; (Data Display Debugger), https://de.wikipedia.org/wiki/Data_Display_Debugger&lt;br /&gt;
&lt;br /&gt;
Diesem gibt man beim Aufruf mit, welcher gdb, mit welcher Verbindung zum Ziel genutzt werden soll, falls das Startscript, wie oben genutzt werden soll z.B.:&lt;br /&gt;
&lt;br /&gt;
ddd --debugger &amp;quot;avr-gdb -x gdb.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Wenn das Projekt mit den entsprechenden Debug-Informationen übersetzt wurde, dann zeigt der DDD die Zeile im Quelltext (auch bei Assemblerteilen), Variableninhalte lassen sich inspizieren, indem der Mauszeiger drauf positioniert wird.&lt;br /&gt;
&lt;br /&gt;
[TODO] Einige häufige GDB-Commands als Beispiel einfügen.&lt;br /&gt;
&lt;br /&gt;
== VMLab ==&lt;br /&gt;
&lt;br /&gt;
[http://www.amctools.com/vmlab.htm VMLab] ist eine komplette Freeware-IDE mit Debugger und Simulator für MS-Windows. VMLab arbeitet mit [[WinAVR]] zusammen und kann AVR-Peripheriehardware simulieren. Leider hat der Autor von VMLab die Entwicklung im Jahr 2006 eingestellt, da dem Projekt nicht der gewünschte kommerzielle Erfolg vergönnt war. Die aktuelle Version ist 3.15 von Oktober 2009.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* Forumsbeitrag [http://www.mikrocontroller.net/topic/24494#714662 VMLAB Bug bei Stackpointer/Interrupt?]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/85212#716727 Workaround]&lt;br /&gt;
&lt;br /&gt;
== AVR Studio ==&lt;br /&gt;
&lt;br /&gt;
[[Bild: AVR-Studio_Simulation.png|thumb|right|250px|Simulator-Ansicht in AVR Studio]]&lt;br /&gt;
[[AVR-Studio|AVR Studio]] von Atmel enthält neben dem Übersetzungsteil, dem Debuggingteil auch einen Simulatorteil. Eine Übersicht über alle drei Programmteile gibt der Powerpoint-Vortrag [http://ece353.ecs.umass.edu/lab2/labc-lectureslides2012.pptx AVR Studio: The comprehensive tutorial] (MS PowerPoint &#039;&#039;2007&#039;&#039;) von Jeremy Gummeson und Brendan Kemp.&lt;br /&gt;
&lt;br /&gt;
Wenn nur ein Breakpoint gesetzt ist, kann mit F5 das Programm einen Abarbeitungszyklus machen. Die Bearbeitung bleibt dann wieder beim Breakpoint stehen. Mit der Stoppuhr kann dann die Zeit für den abgearbeiteten Programmteil gemessen werden. Mit der rechten Mouse-Taste kann die Stoppuhr zurückgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Ausführliche Anleitung zum Ablauf einer Simulation:  [http://www2.tech.purdue.edu/ecet/courses/ecet309/Reference_Materials/Simulation_AVR_Studio_4.pdf Tutorial der Purdue University] (engl., PDF) (link tot!)&lt;br /&gt;
&lt;br /&gt;
Externe Signale können mit den Tools HAPSIM oder über eine Stimulidatei in den Simulator eingespeist werden. &lt;br /&gt;
&lt;br /&gt;
Zu beachten ist, dass sich mit der Einführung des AVR Simulator 2, welcher  Vorteile wie Unterstützung von [[I2C|TWI]] bietet, das Datenformat für extern zugeführte Stimuli-Files geändert hat. Eine kleine Einführung inkl. Beispiel bietet die im AVR-Studio enthaltene Hilfe:&lt;br /&gt;
:AVR Studio Help → AVR Tools User Guide → Simulator → Simulator2 Stimuli&lt;br /&gt;
&lt;br /&gt;
=== HAPSIM ===&lt;br /&gt;
&lt;br /&gt;
[http://www.helmix.at/hapsim/index.htm HAPSIM] (Helmis AVR Periphery Simulator) ist ein Tool zur graphischen Simulation von Tasten, [[LED]], [[LCD]] und Terminalfunktionen in AVR Studio. (deutsch/engl., Windows, Freeware). Hinweise zur Installation von Hapsim nach einem AVR Studio Update stehen im [http://www.mikrocontroller.net/topic/118668 Forum]. HAPSIM kann nur mit AVRStudio 4.x verwendet werden, für den Fall, dass die Domain selbst nicht funktioniert kann folgender [http://members.aon.at/helmi/hapsim.htm Direktlink] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Stimuli ===&lt;br /&gt;
&lt;br /&gt;
Über eine sog. Stimuli-Datei lassen sich von ausserhalb Signale dem AVR Studio zuführen. Informationen zum Aufbau einer Stimulidatei finden sich in obigem &amp;quot;AVR Studio: The comprehensive tutorial&amp;quot; und bei Atmel ([http://support.atmel.com/bin/customer.exe?=&amp;amp;action=viewKbEntry&amp;amp;id=46 What is the format of the AVR Studio simulator stimuli files?]). Der [http://www.hot.ee/nppcsoftware/ Stimuli Generator for AVR Studio] ist eine Freeware für die Erzeugung von Stimulidateien und deren grafischen Darstellung. Für dieses Programm ist .NET 1.1 oder 2.0 erforderlich. Ein Python-Script zum Umwandeln der Stimuli-Log Datei in eine vcd-Datei, welche z.B. in gtkwave betrachtet werden kann, ist [https://github.com/althebaker43/avr_lcd/blob/8b177cc492d2e9a814bd21671c2267a6d3044811/atmel_studio/avr_lcd/stim2vcd.py hier] verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== LogAnalyser ===&lt;br /&gt;
&lt;br /&gt;
[http://www.dresco.co.uk/LogAnalyser/ LogAnalyser] v1.00 (c) 2008 Jon Escombe is a graphical &amp;quot;logic analyser&amp;quot; style display of Atmel AVR Studio simulator log files. The project is built using the (excellent) zedGraph charting class library, and the source code is made available under GPL license. Requires Windows XP and .NET framework 2.0 to run.&lt;br /&gt;
&lt;br /&gt;
=== TCPSimDBG ===&lt;br /&gt;
&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=74350 TCPSimDBG] ist ein Plugin für [[AVR-Studio]] um Remote Simulating/Debugging über TCP/IP durchzuführen. Ein TCP/IP-Terminal oder Serverprogramm kann sich mit dem Simulator/Debugger von AVR-Studio verbinden und Informationen aus dem Debugprozess abrufen und ändern. Damit lassen sich virtuelle Geräte (Devices) eingerichten. (Atmel SDK Lizenz, Windows XP, 2003, Vista .NET 3.5 erforderlich)&lt;br /&gt;
&lt;br /&gt;
=== AVR Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
[http://www.coynetechsystems.com/avrlogicanalyzer/index.php AVR Logic Analyzer] von Coyne Technology Systems ist ein AVR Studio Plugin zur grafischen Anzeige der simulierten I/O-Ports.&lt;br /&gt;
(kommerziell)&lt;br /&gt;
&lt;br /&gt;
== Avrora ==&lt;br /&gt;
[http://avrora.sourceforge.net/ Avrora], a research project of the UCLA Compilers Group, is a set of simulation and analysis tools for programs written for the AVR microcontroller produced by Atmel and the Mica2 sensor nodes. Avrora contains a flexible framework for simulating and analyzing assembly programs, providing a clean Java API and infrastructure for experimentation, profiling, and analysis.&lt;br /&gt;
&lt;br /&gt;
== Proteus VSM for Atmel AVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.labcenter-electronics.com/products/avr.cfm Proteus VSM for Atmel AVR] ist ein kommerzieller AVR Simulator. &lt;br /&gt;
&lt;br /&gt;
In der Codesammlung gibt es dafür ein [http://www.mikrocontroller.net/topic/118974#1072449 Virtuelles AVR Funk Pollin Simulationsmodell] von Daniel Cagara.&lt;br /&gt;
&lt;br /&gt;
== CrossWorks for AVR == &lt;br /&gt;
&lt;br /&gt;
[http://rowley.co.uk/avr/index.htm CrossWorks for AVR] besitzt einen &#039;&#039;core simulator&#039;&#039; für AVRs. (Windows, Mac OS X, Linux, Solaris)&lt;br /&gt;
&lt;br /&gt;
== simavr ==&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/simavr simavr] is a new AVR simulator from Michel &amp;quot;buserror&amp;quot; Pollet for linux, or any platform that uses avr-gcc. It uses avr-gcc own register definition to simplify creating new targets for supported AVR devices.&lt;br /&gt;
&lt;br /&gt;
The status of the project is the core works at about 98% (ie, it works, but there is a known bug). The supported IOs are eeprom, IO ports (including pin interupts), 8 bits timers (well, one of mode of the myriad) and a simple UART that makes “printf” work.&lt;br /&gt;
&lt;br /&gt;
gdb support is planned next.&lt;br /&gt;
&lt;br /&gt;
Lizenz: GPL v3&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=86665 Diskussion bei avrfreaks.net]&lt;br /&gt;
&lt;br /&gt;
== avrtest ==&lt;br /&gt;
&lt;br /&gt;
avrtest ist ein freier AVR Core-Simulator, der zur Ausführung der avr-gcc Testsuite verwendet wird. Über spezielle &amp;quot;magische SFRs&amp;quot; können bestimmte Aktionen ausgelöst werden wie z.B. definierter Programmabbruch oder die Ausgabe eines Zeichens auf Console, so daß ein Programm wie&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    printf (&amp;quot;Hallo Welt!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
analoge Resultate bringt wie ein Programm, das nativ auf dem Rechner ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
avrtest ist Open Source, einfach gehalten und auf Geschwindigkeit getrimmt. Die Eingabe von Stimuli ist nicht möglich, und interne Peripherie wird nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
* Lizenz: GPL v2 oder höher&lt;br /&gt;
* Betriebssysteme: Windows, Linux, etc. Eigentlich keine Einschränkung, da es sich um ein Open-Source Projekt handelt.&lt;br /&gt;
&lt;br /&gt;
=== Weblinks ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/p/winavr/code/HEAD/tree/trunk/avrtest/ avrtest: Projekt und README bei sourceforge]&lt;br /&gt;
* [http://lists.gnu.org/archive/html/avr-gcc-list/2011-06/msg00015.html Beschreibung in der avr-gcc-list Mailingliste (en)]&lt;br /&gt;
&lt;br /&gt;
== BASCOM AVR ==&lt;br /&gt;
&lt;br /&gt;
In [http://www.mcselec.com/ BASCOM AVR] ist ein Simulatorteil enthalten und damit ist auch die Simulation von Geräten (LCD, UART) möglich. BASCOM AVR wird von MCS Electronics verkauft (89€) und ist ein unter Windows laufender [[Basic|BASIC]] [[Compiler]] für Atmel AVR Mikrocontroller. Eine auf 4 KB Codegröße eingeschränkte Demoversion ist kostenlos erhältlich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ldi r16,0x10&lt;br /&gt;
LDI r17,0x12&lt;br /&gt;
ADD R16,R17&lt;br /&gt;
strt : rjmp strt&lt;br /&gt;
&lt;br /&gt;
== MacSim - AVR simulator for OS X ==&lt;br /&gt;
[http://www.fracturedsoftware.com/macsimavr/ MacSim Alpha 4]&lt;br /&gt;
&lt;br /&gt;
Einschränkungen u.A.:  &amp;quot;There are currently no timers, interrupts, or EEPROM. The processor is &#039;generic&#039; and has fixed size data and instruction memories.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95247</id>
		<title>AVR-Simulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95247"/>
		<updated>2017-02-11T11:35:56Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: /* Simulieren/Debuggen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:AVR]]&lt;br /&gt;
== SimulAVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/simulavr/ SimulAVR] ist ein Simulator, der einige Prozessoren der AVR-Familie auf einem PC-Hostsystem (Windows, Linux, Mac OS X) simulieren kann. Dieser Simulator ist auch im [[WinAVR]]-Paket enthalten (/WinAVR/bin/simulavr.exe).&lt;br /&gt;
&lt;br /&gt;
Eine Verwendung von SimulAVR ist das sog. Signal Tracing, d.h. das aufzeichnen von Änderungen der diversen Register (z.B. der Pins eines I/O-Ports) in eine VCD-Datei. Auch wenn die Laufzeit des Simulators oft langsamer als die der Hardware ist, entsprechen diese Aufzeichnungen auf den CPU-Takt genau dem, was auf der Hardware passieren würde. Wie diese Aufzeichnungen gemacht werden ist bei SimulAVR selbst kaum dokumentiert, doch bei RepRap gibt es eine kleine [http://reprap.org/wiki/SimulAVR#Signal_tracing SimulAVR Anleitung], die eine gute Passage dazu enthält.&lt;br /&gt;
&lt;br /&gt;
Die Hauptanwendung von SimulAVR dürfte das Debuggen sein. Dafür wird SimulAVR über ein dazu passendes Frontend bedient. GDB und Insight sind zwei, ebenfalls in WinAVR enthaltene, Programme, die ein solches Frontend bilden. &lt;br /&gt;
&lt;br /&gt;
Wer &amp;quot;textorientiertes&amp;quot; Debugging mag, oder beispielsweise &#039;&#039;emacs&#039;&#039; als Frontend verwenden möchte, der nutzt den [[GDB]], den GNU Debugger. Er ist im WinAVR-Paket enthalten (/WinAVR/bin/avr-gdb.exe). Wer gleich eine grafische Benutzeroberfläche (GUI) verwenden möchte, nutzt Insight (welches intern ebenfalls den GDB verwendet). &lt;br /&gt;
&lt;br /&gt;
Beide Debugger, also GDB oder Insight, benötigen ein Backend. Entweder handelt es sich dabei um einen ICE/[[JTAG]]-Debugger wie z.&amp;amp;nbsp;B. [http://avarice.sourceforge.net/ AVaRICE] als Interface zu einem realen AVR-Mikrocontroller oder um einen Simulator.&lt;br /&gt;
&lt;br /&gt;
=== Starten von SimulAVR ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:SimulAVR-Display.png|right|220px]]&lt;br /&gt;
Um SimulAVR mit default-Parametern zu starten, reicht es aus, folgende Zeile in einer Shell/Eingabeaufforderung einzugeben:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SimulAVR startet dann mit den defaultparametern und stellt einen GDBServer-Prozess auf dem lokalen oder entfernten Host auf Port 1212 zur Verfügung.&lt;br /&gt;
Das &#039;&#039;Backend&#039;&#039; der Simulation ist nun Einsatzbereit.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist, SimulAVR mit Display zu starten. Dann werden während der Ausführung die Werte der Register und dem RAM angezeigt (siehe Bild).&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -P simulavr-disp -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht der unterstützten AVR-Prozessoren und der SimulAVR spezifischen Parameter bekommt man durch folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr --help&lt;br /&gt;
&lt;br /&gt;
=== Starten des GDB ===&lt;br /&gt;
&lt;br /&gt;
Um das (vorläufige) Frontend GDB zu starten, reicht folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb&lt;br /&gt;
&lt;br /&gt;
Der GDB meldet sich mit folgendem Bildschirm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Current directory is c:/WinAVR/testprj4/&lt;br /&gt;
GNU gdb 6.1&lt;br /&gt;
Copyright 2004 Free Software Foundation, Inc.&lt;br /&gt;
GDB is free software, covered by the GNU General Public License, and you are&lt;br /&gt;
welcome to change it and/or distribute copies of it under certain conditions.&lt;br /&gt;
Type &amp;quot;show copying&amp;quot; to see the conditions.&lt;br /&gt;
There is absolutely no warranty for GDB.  Type &amp;quot;show warranty&amp;quot; for details.&lt;br /&gt;
This GDB was configured as &amp;quot;--host=i686-pc-cygwin --target=avr&amp;quot;.&lt;br /&gt;
(gdb) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(gdb)&#039;&#039;&#039; ist der Prompt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soll während dem Debuggen der Quellcode angezeigt werden, der zur Zeit ausgeführt wird, kann GDB wie folgt gestartet werden.&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb -tui&lt;br /&gt;
&lt;br /&gt;
Beim (gdb) prompt dann das Layout auf Assembler umschalten.,&lt;br /&gt;
&lt;br /&gt;
 (gdb) layout asm&lt;br /&gt;
&lt;br /&gt;
=== Simulieren/Debuggen ===&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss dem GDB die gewünschte Datei (vorher mittels entsprechendem &#039;&#039;Makefile&#039;&#039; erzeugt) bekannt gemacht werden. Es ist darauf zu achten, dass das Programm mit Debugsymbolen kompiliert wurde.&lt;br /&gt;
&lt;br /&gt;
 (gdb) file main.elf &lt;br /&gt;
 Reading symbols from main.elf...done.&lt;br /&gt;
&lt;br /&gt;
Als nächstes muss dem GDB mitgeteilt werden, welches Ziel (target) er als Backend verwenden soll:&lt;br /&gt;
&lt;br /&gt;
 (gdb) target remote localhost:1212&lt;br /&gt;
&lt;br /&gt;
oder kürzer:&lt;br /&gt;
&lt;br /&gt;
 (gdb) targ rem :1212&lt;br /&gt;
 Remote debugging using :1212&lt;br /&gt;
 0x00000000 in __vectors ()&lt;br /&gt;
&lt;br /&gt;
Jetzt muss das Programm in den Simulator geladen werden:&lt;br /&gt;
&lt;br /&gt;
 (gdb) load&lt;br /&gt;
 Loading section .data, size 0x32 lma 0x1bc&lt;br /&gt;
 Loading section .text, size 0x1bc lma 0x0&lt;br /&gt;
 Start address 0x0, load size 494&lt;br /&gt;
 Transfer rate: 3952 bits in &amp;lt;1 sec, 30 bytes/write.&lt;br /&gt;
&lt;br /&gt;
Da diese 3 Schritte üblicherweise, bei jedem Start einer Simulationssitzung ausgeführt werden müssen, kann man sie zeilenweise in eine Textdatei (Vorschlag: gdb.conf) geschrieben werden, diese Datei wird dem gdb dann mit dem Parameter &amp;quot;-x&amp;quot; (eXecute) mitgegeben:&lt;br /&gt;
&lt;br /&gt;
avr-gdb -x gdb.conf&lt;br /&gt;
&lt;br /&gt;
Damit der Simulator nicht das gesamte Programm abarbeitet, sollte man &#039;&#039;breakpoints&#039;&#039; setzen.&lt;br /&gt;
Den Ersten am besten bei &#039;&#039;main&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) b main&lt;br /&gt;
 Breakpoint 1 at 0xd2: file main.c, line 16.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man das Programm im Simulator mit &#039;&#039;continue&#039;&#039; starten:&lt;br /&gt;
&lt;br /&gt;
 (gdb) c&lt;br /&gt;
 Continuing.&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des zuvor gesetzten &#039;&#039;breakpoints&#039;&#039; stoppt GDB und meldet:&lt;br /&gt;
&lt;br /&gt;
 Breakpoint 1, main () at main.c:16&lt;br /&gt;
 (gdb)&lt;br /&gt;
&lt;br /&gt;
Eine Liste der verfügbaren debug-befehle des GDB findet sich durch die Eingabe von &#039;&#039;&#039;help&#039;&#039;&#039;.&lt;br /&gt;
=== Data Display Debugger ===&lt;br /&gt;
&lt;br /&gt;
Eine sehr komfortable Benutzeroberfläche zum gdb erhält man mit dem Programm &amp;quot;ddd&amp;quot; (Data Display Debugger), https://de.wikipedia.org/wiki/Data_Display_Debugger&lt;br /&gt;
&lt;br /&gt;
Diesem gibt man beim Aufruf mit, welcher gdb, mit welcher Verbindung zum Ziel genutzt werden soll, falls das Startscript, wie oben genutzt werden soll z.B.:&lt;br /&gt;
&lt;br /&gt;
ddd --debugger &amp;quot;avr-gdb -x gdb.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Wenn das Projekt mit den entsprechenden Debug-Informationen übersetzt wurde, dann zeigt der DDD die Zeile im Quelltext (auch bei Assemblerteilen), Variableninhalte lassen sich inspizieren, indem der Mauszeiger drauf positioniert wird.&lt;br /&gt;
&lt;br /&gt;
[TODO] Einige häufige GDB-Commands als Beispiel einfügen.&lt;br /&gt;
&lt;br /&gt;
== VMLab ==&lt;br /&gt;
&lt;br /&gt;
[http://www.amctools.com/vmlab.htm VMLab] ist eine komplette Freeware-IDE mit Debugger und Simulator für MS-Windows. VMLab arbeitet mit [[WinAVR]] zusammen und kann AVR-Peripheriehardware simulieren. Leider hat der Autor von VMLab die Entwicklung im Jahr 2006 eingestellt, da dem Projekt nicht der gewünschte kommerzielle Erfolg vergönnt war. Die aktuelle Version ist 3.15 von Oktober 2009.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* Forumsbeitrag [http://www.mikrocontroller.net/topic/24494#714662 VMLAB Bug bei Stackpointer/Interrupt?]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/85212#716727 Workaround]&lt;br /&gt;
&lt;br /&gt;
== AVR Studio ==&lt;br /&gt;
&lt;br /&gt;
[[Bild: AVR-Studio_Simulation.png|thumb|right|250px|Simulator-Ansicht in AVR Studio]]&lt;br /&gt;
[[AVR-Studio|AVR Studio]] von Atmel enthält neben dem Übersetzungsteil, dem Debuggingteil auch einen Simulatorteil. Eine Übersicht über alle drei Programmteile gibt der Powerpoint-Vortrag [http://ece353.ecs.umass.edu/lab2/labc-lectureslides2012.pptx AVR Studio: The comprehensive tutorial] (MS PowerPoint &#039;&#039;2007&#039;&#039;) von Jeremy Gummeson und Brendan Kemp.&lt;br /&gt;
&lt;br /&gt;
Wenn nur ein Breakpoint gesetzt ist, kann mit F5 das Programm einen Abarbeitungszyklus machen. Die Bearbeitung bleibt dann wieder beim Breakpoint stehen. Mit der Stoppuhr kann dann die Zeit für den abgearbeiteten Programmteil gemessen werden. Mit der rechten Mouse-Taste kann die Stoppuhr zurückgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Ausführliche Anleitung zum Ablauf einer Simulation:  [http://www2.tech.purdue.edu/ecet/courses/ecet309/Reference_Materials/Simulation_AVR_Studio_4.pdf Tutorial der Purdue University] (engl., PDF) (link tot!)&lt;br /&gt;
&lt;br /&gt;
Externe Signale können mit den Tools HAPSIM oder über eine Stimulidatei in den Simulator eingespeist werden. &lt;br /&gt;
&lt;br /&gt;
Zu beachten ist, dass sich mit der Einführung des AVR Simulator 2, welcher  Vorteile wie Unterstützung von [[I2C|TWI]] bietet, das Datenformat für extern zugeführte Stimuli-Files geändert hat. Eine kleine Einführung inkl. Beispiel bietet die im AVR-Studio enthaltene Hilfe:&lt;br /&gt;
:AVR Studio Help → AVR Tools User Guide → Simulator → Simulator2 Stimuli&lt;br /&gt;
&lt;br /&gt;
=== HAPSIM ===&lt;br /&gt;
&lt;br /&gt;
[http://www.helmix.at/hapsim/index.htm HAPSIM] (Helmis AVR Periphery Simulator) ist ein Tool zur graphischen Simulation von Tasten, [[LED]], [[LCD]] und Terminalfunktionen in AVR Studio. (deutsch/engl., Windows, Freeware). Hinweise zur Installation von Hapsim nach einem AVR Studio Update stehen im [http://www.mikrocontroller.net/topic/118668 Forum]. HAPSIM kann nur mit AVRStudio 4.x verwendet werden, für den Fall, dass die Domain selbst nicht funktioniert kann folgender [http://members.aon.at/helmi/hapsim.htm Direktlink] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Stimuli ===&lt;br /&gt;
&lt;br /&gt;
Über eine sog. Stimuli-Datei lassen sich von ausserhalb Signale dem AVR Studio zuführen. Informationen zum Aufbau einer Stimulidatei finden sich in obigem &amp;quot;AVR Studio: The comprehensive tutorial&amp;quot; und bei Atmel ([http://support.atmel.com/bin/customer.exe?=&amp;amp;action=viewKbEntry&amp;amp;id=46 What is the format of the AVR Studio simulator stimuli files?]). Der [http://www.hot.ee/nppcsoftware/ Stimuli Generator for AVR Studio] ist eine Freeware für die Erzeugung von Stimulidateien und deren grafischen Darstellung. Für dieses Programm ist .NET 1.1 oder 2.0 erforderlich. Ein Python-Script zum Umwandeln der Stimuli-Log Datei in eine vcd-Datei, welche z.B. in gtkwave betrachtet werden kann, ist [https://github.com/althebaker43/avr_lcd/blob/8b177cc492d2e9a814bd21671c2267a6d3044811/atmel_studio/avr_lcd/stim2vcd.py hier] verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== LogAnalyser ===&lt;br /&gt;
&lt;br /&gt;
[http://www.dresco.co.uk/LogAnalyser/ LogAnalyser] v1.00 (c) 2008 Jon Escombe is a graphical &amp;quot;logic analyser&amp;quot; style display of Atmel AVR Studio simulator log files. The project is built using the (excellent) zedGraph charting class library, and the source code is made available under GPL license. Requires Windows XP and .NET framework 2.0 to run.&lt;br /&gt;
&lt;br /&gt;
=== TCPSimDBG ===&lt;br /&gt;
&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=74350 TCPSimDBG] ist ein Plugin für [[AVR-Studio]] um Remote Simulating/Debugging über TCP/IP durchzuführen. Ein TCP/IP-Terminal oder Serverprogramm kann sich mit dem Simulator/Debugger von AVR-Studio verbinden und Informationen aus dem Debugprozess abrufen und ändern. Damit lassen sich virtuelle Geräte (Devices) eingerichten. (Atmel SDK Lizenz, Windows XP, 2003, Vista .NET 3.5 erforderlich)&lt;br /&gt;
&lt;br /&gt;
=== AVR Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
[http://www.coynetechsystems.com/avrlogicanalyzer/index.php AVR Logic Analyzer] von Coyne Technology Systems ist ein AVR Studio Plugin zur grafischen Anzeige der simulierten I/O-Ports.&lt;br /&gt;
(kommerziell)&lt;br /&gt;
&lt;br /&gt;
== Avrora ==&lt;br /&gt;
[http://avrora.sourceforge.net/ Avrora], a research project of the UCLA Compilers Group, is a set of simulation and analysis tools for programs written for the AVR microcontroller produced by Atmel and the Mica2 sensor nodes. Avrora contains a flexible framework for simulating and analyzing assembly programs, providing a clean Java API and infrastructure for experimentation, profiling, and analysis.&lt;br /&gt;
&lt;br /&gt;
== Proteus VSM for Atmel AVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.labcenter-electronics.com/products/avr.cfm Proteus VSM for Atmel AVR] ist ein kommerzieller AVR Simulator. &lt;br /&gt;
&lt;br /&gt;
In der Codesammlung gibt es dafür ein [http://www.mikrocontroller.net/topic/118974#1072449 Virtuelles AVR Funk Pollin Simulationsmodell] von Daniel Cagara.&lt;br /&gt;
&lt;br /&gt;
== CrossWorks for AVR == &lt;br /&gt;
&lt;br /&gt;
[http://rowley.co.uk/avr/index.htm CrossWorks for AVR] besitzt einen &#039;&#039;core simulator&#039;&#039; für AVRs. (Windows, Mac OS X, Linux, Solaris)&lt;br /&gt;
&lt;br /&gt;
== simavr ==&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/simavr simavr] is a new AVR simulator from Michel &amp;quot;buserror&amp;quot; Pollet for linux, or any platform that uses avr-gcc. It uses avr-gcc own register definition to simplify creating new targets for supported AVR devices.&lt;br /&gt;
&lt;br /&gt;
The status of the project is the core works at about 98% (ie, it works, but there is a known bug). The supported IOs are eeprom, IO ports (including pin interupts), 8 bits timers (well, one of mode of the myriad) and a simple UART that makes “printf” work.&lt;br /&gt;
&lt;br /&gt;
gdb support is planned next.&lt;br /&gt;
&lt;br /&gt;
Lizenz: GPL v3&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=86665 Diskussion bei avrfreaks.net]&lt;br /&gt;
&lt;br /&gt;
== avrtest ==&lt;br /&gt;
&lt;br /&gt;
avrtest ist ein freier AVR Core-Simulator, der zur Ausführung der avr-gcc Testsuite verwendet wird. Über spezielle &amp;quot;magische SFRs&amp;quot; können bestimmte Aktionen ausgelöst werden wie z.B. definierter Programmabbruch oder die Ausgabe eines Zeichens auf Console, so daß ein Programm wie&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    printf (&amp;quot;Hallo Welt!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
analoge Resultate bringt wie ein Programm, das nativ auf dem Rechner ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
avrtest ist Open Source, einfach gehalten und auf Geschwindigkeit getrimmt. Die Eingabe von Stimuli ist nicht möglich, und interne Peripherie wird nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
* Lizenz: GPL v2 oder höher&lt;br /&gt;
* Betriebssysteme: Windows, Linux, etc. Eigentlich keine Einschränkung, da es sich um ein Open-Source Projekt handelt.&lt;br /&gt;
&lt;br /&gt;
=== Weblinks ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/p/winavr/code/HEAD/tree/trunk/avrtest/ avrtest: Projekt und README bei sourceforge]&lt;br /&gt;
* [http://lists.gnu.org/archive/html/avr-gcc-list/2011-06/msg00015.html Beschreibung in der avr-gcc-list Mailingliste (en)]&lt;br /&gt;
&lt;br /&gt;
== BASCOM AVR ==&lt;br /&gt;
&lt;br /&gt;
In [http://www.mcselec.com/ BASCOM AVR] ist ein Simulatorteil enthalten und damit ist auch die Simulation von Geräten (LCD, UART) möglich. BASCOM AVR wird von MCS Electronics verkauft (89€) und ist ein unter Windows laufender [[Basic|BASIC]] [[Compiler]] für Atmel AVR Mikrocontroller. Eine auf 4 KB Codegröße eingeschränkte Demoversion ist kostenlos erhältlich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ldi r16,0x10&lt;br /&gt;
LDI r17,0x12&lt;br /&gt;
ADD R16,R17&lt;br /&gt;
strt : rjmp strt&lt;br /&gt;
&lt;br /&gt;
== MacSim - AVR simulator for OS X ==&lt;br /&gt;
[http://www.fracturedsoftware.com/macsimavr/ MacSim Alpha 4]&lt;br /&gt;
&lt;br /&gt;
Einschränkungen u.A.:  &amp;quot;There are currently no timers, interrupts, or EEPROM. The processor is &#039;generic&#039; and has fixed size data and instruction memories.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Bildschirmfoto_vom_2017-02-11_12-32-28.png&amp;diff=95246</id>
		<title>Datei:Bildschirmfoto vom 2017-02-11 12-32-28.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Bildschirmfoto_vom_2017-02-11_12-32-28.png&amp;diff=95246"/>
		<updated>2017-02-11T11:33:04Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95245</id>
		<title>AVR-Simulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=95245"/>
		<updated>2017-02-11T11:26:51Z</updated>

		<summary type="html">&lt;p&gt;Restmuell: /* Simulieren/Debuggen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:AVR]]&lt;br /&gt;
== SimulAVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/simulavr/ SimulAVR] ist ein Simulator, der einige Prozessoren der AVR-Familie auf einem PC-Hostsystem (Windows, Linux, Mac OS X) simulieren kann. Dieser Simulator ist auch im [[WinAVR]]-Paket enthalten (/WinAVR/bin/simulavr.exe).&lt;br /&gt;
&lt;br /&gt;
Eine Verwendung von SimulAVR ist das sog. Signal Tracing, d.h. das aufzeichnen von Änderungen der diversen Register (z.B. der Pins eines I/O-Ports) in eine VCD-Datei. Auch wenn die Laufzeit des Simulators oft langsamer als die der Hardware ist, entsprechen diese Aufzeichnungen auf den CPU-Takt genau dem, was auf der Hardware passieren würde. Wie diese Aufzeichnungen gemacht werden ist bei SimulAVR selbst kaum dokumentiert, doch bei RepRap gibt es eine kleine [http://reprap.org/wiki/SimulAVR#Signal_tracing SimulAVR Anleitung], die eine gute Passage dazu enthält.&lt;br /&gt;
&lt;br /&gt;
Die Hauptanwendung von SimulAVR dürfte das Debuggen sein. Dafür wird SimulAVR über ein dazu passendes Frontend bedient. GDB und Insight sind zwei, ebenfalls in WinAVR enthaltene, Programme, die ein solches Frontend bilden. &lt;br /&gt;
&lt;br /&gt;
Wer &amp;quot;textorientiertes&amp;quot; Debugging mag, oder beispielsweise &#039;&#039;emacs&#039;&#039; als Frontend verwenden möchte, der nutzt den [[GDB]], den GNU Debugger. Er ist im WinAVR-Paket enthalten (/WinAVR/bin/avr-gdb.exe). Wer gleich eine grafische Benutzeroberfläche (GUI) verwenden möchte, nutzt Insight (welches intern ebenfalls den GDB verwendet). &lt;br /&gt;
&lt;br /&gt;
Beide Debugger, also GDB oder Insight, benötigen ein Backend. Entweder handelt es sich dabei um einen ICE/[[JTAG]]-Debugger wie z.&amp;amp;nbsp;B. [http://avarice.sourceforge.net/ AVaRICE] als Interface zu einem realen AVR-Mikrocontroller oder um einen Simulator.&lt;br /&gt;
&lt;br /&gt;
=== Starten von SimulAVR ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:SimulAVR-Display.png|right|220px]]&lt;br /&gt;
Um SimulAVR mit default-Parametern zu starten, reicht es aus, folgende Zeile in einer Shell/Eingabeaufforderung einzugeben:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SimulAVR startet dann mit den defaultparametern und stellt einen GDBServer-Prozess auf dem lokalen oder entfernten Host auf Port 1212 zur Verfügung.&lt;br /&gt;
Das &#039;&#039;Backend&#039;&#039; der Simulation ist nun Einsatzbereit.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist, SimulAVR mit Display zu starten. Dann werden während der Ausführung die Werte der Register und dem RAM angezeigt (siehe Bild).&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -P simulavr-disp -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht der unterstützten AVR-Prozessoren und der SimulAVR spezifischen Parameter bekommt man durch folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr --help&lt;br /&gt;
&lt;br /&gt;
=== Starten des GDB ===&lt;br /&gt;
&lt;br /&gt;
Um das (vorläufige) Frontend GDB zu starten, reicht folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb&lt;br /&gt;
&lt;br /&gt;
Der GDB meldet sich mit folgendem Bildschirm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Current directory is c:/WinAVR/testprj4/&lt;br /&gt;
GNU gdb 6.1&lt;br /&gt;
Copyright 2004 Free Software Foundation, Inc.&lt;br /&gt;
GDB is free software, covered by the GNU General Public License, and you are&lt;br /&gt;
welcome to change it and/or distribute copies of it under certain conditions.&lt;br /&gt;
Type &amp;quot;show copying&amp;quot; to see the conditions.&lt;br /&gt;
There is absolutely no warranty for GDB.  Type &amp;quot;show warranty&amp;quot; for details.&lt;br /&gt;
This GDB was configured as &amp;quot;--host=i686-pc-cygwin --target=avr&amp;quot;.&lt;br /&gt;
(gdb) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(gdb)&#039;&#039;&#039; ist der Prompt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soll während dem Debuggen der Quellcode angezeigt werden, der zur Zeit ausgeführt wird, kann GDB wie folgt gestartet werden.&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb -tui&lt;br /&gt;
&lt;br /&gt;
Beim (gdb) prompt dann das Layout auf Assembler umschalten.,&lt;br /&gt;
&lt;br /&gt;
 (gdb) layout asm&lt;br /&gt;
&lt;br /&gt;
=== Simulieren/Debuggen ===&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss dem GDB die gewünschte Datei (vorher mittels entsprechendem &#039;&#039;Makefile&#039;&#039; erzeugt) bekannt gemacht werden. Es ist darauf zu achten, dass das Programm mit Debugsymbolen kompiliert wurde.&lt;br /&gt;
&lt;br /&gt;
 (gdb) file main.elf &lt;br /&gt;
 Reading symbols from main.elf...done.&lt;br /&gt;
&lt;br /&gt;
Als nächstes muss dem GDB mitgeteilt werden, welches Ziel (target) er als Backend verwenden soll:&lt;br /&gt;
&lt;br /&gt;
 (gdb) target remote localhost:1212&lt;br /&gt;
&lt;br /&gt;
oder kürzer:&lt;br /&gt;
&lt;br /&gt;
 (gdb) targ rem :1212&lt;br /&gt;
 Remote debugging using :1212&lt;br /&gt;
 0x00000000 in __vectors ()&lt;br /&gt;
&lt;br /&gt;
Jetzt muss das Programm in den Simulator geladen werden:&lt;br /&gt;
&lt;br /&gt;
 (gdb) load&lt;br /&gt;
 Loading section .data, size 0x32 lma 0x1bc&lt;br /&gt;
 Loading section .text, size 0x1bc lma 0x0&lt;br /&gt;
 Start address 0x0, load size 494&lt;br /&gt;
 Transfer rate: 3952 bits in &amp;lt;1 sec, 30 bytes/write.&lt;br /&gt;
&lt;br /&gt;
Da diese 3 Schritte üblicherweise, bei jedem Start einer Simulationssitzung ausgeführt werden müssen, kann man sie zeilenweise in eine Textdatei (Vorschlag: gdb.conf) geschrieben werden, diese Datei wird dem gdb dann mit dem Parameter &amp;quot;-x&amp;quot; (eXecute) mitgegeben:&lt;br /&gt;
&lt;br /&gt;
avr-gdb -x gdb.conf&lt;br /&gt;
&lt;br /&gt;
Damit der Simulator nicht das gesamte Programm abarbeitet, sollte man &#039;&#039;breakpoints&#039;&#039; setzen.&lt;br /&gt;
Den Ersten am besten bei &#039;&#039;main&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) b main&lt;br /&gt;
 Breakpoint 1 at 0xd2: file main.c, line 16.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man das Programm im Simulator mit &#039;&#039;continue&#039;&#039; starten:&lt;br /&gt;
&lt;br /&gt;
 (gdb) c&lt;br /&gt;
 Continuing.&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des zuvor gesetzten &#039;&#039;breakpoints&#039;&#039; stoppt GDB und meldet:&lt;br /&gt;
&lt;br /&gt;
 Breakpoint 1, main () at main.c:16&lt;br /&gt;
 (gdb)&lt;br /&gt;
&lt;br /&gt;
Eine Liste der verfügbaren debug-befehle des GDB findet sich durch die Eingabe von &#039;&#039;&#039;help&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Eine sehr komfortable Benutzeroberfläche zum gdb erhält man mit dem Programm &amp;quot;ddd&amp;quot; (Data Display Debugger), https://de.wikipedia.org/wiki/Data_Display_Debugger&lt;br /&gt;
&lt;br /&gt;
Diesem gibt man beim Aufruf mit, welcher gdb, mit welcher Verbindung zum Ziel genutzt werden soll, falls das Startscript, wie oben genutzt werden soll z.B.:&lt;br /&gt;
&lt;br /&gt;
ddd --debugger &amp;quot;avr-gdb -x gdb.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Wenn das Projekt mit den entsprechenden Debug-Informationen übersetzt wurde, dann zeigt der DDD die Zeile im Quelltext (auch bei Assemblerteilen), Variableninhalte lassen sich inspizieren, indem der Mauszeiger drauf positioniert wird.&lt;br /&gt;
&lt;br /&gt;
[TODO] Einige häufige GDB-Commands als Beispiel einfügen.&lt;br /&gt;
&lt;br /&gt;
== VMLab ==&lt;br /&gt;
&lt;br /&gt;
[http://www.amctools.com/vmlab.htm VMLab] ist eine komplette Freeware-IDE mit Debugger und Simulator für MS-Windows. VMLab arbeitet mit [[WinAVR]] zusammen und kann AVR-Peripheriehardware simulieren. Leider hat der Autor von VMLab die Entwicklung im Jahr 2006 eingestellt, da dem Projekt nicht der gewünschte kommerzielle Erfolg vergönnt war. Die aktuelle Version ist 3.15 von Oktober 2009.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* Forumsbeitrag [http://www.mikrocontroller.net/topic/24494#714662 VMLAB Bug bei Stackpointer/Interrupt?]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/85212#716727 Workaround]&lt;br /&gt;
&lt;br /&gt;
== AVR Studio ==&lt;br /&gt;
&lt;br /&gt;
[[Bild: AVR-Studio_Simulation.png|thumb|right|250px|Simulator-Ansicht in AVR Studio]]&lt;br /&gt;
[[AVR-Studio|AVR Studio]] von Atmel enthält neben dem Übersetzungsteil, dem Debuggingteil auch einen Simulatorteil. Eine Übersicht über alle drei Programmteile gibt der Powerpoint-Vortrag [http://ece353.ecs.umass.edu/lab2/labc-lectureslides2012.pptx AVR Studio: The comprehensive tutorial] (MS PowerPoint &#039;&#039;2007&#039;&#039;) von Jeremy Gummeson und Brendan Kemp.&lt;br /&gt;
&lt;br /&gt;
Wenn nur ein Breakpoint gesetzt ist, kann mit F5 das Programm einen Abarbeitungszyklus machen. Die Bearbeitung bleibt dann wieder beim Breakpoint stehen. Mit der Stoppuhr kann dann die Zeit für den abgearbeiteten Programmteil gemessen werden. Mit der rechten Mouse-Taste kann die Stoppuhr zurückgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Ausführliche Anleitung zum Ablauf einer Simulation:  [http://www2.tech.purdue.edu/ecet/courses/ecet309/Reference_Materials/Simulation_AVR_Studio_4.pdf Tutorial der Purdue University] (engl., PDF) (link tot!)&lt;br /&gt;
&lt;br /&gt;
Externe Signale können mit den Tools HAPSIM oder über eine Stimulidatei in den Simulator eingespeist werden. &lt;br /&gt;
&lt;br /&gt;
Zu beachten ist, dass sich mit der Einführung des AVR Simulator 2, welcher  Vorteile wie Unterstützung von [[I2C|TWI]] bietet, das Datenformat für extern zugeführte Stimuli-Files geändert hat. Eine kleine Einführung inkl. Beispiel bietet die im AVR-Studio enthaltene Hilfe:&lt;br /&gt;
:AVR Studio Help → AVR Tools User Guide → Simulator → Simulator2 Stimuli&lt;br /&gt;
&lt;br /&gt;
=== HAPSIM ===&lt;br /&gt;
&lt;br /&gt;
[http://www.helmix.at/hapsim/index.htm HAPSIM] (Helmis AVR Periphery Simulator) ist ein Tool zur graphischen Simulation von Tasten, [[LED]], [[LCD]] und Terminalfunktionen in AVR Studio. (deutsch/engl., Windows, Freeware). Hinweise zur Installation von Hapsim nach einem AVR Studio Update stehen im [http://www.mikrocontroller.net/topic/118668 Forum]. HAPSIM kann nur mit AVRStudio 4.x verwendet werden, für den Fall, dass die Domain selbst nicht funktioniert kann folgender [http://members.aon.at/helmi/hapsim.htm Direktlink] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Stimuli ===&lt;br /&gt;
&lt;br /&gt;
Über eine sog. Stimuli-Datei lassen sich von ausserhalb Signale dem AVR Studio zuführen. Informationen zum Aufbau einer Stimulidatei finden sich in obigem &amp;quot;AVR Studio: The comprehensive tutorial&amp;quot; und bei Atmel ([http://support.atmel.com/bin/customer.exe?=&amp;amp;action=viewKbEntry&amp;amp;id=46 What is the format of the AVR Studio simulator stimuli files?]). Der [http://www.hot.ee/nppcsoftware/ Stimuli Generator for AVR Studio] ist eine Freeware für die Erzeugung von Stimulidateien und deren grafischen Darstellung. Für dieses Programm ist .NET 1.1 oder 2.0 erforderlich. Ein Python-Script zum Umwandeln der Stimuli-Log Datei in eine vcd-Datei, welche z.B. in gtkwave betrachtet werden kann, ist [https://github.com/althebaker43/avr_lcd/blob/8b177cc492d2e9a814bd21671c2267a6d3044811/atmel_studio/avr_lcd/stim2vcd.py hier] verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== LogAnalyser ===&lt;br /&gt;
&lt;br /&gt;
[http://www.dresco.co.uk/LogAnalyser/ LogAnalyser] v1.00 (c) 2008 Jon Escombe is a graphical &amp;quot;logic analyser&amp;quot; style display of Atmel AVR Studio simulator log files. The project is built using the (excellent) zedGraph charting class library, and the source code is made available under GPL license. Requires Windows XP and .NET framework 2.0 to run.&lt;br /&gt;
&lt;br /&gt;
=== TCPSimDBG ===&lt;br /&gt;
&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=74350 TCPSimDBG] ist ein Plugin für [[AVR-Studio]] um Remote Simulating/Debugging über TCP/IP durchzuführen. Ein TCP/IP-Terminal oder Serverprogramm kann sich mit dem Simulator/Debugger von AVR-Studio verbinden und Informationen aus dem Debugprozess abrufen und ändern. Damit lassen sich virtuelle Geräte (Devices) eingerichten. (Atmel SDK Lizenz, Windows XP, 2003, Vista .NET 3.5 erforderlich)&lt;br /&gt;
&lt;br /&gt;
=== AVR Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
[http://www.coynetechsystems.com/avrlogicanalyzer/index.php AVR Logic Analyzer] von Coyne Technology Systems ist ein AVR Studio Plugin zur grafischen Anzeige der simulierten I/O-Ports.&lt;br /&gt;
(kommerziell)&lt;br /&gt;
&lt;br /&gt;
== Avrora ==&lt;br /&gt;
[http://avrora.sourceforge.net/ Avrora], a research project of the UCLA Compilers Group, is a set of simulation and analysis tools for programs written for the AVR microcontroller produced by Atmel and the Mica2 sensor nodes. Avrora contains a flexible framework for simulating and analyzing assembly programs, providing a clean Java API and infrastructure for experimentation, profiling, and analysis.&lt;br /&gt;
&lt;br /&gt;
== Proteus VSM for Atmel AVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.labcenter-electronics.com/products/avr.cfm Proteus VSM for Atmel AVR] ist ein kommerzieller AVR Simulator. &lt;br /&gt;
&lt;br /&gt;
In der Codesammlung gibt es dafür ein [http://www.mikrocontroller.net/topic/118974#1072449 Virtuelles AVR Funk Pollin Simulationsmodell] von Daniel Cagara.&lt;br /&gt;
&lt;br /&gt;
== CrossWorks for AVR == &lt;br /&gt;
&lt;br /&gt;
[http://rowley.co.uk/avr/index.htm CrossWorks for AVR] besitzt einen &#039;&#039;core simulator&#039;&#039; für AVRs. (Windows, Mac OS X, Linux, Solaris)&lt;br /&gt;
&lt;br /&gt;
== simavr ==&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/simavr simavr] is a new AVR simulator from Michel &amp;quot;buserror&amp;quot; Pollet for linux, or any platform that uses avr-gcc. It uses avr-gcc own register definition to simplify creating new targets for supported AVR devices.&lt;br /&gt;
&lt;br /&gt;
The status of the project is the core works at about 98% (ie, it works, but there is a known bug). The supported IOs are eeprom, IO ports (including pin interupts), 8 bits timers (well, one of mode of the myriad) and a simple UART that makes “printf” work.&lt;br /&gt;
&lt;br /&gt;
gdb support is planned next.&lt;br /&gt;
&lt;br /&gt;
Lizenz: GPL v3&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=86665 Diskussion bei avrfreaks.net]&lt;br /&gt;
&lt;br /&gt;
== avrtest ==&lt;br /&gt;
&lt;br /&gt;
avrtest ist ein freier AVR Core-Simulator, der zur Ausführung der avr-gcc Testsuite verwendet wird. Über spezielle &amp;quot;magische SFRs&amp;quot; können bestimmte Aktionen ausgelöst werden wie z.B. definierter Programmabbruch oder die Ausgabe eines Zeichens auf Console, so daß ein Programm wie&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    printf (&amp;quot;Hallo Welt!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
analoge Resultate bringt wie ein Programm, das nativ auf dem Rechner ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
avrtest ist Open Source, einfach gehalten und auf Geschwindigkeit getrimmt. Die Eingabe von Stimuli ist nicht möglich, und interne Peripherie wird nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
* Lizenz: GPL v2 oder höher&lt;br /&gt;
* Betriebssysteme: Windows, Linux, etc. Eigentlich keine Einschränkung, da es sich um ein Open-Source Projekt handelt.&lt;br /&gt;
&lt;br /&gt;
=== Weblinks ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/p/winavr/code/HEAD/tree/trunk/avrtest/ avrtest: Projekt und README bei sourceforge]&lt;br /&gt;
* [http://lists.gnu.org/archive/html/avr-gcc-list/2011-06/msg00015.html Beschreibung in der avr-gcc-list Mailingliste (en)]&lt;br /&gt;
&lt;br /&gt;
== BASCOM AVR ==&lt;br /&gt;
&lt;br /&gt;
In [http://www.mcselec.com/ BASCOM AVR] ist ein Simulatorteil enthalten und damit ist auch die Simulation von Geräten (LCD, UART) möglich. BASCOM AVR wird von MCS Electronics verkauft (89€) und ist ein unter Windows laufender [[Basic|BASIC]] [[Compiler]] für Atmel AVR Mikrocontroller. Eine auf 4 KB Codegröße eingeschränkte Demoversion ist kostenlos erhältlich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ldi r16,0x10&lt;br /&gt;
LDI r17,0x12&lt;br /&gt;
ADD R16,R17&lt;br /&gt;
strt : rjmp strt&lt;br /&gt;
&lt;br /&gt;
== MacSim - AVR simulator for OS X ==&lt;br /&gt;
[http://www.fracturedsoftware.com/macsimavr/ MacSim Alpha 4]&lt;br /&gt;
&lt;br /&gt;
Einschränkungen u.A.:  &amp;quot;There are currently no timers, interrupts, or EEPROM. The processor is &#039;generic&#039; and has fixed size data and instruction memories.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Restmuell</name></author>
	</entry>
</feed>