<?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=Kichi</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=Kichi"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Kichi"/>
	<updated>2026-04-10T23:16:05Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP&amp;diff=103110</id>
		<title>IRMP</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP&amp;diff=103110"/>
		<updated>2021-02-03T06:20:01Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Von &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[IRMP_-_english#top|You will find the English documentation here.]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Da RC5 nicht nur veraltet, sondern mittlerweile obsolet ist und immer mehr die elektronischen Geräte der fernöstlichen Unterhaltungsindustrie in unseren Haushalten Einzug finden, ist es an der Zeit, einen IR-Decoder zu entwickeln, der ca. 90% aller bei uns im täglichen Leben zu findenden IR-Fernbedienungen &amp;quot;versteht&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Im folgenden wird IRMP als &amp;quot;Infrarot-Multiprotokoll-Decoder&amp;quot; in allen Einzelheiten vorgestellt. Das Gegenstück, nämlich &#039;&#039;&#039;[[IRSND]]&#039;&#039;&#039; als IR-Encoder, wird in einem gesonderten [[IRSND|Artikel]] behandelt.&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrarot-Multiprotokoll-Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Anschluß eines IR-Empfängers an µC]]&lt;br /&gt;
&lt;br /&gt;
=== Unterstützte µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#top|IRMP]] ist auf verschiedenen Mikrocontroller-Familien lauffähig.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AVR&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ATtiny87,  ATtiny167&lt;br /&gt;
* ATtiny45,  ATtiny85&lt;br /&gt;
* ATtiny44,  ATtiny84&lt;br /&gt;
* ATmega8,   ATmega16,  ATmega32&lt;br /&gt;
* ATmega162&lt;br /&gt;
* ATmega164, ATmega324, ATmega644,  ATmega644P, ATmega1284&lt;br /&gt;
* ATmega88,  ATmega88P, ATmega168,  ATmega168P, ATmega328P&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XMega&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ATXmega128&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIC&#039;&#039;&#039; (CCS- und XC8/C18-Compiler)&lt;br /&gt;
&lt;br /&gt;
* PIC12F1840&lt;br /&gt;
* PIC18F4520&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;STM32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* STM32F4xx (getestet auf STM32F401RE/F411RE Nucleo, STM32F4 Discovery)&lt;br /&gt;
* STM32F10x (getestet auf STM32F103C8T6 Mini Development Board)&lt;br /&gt;
* STM32 mit HAL-Library &#039;&#039;&#039;(NEU!)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;STM8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* STM8S103F3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TI Stellaris&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* LM4F120 Launchpad (ARM Cortex M4)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ESP8266 (NEU!)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ESP8266-EVB&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TEENSY 3.0 (NEU!)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* MK20DX256VLH7 (ARM Cortex-M4 72MHz)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MBED (NEU!)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* LPC1347 Cortex-M3 mit 72 MHz&lt;br /&gt;
* LPC4088 (Embedded Artists)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ChibiOS HAL (NEU!)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Verschiedene ARM-Cortex-µCs, wie z.B. STM32, Kinetis, NRF5 etc.&lt;br /&gt;
* [https://sourceforge.net/p/chibios/svn2/HEAD/tree/trunk/os/hal/ports/ Offiziell unterstützte µC-Serien]&lt;br /&gt;
* [https://github.com/ChibiOS/ChibiOS-Contrib/tree/master/os/hal/ports weitere µC-Serien, von der Community unterstützt]&lt;br /&gt;
&lt;br /&gt;
=== Unterstützte IR-Protokolle ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#top|IRMP]] - der Infrarot-Fernbedienungsdecoder, der mehrere Protokolle auf einmal decodieren kann, beherrscht folgende Protokolle (in alphabetischer Reihenfolge):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;Unterstützte IR-Protokolle&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protokoll&lt;br /&gt;
! style=&amp;quot;width:100em&amp;quot; | Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#FAN|FAN]] || FAN, Fernsteuerung für Ventilatoren&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, z.B. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#IR60 (SDA2008)|IR60 (SDA2008)]] || Diverse europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon und andere japanische Hersteller, welche Mitglied der &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot; sind.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#MITSU_HEAVY|MITSU_HEAVY]] || Mitsubishi Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#MERLIN|MERLIN]]  || MERLIN Fernbedienung (Pollin Bestellnummer: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName und viele weitere japanische Hersteller.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#NUBERT|NUBERT]] || Nubert, z.B. Subwoofer System&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#PANASONIC|PANASONIC]] || PANASONIC Beamer&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#PENTAX|PENTAX]] || PENTAX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#RC5_+_RC5X|RC5]] || Philips und andere europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#RC6_+_RC6A|RC6A]] || Philips, Kathrein und andere Hersteller, z.B. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#RC6_+_RC6A|RC6]] || Philips und andere europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#RCCAR|RCCAR]] || RC Car: IR Fernbedienung für Modellfahrzeuge &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#RCII|RCII]] || T+A (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#RCMM|RCMM]] || Fujitsu-Siemens z.B. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#ROOMBA|ROOMBA]] || iRobot Roomba Staubsauger&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#S100|S100]] || Ähnlich zu RC5, aber 14 statt 13 Bits und 56kHz Modulation. Hersteller unbekannt.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#SAMSUNG48|SAMSUNG48]] || Div. Klimaanlagen Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (z.B. T-Home-Mediareceiver, MERLIN-Tastatur (Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#SPEAKER|SPEAKER]] || Lautsprecher Systeme wie z.B. X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#TECHNICS|TECHNICS]] || Technics&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#VINCENT|VINCENT]] || Vincent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;&#039;&#039;&#039;NEU:&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab Version 3.2 kann IRMP auch RF-Funkprotokolle (433 MHz) dekodieren.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;Unterstützte RF-Protokolle&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protokoll&lt;br /&gt;
! style=&amp;quot;width:100em&amp;quot; | Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#RF_GEN24|RF_GEN24]] || Generisches 24 Bit Format, z.B. Pollin 550666 Funksteckdose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#RF_X10|RF_X10]] || X10 PC Funkfernbedienung (Medion), Pollin 721815&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jedes dieser Protokolle ist einzeln aktivierbar. Wer möchte, kann alle Protokolle aktivieren. Wer nur ein Protokoll braucht, kann alle anderen deaktivieren. Es wird nur das vom Compiler übersetzt, was auch benötigt wird.&lt;br /&gt;
&lt;br /&gt;
Zu beachten:&lt;br /&gt;
&lt;br /&gt;
* Sollen Funk-Protokolle decodiert werden, sind sämtliche IR-Protokolle zu deaktivieren.&lt;br /&gt;
* Sollen IR-Protokolle decodiert werden, sind sämtliche RF-Protokolle (Funk) zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
=== Entstehung ===&lt;br /&gt;
&lt;br /&gt;
Der auf AVR- und PIC-µCs einsetzbare Source zu [[IRMP#top|IRMP]] entstand im Rahmen des [[Word Clock]] Projektes.&lt;br /&gt;
&lt;br /&gt;
=== Thread im Forum ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anlass für einen eigenen [[IRMP#top|IRMP]]-Artikel ist folgender Thread in der Codesammlung: [http://www.mikrocontroller.net/topic/162119 Beitrag: IRMP - Infrared Multi Protocol Decoder]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== IR-Protokolle ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC-Protokoll, Reichelt RGB-LED-Fernbedienung, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Einige Hersteller verwenden ihr eigenes hausinterne Protokoll, dazu gehören u.a. Sony, Samsung und Matsushita. Philips hat [[IRMP#RC5 + RC5X|RC5]] entwickelt und natürlich auch selbst benutzt. [[IRMP#RC5 + RC5X|RC5]] galt damals in Europa als &#039;&#039;das&#039;&#039; Standard-IR-Protokoll, welches von vielen europäischen Herstellern übernommen wurde. Mittlerweile ist [[IRMP#RC5 + RC5X|RC5]] fast gar nicht mehr anzutreffen - man kann es eigentlich als &amp;quot;ausgestorben&amp;quot; abhaken. Der Nachfolger [[IRMP#RC6_+_RC6A|RC6]] wird zwar noch in einigen aktuellen europäischen Geräten eingesetzt, ist aber auch nur vereinzelt vorzufinden.&lt;br /&gt;
&lt;br /&gt;
Auch die japanischen Hersteller haben versucht, einen eigenen Standard zu etablieren, nämlich das sog. [[IRMP#KASEIKYO|Kaseikyo]]- (oder auch &amp;quot;Japan-&amp;quot;) Protokoll. Dieses ist mit einer Bitlänge von 48 sehr universell und allgemein verwendbar. Richtig durchgesetzt hat es sich aber bis heute nicht - auch wenn man es hier und da im heimischen Haushalt vorfindet.&lt;br /&gt;
&lt;br /&gt;
Heutzutage wird (auch vornehmlich bei japanischen Geräten) das [[IRMP#NEC_+_extended_NEC|NEC]]-Protokoll verwendet - und zwar von den unterschiedlichsten (Marken- und auch Noname-)Herstellern. Ich schätze den &amp;quot;Marktanteil&amp;quot; auf ca. 80% beim [[IRMP#NEC_+_extended_NEC|NEC]]-Protokoll. Fast alle Fernbedienungen im alltäglichen Einsatz verwenden bei mir den [[IRMP#NEC_+_extended_NEC|NEC]]-IR-Code. Das fängt beim Fernseher an, geht über vom DVD-Player zur Notebook-Fernbedienung und reicht bis zur Noname-MultiMedia-Festplatte - um nur einige Beispiele zu nennen.&lt;br /&gt;
&lt;br /&gt;
== Kodierungen ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP#top|IRMP]] unterstützt folgende IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP#Pulse Distance|Pulse Distance]], typ. Beispiel: [[IRMP#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP#Pulse Width|Pulse Width]], typ. Beispiel: [[IRMP#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP#Biphase|Biphase (Manchester)]], typ. Beispiel: Philips [[IRMP#RC5_+_RC5X|RC5]], [[IRMP#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP#Pulse Position|Pulse Position (NRZ)]], typ. Beispiel: [[IRMP#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP#Pulse Distance Width|Pulse Distance Width]], typ. Beispiel: [[IRMP#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
Die Pulse werden dabei moduliert - üblicherweise mit 36kHz oder 38kHz - um Umwelteinflüsse wie Raum- oder Sonnenlicht ausfiltern zu können.&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
Eine Pulse Distance Kodierung erkennt man an der folgenden Regel:&lt;br /&gt;
&lt;br /&gt;
* es gibt nur &#039;&#039;&#039;eine Pulslänge&#039;&#039;&#039; und &#039;&#039;&#039;zwei verschiedene Pausenlängen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Pulse Width ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Pulse-Width.png|miniatur|Pulse Width Coding]]&lt;br /&gt;
&lt;br /&gt;
Bei der Pulse Width Kodierung gilt die Regel:&lt;br /&gt;
&lt;br /&gt;
* es gibt &#039;&#039;&#039;zwei verschiedene Pulslängen&#039;&#039;&#039; und nur &#039;&#039;&#039;eine Pausenlänge&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Width ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Pulse-Distance-Width.png|miniatur|Pulse Distance Width Coding]]&lt;br /&gt;
&lt;br /&gt;
Dies ist ein Mischmasch aus Pulse Distance und Pulse Width Coding.&lt;br /&gt;
&lt;br /&gt;
Also:&lt;br /&gt;
&lt;br /&gt;
* es gibt &#039;&#039;&#039;zwei verschiedene Pulslängen&#039;&#039;&#039; und &#039;&#039;&#039;zwei verschiedene Pausenlängen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Biphase ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Biphase-Coding.png|miniatur|Biphase Coding]]&lt;br /&gt;
&lt;br /&gt;
Bei der Biphase Kodierung entscheidet die Reihenfolge von Puls und Pause über den Wert des Bits.&lt;br /&gt;
&lt;br /&gt;
Damit erkennt man ein Biphase-Coding an folgendem Kriterium:&lt;br /&gt;
&lt;br /&gt;
* es kommen genau &#039;&#039;&#039;eine&#039;&#039;&#039; Pausen- und eine Pulslänge, sowie jeweils die &#039;&#039;&#039;doppelten&#039;&#039;&#039; Puls-/Pausenlängen vor&lt;br /&gt;
&lt;br /&gt;
Normalerweise sind die Längen für die Pulse und Pausen gleich, d.h. die Signalform ist symmetrisch. IRMP erkennt aber auch Protokolle, die mit unterschiedlichen Puls-/Pause-Längen arbeiten. Dies ist zum Beispiel bei dem [[IRMP#A1TVBOX|A1TVBOX]]-Protokoll der Fall.&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Pulse-Position.png|miniatur|Pulse Position Coding]]&lt;br /&gt;
&lt;br /&gt;
Die Pulse Position Kodierung kennt man von den üblichen UARTs. Hier hat jedes Bit eine feste Länge. Je nach Wert (0 oder 1) ist es ein Puls oder eine Pause.&lt;br /&gt;
&lt;br /&gt;
Typisches Kriterium für ein &#039;&#039;&#039;Pulse Position Protokoll&#039;&#039;&#039; ist:&lt;br /&gt;
&lt;br /&gt;
* es kommen &#039;&#039;&#039;Vielfache&#039;&#039;&#039; einer Grund-Puls-/Pausenlänge vor&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eine tabellarische Aufstellung der verschiedenen IR-Protokolle findet man hier: [[IRMP#Die_IR-Protokolle_im_Detail|Die IR-Protokolle im Detail]].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die dort angegebenen Timingwerte sind Idealwerte. Bei einigen Fernbedienungen in der Praxis weichen sie um bis zu 40% voneinander ab. Deshalb arbeitet [[IRMP#top|IRMP]] mit Minimum-/Maximumsgrenzen, um bzgl. des Zeitverhaltens tolerabel zu sein.&lt;br /&gt;
&lt;br /&gt;
== Protokoll-Erkennung ==&lt;br /&gt;
&lt;br /&gt;
Die meisten der von [[IRMP#top|IRMP]] decodierten Protokolle haben etwas gemeinsames: Sie weisen ein Start-Bit auf, welches vom Timing her ausgezeichnet, d.h. einmalig ist.&lt;br /&gt;
&lt;br /&gt;
Anhand dieses Start-Bit-Timings werden meistens die verschiedenen Protokolle unterschieden. [[IRMP#top|IRMP]] misst also das Timing des Start-Bits und stellt dann &amp;quot;on-the-fly&amp;quot; seine Timingtabellen auf das erkannte Protokoll um, damit die nach dem Start-Bit gesandten Daten in einem Rutsch eingelesen werden können, ohne das komplette Telegramm (Frame) erst speichern zu müssen. [[IRMP#top|IRMP]] wartet also nicht darauf, dass ein kompletter Frame eingelesen wurde, sondern legt direkt nach der ersten Pulserkennung los.&lt;br /&gt;
&lt;br /&gt;
Ist das gelesene Start-Bit nicht eindeutig, fährt [[IRMP#top|IRMP]] &amp;quot;mehrspurig&amp;quot;, d.h. es werden zum Beispiel zwei mögliche Protokolle gleichzeitig verfolgt. Sobald aus Plausibilitätsgründen eines der beiden Protokolle nicht mehr möglich sein kann, wird komplett auf das andere Protokoll gewechselt.&lt;br /&gt;
&lt;br /&gt;
Realisiert wird die Erkennung über eine [[Statemachine]], die [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|timergesteuert]] über eine [[Interrupt|Interruptroutine]] in regelmäßigen Abständen (üblicherweise 15.000 mal in der Sekunde) aufgerufen wird. Die [[Statemachine]] kennt (unter anderem) folgende Zustände:&lt;br /&gt;
&lt;br /&gt;
* Erkenne den ersten Puls des Start-Bits&lt;br /&gt;
* Erkenne die Pause des Start-Bits&lt;br /&gt;
* Erkenne den Puls des ersten Datenbits&lt;br /&gt;
&lt;br /&gt;
Danach sind die Puls/Pause-Längen des Startbits bekannt. Nun werden alle vom Anwender aktivierten Protokolle nach diesen Längen durchsucht. Wurde ein Protokoll gefunden, werden die Timing-Tabellen dieses Protokolls geladen und im weiteren geprüft, ob die nachfolgenden Puls-/Pause-Zeiten innerhalb der geladenen Werte übereinstimmen.&lt;br /&gt;
&lt;br /&gt;
Es geht also weiter in der [[Statemachine]] mit folgenden Zuständen&lt;br /&gt;
&lt;br /&gt;
* Erkenne die Pausen der Datenbits&lt;br /&gt;
* Erkenne die Pulse der Datenbits&lt;br /&gt;
* Prüfe Timing. Wenn abweichend, schalte um auf ein anderes noch in Frage kommendes IR-Protokoll, ansonsten schalte [[Statemachine]] komplett zurück&lt;br /&gt;
* Erkenne das Stop-Bit, falls das Protokoll eines vorsieht&lt;br /&gt;
* Prüfe Daten auf Plausibilität, wie CRC oder andere redundante Datenbits&lt;br /&gt;
* Wandle die Daten in Geräte-Adresse und Kommando&lt;br /&gt;
* Erkenne Wiederholungen durch längere Tastendrücke, setze entsprechendes Flag&lt;br /&gt;
&lt;br /&gt;
Tatsächlich ist die [[Statemachine]] noch etwas komplizierter, da manche Protokolle gar kein Start-Bit (z.B. [[IRMP#DENON|Denon]]) bzw. mehrere Start-Bits (z.B. 4 bei [[IRMP#B.26O|B&amp;amp;O]]) haben bzw. mitten im Frame ein weiteres Synchronisierungs-Bit (z.B. [[IRMP#SAMSUNG|Samsung]]) vorsehen. Diese besonderen Bedingungen werden durch protokollspezifische &amp;quot;Spezialbehandlungen&amp;quot; im Code abgefangen.&lt;br /&gt;
&lt;br /&gt;
Das Umschalten auf ein anderes Protokoll kann mehrfach während des Empfangs des Frames geschehen, z.B. von [[IRMP#NEC42|NEC42]] (42 Bit) auf [[IRMP#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), wenn vorzeitig ein zusätzliches Synchronisierungsbit erkannt wurde, oder von [[IRMP#NEC + extended NEC|NEC]]/[[IRMP#NEC42|NEC42]] (32/42 Bit) auf [[IRMP#JVC|JVC]] (16 Bit), wenn das Stop-Bit vorzeitig auftrat. Schwierig wird es dann, wenn zwei mögliche Protokolle nach Erkennung des Start-Bits unterschiedliche Kodierungen verwenden, z.B. wenn das eine Protokoll ein [[IRMP#Pulse Distance|Pulse Distance Coding]] und das andere ein [[IRMP#Biphase|Biphase Coding (Manchester)]] benutzt. Hier speichert [[IRMP#top|IRMP]] die jeweils völlig verschieden ermittelten Bits für beide Codierungen, um dann später die einen oder anderen&lt;br /&gt;
Werte wieder zu verwerfen.&lt;br /&gt;
&lt;br /&gt;
Desweiteren senden einige Fernbedienungen bei bestimmten Protokollen aus Gründen der Redundanz (Fehlererkennung) oder wegen längeren Tastendrucks Wiederholungsframes. Diese werden von IRMP unterschieden: Die für die Fehlererkennung zuständigen Frames werden von IRMP geprüft, aber nicht an die Anwendung zurückgegeben, die anderen werden als langer Tastendruck erkannt und entsprechend von IRMP gekennzeichnet.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 3.2.6, Stand vom 27.01.2021&lt;br /&gt;
&lt;br /&gt;
Download Stable Version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
Aktuelle Entwicklungsversion von [[IRMP#top|IRMP]] &amp;amp; [[IRSND#top|IRSND]]:&lt;br /&gt;
&lt;br /&gt;
* SVN-Link: [svn://mikrocontroller.net/irmp/ SVN]&lt;br /&gt;
* SVN-Browser: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP im SVN]&lt;br /&gt;
* Download Tarball: [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball]&lt;br /&gt;
&lt;br /&gt;
Download als Arduino Library: [https://github.com/ukw100/IRMP GitHub] oder in der Arduino IDE &amp;quot;&#039;&#039;Tools / Manage Libraries...&#039;&#039;&amp;quot; benutzen und nach &amp;quot;&#039;&#039;IRMP&#039;&#039;&amp;quot; suchen. Dies ist eine speziell an Arduino angepasste Version. Diese Variante hinkt manchmal der aktuellen Version etwas hinterher.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Software-Änderungen kann man sich hier anschauen: [http://www.mikrocontroller.net/articles/IRMP#Software-Historie_IRMP Software-Historie IRMP]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Lizenz ==&lt;br /&gt;
&lt;br /&gt;
IRMP ist Open Source Software und wird unter der [https://www.gnu.org/licenses/old-licenses/gpl-2.0.html GPL v2] (oder jeder höheren Version) freigegeben.&lt;br /&gt;
&lt;br /&gt;
== Source-Code ==&lt;br /&gt;
&lt;br /&gt;
Der Source-Code lässt sich einfach für AVR-µCs übersetzen, indem man unter Windows die Projekt-Datei irmp.aps in das AVR Studio 4 lädt.&lt;br /&gt;
&lt;br /&gt;
Für andere Entwicklungsumgebungen ist leicht ein Projekt bzw. Makefile angelegt. Zum Source gehören:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - Der eigentliche IR-Decoder&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - Sämtliche Definitionen zu den IR-Protokollen&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - Vom Zielsystem abhängige Definitionen für AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include-Datei für die Applikation&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - Anzupassende Konfigurationsdatei &lt;br /&gt;
&lt;br /&gt;
Beispiel Anwendungen (main-Funktionen und nötige Timer-Initialisierungen):&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp-main-avr.c?view=markup irmp-main-avr.c] - AVR&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp-main-avr-uart.c?view=markup irmp-main-avr-uart.c] - AVR mit UART-Ausgabe&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp-main-pic-xc8.c?view=markup irmp-main-pic-xc8.c] - PIC18F4520&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp-main-pic-12F1840.c?view=markup irmp-main-pic-12F1840.c] - PIC12F1840&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp-main-stm32.c?view=markup irmp-main-stm32.c] - STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp-main-stellaris-arm.c?view=markup irmp-main-stellaris-arm.c] - TI Stellaris LM4F120 Launchpad&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp-main-esp8266.c?view=markup irmp-main-esp8266.c] - ESP8266&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp-main-mbed.cpp?view=markup irmp-main-mbed.cpp] - MBED&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/examples/Arduino/Arduino.ino?view=markup examples/Arduino/Arduino.ino] - Teensy 3.x&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp-main-chibios.c?view=markup irmp-main-chibios.c] - ChibiOS&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;WICHTIG: Im Applikations-Source sollte nur irmp.h per include eingefügt werden, also lediglich:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;irmp.h&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle anderen Include-Dateien werden automatisch über irmp.h &amp;quot;eingefügt&amp;quot;. Siehe dazu auch die Beispieldatei irmp-main-avr.c.&lt;br /&gt;
&lt;br /&gt;
Desweiteren muss die Preprocessor-Konstante &#039;&#039;&#039;F_CPU im Projekt bzw. Makefile&#039;&#039;&#039; gesetzt werden. Diese sollte mindestens den Wert 8000000UL haben, der Prozessor sollte also zumindest mit 8 MHz laufen.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Auch auf PIC-Prozessoren ist [[IRMP#top|IRMP]] lauffähig. Für den PIC-CCS-Compiler sind entsprechende Preprocessor-Konstanten bereits gesetzt, so dass man [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] direkt in der CCS-Entwicklungsumgebung verwenden kann. Lediglich eine kleine Interrupt-Routine wie&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void  TIMER2_isr(void) &lt;br /&gt;
{&lt;br /&gt;
 irmp_ISR ();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ist hinzuzufügen, wobei man den Interrupt auf 66µs (also 15kHz) stellt. &lt;br /&gt;
&lt;br /&gt;
Für AVR-Prozessoren ist ein Beispiel für die Anwendung von [[IRMP#top|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/irmp-main-avr.c?view=markup irmp-main-avr.c] zu finden - im wesentlichen geht es da um die [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]]-Initialisierung und den Abruf der empfangenen IR-Telegramme. Das empfangene Protokoll, die Geräte-Adresse und der Kommando-Code wird dann in der AVR-Version auf dem HW-UART ausgegeben.&lt;br /&gt;
&lt;br /&gt;
Für das Stellaris LM4F120 Launchpad von TI (ARM Cortex M4) ist eine entsprechende Timer-Initialisierungsfunktion in [http://www.mikrocontroller.net/svnbrowser/irmp/irmp-main-stellaris-arm.c?view=markup irmp-main-stellaris-arm.c] bereits integriert.&lt;br /&gt;
&lt;br /&gt;
Ebenso kann [[IRMP#top|IRMP]] auf STM32-Mikroprozessoren eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== avr-gcc-Optimierungen ===&lt;br /&gt;
&lt;br /&gt;
Ab Version avr-gcc 4.7.x kann die [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] genutzt werden, um den Aufruf der externen Funktion irmp_ISR() aus der eigentlichen ISR effizienter zu machen. Das verbessert das Zeitverhalten der ISR etwas.&lt;br /&gt;
&lt;br /&gt;
Zu den sonst schon üblichen Compiler- und Linker-Optionen kommen noch folgende dazu:&lt;br /&gt;
&lt;br /&gt;
* Zusätzliche Compiler-Option: -flto&lt;br /&gt;
* Zusätzliche Linker-Optionen: -flto -Os&lt;br /&gt;
&lt;br /&gt;
Vergisst man (unter Windows?) die zusätzliche Linker-Option -Os, wird das Binary allerdings wesentlich größer, da dann nicht mehr optimiert wird. Auch muss -flto an den Linker übergeben werden, weil sonst die LTO-Optimierung nicht mehr greift.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration von [[IRMP#top|IRMP]] wird über Parameter in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] vorgenommen, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP#F_INTERRUPTS|Anzahl Interrupts pro Sekunde]]&lt;br /&gt;
* [[IRMP#IRMP_SUPPORT_xxx_PROTOCOL|Unterstützte IR-Protokolle]]&lt;br /&gt;
* [[IRMP#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|Hardware-Pin zum IR-Empfänger]]&lt;br /&gt;
* [[IRMP#IRMP_LOGGING|IR-Logging]]&lt;br /&gt;
&lt;br /&gt;
=== Einstellungen in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#top|IRMP]] decodiert sämtliche oben aufgelisteten Protokolle in einer ISR. Dafür sind einige Angaben nötig. Diese werden in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] eingestellt.&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Anzahl der Interrupts pro Sekunde. Der Wert kann zwischen 10000 und 20000 eingestellt werden. Je höher der Wert, desto besser die Auflösung und damit die Erkennung. Allerdings erkauft man sich diesen Vorteil mit erhöhter CPU-Last. Der Wert 15000 ist meist ein guter Kompromiss.&lt;br /&gt;
&lt;br /&gt;
Standardwert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define F_INTERRUPTS                            15000      // interrupts per second&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf AVR-Prozessoren wird in der Beispielroutine in [http://www.mikrocontroller.net/svnbrowser/irmp/irmp-main-avr.c?view=markup irmp-main-avr.c] der Timer1 mit 16-Bit-Genauigkeit verwendet. Sollte der Timer1 aus irgendwelchen Gründen nicht verfügbar sein, kann man alternativ auch den Timer2 mit 8-Bit-Genauigkeit verwenden.&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird dieser dann konfiguriert über:&lt;br /&gt;
&lt;br /&gt;
Für ATmega8/ATmega16/ATmega32:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
OCR2   =  (uint8_t) ((F_CPU / F_INTERRUPTS) / 8) - 1 + 0.5);   // Compare Register OCR2&lt;br /&gt;
TCCR2  = (1 &amp;lt;&amp;lt; WGM21) | (1 &amp;lt;&amp;lt; CS21);                           // CTC Mode, prescaler = 8&lt;br /&gt;
TIMSK  = 1 &amp;lt;&amp;lt; OCIE2;                                           // enable timer2 interrupt&lt;br /&gt;
&lt;br /&gt;
ISR(TIMER2_COMP_vect)&lt;br /&gt;
{&lt;br /&gt;
  (void) irmp_ISR(); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für ATmega88/ATmega168/ATmega328:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
OCR2A   =  (uint8_t) ((F_CPU / F_INTERRUPTS) / 8) - 1 + 0.5);   // Compare Register OCR2&lt;br /&gt;
TCCR2A  = (1 &amp;lt;&amp;lt; WGM21);                                         // CTC Mode, prescaler = 8 &lt;br /&gt;
TCCR2B  =  (1 &amp;lt;&amp;lt; CS21);                                         // CTC Mode, prescaler = 8&lt;br /&gt;
TIMSK2  = 1 &amp;lt;&amp;lt; OCIE2A;                                          // enable timer2 interrupt&lt;br /&gt;
&lt;br /&gt;
ISR(TIMER2_COMPA_vect)&lt;br /&gt;
{&lt;br /&gt;
   (void) irmp_ISR(); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei anderen AVR-µCs empfiehlt sich ein Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Man sollte in diesem Fall nicht vergessen, auch die Interrupt-Routine an den Timer2 anzupassen:&lt;br /&gt;
&lt;br /&gt;
==== IRMP_SUPPORT_xxx_PROTOCOL ====&lt;br /&gt;
&lt;br /&gt;
Hier lässt sich einstellen, welche Protokolle von [[IRMP#top|IRMP]] unterstützt werden sollen. Die Standardprotokolle sind bereits aktiv. Möchte man weitere Protokolle einschalten bzw. einige aus Speicherplatzgründen deaktivieren, sind die entsprechenden Werte in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] anzupassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// typical protocols, disable here!             Enable  Remarks                 F_INTERRUPTS            Program Space&lt;br /&gt;
#define IRMP_SUPPORT_SIRCS_PROTOCOL             1       // Sony SIRCS           &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NEC_PROTOCOL               1       // NEC + APPLE          &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRMP_SUPPORT_SAMSUNG_PROTOCOL           1       // Samsung + Samsung32  &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRMP_SUPPORT_MATSUSHITA_PROTOCOL        1       // Matsushita           &amp;gt;= 10000                  ~50 bytes&lt;br /&gt;
#define IRMP_SUPPORT_KASEIKYO_PROTOCOL          1       // Kaseikyo             &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
&lt;br /&gt;
// more protocols, enable here!                 Enable  Remarks                 F_INTERRUPTS            Program Space&lt;br /&gt;
#define IRMP_SUPPORT_DENON_PROTOCOL             0       // DENON, Sharp         &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRMP_SUPPORT_RC5_PROTOCOL               0       // RC5                  &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRMP_SUPPORT_RC6_PROTOCOL               0       // RC6 &amp;amp; RC6A           &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRMP_SUPPORT_JVC_PROTOCOL               0       // JVC                  &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NEC16_PROTOCOL             0       // NEC16                &amp;gt;= 10000                 ~100 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NEC42_PROTOCOL             0       // NEC42                &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRMP_SUPPORT_IR60_PROTOCOL              0       // IR60 (SDA2008)       &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRMP_SUPPORT_GRUNDIG_PROTOCOL           0       // Grundig              &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRMP_SUPPORT_SIEMENS_PROTOCOL           0       // Siemens Gigaset      &amp;gt;= 15000                 ~550 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NOKIA_PROTOCOL             0       // Nokia                &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
&lt;br /&gt;
// exotic protocols, enable here!               Enable  Remarks                 F_INTERRUPTS            Program Space&lt;br /&gt;
#define IRMP_SUPPORT_BOSE_PROTOCOL              0       // BOSE                 &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRMP_SUPPORT_KATHREIN_PROTOCOL          0       // Kathrein             &amp;gt;= 10000                 ~200 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NUBERT_PROTOCOL            0       // NUBERT               &amp;gt;= 10000                  ~50 bytes&lt;br /&gt;
#define IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL      0       // Bang &amp;amp; Olufsen       &amp;gt;= 10000                 ~200 bytes&lt;br /&gt;
#define IRMP_SUPPORT_RECS80_PROTOCOL            0       // RECS80 (SAA3004)     &amp;gt;= 15000                  ~50 bytes&lt;br /&gt;
#define IRMP_SUPPORT_RECS80EXT_PROTOCOL         0       // RECS80EXT (SAA3008)  &amp;gt;= 15000                  ~50 bytes&lt;br /&gt;
#define IRMP_SUPPORT_THOMSON_PROTOCOL           0       // Thomson              &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NIKON_PROTOCOL             0       // NIKON camera         &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NETBOX_PROTOCOL            0       // Netbox keyboard      &amp;gt;= 10000                 ~400 bytes (PROTOTYPE!)&lt;br /&gt;
#define IRMP_SUPPORT_ORTEK_PROTOCOL             0       // ORTEK (Hama)         &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRMP_SUPPORT_TELEFUNKEN_PROTOCOL        0       // Telefunken 1560      &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRMP_SUPPORT_FDC_PROTOCOL               0       // FDC3402 keyboard     &amp;gt;= 10000 (better 15000)  ~150 bytes (~400 in combination with RC5)&lt;br /&gt;
#define IRMP_SUPPORT_RCCAR_PROTOCOL             0       // RC Car               &amp;gt;= 10000 (better 15000)  ~150 bytes (~500 in combination with RC5)&lt;br /&gt;
#define IRMP_SUPPORT_ROOMBA_PROTOCOL            0       // iRobot Roomba        &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRMP_SUPPORT_RUWIDO_PROTOCOL            0       // RUWIDO, T-Home       &amp;gt;= 15000                 ~550 bytes&lt;br /&gt;
#define IRMP_SUPPORT_A1TVBOX_PROTOCOL           0       // A1 TV BOX            &amp;gt;= 15000 (better 20000)  ~300 bytes&lt;br /&gt;
#define IRMP_SUPPORT_LEGO_PROTOCOL              0       // LEGO Power RC        &amp;gt;= 20000                 ~150 bytes&lt;br /&gt;
#define IRMP_SUPPORT_RCMM_PROTOCOL              0       // RCMM 12,24, or 32    &amp;gt;= 20000                 ~150 bytes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jedes von [[IRMP#top|IRMP]] unterstützte IR-Protokoll &amp;quot;verbrät&amp;quot; ungefähr den oben angegebenen Speicher an Code. Hier kann man Optimierungen vornehmen: Zum Beispiel ist die Modulationsfrequenz von 455kHz beim [[IRMP#B&amp;amp;O|B&amp;amp;O]]-Protokoll weitab von den Frequenzen, die von den anderen Protokollen verwendet werden. Hier braucht man evtl. andere IR-Empfänger, anderenfalls kann man diese Protokolle einfach deaktiveren. Zum Beispiel kann man mit einem TSOP1738 kein [[IRMP#B&amp;amp;O|B&amp;amp;O]]-Protokoll (455kHz) mehr empfangen. &lt;br /&gt;
&lt;br /&gt;
Ausserdem werden die Protokolle [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP#FDC|FDC]]/[[IRMP#RCCAR|RCCAR]] erst ab einer Scan-Frequenz von ca. 15kHz zuverlässig erkannt. Bei [[IRMP#LEGO|LEGO]] sind es sogar 20kHz. Wenn man also diese Protokolle nutzen will, muss man [[IRMP#F_INTERRUPTS|F_INTERRUPTS]] entsprechend anpassen, sonst erscheint beim Übersetzen eine entsprechende Warnung und die entsprechenden Protokolle werden dann automatisch abgeschaltet.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
Über diese Konstanten wird der Pin am µC beschrieben, an welchem der IR-Empfänger angeschlossen ist.&lt;br /&gt;
&lt;br /&gt;
Standardwert ist PORT B6:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for ATMEL AVR&lt;br /&gt;
 *----------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#if defined (ATMEL_AVR)                         // use PB6 as IR input on AVR&lt;br /&gt;
#  define IRMP_PORT_LETTER                      B&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese beiden Werte sind an den tatsächlichen Hardware-Pin des µCs anzupassen. &lt;br /&gt;
&lt;br /&gt;
Dies gilt ebenso für die STM32-µCs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for ARM STM32&lt;br /&gt;
 *----------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (ARM_STM32)                       // use C13 as IR input on STM32&lt;br /&gt;
#  define IRMP_PORT_LETTER                      C&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       13&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird die STM32-HAL Library verwendet, definiert man die beiden Konstanten IRSND_Transmit_GPIO_Port und IRSND_Transmit_Pin in STM32Cube (Main.h). In diesem Fall ist hier nichts weiter anzupassen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 * ARM STM32 with HAL section - don&#039;t change here, define IRSND_Transmit_GPIO_Port &amp;amp; IRSND_Transmit_Pin in STM32Cube (Main.h)&lt;br /&gt;
 *----------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (ARM_STM32_HAL)                                           // IRSND_Transmit_GPIO_Port &amp;amp; IRSND_Transmit_Pin must be defined in STM32Cube&lt;br /&gt;
#  define IRSND_PORT_LETTER                     IRSND_Transmit_GPIO_Port//Port of Transmit PWM Pin e.g.&lt;br /&gt;
#  define IRSND_BIT_NUMBER                      IRSND_Transmit_Pin      //Pim of Transmit PWM Pin e.g.&lt;br /&gt;
#  define IRSND_TIMER_HANDLER                   htim2                   //Handler of Timer e.g. htim (see tim.h)&lt;br /&gt;
#  define IRSND_TIMER_CHANNEL_NUMBER            TIM_CHANNEL_2           //Channel of the used Timer PWM Pin e.g. TIM_CHANNEL_2&lt;br /&gt;
#  define IRSND_TIMER_SPEED_APBX                64000000                //Speed of the corresponding APBx. (see STM32CubeMX: Clock Configuration)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier der entsprechende Abschnitt für STM8-µCs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei den PIC-Prozessoren gibt es lediglich die anzupassende Konstante &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - je nach Compiler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC C18 compiler&lt;br /&gt;
 *----------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_C18)                         // use RB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PORTBbits.RB4&lt;br /&gt;
&lt;br /&gt;
/*----------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC CCS compiler&lt;br /&gt;
 *----------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_CCS)                         // use PB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PIN_B4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei ChibiOS HAL definiert man in der Board-Config (board.chcfg) von ChibiOS einen Pin mit dem Namen &#039;&#039;&#039;IR_IN&#039;&#039;&#039; und generiert die Boarddatei neu. Wenn man einen anderen Namen für den Pin verwenden möchte, kann man auch die Konstante &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; &lt;br /&gt;
in der irmpconfig.h anpassen. Vor den Namen des Pins aus der Board-Config dann &amp;quot;LINE_&amp;quot; voranstellen, da in IRMP die &lt;br /&gt;
&amp;quot;Line&amp;quot;-Variante der PAL-Schnittstelle verwendet wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for ChibiOS HAL&lt;br /&gt;
 *----------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined(_CHIBIOS_HAL_)&lt;br /&gt;
#  define IRMP_PIN                              LINE_IR_IN              // use pin names as defined in the board config file, prefixed with &amp;quot;LINE_&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IRMP_HIGH_ACTIVE ====&lt;br /&gt;
&lt;br /&gt;
Standardwert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#  define IRMP_HIGH_ACTIVE                      0                       // set to 1 if you use a RF receiver!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setzt man einen Funkempfänger statt einem IR-Sensor ein, um Funkprotokolle zu decodieren, so arbeiten diese in der Regel mit aktivem High-Pegel. Deshalb sollte man diesen Wert dann auf 1 setzen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;&#039;&#039;&#039;NEU:&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IRMP_ENABLE_RELEASE_DETECTION ====&lt;br /&gt;
&lt;br /&gt;
Standardwert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#  define IRMP_ENABLE_RELEASE_DETECTION         0                       //  enable detection of key releases&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird dieser Wert auf 1 gesetzt, kann das Loslassen einer Fernbedienungstaste detektiert werden. Die Funktion irmp_get_data() setzt dann im Struct-Member irmp_data.flags das Bit IRMP_FLAG_RELEASE, sobald das Senden eines Codes aufgehört hat. Ein praktisches Beispiel dafür findet man im Kapitel &#039;&#039;&#039;[[IRMP#.22Entprellen.22_von_Tasten|Entprellen von Tasten]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_USE_CALLBACK ====&lt;br /&gt;
&lt;br /&gt;
Standardwert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_USE_CALLBACK                      0        // flag: 0 = don&#039;t use callbacks, 1 = use callbacks, default is 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man Callbacks einschaltet, wird bei jeder Pegeländerung des Eingangs eine Callback-Funktion aufgerufen. Dies kann zum Beispiel dafür verwendet werden, das eingehende IR-Signal sichtbar zu machen, also als Signal an einem weiteren Pin auszugeben.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define LED_PORT PORTD                                  // LED at PD6&lt;br /&gt;
#define LED_DDR  DDRD&lt;br /&gt;
#define LED_PIN  6&lt;br /&gt;
&lt;br /&gt;
/*------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 * Called (back) from IRMP module&lt;br /&gt;
 * This example switches a LED (which is connected to Vcc)&lt;br /&gt;
 *-------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
void&lt;br /&gt;
led_callback (uint_fast8_t on)&lt;br /&gt;
{&lt;br /&gt;
    if (on)&lt;br /&gt;
    {&lt;br /&gt;
       LED_PORT &amp;amp;= ~(1 &amp;lt;&amp;lt; LED_PIN);&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
       LED_PORT |= (1 &amp;lt;&amp;lt; LED_PIN);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int&lt;br /&gt;
main ()&lt;br /&gt;
{&lt;br /&gt;
    ...&lt;br /&gt;
    irmp_init ();&lt;br /&gt;
&lt;br /&gt;
    LED_DDR |= (1 &amp;lt;&amp;lt; LED_PIN);         // LED pin to output&lt;br /&gt;
    LED_PORT |= (1 &amp;lt;&amp;lt; LED_PIN);        // switch LED off (active low)&lt;br /&gt;
    irmp_set_callback_ptr (led_callback);&lt;br /&gt;
&lt;br /&gt;
    sei ();&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IRMP_USE_IDLE_CALL ====&lt;br /&gt;
&lt;br /&gt;
Normalerweise wird die Funktion irmp_ISR() ständig mit der Frequenz F_INTERRUPTS (10-20kHz) aufgerufen. Der Controller&lt;br /&gt;
kann daher kaum in einen energiesparenden Sleep-Modus wechseln, bzw. muss ständig aus diesem wieder aufwachen. Kommt&lt;br /&gt;
es auf den Stromverbrauch an, wie z.B. bei Batteriebetrieb, ist diese Vorgehensweise nicht optimal.&lt;br /&gt;
&lt;br /&gt;
Wenn man &#039;&#039;&#039;IRMP_USE_IDLE_CALL&#039;&#039;&#039; aktiviert, erkennt IRMP wenn kein IR-Empfang im Gange ist und ruft dann die Funktion &lt;br /&gt;
&#039;&#039;&#039;irmp_idle()&#039;&#039;&#039; auf. Diese ist controllerspezifisch und muss vom Nutzer bereitgestellt und hinzugelinkt werden. Dort kann dann in den Empfangspausen der Controller schlafen gelegt und so der Energieverbrauch reduziert werden.&lt;br /&gt;
&lt;br /&gt;
Empfohlen wird in der irmp_idle() den Timer-Interrupt zu deaktivieren und statt dessen einen Pinchange-Interrupt zu aktivieren.  Danach kann der Controller schlafen geschickt werden. Wird eine fallende Flanke auf dem IR-Eingang erkannt, wird der Pinchange-Interrupt deaktiviert, der Timer wieder aktiviert und sofort irmp_ISR() aufgerufen. Ein Beispiel für die Verwendung von irmp_idle() findet sich in [http://www.mikrocontroller.net/svnbrowser/irmp/irmp-main-chibios.c?view=markup irmp-main-chibios.c].&lt;br /&gt;
&lt;br /&gt;
IRMP rein anhand von Pinchange-Interrupts und ohne Timer-Interrupts zu betreiben ist nicht vorgesehen.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_USE_EVENT ====&lt;br /&gt;
&lt;br /&gt;
Wenn man IRMP zusammen mit ChibiOS/RT oder ChibiOS/NIL verwendet, kann man deren Event-System verwenden um einen&lt;br /&gt;
Thread aufzuwecken sobald neue IR-Daten empfangen und decodiert wurden.&lt;br /&gt;
&lt;br /&gt;
Dazu setzt man in der irmpconfig.h die Konstante &#039;&#039;&#039;IRMP_USE_EVENT&#039;&#039;&#039; auf 1. &#039;&#039;&#039;IRMP_EVENT_BIT&#039;&#039;&#039; definiert den&lt;br /&gt;
Bitwert in der Event-Bitmaske, der den IRMP-Event symbolisieren soll. Mit &#039;&#039;&#039;IRMP_EVENT_THREAD_PTR&#039;&#039;&#039; wird der&lt;br /&gt;
Variablenname des Threadpointers festgelegt, an den der Event gesendet wird.&lt;br /&gt;
&lt;br /&gt;
In der irmpconfig.h sieht das in der Praxis so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 * Use ChibiOS Events to signal that valid IR data was received&lt;br /&gt;
 *------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#if defined(_CHIBIOS_RT_) || defined(_CHIBIOS_NIL_)&lt;br /&gt;
&lt;br /&gt;
#  ifndef IRMP_USE_EVENT&lt;br /&gt;
#    define IRMP_USE_EVENT                      1       // 1: use event. 0: do not. default is 0&lt;br /&gt;
#  endif&lt;br /&gt;
&lt;br /&gt;
#  if IRMP_USE_EVENT == 1 &amp;amp;&amp;amp; !defined(IRMP_EVENT_BIT)&lt;br /&gt;
#    define IRMP_EVENT_BIT                      1                     // event flag or bit to send&lt;br /&gt;
#  endif&lt;br /&gt;
#  if IRMP_USE_EVENT == 1 &amp;amp;&amp;amp; !defined(IRMP_EVENT_THREAD_PTR)&lt;br /&gt;
#    define IRMP_EVENT_THREAD_PTR               ir_receive_thread_p   // pointer to the thread to send the event to&lt;br /&gt;
extern thread_t *IRMP_EVENT_THREAD_PTR;                               // the pointer must be defined and initialized elsewhere&lt;br /&gt;
#  endif&lt;br /&gt;
&lt;br /&gt;
#endif // _CHIBIOS_RT_ || _CHIBIOS_NIL_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In seinem ChibiOS-Projekt verwendet man das dann so:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
thread_t *ir_receive_thread_p = NULL;&lt;br /&gt;
&lt;br /&gt;
static THD_FUNCTION(IRThread, arg)&lt;br /&gt;
{&lt;br /&gt;
    ir_receive_thread_p = chThdGetSelfX();&lt;br /&gt;
    [...]&lt;br /&gt;
    while (true)&lt;br /&gt;
    {&lt;br /&gt;
        // wait for event sent from irmp_ISR&lt;br /&gt;
        chEvtWaitAnyTimeout(ALL_EVENTS,TIME_INFINITE);&lt;br /&gt;
&lt;br /&gt;
        if (irmp_get_data (&amp;amp;irmp_data))&lt;br /&gt;
            // Daten aus irmp_data verwenden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IRMP_LOGGING ====&lt;br /&gt;
&lt;br /&gt;
Mit IRMP_LOGGING kann das Protokollieren von eingehenden IR-Frames eingeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
Standardwert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_LOGGING                            0       // 1: log IR signal (scan), 0: do not. default is 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Erläuterungen siehe [[IRMP#Scannen_von_unbekannten_IR-Protokollen|Scannen von unbekannten IR-Protokollen]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beachte: In der Regel braucht man IRMP_LOGGING nur dafür, um Samples aus den empfangenen IR-Frames zu erstellen, die weiter analysiert werden sollen. Daher sollte man sonst den Wert von IRMP_LOGGING immer auf 0 lassen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Anwendung von IRMP ===&lt;br /&gt;
&lt;br /&gt;
Die von [[IRMP#top|IRMP]] unterstützten Protokolle weisen Bitlängen - teilweise variabel, teilweise fest - von 2 bis 48 Bit auf. Diese werden über Preprocessor-Defines beschrieben.&lt;br /&gt;
&lt;br /&gt;
[[IRMP#top|IRMP]] trennt diese IR-Telegramme prinzipiell in 3 Bereiche:&lt;br /&gt;
&lt;br /&gt;
 1. ID für verwendetes Protokoll&lt;br /&gt;
 2. Adresse bzw. Herstellercode&lt;br /&gt;
 3. Kommando&lt;br /&gt;
&lt;br /&gt;
Mittels der Funktion&lt;br /&gt;
&lt;br /&gt;
   irmp_get_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
kann man ein decodiertes Telegramm abrufen. Der Return-Wert ist 1, wenn ein Telegramm eingelesen wurde, sonst 0. Im ersten Fall werden die Struct-Members&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    irmp_data_p-&amp;gt;protocol (8 Bit)&lt;br /&gt;
    irmp_data_p-&amp;gt;address (16 Bit)&lt;br /&gt;
    irmp_data_p-&amp;gt;command (16 Bit)&lt;br /&gt;
    irmp_data_p-&amp;gt;flags (8 Bit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gefüllt.&lt;br /&gt;
&lt;br /&gt;
Das heisst: am Ende bekommt man dann über irmp_get_data() einfach drei&lt;br /&gt;
Werte (Protokoll, Adresse und Kommando-Code), die man über ein if oder switch checken kann, z.&amp;amp;nbsp;B. hier eine Routine, welche die Tasten 1-9 auf einer Fernbedienung auswertet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
   IRMP_DATA irmp_data;&lt;br /&gt;
&lt;br /&gt;
   if (irmp_get_data (&amp;amp;irmp_data))&lt;br /&gt;
   {&lt;br /&gt;
      if (irmp_data.protocol == IRMP_NEC_PROTOCOL &amp;amp;&amp;amp;     // NEC-Protokoll&lt;br /&gt;
          irmp_data.address == 0x1234)                   // Adresse 0x1234&lt;br /&gt;
      {&lt;br /&gt;
         switch (irmp_data.command)&lt;br /&gt;
         {&lt;br /&gt;
            case 0x0001: key1_pressed(); break;          // Taste 1&lt;br /&gt;
            case 0x0002: key2_pressed(); break;          // Taste 2&lt;br /&gt;
            ...&lt;br /&gt;
            case 0x0009: key9_pressed(); break;          // Taste 9&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier die möglichen Werte für irmp_data.protocol, siehe auch [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL              1      // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                2      // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL            3      // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL         4      // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL           5      // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL             6      // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                7      // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL              8      // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                9      // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL         10      // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL             11      // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL         12      // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL            13      // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL      14      // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL           15      // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL             16      // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL           17      // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL               18      // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL             19      // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL               20      // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL              21      // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL             22      // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL            23      // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL              24      // IR60 (SDA2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL          25      // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL            26      // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL             27      // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL             28      // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL              29      // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL           30      // Thomson&lt;br /&gt;
#define IRMP_BOSE_PROTOCOL              31      // BOSE&lt;br /&gt;
#define IRMP_A1TVBOX_PROTOCOL           32      // A1 TV Box&lt;br /&gt;
#define IRMP_ORTEK_PROTOCOL             33      // ORTEK - Hama&lt;br /&gt;
#define IRMP_TELEFUNKEN_PROTOCOL        34      // Telefunken (1560)&lt;br /&gt;
#define IRMP_ROOMBA_PROTOCOL            35      // iRobot Roomba vacuum cleaner&lt;br /&gt;
#define IRMP_RCMM32_PROTOCOL            36      // Fujitsu-Siemens (Activy remote control)&lt;br /&gt;
#define IRMP_RCMM24_PROTOCOL            37      // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_RCMM12_PROTOCOL            38      // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_SPEAKER_PROTOCOL           39      // Another loudspeaker protocol, similar to Nubert&lt;br /&gt;
#define IRMP_LGAIR_PROTOCOL             40      // LG air conditioner&lt;br /&gt;
#define IRMP_SAMSUNG48_PROTOCOL         41      // air conditioner with SAMSUNG protocol (48 bits)&lt;br /&gt;
#define IRMP_MERLIN_PROTOCOL            42      // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL            43      // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL               44      // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL              45      // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL             46      // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL          47      // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
#define IRMP_PANASONIC_PROTOCOL         48      // Panasonic (Beamer), start bits similar to KASEIKYO&lt;br /&gt;
#define IRMP_MITSU_HEAVY_PROTOCOL       49      // Mitsubishi-Heavy Aircondition, similar timing as Panasonic beamer&lt;br /&gt;
#define IRMP_VINCENT_PROTOCOL           50      // Vincent&lt;br /&gt;
#define IRMP_SAMSUNGAH_PROTOCOL         51      // SAMSUNG AH&lt;br /&gt;
#define IRMP_IRMP16_PROTOCOL            52      // IRMP specific protocol for data transfer, e.g. between two microcontrollers via IR&lt;br /&gt;
#define IRMP_GREE_PROTOCOL              53      // Gree climate&lt;br /&gt;
#define IRMP_RCII_PROTOCOL              54      // RC II Infra Red Remote Control Protocol for FM8&lt;br /&gt;
#define IRMP_METZ_PROTOCOL              55      // METZ&lt;br /&gt;
#define IRMP_ONKYO_PROTOCOL             56      // Onkyo&lt;br /&gt;
&lt;br /&gt;
#define RF_GEN24_PROTOCOL               57      // RF Generic, 24 Bits (Pollin 550666)&lt;br /&gt;
#define RF_X10_PROTOCOL                 58      // RF PC X10 Remote Control (Medion, Pollin 721815)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Werte für die Adresse und das Kommando muss man natürlich einmal für eine unbekannte Fernbedienung auslesen und dann über ein UART oder LC-Display ausgeben, um sie dann im Programm hart zu kodieren. Oder man hat eine kleine Anlernroutine, wo man einmal die gewünschten Tasten drücken muss, um sie anschließend im EEPROM abzuspeichern. Ein Beispiel dazu findet man im Artikel [http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP Lernfähige IR-Fernbedienung mit IRMP].&lt;br /&gt;
&lt;br /&gt;
Eine weitere [http://www.mikrocontroller.net/svnbrowser/irmp/irmp-main-avr.c?view=markup Beispiel-Main-Funktion] ist im Zip-File enthalten, da sieht man dann auch die Initialisierung des Timers.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Entprellen&amp;quot; von Tasten ===&lt;br /&gt;
&lt;br /&gt;
Um zu unterscheiden, ob eine Taste lange gedrückt wurde oder lediglich einzeln, dient das Bit IRMP_FLAG_REPETITION. Dieses wird im Struct-Member &#039;&#039;&#039;flags&#039;&#039;&#039; gesetzt, wenn eine Taste auf der Fernbedienung längere Zeit gedrückt wurde und dadurch immer wieder dasselbe Kommando innerhalb kurzer Zeitabstände ausgesandt wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    if (irmp_data.flags &amp;amp; IRMP_FLAG_REPETITION)&lt;br /&gt;
    {&lt;br /&gt;
      // Benutzer hält die Taste länger runter&lt;br /&gt;
      // entweder:&lt;br /&gt;
      //   ich ignoriere die (Wiederholungs-)Taste&lt;br /&gt;
      // oder:&lt;br /&gt;
      //   ich benutze diese Info, um einen Repeat-Effekt zu nutzen&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      // Es handelt sich um eine neue Taste&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies kann zum Beispiel dafür genutzt werden, um die Tasten 0-9 zu &amp;quot;entprellen&amp;quot;, indem man Kommandos mit gesetztem Bit IRMP_FLAG_REPETITION ignoriert. Bei dem Drücken auf die Tasten VOLUME+ oder VOLUME- kann die wiederholte Auswertung ein und desselben Kommandos aber durchaus gewünscht sein - zum Beispiel, um [[LED-Fading|LEDs zu faden]].&lt;br /&gt;
&lt;br /&gt;
Wenn man nur Einzeltasten auswerten will, kann man obigen IF-Block reduzieren auf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    if (! (irmp_data.flags &amp;amp; IRMP_FLAG_REPETITION))&lt;br /&gt;
    {&lt;br /&gt;
      // Es handelt sich um eine neue Taste&lt;br /&gt;
      // ACTION!&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;&#039;&#039;&#039;NEU:&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seit der Version 3.2.2 gibt es die Möglichkeit, das Loslassen einer Taste zu detektieren. In diesem Fall wird das Flag IRMP_FLAG_RELEASE gesetzt, wenn die verwendete Fernbedienung das (wiederholte) Senden der IR- oder RF-Frames eingestellt hat.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    IRMP_DATA irmp_data;&lt;br /&gt;
&lt;br /&gt;
    while (1)&lt;br /&gt;
    {&lt;br /&gt;
        if (irmp_get_data (&amp;amp;irmp_data))&lt;br /&gt;
        {&lt;br /&gt;
            if (irmp_data.protocol == NEC_PROTOCOL &amp;amp;&amp;amp; irmp_data.address == 0x1234)&lt;br /&gt;
            {&lt;br /&gt;
                 if (irmp_data.command == 0x42 &amp;amp;&amp;amp; irmp_data.flags == 0x00) // Erster Frame, flags nicht gesetzt&lt;br /&gt;
                 {&lt;br /&gt;
                     motor_on ();&lt;br /&gt;
                 }&lt;br /&gt;
                 else if (irmp_data.flags &amp;amp; IRMP_FLAG_RELEASE)             // Taste wurde losgelassen&lt;br /&gt;
                 {&lt;br /&gt;
                     motor_off ();&lt;br /&gt;
                 }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim obigen Beispiel wird ein Motor eingeschaltet, sobald man eine bestimmte Taste auf der Fernbedienung drückt. Der Motor wird dann erst wieder gestoppt, wenn man die Taste wieder loslässt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig beim Prüfen von IRMP_FLAG_RELEASE:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Man darf sich nicht darauf verlassen, dass irmp_data.command dabei noch den ursprünglichen Kommando-Code enthält - hier also 0x42. Es gibt nämlich Fernbedienungen (zum Beispiel Funksteckdosen-Sender), welche selbst einen speziellen Key-Release-Code senden, wenn die Taste losgelassen wurde. Also prüft man lediglich die Übereinstimmung von irmp_data.address, bevor man das Flag testet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dieses Feature muss explizit in irmpconfig.h durch Ändern der Konfigurationsvariablen IRMP_ENABLE_RELEASE_DETECTION freigeschaltet werden!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Arbeitsweise ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP#top|IRMP]] ist die Interrupt Service Routine irmp_ISR() welche 15.000 mal pro Sekunde aufgerufen werden sollte. Weicht dieser Wert ab, muss die Preprocessor-Konstante [[IRMP#F_INTERRUPTS|F_INTERRUPTS]] in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] angepasst werden. Der Wert kann zwischen 10kHz und 20kHz eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
irmp_ISR() detektiert zunächst die Länge und die Form des/der Startbits und ermittelt daraus das verwendete Protokoll. Sobald das Protokoll erkannt wurde, werden die weiter einzulesenden Bits parametrisiert, um dann möglichst effektiv in den weiteren Aufrufen das komplette IR-Telegramm einzulesen.&lt;br /&gt;
&lt;br /&gt;
Um direkt Kritikern den Wind aus den Segeln zu nehmen:&lt;br /&gt;
&lt;br /&gt;
Ich weiss, die ISR ist ziemlich groß. Aber da sie sich wie eine State Machine verhält, ist der tatsächlich ausgeführte Code pro Durchlauf relativ gering. Solange es &amp;quot;dunkel&amp;quot; ist (und das ist es ja die meiste Zeit ;-)) ist die aufgewendete Zeit sogar verschwindend gering. Im WordClock-Projekt werden mit ein- und demselben Timer 8 ISRs aufgerufen, davon ist die irmp_ISR() nur eine unter vielen. Bei mindestens 8 MHz CPU-Takt traten bisher keine Timing-Probleme auf. Daher sehe ich bei der Länge von irmp_ISR überhaupt kein Problem.&lt;br /&gt;
&lt;br /&gt;
Ein Quarz ist nicht unbedingt notwendig, es funktioniert auch mit dem internen Oszillator des AVRs, wenn man die Prescaler-Fuse entsprechend gesetzt hat, dass die CPU auch mit 8MHz rennt ... Die Fuse-Werte für einen ATMEGA88 findet man in [http://www.mikrocontroller.net/svnbrowser/irmp/irmp-main-avr.c?view=markup irmp-main-avr.c].&lt;br /&gt;
&lt;br /&gt;
== Scannen von unbekannten IR-Protokollen ==&lt;br /&gt;
&lt;br /&gt;
Stellt man in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] in der Zeile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    #define IRMP_LOGGING    0   // 1: log IR signal (scan), 0: do not (default)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
den Wert für [[IRMP#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP#top|IRMP]] eine Protokollierung eingeschaltet: Es werden dann die Hell- und Dunkelphase auf dem UART des Microntrollers mit 9600Bd ausgegeben: 1=Dunkel, 0=Hell. Eventuell müssen dann die Konstanten in den Funktionen uart_init() und uart_putc() angepasst werden; das kommt auf den verwendeten AVR-µC an.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis: Für PIC-Prozessoren gibt es ein eigenes Logging-Modul namens [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]. Dieses ermöglicht das Logging über USB. Für AVR-Prozessoren ist [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c] irrelevant&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nimmt man diese Protokoll-Scans mit einem Terminal-Emulationsprogramm auf und speichert sie dann als normale Datei ab, kann man diese Scan-Dateien zur Analyse verwenden, um damit [[IRMP#top|IRMP]] an das unbekannte Protokoll anzupassen - siehe nächstes Kapitel.&lt;br /&gt;
&lt;br /&gt;
Wer eine Fernbedienung hat, die nicht von [[IRMP#top|IRMP]] unterstützt wird, kann mir  ([http://www.mikrocontroller.net/user/show/ukw ukw]) gern die Scan-Dateien zuschicken. Ich schaue dann, ob das Protokoll in das IRMP-Konzept passt und passe gegebenenfalls den Source an.&lt;br /&gt;
&lt;br /&gt;
== IRMP unter Linux und Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Übersetzen ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] lässt sich auch unter Linux direkt kompilieren, um damit Infrarot-Scans, welche in Dateien gespeichert sind, direkt zu testen. Im Unterordner IR-Data finden sich solche Dateien, die man dem [[IRMP#top|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP#top|IRMP]] geht folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
    make -f makefile.lnx&lt;br /&gt;
&lt;br /&gt;
Dabei werden 3 IRMP-Versionen erzeugt:&lt;br /&gt;
&lt;br /&gt;
* irmp-10kHz: Version für 10kHz Scans&lt;br /&gt;
* irmp-15kHz: Version für 15kHz Scans&lt;br /&gt;
* irmp-20kHz: Version für 20kHz Scans&lt;br /&gt;
&lt;br /&gt;
=== Aufruf von IRMP ===&lt;br /&gt;
&lt;br /&gt;
Der Aufruf geschieht dann über:&lt;br /&gt;
&lt;br /&gt;
  ./irmp-nnkHz [-l|-p|-a|-v] &amp;lt; scan-file&lt;br /&gt;
&lt;br /&gt;
Die angegebenen Optionen schließen sich aus, das heisst, es kann jeweils nur eine Option zu einer Zeit angegeben werden:&lt;br /&gt;
&lt;br /&gt;
Option:&lt;br /&gt;
&lt;br /&gt;
   -l  List             gibt eine Liste der Pulse und Pausen aus&lt;br /&gt;
   -a analyze           analysiert die Puls-/Pausen und schreibt ein &amp;quot;Spektrum&amp;quot; in ASCII-Form&lt;br /&gt;
   -v verbose           ausführliche Ausgabe&lt;br /&gt;
   -p  Print Timings    gibt für alle Protokolle eine Timing-Tabelle aus&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
=== Normale Ausgabe ===&lt;br /&gt;
&lt;br /&gt;
   ./irmp-10kHz &amp;lt; IR-Data/orion_vcr_07660BM070.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 -------------------------------------------------------------------------&lt;br /&gt;
 # Taste 1&lt;br /&gt;
 00000001110111101000000001111111 p =  2, a = 0x7b80, c = 0x0001, f = 0x00&lt;br /&gt;
 -------------------------------------------------------------------------&lt;br /&gt;
 # Taste 2&lt;br /&gt;
 00000001110111100100000010111111 p =  2, a = 0x7b80, c = 0x0002, f = 0x00&lt;br /&gt;
 -------------------------------------------------------------------------&lt;br /&gt;
 # Taste 3&lt;br /&gt;
 00000001110111101100000000111111 p =  2, a = 0x7b80, c = 0x0003, f = 0x00&lt;br /&gt;
 -------------------------------------------------------------------------&lt;br /&gt;
 # Taste 4&lt;br /&gt;
 00000001110111100010000011011111 p =  2, a = 0x7b80, c = 0x0004, f = 0x00&lt;br /&gt;
 -------------------------------------------------------------------------&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Listen-Ausgabe ===&lt;br /&gt;
&lt;br /&gt;
   ./irmp-10kHz -l &amp;lt; IR-Data/orion_vcr_07660BM070.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
# Taste 1&lt;br /&gt;
pulse: 91 pause: 44&lt;br /&gt;
pulse: 6 pause: 5&lt;br /&gt;
pulse: 6 pause: 6&lt;br /&gt;
pulse: 6 pause: 5&lt;br /&gt;
pulse: 6 pause: 5&lt;br /&gt;
pulse: 6 pause: 5&lt;br /&gt;
pulse: 6 pause: 6&lt;br /&gt;
pulse: 6 pause: 5&lt;br /&gt;
pulse: 6 pause: 16&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Analyse ===&lt;br /&gt;
&lt;br /&gt;
   ./irmp-10kHz -a &amp;lt; IR-Data/orion_vcr_07660BM070.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
START PULSES:&lt;br /&gt;
 90 o 1&lt;br /&gt;
 91 oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 33&lt;br /&gt;
 92 ooo 2&lt;br /&gt;
pulse avg: 91.0=9102.8 us, min: 90=9000.0 us, max: 92=9200.0 us, tol:  1.1%&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
START PAUSES:&lt;br /&gt;
 43 oo 1&lt;br /&gt;
 44 oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 25&lt;br /&gt;
 45 oooooooooooooooooooooooo 10&lt;br /&gt;
pause avg: 44.2=4425.0 us, min: 43=4300.0 us, max: 45=4500.0 us, tol:  2.8%&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
PULSES:&lt;br /&gt;
  5 o 17&lt;br /&gt;
  6 ooooooooooooooooooooooooooooooooooooooooooooooooooooooo 562&lt;br /&gt;
  7 oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 609&lt;br /&gt;
pulse avg:  6.5= 649.8 us, min:  5= 500.0 us, max:  7= 700.0 us, tol: 23.1%&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
PAUSES:&lt;br /&gt;
  4 ooooooooooooooooooooooo 169&lt;br /&gt;
  5 oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 412&lt;br /&gt;
  6 oooo 31&lt;br /&gt;
pause avg:  4.8= 477.5 us, min:  4= 400.0 us, max:  6= 600.0 us, tol: 25.7%&lt;br /&gt;
 15 oooooo 43&lt;br /&gt;
 16 oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 425&lt;br /&gt;
 17 oooooooooo 72&lt;br /&gt;
pause avg: 16.1=1605.4 us, min: 15=1500.0 us, max: 17=1700.0 us, tol:  6.6%&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sieht man die gemessenen Zeiten aller Pulse und Pausen als (liegende) Glockenkurven, welche natürlich wegen der ASCII-Darstellung nicht gerade einer Idealkurve entsprechen. Je schmaler die gemessenen Kanäle, desto besser ist das Timing der Fernbedienung.&lt;br /&gt;
&lt;br /&gt;
Aus obigem Output kann man herauslesen:&lt;br /&gt;
&lt;br /&gt;
* Das Start-Bit hat eine Pulslänge zwischen 9000 und 9200 usec, im Mittel sind es 9102 usec. Die Abweichung von diesem Mittelwert liegt bei 1,1 Prozent.&lt;br /&gt;
&lt;br /&gt;
* Das Start-Bit hat eine Pausenlänge zwischen 4300 usec und 4500 usec, der Mittelwert beträgt 4424 usec. Der Fehler liegt bei 2,8 Prozent.&lt;br /&gt;
&lt;br /&gt;
* Die Pulslänge eines Datenbits liegt zwischen 500 usec und 700 usec, im Mittel sind es 650 usec, der Fehler liegt bei (stolzen) 23,1 Prozent!&lt;br /&gt;
&lt;br /&gt;
Desweiteren gibt es noch 2 verschieden lange Pausen (für die Bits 0 und 1), das Ablesen der Werte überlasse ich dem geneigten Leser ;-)&lt;br /&gt;
&lt;br /&gt;
=== Ausführliche Ausgabe ===&lt;br /&gt;
&lt;br /&gt;
    ./irmp-10kHz -v &amp;lt; IR-Data/orion_vcr_07660BM070.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
# 1 - IR-cmd: 0x0001&lt;br /&gt;
   0.200ms [starting pulse]&lt;br /&gt;
  13.700ms [start-bit: pulse = 91, pause = 44]&lt;br /&gt;
protocol = NEC, start bit timings: pulse:  62 - 118, pause:  30 -  60&lt;br /&gt;
pulse_1:   3 -   8&lt;br /&gt;
pause_1:  11 -  23&lt;br /&gt;
pulse_0:   3 -   8&lt;br /&gt;
pause_0:   3 -   8&lt;br /&gt;
command_offset: 16&lt;br /&gt;
command_len:     16&lt;br /&gt;
complete_len:    32&lt;br /&gt;
stop_bit:         1&lt;br /&gt;
  14.800ms [bit  0: pulse =   6, pause =   5] 0&lt;br /&gt;
  16.000ms [bit  1: pulse =   6, pause =   6] 0&lt;br /&gt;
  17.100ms [bit  2: pulse =   6, pause =   5] 0&lt;br /&gt;
  18.200ms [bit  3: pulse =   6, pause =   5] 0&lt;br /&gt;
  19.300ms [bit  4: pulse =   6, pause =   5] 0&lt;br /&gt;
  20.500ms [bit  5: pulse =   6, pause =   6] 0&lt;br /&gt;
  21.600ms [bit  6: pulse =   6, pause =   5] 0&lt;br /&gt;
  23.800ms [bit  7: pulse =   6, pause =  16] 1&lt;br /&gt;
  26.100ms [bit  8: pulse =   6, pause =  17] 1&lt;br /&gt;
  28.300ms [bit  9: pulse =   6, pause =  16] 1&lt;br /&gt;
  29.500ms [bit 10: pulse =   6, pause =   6] 0&lt;br /&gt;
  31.700ms [bit 11: pulse =   6, pause =  16] 1&lt;br /&gt;
  34.000ms [bit 12: pulse =   6, pause =  17] 1&lt;br /&gt;
  36.200ms [bit 13: pulse =   6, pause =  16] 1&lt;br /&gt;
  38.500ms [bit 14: pulse =   6, pause =  17] 1&lt;br /&gt;
  39.600ms [bit 15: pulse =   6, pause =   5] 0&lt;br /&gt;
  41.900ms [bit 16: pulse =   6, pause =  17] 1&lt;br /&gt;
  43.000ms [bit 17: pulse =   6, pause =   5] 0&lt;br /&gt;
  44.100ms [bit 18: pulse =   6, pause =   5] 0&lt;br /&gt;
  45.200ms [bit 19: pulse =   6, pause =   5] 0&lt;br /&gt;
  46.400ms [bit 20: pulse =   7, pause =   5] 0&lt;br /&gt;
  47.500ms [bit 21: pulse =   6, pause =   5] 0&lt;br /&gt;
  48.600ms [bit 22: pulse =   6, pause =   5] 0&lt;br /&gt;
  49.800ms [bit 23: pulse =   6, pause =   6] 0&lt;br /&gt;
  50.900ms [bit 24: pulse =   5, pause =   6] 0&lt;br /&gt;
  53.100ms [bit 25: pulse =   6, pause =  16] 1&lt;br /&gt;
  55.400ms [bit 26: pulse =   6, pause =  17] 1&lt;br /&gt;
  57.600ms [bit 27: pulse =   6, pause =  16] 1&lt;br /&gt;
  59.900ms [bit 28: pulse =   6, pause =  17] 1&lt;br /&gt;
  62.100ms [bit 29: pulse =   6, pause =  16] 1&lt;br /&gt;
  64.400ms [bit 30: pulse =   6, pause =  17] 1&lt;br /&gt;
  66.700ms [bit 31: pulse =   6, pause =  17] 1&lt;br /&gt;
stop bit detected&lt;br /&gt;
  67.300ms code detected, length = 32&lt;br /&gt;
  67.300ms p =  2, a = 0x7b80, c = 0x0001, f = 0x00&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Aufruf unter Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#top|IRMP]] kann man auch unter Windows nutzen, nämlich folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
* Eingabeaufforderung starten&lt;br /&gt;
* In das Verzeichnis irmp wechseln&lt;br /&gt;
* Aufruf von:&lt;br /&gt;
            irmp-10kHz.exe &amp;lt; IR-Data\rc5x.txt&lt;br /&gt;
&lt;br /&gt;
Es gelten dieselben Optionen wie für die Linux-Version.&lt;br /&gt;
&lt;br /&gt;
=== Längere Ausgaben ===&lt;br /&gt;
&lt;br /&gt;
Da manche Ausgaben sehr lang werden, empfiehlt es sich auch hier, die Ausgabe in eine Datei zu lenken oder in einen Pager weiterzuleiten, damit man seitenweise blättern kann:&lt;br /&gt;
&lt;br /&gt;
Linux:&lt;br /&gt;
&lt;br /&gt;
            ./irmp-10kHz &amp;lt; IR-Data/rc5x.txt | less&lt;br /&gt;
&lt;br /&gt;
Windows:&lt;br /&gt;
&lt;br /&gt;
            irmp-10kHz.exe &amp;lt; IR-Data\rc5x.txt | more&lt;br /&gt;
&lt;br /&gt;
== Fernbedienungen ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Protokoll || Bezeichnung || Gerät || Device Address&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#NEC_+_extended_NEC|NEC]] || Toshiba CT-9859 || Fernseher || 0x5F40&lt;br /&gt;
|-&lt;br /&gt;
| || Toshiba VT-728G || V-728G Videorekorder || 0x5B44&lt;br /&gt;
|-&lt;br /&gt;
| || Elta 8848 MP 4 || DVD-Player || 0x7F00&lt;br /&gt;
|-&lt;br /&gt;
| || AS-218 || Askey TV-View CHP03X (TV-Karte) || 0x3B86&lt;br /&gt;
|-&lt;br /&gt;
| || Cyberhome ??? || Cyberhome DVD Player || 0x6D72&lt;br /&gt;
|-&lt;br /&gt;
| || WD TV Live || Western Digital Multimediaplayer || 0x1F30&lt;br /&gt;
|-&lt;br /&gt;
| || Canon WL-DC100 || Kamera Canon PowerShot G5 || 0xB1CA&lt;br /&gt;
|-&lt;br /&gt;
| || Bleil LED Flex-Band RGB || RGB-LED Band mit IR-Controller || 0xFE00&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#KASEIKYO|KASEIKYO]] || Technics EUR646497 || AV Receiver SA-AX 730 || 0x2002&lt;br /&gt;
|-&lt;br /&gt;
| || Panasonic TV || Fernseher TX-L32EW6 || 0x2002&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#DENON|DENON]] || DENON RC970 || AVR3805 (Verstärker) || 0x0008&lt;br /&gt;
|-&lt;br /&gt;
| || DENON RC970 || DVD/CD-Player || 0x0002&lt;br /&gt;
|-&lt;br /&gt;
| || DENON RC970 || Tuner || 0x0006&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#SAMSUNG32|SAMSUNG32]] || Samsung AA59-00484A || LE40D550 Fernseher || 0x0707&lt;br /&gt;
|-&lt;br /&gt;
| || LG AKB72033901 || Blu-Ray Player BD370 || 0x2D2D&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#APPLE|APPLE]] || Apple || Apple Dock (iPod 2) || 0x0020&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Kameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP#top|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP#NIKON|NIKON]]&lt;br /&gt;
&lt;br /&gt;
Die Kommando-Vielfalt ist nicht gerade groß. Normalerweise verstehen die Kameras gerade mal das Kommando &amp;quot;Auslösen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Hier eine kleine Tabelle für [[IRMP#PENTAX|PENTAX]]-Kameras:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Kommando || Funktion&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || Auslösen&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001 || Zoomlevel umschalten&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Da keine Adresse im [[IRMP#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND]] am besten auf 0x0000 setzen. Ebenso sollte man in diesem Fall einen Quarz verwenden, da gerade die Nikons bezüglich des Timings sehr penibel sind.&lt;br /&gt;
&lt;br /&gt;
== IR-Tastaturen ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP#top|IRMP]] unterstützt ab Version 1.7.0 auch IR-Tastaturen, nämlich die Infrarot-Tastatur FDC-3402 - &amp;lt;s&amp;gt;erhältlich bei Pollin (Art. 711 056) für weniger als 2 EUR.&amp;lt;/s&amp;gt;  (Vergriffen, Stand 19.09.2017)&lt;br /&gt;
&lt;br /&gt;
Beim Erkennen einer Taste gibt [[IRMP#top|IRMP]] folgende Daten zurück:&lt;br /&gt;
&lt;br /&gt;
 Protokoll-Nummer (irmp_data.protocol): 18&lt;br /&gt;
 Addresse         (irmp_data.address):  0x003F&lt;br /&gt;
&lt;br /&gt;
Als Kommando (irmp_data.command) werden folgende Werte zurückgeliefert:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Code || Taste || Code || Taste || Code || Taste || Code || Taste || Code || Taste || Code || Taste || Code || Taste || Code || Taste&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 ||      || 0x0010 || TAB || 0x0020 || &#039;s&#039; || 0x0030 || &#039;c&#039; || 0x0040 ||      || 0x0050 || HOME || 0x0060 ||      || 0x0070 || MENUE&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001 || &#039;^&#039; || 0x0011 || &#039;q&#039; || 0x0021 || &#039;d&#039; || 0x0031 || &#039;v&#039; || 0x0041 ||      || 0x0051 || END || 0x0061 ||      || 0x0071 || BACK&lt;br /&gt;
|-&lt;br /&gt;
| 0x0002 || &#039;1&#039; || 0x0012 || &#039;w&#039; || 0x0022 || &#039;f&#039; || 0x0032 || &#039;b&#039; || 0x0042 ||      || 0x0052 ||      || 0x0062 ||      || 0x0072 || FORWARD&lt;br /&gt;
|-&lt;br /&gt;
| 0x0003 || &#039;2&#039; || 0x0013 || &#039;e&#039; || 0x0023 || &#039;g&#039; || 0x0033 || &#039;n&#039; || 0x0043 ||      || 0x0053 || UP || 0x0063 ||      || 0x0073 || ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
| 0x0004 || &#039;3&#039; || 0x0014 || &#039;r&#039; || 0x0024 || &#039;h&#039; || 0x0034 || &#039;m&#039; || 0x0044 ||      || 0x0054 || DOWN || 0x0064 ||      || 0x0074 || WINDOW&lt;br /&gt;
|-&lt;br /&gt;
| 0x0005 || &#039;4&#039; || 0x0015 || &#039;t&#039; || 0x0025 || &#039;j&#039; || 0x0035 || &#039;,&#039; || 0x0045 ||      || 0x0055 || PAGE_UP || 0x0065 ||      || 0x0075 || 1ST_PAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x0006 || &#039;5&#039; || 0x0016 || &#039;z&#039; || 0x0026 || &#039;k&#039; || 0x0036 || &#039;.&#039; || 0x0046 ||      || 0x0056 || PAGE_DOWN || 0x0066 ||      || 0x0076 || STOP&lt;br /&gt;
|-&lt;br /&gt;
| 0x0007 || &#039;6&#039; || 0x0017 || &#039;u&#039; || 0x0027 || &#039;l&#039; || 0x0037 || &#039;-&#039; || 0x0047 ||      || 0x0057 ||      || 0x0067 ||      || 0x0077 || MAIL&lt;br /&gt;
|-&lt;br /&gt;
| 0x0008 || &#039;7&#039; || 0x0018 || &#039;i&#039; || 0x0028 || &#039;ö&#039; || 0x0038 ||      || 0x0048 ||      || 0x0058 ||      || 0x0068 ||      || 0x0078 || FAVORITES&lt;br /&gt;
|-&lt;br /&gt;
| 0x0009 || &#039;8&#039; || 0x0019 || &#039;o&#039; || 0x0029 || &#039;ä&#039; || 0x0039 || SHIFT_RIGHT || 0x0049 ||      || 0x0059 || RIGHT || 0x0069 ||      || 0x0079 || NEW_PAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A || &#039;9&#039; || 0x001A || &#039;p&#039; || 0x002A || &#039;#&#039; || 0x003A || CTRL || 0x004A ||      || 0x005A ||      || 0x006A ||      || 0x007A || SETUP&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B || &#039;0&#039; || 0x001B || &#039;ü&#039; || 0x002B || CR || 0x003B ||      || 0x004B || INSERT || 0x005B ||      || 0x006B ||      || 0x007B || FONT&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C || &#039;ß&#039; || 0x001C || &#039;+&#039; || 0x002C || SHIFT_LEFT || 0x003C || ALT_LEFT || 0x004C || DELETE || 0x005C ||      || 0x006C ||      || 0x007C || PRINT&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D || &#039;´&#039; || 0x001D ||      || 0x002D || &#039;&amp;lt;&#039; || 0x003D || SPACE || 0x004D ||      || 0x005D ||      || 0x006D ||      || 0x007D ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E ||      || 0x001E || CAPSLOCK || 0x002E || &#039;y&#039; || 0x003E || ALT_RIGHT || 0x004E ||      || 0x005E ||      || 0x006E || ESCAPE || 0x007E || ON_OFF&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F || BACKSPACE || 0x001F || &#039;a&#039; || 0x002F || &#039;x&#039; || 0x003F ||      || 0x004F || LEFT || 0x005F ||      || 0x006F ||      || 0x007F ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zusatztasten links:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Code || Taste&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 0x0400 || KEY_MOUSE_1&lt;br /&gt;
|-&lt;br /&gt;
| 0x0800 || KEY_MOUSE_2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dabei gelten die obigen Werte für das Drücken einer Taste. Wird die Taste wieder losgelassen, setzt [[IRMP#top|IRMP]] zusätzlich das 8. Bit im Kommando.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
      Taste &#039;a&#039; drücken:   0x001F&lt;br /&gt;
      Taste &#039;a&#039; loslassen: 0x009F&lt;br /&gt;
&lt;br /&gt;
Ausnahme ist die EIN/AUS-Taste: Diese sendet nur beim Drücken einen Code, nicht beim Loslassen.&lt;br /&gt;
&lt;br /&gt;
Wird eine Taste länger gedrückt, wird das in irmp_data.flag angezeigt.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
                           command   flag&lt;br /&gt;
      Taste &#039;a&#039; drücken:   0x001F    0x00&lt;br /&gt;
      Taste &#039;a&#039; drücken:   0x001F    0x01&lt;br /&gt;
      Taste &#039;a&#039; drücken:   0x001F    0x01&lt;br /&gt;
      Taste &#039;a&#039; drücken:   0x001F    0x01&lt;br /&gt;
      ....&lt;br /&gt;
      Taste &#039;a&#039; loslassen: 0x009F    0x00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Werden Tastenkombinationen (zum Beispiel für ein großes &#039;A&#039;) gedrückt, dann sind die Rückgabewerte von [[IRMP#top|IRMP]] in folgendem Ablauf zu sehen:&lt;br /&gt;
&lt;br /&gt;
      Linke SHIFT-Taste drücken:   0x0002&lt;br /&gt;
      Taste &#039;a&#039; drücken:           0x001F&lt;br /&gt;
      Taste &#039;a&#039; loslassen:         0x009F&lt;br /&gt;
      Linke SHIFT-Taste loslassen: 0x0082&lt;br /&gt;
&lt;br /&gt;
In [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] findet man für die LINUX-Version eine Funktion get_fdc_key(), welche als Vorlage dienen mag, die Keycodes einer FDC-Tastatur in die entsprechenden ASCII-Codes umzuwandeln. Diese Funktion kann man entweder lokal auf dem µC nutzen, um die Keycodes zu decodieren, oder auf einem Hostsystem (z.B. PC), an welches die IRMP-Data-Struktur gesandt wird. Dafür sollte man die Funktion incl. der dazugehörenden Preprozessor-Konstanten in seinen Applikations-Quelltext kopieren.&lt;br /&gt;
&lt;br /&gt;
Hier der entsprechende Auszug:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define STATE_LEFT_SHIFT    0x01&lt;br /&gt;
#define STATE_RIGHT_SHIFT   0x02&lt;br /&gt;
#define STATE_LEFT_CTRL     0x04&lt;br /&gt;
#define STATE_LEFT_ALT      0x08&lt;br /&gt;
#define STATE_RIGHT_ALT     0x10&lt;br /&gt;
&lt;br /&gt;
#define KEY_ESCAPE          0x1B            // keycode = 0x006e&lt;br /&gt;
#define KEY_MENUE           0x80            // keycode = 0x0070&lt;br /&gt;
#define KEY_BACK            0x81            // keycode = 0x0071&lt;br /&gt;
#define KEY_FORWARD         0x82            // keycode = 0x0072&lt;br /&gt;
#define KEY_ADDRESS         0x83            // keycode = 0x0073&lt;br /&gt;
#define KEY_WINDOW          0x84            // keycode = 0x0074&lt;br /&gt;
#define KEY_1ST_PAGE        0x85            // keycode = 0x0075&lt;br /&gt;
#define KEY_STOP            0x86            // keycode = 0x0076&lt;br /&gt;
#define KEY_MAIL            0x87            // keycode = 0x0077&lt;br /&gt;
#define KEY_FAVORITES       0x88            // keycode = 0x0078&lt;br /&gt;
#define KEY_NEW_PAGE        0x89            // keycode = 0x0079&lt;br /&gt;
#define KEY_SETUP           0x8A            // keycode = 0x007a&lt;br /&gt;
#define KEY_FONT            0x8B            // keycode = 0x007b&lt;br /&gt;
#define KEY_PRINT           0x8C            // keycode = 0x007c&lt;br /&gt;
#define KEY_ON_OFF          0x8E            // keycode = 0x007c&lt;br /&gt;
&lt;br /&gt;
#define KEY_INSERT          0x90            // keycode = 0x004b&lt;br /&gt;
#define KEY_DELETE          0x91            // keycode = 0x004c&lt;br /&gt;
#define KEY_LEFT            0x92            // keycode = 0x004f&lt;br /&gt;
#define KEY_HOME            0x93            // keycode = 0x0050&lt;br /&gt;
#define KEY_END             0x94            // keycode = 0x0051&lt;br /&gt;
#define KEY_UP              0x95            // keycode = 0x0053&lt;br /&gt;
#define KEY_DOWN            0x96            // keycode = 0x0054&lt;br /&gt;
#define KEY_PAGE_UP         0x97            // keycode = 0x0055&lt;br /&gt;
#define KEY_PAGE_DOWN       0x98            // keycode = 0x0056&lt;br /&gt;
#define KEY_RIGHT           0x99            // keycode = 0x0059&lt;br /&gt;
#define KEY_MOUSE_1         0x9E            // keycode = 0x0400&lt;br /&gt;
#define KEY_MOUSE_2         0x9F            // keycode = 0x0800&lt;br /&gt;
&lt;br /&gt;
static uint8_t&lt;br /&gt;
get_fdc_key (uint16_t cmd)&lt;br /&gt;
{&lt;br /&gt;
    static uint8_t key_table[128] =&lt;br /&gt;
    {&lt;br /&gt;
     // 0     1    2    3    4    5    6    7    8     9     A     B     C     D    E    F&lt;br /&gt;
         0,   &#039;^&#039;, &#039;1&#039;, &#039;2&#039;, &#039;3&#039;, &#039;4&#039;, &#039;5&#039;, &#039;6&#039;, &#039;7&#039;,  &#039;8&#039;,  &#039;9&#039;,  &#039;0&#039;,  0xDF, &#039;´&#039;, 0,   &#039;\b&#039;,&lt;br /&gt;
        &#039;\t&#039;, &#039;q&#039;, &#039;w&#039;, &#039;e&#039;, &#039;r&#039;, &#039;t&#039;, &#039;z&#039;, &#039;u&#039;, &#039;i&#039;,  &#039;o&#039;,  &#039;p&#039;,  0xFC, &#039;+&#039;,  0,   0,   &#039;a&#039;,&lt;br /&gt;
        &#039;s&#039;,  &#039;d&#039;, &#039;f&#039;, &#039;g&#039;, &#039;h&#039;, &#039;j&#039;, &#039;k&#039;, &#039;l&#039;, 0xF6, 0xE4, &#039;#&#039;,  &#039;\r&#039;, 0,    &#039;&amp;lt;&#039;, &#039;y&#039;, &#039;x&#039;,&lt;br /&gt;
        &#039;c&#039;,  &#039;v&#039;, &#039;b&#039;, &#039;n&#039;, &#039;m&#039;, &#039;,&#039;, &#039;.&#039;, &#039;-&#039;, 0,    0,    0,    0,    0,    &#039; &#039;, 0,   0,&lt;br /&gt;
&lt;br /&gt;
         0,   &#039;°&#039;, &#039;!&#039;, &#039;&amp;quot;&#039;, &#039;§&#039;, &#039;$&#039;, &#039;%&#039;, &#039;&amp;amp;&#039;, &#039;/&#039;,  &#039;(&#039;,  &#039;)&#039;,  &#039;=&#039;,  &#039;?&#039;,  &#039;`&#039;, 0,   &#039;\b&#039;,&lt;br /&gt;
        &#039;\t&#039;, &#039;Q&#039;, &#039;W&#039;, &#039;E&#039;, &#039;R&#039;, &#039;T&#039;, &#039;Z&#039;, &#039;U&#039;, &#039;I&#039;,  &#039;O&#039;,  &#039;P&#039;,  0xDC, &#039;*&#039;,  0,   0,   &#039;A&#039;,&lt;br /&gt;
        &#039;S&#039;,  &#039;D&#039;, &#039;F&#039;, &#039;G&#039;, &#039;H&#039;, &#039;J&#039;, &#039;K&#039;, &#039;L&#039;, 0xD6, 0xC4, &#039;\&#039;&#039;, &#039;\r&#039;, 0,    &#039;&amp;gt;&#039;, &#039;Y&#039;, &#039;X&#039;,&lt;br /&gt;
        &#039;C&#039;,  &#039;V&#039;, &#039;B&#039;, &#039;N&#039;, &#039;M&#039;, &#039;;&#039;, &#039;:&#039;, &#039;_&#039;, 0,    0,    0,    0,    0,    &#039; &#039;, 0,   0&lt;br /&gt;
    };&lt;br /&gt;
    static uint8_t state;&lt;br /&gt;
&lt;br /&gt;
    uint8_t key = 0;&lt;br /&gt;
&lt;br /&gt;
    switch (cmd)&lt;br /&gt;
    {&lt;br /&gt;
        case 0x002C: state |=  STATE_LEFT_SHIFT;    break;              // pressed left shift&lt;br /&gt;
        case 0x00AC: state &amp;amp;= ~STATE_LEFT_SHIFT;    break;              // released left shift&lt;br /&gt;
        case 0x0039: state |=  STATE_RIGHT_SHIFT;   break;              // pressed right shift&lt;br /&gt;
        case 0x00B9: state &amp;amp;= ~STATE_RIGHT_SHIFT;   break;              // released right shift&lt;br /&gt;
        case 0x003A: state |=  STATE_LEFT_CTRL;     break;              // pressed left ctrl&lt;br /&gt;
        case 0x00BA: state &amp;amp;= ~STATE_LEFT_CTRL;     break;              // released left ctrl&lt;br /&gt;
        case 0x003C: state |=  STATE_LEFT_ALT;      break;              // pressed left alt&lt;br /&gt;
        case 0x00BC: state &amp;amp;= ~STATE_LEFT_ALT;      break;              // released left alt&lt;br /&gt;
        case 0x003E: state |=  STATE_RIGHT_ALT;     break;              // pressed left alt&lt;br /&gt;
        case 0x00BE: state &amp;amp;= ~STATE_RIGHT_ALT;     break;              // released left alt&lt;br /&gt;
&lt;br /&gt;
        case 0x006e: key = KEY_ESCAPE;              break;&lt;br /&gt;
        case 0x004b: key = KEY_INSERT;              break;&lt;br /&gt;
        case 0x004c: key = KEY_DELETE;              break;&lt;br /&gt;
        case 0x004f: key = KEY_LEFT;                break;&lt;br /&gt;
        case 0x0050: key = KEY_HOME;                break;&lt;br /&gt;
        case 0x0051: key = KEY_END;                 break;&lt;br /&gt;
        case 0x0053: key = KEY_UP;                  break;&lt;br /&gt;
        case 0x0054: key = KEY_DOWN;                break;&lt;br /&gt;
        case 0x0055: key = KEY_PAGE_UP;             break;&lt;br /&gt;
        case 0x0056: key = KEY_PAGE_DOWN;           break;&lt;br /&gt;
        case 0x0059: key = KEY_RIGHT;               break;&lt;br /&gt;
        case 0x0400: key = KEY_MOUSE_1;             break;&lt;br /&gt;
        case 0x0800: key = KEY_MOUSE_2;             break;&lt;br /&gt;
&lt;br /&gt;
        default:&lt;br /&gt;
        {&lt;br /&gt;
            if (!(cmd &amp;amp; 0x80))                      // pressed key&lt;br /&gt;
            {&lt;br /&gt;
                if (cmd &amp;gt;= 0x70 &amp;amp;&amp;amp; cmd &amp;lt;= 0x7F)     // function keys&lt;br /&gt;
                {&lt;br /&gt;
                    key = cmd + 0x10;               // 7x -&amp;gt; 8x&lt;br /&gt;
                }&lt;br /&gt;
                else if (cmd &amp;lt; 64)                  // key listed in key_table&lt;br /&gt;
                {&lt;br /&gt;
                    if (state &amp;amp; (STATE_LEFT_ALT | STATE_RIGHT_ALT))&lt;br /&gt;
                    {&lt;br /&gt;
                        switch (cmd)&lt;br /&gt;
                        {&lt;br /&gt;
                            case 0x0003: key = 0xB2;    break; // ²&lt;br /&gt;
                            case 0x0008: key = &#039;{&#039;;     break;&lt;br /&gt;
                            case 0x0009: key = &#039;[&#039;;     break;&lt;br /&gt;
                            case 0x000A: key = &#039;]&#039;;     break;&lt;br /&gt;
                            case 0x000B: key = &#039;}&#039;;     break;&lt;br /&gt;
                            case 0x000C: key = &#039;\\&#039;;    break;&lt;br /&gt;
                            case 0x001C: key = &#039;~&#039;;     break;&lt;br /&gt;
                            case 0x002D: key = &#039;|&#039;;     break;&lt;br /&gt;
                            case 0x0034: key = 0xB5;    break; // µ&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    else if (state &amp;amp; (STATE_LEFT_CTRL))&lt;br /&gt;
                    {&lt;br /&gt;
                        if (key_table[cmd] &amp;gt;= &#039;a&#039; &amp;amp;&amp;amp; key_table[cmd] &amp;lt;= &#039;z&#039;)&lt;br /&gt;
                        {&lt;br /&gt;
                            key = key_table[cmd] - &#039;a&#039; + 1;&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            key = key_table[cmd];&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        int idx = cmd + ((state &amp;amp; (STATE_LEFT_SHIFT | STATE_RIGHT_SHIFT)) ? 64 : 0);&lt;br /&gt;
&lt;br /&gt;
                        if (key_table[idx])&lt;br /&gt;
                        {&lt;br /&gt;
                            key = key_table[idx];&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            break;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return (key);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als letztes noch ein Beispiel einer Anwendung der Funktion get_fdc_key():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    if (irmp_get_data (&amp;amp;irmp_data))&lt;br /&gt;
    {&lt;br /&gt;
        uint8_t key;&lt;br /&gt;
&lt;br /&gt;
        if (irmp_data.protocol == IRMP_FDC_PROTOCOL &amp;amp;&amp;amp;&lt;br /&gt;
            (key = get_fdc_key (irmp_data.command)) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            if ((key &amp;gt;= 0x20 &amp;amp;&amp;amp; key &amp;lt; 0x7F) || key &amp;gt;= 0xA0) // show only printable characters&lt;br /&gt;
            {&lt;br /&gt;
                printf (&amp;quot;ascii-code = 0x%02x, character = &#039;%c&#039;\n&amp;quot;, key, key);&lt;br /&gt;
            }&lt;br /&gt;
            else // it&#039;s a non-printable key&lt;br /&gt;
            {&lt;br /&gt;
                printf (&amp;quot;ascii-code = 0x%02x\n&amp;quot;, key);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle nicht-druckbaren Zeichen werden dabei folgendermaßen codiert:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Taste             || Konstante                || Wert&lt;br /&gt;
|-&lt;br /&gt;
| ESC               || KEY_ESCAPE              || 0x1B&lt;br /&gt;
|-&lt;br /&gt;
| Menü              || KEY_MENUE               || 0x80&lt;br /&gt;
|-&lt;br /&gt;
| Zurück            || KEY_BACK                || 0x81&lt;br /&gt;
|-&lt;br /&gt;
| Vorw.             || KEY_FORWARD             || 0x82&lt;br /&gt;
|-&lt;br /&gt;
| Adresse           || KEY_ADDRESS             || 0x83&lt;br /&gt;
|-&lt;br /&gt;
| Fenster           || KEY_WINDOW              || 0x84&lt;br /&gt;
|-&lt;br /&gt;
| 1. Seite          || KEY_1ST_PAGE            || 0x85&lt;br /&gt;
|-&lt;br /&gt;
| Stop              || KEY_STOP                || 0x86&lt;br /&gt;
|-&lt;br /&gt;
| Mail              || KEY_MAIL                || 0x87&lt;br /&gt;
|-&lt;br /&gt;
| Fav.              || KEY_FAVORITES           || 0x88&lt;br /&gt;
|-&lt;br /&gt;
| Neue Seite        || KEY_NEW_PAGE            || 0x89&lt;br /&gt;
|-&lt;br /&gt;
| Setup             || KEY_SETUP               || 0x8A&lt;br /&gt;
|-&lt;br /&gt;
| Schrift           || KEY_FONT                || 0x8B&lt;br /&gt;
|-&lt;br /&gt;
| Druck             || KEY_PRINT               || 0x8C&lt;br /&gt;
|-&lt;br /&gt;
| Ein/Aus           || KEY_ON_OFF              || 0x8E&lt;br /&gt;
|-&lt;br /&gt;
| Backspace         || &#039;\b&#039;                    || 0x08&lt;br /&gt;
|-&lt;br /&gt;
| CR/ENTER          || &#039;\r&#039;                    || 0x0C&lt;br /&gt;
|-&lt;br /&gt;
| TAB               || &#039;\t&#039;                    || 0x09&lt;br /&gt;
|-&lt;br /&gt;
| Einfg             || KEY_INSERT              || 0x90&lt;br /&gt;
|-&lt;br /&gt;
| Entf              || KEY_DELETE              || 0x91&lt;br /&gt;
|-&lt;br /&gt;
| Cursor links      || KEY_LEFT                || 0x92&lt;br /&gt;
|-&lt;br /&gt;
| Pos1              || KEY_HOME                || 0x93&lt;br /&gt;
|-&lt;br /&gt;
| Ende              || KEY_END                 || 0x94&lt;br /&gt;
|-&lt;br /&gt;
| Cursor rechts     || KEY_UP                  || 0x95&lt;br /&gt;
|-&lt;br /&gt;
| Cursor runter     || KEY_DOWN                || 0x96&lt;br /&gt;
|-&lt;br /&gt;
| Bild hoch         || KEY_PAGE_UP             || 0x97&lt;br /&gt;
|-&lt;br /&gt;
| Bild runter       || KEY_PAGE_DOWN           || 0x98&lt;br /&gt;
|-&lt;br /&gt;
| Cursor links      || KEY_RIGHT               || 0x99&lt;br /&gt;
|-&lt;br /&gt;
| Linke Maustaste   || KEY_MOUSE_1             || 0x9E&lt;br /&gt;
|-&lt;br /&gt;
| Rechte Maustaste  || KEY_MOUSE_2             || 0x9F&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Funktion get_fdc_key berücksichtigt das Gedrückthalten der Shift-, Strg- und ALT-Tasten. Damit funktioniert nicht nur das Schreiben von Großbuchstaben, sondern auch das Auswählen der Sonderzeichen mit der Tastenkombination  ALT + Taste, z.B. ALT + m = µ oder ALT + q = @. Ebenso kann man mit der Strg-Taste die Control-Zeichen CTRL-A bis CTRL-Z senden. Die CapsLock-Taste wird ignoriert, da ich sie sowieso für die überflüssigste Taste überhaupt halte ;-)&lt;br /&gt;
&lt;br /&gt;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== Die IR-Protokolle im Detail ==&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protokolle ===&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== NEC + extended NEC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#NEC-Protokoll|NEC + extended NEC]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten NEC || 8 Adress-Bits + 8 invertierte Adress-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten ext. NEC || 16 Adress-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 9000µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 560µs Puls,  560µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 560µs Puls, 1690µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 560µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || 9000µs Puls, 2250µs Pause, 560µs Puls, ~100ms Pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ONKYO ====&lt;br /&gt;
&lt;br /&gt;
Wie [[IRMP#NEC|ext. NEC]], jedoch 16 unabhängige Datenbits, also:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#ONKYO-Protokoll|ONKYO]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Daten ONKYO || 16 Adress-Bits + 16 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== JVC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#NEC16-Protokoll (JVC)|JVC]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 16 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 4 Adress-Bits + 12 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 9000µs Puls, 4500µs Pause, 6000µs Pause bei Tasten-Wiederholung&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 560µs Puls,  560µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 560µs Puls, 1690µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 560µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || Wiederholung nach Pause von 25ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NEC16 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;NEC16&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 8 Adress-Bits + 1 Sync-Bit + 8 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 9000µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Sync-Bit || 560µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 560µs Puls,  560µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 560µs Puls, 1690µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 560µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine/eine/zwei nach 25ms?&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || Wiederholung nach Pause von 25ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NEC42 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;NEC42&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 42 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 13 Adress-Bits + 13 invertierte Adress-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 9000µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 560µs Puls,  560µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 560µs Puls, 1690µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 560µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || nach 110ms (ab Start-Bit), 9000µs Puls, 2250µs Pause, 560µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ACP24 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#ACP24-Protokoll|ACP24]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 70 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 0 Adress-Bits + 70 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 390µs Puls, 950µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 390µs Puls,  950µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 390µs Puls, 1300µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 390µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== LGAIR ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#LGAIR-Protokoll|LGAIR]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 28 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 8 Adress-Bits + 16 Kommando-Bits + 4 Checksum-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 9000µs Puls, 4500µs Pause (identisch mit [[IRMP#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 560µs Puls,  560µs Pause (identisch mit [[IRMP#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 560µs Puls, 1690µs Pause (identisch mit [[IRMP#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 560µs Puls (identisch mit [[IRMP#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first (&#039;&#039;&#039;abweichend&#039;&#039;&#039; zu [[IRMP#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#SAMSUNG-Protokoll|SAMSUNG]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 16 Daten(1)-Bits + 1 Sync-Bit + 20 Daten(2)-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten(1) || 16 Adress-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten(2) || 4 ID-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 4500µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 550µs Puls,  550µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 550µs Puls, 1650µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Sync-Bit || 550µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 550µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG32 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG32&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Adress-Bits + 16 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 4500µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 550µs Puls,  550µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 550µs Puls, 1650µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 550µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || Wiederholung nach ca. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 48 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Adress-Bits + 32 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Kommando || 8 Bits + 8 invertierte Bits + 8 Bits + 8 invertierte Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 4500µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 550µs Puls,  550µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 550µs Puls, 1650µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 550µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || eine nach ca. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || dritter, fünfter, siebter usw. identischer Frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== MATSUSHITA ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#MATSUHITA-Protokoll|MATSUSHITA]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance, Timing identisch mit [[IRMP#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 24 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 6 Hersteller-Bits + 6 Kommando-Bits + 12 Adress-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 3488µs Puls, 3488µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 872µs Puls,  872µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 872µs Puls, 2616µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 872µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames nach 40ms Pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TECHNICS ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;TECHNICS&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance, Timing identisch mit [[IRMP#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 22 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 11 Kommando-Bits + 11 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 3488µs Puls, 3488µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 872µs Puls,  872µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 872µs Puls, 2616µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 872µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames nach 40ms Pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== KASEIKYO ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#KASEIKYO-Protokoll (auch &amp;quot;Japan-Protokoll&amp;quot;)|KASEIKYO]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 48 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Hersteller-Bits + 4 Parity-Bits + 4 Genre1-Bits + 4 Genre2-Bits + 10 Kommando-Bits + 2 ID-Bits + 8 Parity-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 3380µs Puls, 1690µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 423µs Puls,  423µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 423µs Puls, 1269µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 423µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames nach ca. 80ms Pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RECS80 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#RECS80- und RECS80-Extended-Protokoll|RECS80]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bits + 10 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 1 Toggle-Bit + 3 Adress-Bits + 6 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 158µs Puls, 7432µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 158µs Puls, 4902µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 158µs Puls, 7432µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 158µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RECS80EXT ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#RECS80- und RECS80-Extended-Protokoll|RECS80EXT]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start-Bits + 11 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 1 Toggle-Bit + 4 Adress-Bits + 6 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 158µs Puls, 3637µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 158µs Puls, 4902µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 158µs Puls, 7432µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 158µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DENON ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#Denon-Protokoll|DENON]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz (in der Praxis, lt. Dokumentation: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start-Bits + 15 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 5 Address-Bits + 10 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Kommando || 6 Datenbits + 2 Extension Bits + 2 Data Construction Bits (*)&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || kein Start-Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 310µs Puls, 745µs Pause (in der Praxis, lt. Doku: 275µs Puls, 775µs Pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 310µs Puls, 1780µs Pause (in der Praxis, lt. Doku: 275µs Puls, 1900µs Pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 310µs Puls (310µs Puls, 745µs Pause (in der Praxis, lt. Doku: 275µs Puls)&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || Nach 65ms Wiederholung des Frames mit invertieren Kommando-Bits (Data Construction Bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung der beiden Original-Frames nach 65ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(*) Data Construction Bits:&lt;br /&gt;
* 00 = Erster Frame Denon&lt;br /&gt;
* 10 = Erster Frame Sharp&lt;br /&gt;
* 01 = Wiederholungsframe Sharp&lt;br /&gt;
* 11 = Wiederholungsframe Denon&lt;br /&gt;
&lt;br /&gt;
==== APPLE ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;APPLE&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Adress-Bits + 11100000 + 8 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || siehe [[IRMP#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || siehe [[IRMP#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || siehe [[IRMP#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || siehe [[IRMP#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== BOSE ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;BOSE&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 16 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 0 Adress-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 1060µs Puls, 1425µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 550µs Puls,  437µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 550µs Puls, 1425µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 550µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || noch ungeklärt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== B&amp;amp;O ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 Start-Bits + 16 Daten-Bits + 1 Trailer-Bit + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 0 Adress-Bits + 16 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 1 || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 2 || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 3 || 200µs Puls, 15425µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 4 || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 200µs Puls, 9175µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| R-Bit || 200µs Puls, 6050µs Pause, wiederholt das letzte Bit (repetition)&lt;br /&gt;
|-&lt;br /&gt;
| Trailer-Bit || 200µs Puls, 12300µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 200µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FDC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;FDC&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 40 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 8 Adress-Bits + 12 x 0-Bits + 4 Press/Release-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2085µs Puls, 966µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 300µs Puls,  220µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 300µs Puls, 715µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 300µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Drücken || Press/Release-Bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Loslassen || Press/Release-Bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || Wiederholung nach Pause von 60ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NIKON ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;NIKON&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 2 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 2 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2200µs Puls, 27100µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 500µs Puls,  1500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 500µs Puls, 3500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 500µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 56 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 24 Bits (010000000000010000000001) + 16 Adress-Bits + 16 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 3600µs Puls, 1600µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 565µs Puls,  316µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 565µs Puls, 1140µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 565µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 6 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 6 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2200µs Puls, 27100µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 1000µs Puls,  1000µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 1000µs Puls, 3000µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 1000µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== KATHREIN ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;KATHREIN&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 11 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 4 Adress-Bits + 7 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 210µs Puls, 6218µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 210µs Puls,  1400µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 210µs Puls, 3000µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 210µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || nach 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== LEGO ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 16 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 158µs Puls, 1026µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 158µs Puls,  263µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 158µs Puls, 553µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 158µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== VINCENT ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#VINCENT|VINCENT]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Adress- und 8 Kommando-Bits + 8 wiederholte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2500µs Puls, 4600µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 550µs Puls,  550µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 550µs Puls, 1540µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 550µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== THOMSON ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;THOMSON&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start-Bits + 12 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 4 Adress-Bits + 1 Toggle-Bit + 7 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 550µs Puls,  2000µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 550µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 550µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || Framewiederholung nach 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || vermutlich MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TELEFUNKEN ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;TELEFUNKEN&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 15 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 0 Adress-Bits + 15 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 600µs Puls, 1500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 600µs Puls, 600µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 600µs Puls, 1500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 600µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || vermutlich MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RCCAR ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;RCCAR&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 13 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 13 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2000µs Puls, 2000µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 600µs Puls,  900µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 600µs Puls, 450µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 600µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || nach 40ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== RCMM ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#RCMM-Protokoll|RCMM]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 Start-Bit + 24 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 Start-Bit + 12 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten RCMM32 || 16 Adress-Bits (= 4 Mode-Bits + 12 Device-Bits) + 1 Toggle-Bit + 15 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten RCMM24 || 16 Adress-Bits (= 4 Mode-Bits + 12 Device-Bits) + 1 Toggle-Bit + 7 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten RCMM12 || 4 Adress-Bits (= 2 Mode-Bits + 2 Device-Bits) + 8 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 500µs Puls, 220µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 00-Bits || 230µs Puls, 220µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 01-Bits || 230µs Puls, 380µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 10-Bits || 230µs Puls, 550µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 11-Bits || 230µs Puls, 720µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 230µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || nach 80ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Width Protokolle ===&lt;br /&gt;
[[Datei:Pulse-Width.png|miniatur|Pulse Width Coding]]&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== SIRCS ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#SIRCS-Protokoll|SIRCS]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|Frequenz ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 12-20 Daten-Bits, kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 7 Kommando-Bits + 5 Adress-Bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2400µs Puls, 600µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 600µs Puls, 600µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 1200µs Puls, 600µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || zweimalig nach ca. 25ms, d.h. 2. und 3. Frame&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || ab dem 4. identischen Frame, Abstand ca. 25ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Width Protokolle ===&lt;br /&gt;
[[Datei:Pulse-Distance-Width.png|miniatur|Pulse Distance Width Coding]]&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== NUBERT ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;NUBERT&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 10 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 0 Adress-Bits + 10 Kommando-Bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 1340µs Puls, 340µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 500µs Puls, 1300µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 1340µs Puls, 340µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 500µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || einmalig nach 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || dritter, fünfter, siebter usw. identischer Frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FAN ====&lt;br /&gt;
&lt;br /&gt;
Das Protokoll ist sehr ähnlich zu [[IRMP#NUBERT|NUBERT]], jedoch wird nur ein Frame gesandt. Außerdem werden 11 statt 10 Datenbits verwendet und kein Stop-Bit versandt. Die Pause zwischen Frame-Wiederholungen ist wesentlich geringer.&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;FAN &#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 11 Daten-Bits + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 0 Adress-Bits + 11 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 1280µs Puls, 380µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 380µs Puls, 1280µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 1280µs Puls, 380µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 500µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || nach 6,6ms Pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SPEAKER ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SPEAKER&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 10 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 0 Adress-Bits + 10 Kommando-Bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 440µs Puls, 1250µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 440µs Puls, 1250µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 1250µs Puls, 440µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 440µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || einmalig nach ca. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || dritter, fünfter, siebter usw. identischer Frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ROOMBA ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;ROOMBA&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 7 Daten-Bits + 0 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 0 Adress-Bits + 7 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2790µs Puls, 930µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 930µs Puls, 2790µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 2790µs Puls, 930µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || dreimalig nach jeweils 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || noch unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Biphase Protokolle ===&lt;br /&gt;
[[Datei:Biphase-Coding.png|miniatur|Biphase Coding]]&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== RC5 + RC5X ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#RC5- und RC5x-Protokoll|RC5 + RC5X]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start-Bits + 12 Daten-Bits + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten RC5 || 1 Toggle-Bit + 5 Adress-Bits + 6 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 Start-Bit + 13 Daten-Bits + 0 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten RC5X || 1 invertiertes Kommando-Bit + 1 Toggle-Bit + 5 Adress-Bits + 6 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 889µs Pause, 889µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 889µs Puls, 889µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 889µs Pause, 889µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RCII ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;RCII&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 31.25 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Pre-Bit + 1 Start-Bit + 9 Daten-Bits + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 0 Adress-Bits + 9 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre-Bit || 512µs Puls, 2560µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 1024µs Puls, &#039;&#039;&#039;keine Pause&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 512µs Pause, 512µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 512µs Puls, 512µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames nach 118ms&lt;br /&gt;
|-&lt;br /&gt;
| Bemerkung || Beim Tasten-Loslassen wird ein Frame mit Kommando 111111111 = 0x1FF gesandt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== S100 ====&lt;br /&gt;
&lt;br /&gt;
Ähnlich zu RC5x, aber 14 statt 13 Daten-Bits und 56kHz Modulation&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;S100&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 14 Daten-Bits + 0 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 1 invertiertes Kommando-Bit + 1 Toggle-Bit + 5 Adress-Bits + 7 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 889µs Pause, 889µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 889µs Puls, 889µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 889µs Pause, 889µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RC6 + RC6A ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#RC6 und RC6A-Protokoll|RC6 + RC6A]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC6 || 1 Start-Bit + 1 Bit &amp;quot;1&amp;quot; + 3 Mode-Bits (000) + 1 Toggle-Bit + 16 Daten-Bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC6A || 1 Start-Bit + 1 Bit &amp;quot;1&amp;quot; + 3 Mode-Bits (110) + 1 Toggle-Bit + 31 Daten-Bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Daten RC6 || 8 Adress-Bits + 8 Kommando Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten RC6A || &amp;quot;1&amp;quot; + 14 Hersteller-Bits + 8 System-Bits + 8 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten RC6A Pace (Sky) || &amp;quot;1&amp;quot; + 3 Mode-Bits (&amp;quot;110&amp;quot;) + 1 Toggle-Bit(UNUSED &amp;quot;0&amp;quot;) + 16 Bit + 1 Toggle(!) + 15 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2666µs Puls, 889µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0-Bit || 889µs Pause, 889µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1-Bit || 889µs Puls, 889µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 444µs Pause, 444µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 444µs Puls, 444µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== GRUNDIG + NOKIA ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#Grundig-Protokoll|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame-Paket || 1 Start-Frame + 19,968ms Pause + N Info-Frames + 117,76ms Pause + 1 Stop-Frame&lt;br /&gt;
|-&lt;br /&gt;
| Start-Frame || 1 Pre-Bit + 1 Start-Bit + 9 Daten-Bits (alle 1) + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 Pre-Bit + 1 Start-Bit + 9 Daten-Bits + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 Pre-Bit + 1 Start-Bit + 9 Daten-Bits (alle 1) + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten Grundig || 9 Kommando-Bits + 0 Adress-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten Nokia || 8 Kommando-Bits + 8 Adress-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre-Bit || 528µs Puls, 2639µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 528µs Puls, 528µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 528µs Pause, 528µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 528µs Puls, 528µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Info-Frames mit einem Pausenabstand von 117,76ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== IR60 (SDA2008) ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#IR60 (SDA2008 bzw. MC14497P)|IR60 (SDA2008)]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Start Frame || 1 Start-Bit + 101111 + 0 Stop-Bits + 22ms Pause&lt;br /&gt;
|-&lt;br /&gt;
| Daten Frame || 1 Start-Bit + 7 Daten-Bits + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 0 Adress-Bits + 7 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 528µs Puls, 2639µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 528µs Pause, 528µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 528µs Puls, 528µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Info-Frames mit einem Pausenabstand von 117,76ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SIEMENS + RUWIDO ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SIEMENS + RUWIDO&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz? (Merlin-Tastatur mit Ruwido-Protokoll: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 Start-Bit + 22 Daten-Bits + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 Start-Bit + 17 Daten-Bits + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten Siemens || 11 Adress-Bits + 10 Kommando-Bits + 1 invertiertes Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Daten Ruwido || 9 Adress-Bits + 7 Kommando-Bits + 1 invertiertes Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 275µs Puls, 275µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 275µs Pause, 275µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 275µs Puls, 275µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || 1-malige Wiederholung mit gesetztem Repeat-Bit (?)&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms (?)&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== A1TVBOX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;A1TVBOX&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start-Bits + 16 Daten-Bits + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 8 Adress-Bits + 8 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bits || &amp;quot;10&amp;quot;, also 250µs Puls, 150µs + 150µs Pause, 250µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 150µs Pause, 250µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 250µs Puls, 150µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== MERLIN ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;MERLIN&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start-Bits + 18 Daten-Bits + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 8 Adress-Bits + 10 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bits || &amp;quot;10&amp;quot;, also 210µs Puls, 210µs + 210µs Pause, 210µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 210µs Pause, 210µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 210µs Puls, 210µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ORTEK ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;ORTEK&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start-Bits + 18 Daten-Bits + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 6 Adress-Bits + 2 Spezial-Bits +  6 Kommando-Bits + 4 Spezial-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2000µs Puls, 1000µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 500µs Pause, 500µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 500µs Puls, 500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || 2 zusätzliche Frames mit gesetzten Spezial-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des 2. Frames&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protokolle ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Pulse-Position.png|miniatur|Pulse Position Coding]]&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== NETBOX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;NETBOX&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 16 Daten-Bits, kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 3 Adress-Bits + 13 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2400µs Puls, 800µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Bitlänge || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || Abstand ca. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software-Historie IRMP ==&lt;br /&gt;
&lt;br /&gt;
=== Änderungen IRMP in 3.2.x ===&lt;br /&gt;
&lt;br /&gt;
Version 3.2.6:&lt;br /&gt;
&lt;br /&gt;
* 27.01.2021: &#039;&#039;&#039;Neues IR-Protokoll:&#039;&#039;&#039; [[IRMP#MELINERA|MELINERA]]&lt;br /&gt;
* 27.01.2021: Protokoll [[IRMP#LEGO|LEGO]]: Timing verbessert&lt;br /&gt;
* 27.01.2021: Protokoll [[IRMP#RUWIDO|RUWIDO]]: Timing verbessert&lt;br /&gt;
* 27.01.2021: Protokoll [[IRMP#NEC|NEC]]: Senden von Repetition-Frames ermöglicht&lt;br /&gt;
&lt;br /&gt;
Version 3.2.3:&lt;br /&gt;
&lt;br /&gt;
* 15.08.2020: &#039;&#039;&#039;Neues RF-Protokoll:&#039;&#039;&#039; [[IRMP#RF_MEDION|RF_MEDION]]&lt;br /&gt;
&lt;br /&gt;
Version 3.2.2:&lt;br /&gt;
&lt;br /&gt;
* 09.07.2020: Zusätzliche Erkennung der Funkkanäle beim RF_X10 Protokoll&lt;br /&gt;
* 09.07.2020: Verbesserung der Erkennung von RF-Frames durch neue Stop-Bit-Behandlung.&lt;br /&gt;
* 09.07.2020: Verbesserte Detektion von RF_GEN24-Protokollen&lt;br /&gt;
* 09.07.2020: &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;&#039;&#039;&#039;NEU:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Detektion, ob/wann eine Fernbedienungstaste losgelassen wird, siehe Kapitel &#039;&#039;&#039;[[IRMP#.22Entprellen.22_von_Tasten|Entprellen von Tasten]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Version 3.2.1:&lt;br /&gt;
&lt;br /&gt;
* 22.06.2020: Mini-Bugfix&lt;br /&gt;
&lt;br /&gt;
Version 3.2.0:&lt;br /&gt;
&lt;br /&gt;
* 22.06.2020: Unterstützung von 433MHz Funkprotokollen (RF)&lt;br /&gt;
* 22.06.2020: &#039;&#039;&#039;Neues RF-Protokoll:&#039;&#039;&#039; [[IRMP#RF_GEN24|RF_GEN24]]&lt;br /&gt;
* 22.06.2020: &#039;&#039;&#039;Neues RF-Protokoll:&#039;&#039;&#039; [[IRMP#RF_X10|RF_X10]]&lt;br /&gt;
&lt;br /&gt;
Ältere Versionen:&lt;br /&gt;
&lt;br /&gt;
* 26.08.2019: &#039;&#039;&#039;Neues Protokoll:&#039;&#039;&#039; [[IRMP#METZ|METZ]]&lt;br /&gt;
* 26.08.2019: &#039;&#039;&#039;Neues Protokoll:&#039;&#039;&#039; [[IRMP#ONKYO|ONKYO]]&lt;br /&gt;
* 10.09.2018: &#039;&#039;&#039;Neues Protokoll:&#039;&#039;&#039; [[IRMP#RCII|RCII]]&lt;br /&gt;
* 06.09.2018: Support für STM32 mit HAL-Library&lt;br /&gt;
* 30.08.2018: Neue Option: IRMP_USE_IDLE_CALL&lt;br /&gt;
* 29.08.2018: Portierung auf ChibiOS&lt;br /&gt;
* 29.08.2018: Neues Protokoll: GREE&lt;br /&gt;
* 19.02.2018: Korrektur bei der Behandlung von irmp_flags nach ungültigen IR-Frames&lt;br /&gt;
* 25.08.2017: Neues Protokoll: IRMP16 zwecks transparenter Datenübertragung von 16-Bit-Daten&lt;br /&gt;
* Neues Protokoll: SAMSUNGAH&lt;br /&gt;
* Verbesserte ESP8266-Unterstützung&lt;br /&gt;
* 16.12.2016: Unterstützung von Nicht-Standard Nec-Repetition-Frames (4500us Pause statt 2250us)&lt;br /&gt;
* 18.11.2016: Buffer Overflow in irmp-main-avr-uart.c korrigiert&lt;br /&gt;
* 19.09.2016: Neues Protokoll [[IRMP#VINCENT|VINCENT]]&lt;br /&gt;
* 09.09.2016: Neues Protokoll [[IRMP#MITSU_HEAVY|Mitsubishi Heavy (Klimaanlage)]]&lt;br /&gt;
* 09.09.2016: Anpassungen an Compiler PIC C18&lt;br /&gt;
* 12.01.2016: Korrektur Portierung auf ESP8266&lt;br /&gt;
* 12.01.2016: Portierung auf MBED&lt;br /&gt;
* 12.01.2016: Mehrere plattformabhängige Beispiel-Main-Dateien hinzugefügt&lt;br /&gt;
* 17.11.2015: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 17.11.2015: Portierung auf ESP8266&lt;br /&gt;
* 17.11.2015: Portierung auf Teensy (3.x)&lt;br /&gt;
* 10.11.2015: Unterstützung für STM8 Mikrcontroller&lt;br /&gt;
* 20.09.2015: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#TECHNICS|TECHNICS]]&lt;br /&gt;
* 15.06.2015: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#ACP24|ACP24]]&lt;br /&gt;
* 29.05.2015: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#S100|S100]]&lt;br /&gt;
* 29.05.2015: Kleinere Korrekturen&lt;br /&gt;
* 28.05.2015: Logging für XMega hinzugefügt&lt;br /&gt;
* 28.05.2015: Timing-Korrekturen für FAN-Protokoll&lt;br /&gt;
* 27.05.2015: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#MERLIN|MERLIN]]&lt;br /&gt;
* 27.05.2015: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#FAN|FAN]]&lt;br /&gt;
* 18.05.2015: F_CPU Macro für STM32L1XX hinzugefügt&lt;br /&gt;
* 18.05.2015: Korrekturen zur XMega-Portierung&lt;br /&gt;
* 23.04.2015: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#PENTAX|PENTAX]]&lt;br /&gt;
* 23.04.2015: Portierung auf AVR XMega&lt;br /&gt;
* 19.09.2014: Kleineren Bug behoben: Fehlendes Newline vor #else eingefügt&lt;br /&gt;
* 18.09.2014: Logging für ARM STM32F10X hinzugefügt&lt;br /&gt;
* 17.09.2014: PROGMEM-Zugriff für Array irmp_protocol_names[] korrigiert.&lt;br /&gt;
* 15.09.2014: Timing-Toleranzen für [[IRMP#KASEIKYO|KASEIKYO]]-Protokoll vergrößert&lt;br /&gt;
* 15.09.2014: Wechsel von irmp_protocol_names auf PROGMEM, zusätzliche UART Routinen in irmp-main-avr-uart.c&lt;br /&gt;
* 21.07.2014: Portierung auf PIC 12F1840&lt;br /&gt;
* 09.07.2014: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 09.07.2014: Kleine Syntaxfehlerkorrektur&lt;br /&gt;
* 01.07.2014: Logging für ARM_STM32F4XX eingebaut&lt;br /&gt;
* 01.07.2014: IRMP port für PIC XC8 compiler, Variadic Macros herausgenommen wg. dummen XC8-Compiler :-(&lt;br /&gt;
* 05.06.2014: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#LGAIR|LGAIR]]&lt;br /&gt;
* 30.05.2014: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#SPEAKER|SPEAKER]]&lt;br /&gt;
* 30.05.2014: Timings für [[IRMP#SAMSUNG|SAMSUNG]]-Protokolle optimiert&lt;br /&gt;
* 20.02.2014: Fehlerhaftes Decodieren des [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]]-Protokolls korrigiert&lt;br /&gt;
* 19.02.2014: &#039;&#039;&#039;Neue Protokolle&#039;&#039;&#039;: [[IRMP#RCMM|RCMM32, RCMM24 und RCMM12]]&lt;br /&gt;
* 17.09.2014: Timing für [[IRMP#ROOMBA|ROOMBA]] verbessert&lt;br /&gt;
* 09.04.2013: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#ROOMBA|ROOMBA]]&lt;br /&gt;
* 09.04.2013: Verbesserte Frame-Erkennung für [[IRMP#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 19.03.2013: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 19.03.2013: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 12.03.2013: Geänderte Timing-Toleranzen für [[IRMP#RECS80|RECS80]]- und  [[IRMP#RECS80EXT|RECS80EXT]]-Protokoll&lt;br /&gt;
* 21.01.2013: Korrekturen Erkennung des Wiederholungsframes beim [[IRMP#DENON|DENON]]-Protokoll&lt;br /&gt;
* 17.01.2013: Korrekturen Frame-Erkennung beim [[IRMP#DENON|DENON]]-Protokoll&lt;br /&gt;
* 11.12.2012: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 07.12.2012: Verbesserte Erkennung von [[IRMP#DENON|DENON]]-Wiederholungsframes&lt;br /&gt;
* 19.11.2012: Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4)&lt;br /&gt;
* 06.11.2012: Korrektur [[IRMP#DENON|DENON]]-Frame-Erkennung&lt;br /&gt;
* 26.10.2012: Einige Timer-Korrekturen, Anpassungen an Arduino&lt;br /&gt;
* 11.07.2012: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#BOSE|BOSE]]&lt;br /&gt;
* 18.06.2012: Unterstützung für ATtiny87/167 hinzugefügt&lt;br /&gt;
* 05.06.2012: Kleinere Korrekturen Portierung auf ARM STM32&lt;br /&gt;
* 05.06.2012: Include-Korrektur in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 05.06.2012: Bugfix, wenn nur [[IRMP#NEC_+_extended_NEC|NEC]] und [[IRMP#NEC42|NEC42]] aktiviert&lt;br /&gt;
* 23.05.2012: Portierung auf ARM STM32&lt;br /&gt;
* 23.05.2012: Bugfix Frame-Erkennung beim [[IRMP#DENON|DENON]]-Protokoll&lt;br /&gt;
* 27.02.2012: Bug in IR60-Decoder behoben&lt;br /&gt;
* 27.02.2012: Bug in CRC-Berechnung von [[IRMP#KASEIKYO|KASEIKYO]]-Frames behoben&lt;br /&gt;
* 27.02.2012: Portierung auf C18 Compiler für PIC-Mikroprozessoren&lt;br /&gt;
* 13.02.2012: Bugfix: oberstes Bit in Adresse falsch bei [[IRMP#NEC_+_extended_NEC|NEC]]-Protokoll, wenn auch [[IRMP#NEC42|NEC42]]-Protokoll eingeschaltet ist.&lt;br /&gt;
* 13.02.2012: Timing von [[IRMP#SAMSUNG|SAMSUNG]]- und [[IRMP#SAMSUNG32|SAMSUNG32]]-Protokoll korrigiert&lt;br /&gt;
* 13.02.2012: [[IRMP#KASEIKYO|KASEIKYO]]: Genre2-Bits werden nun im oberen Nibble von flags gespeichert.&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#KATHREIN|KATHREIN]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#THOMSON|THOMSON]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#LEGO|LEGO]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#NEC16|NEC16]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#NEC42|NEC42]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#NETBOX|NETBOX]]&lt;br /&gt;
* 20.09.2011: Portierung auf ATtiny84 und ATtiny85&lt;br /&gt;
* 20.09.2011: Verbesserung von Tastenwiederholungen bei [[IRMP#RC5_+_RC5X|RC5]]&lt;br /&gt;
* 20.09.2011: Verbessertes Decodieren von [[IRMP#Biphase|Biphase]]-Protokollen&lt;br /&gt;
* 20.09.2011: Korrekturen am [[IRMP#RECS80|RECS80]]-Decoder&lt;br /&gt;
* 20.09.2011: Korrekturen beim Erkennen von zusätzlichen Bits im SIRCS-Protocol&lt;br /&gt;
* 18.01.2011: Korrekturen für [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]]-Protokoll&lt;br /&gt;
* 18.01.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#NIKON|NIKON]]&lt;br /&gt;
* 18.01.2011: Speichern der zusätzlichen Bits (&amp;gt;12) im [[IRMP#SIRCS|SIRCS]]-Protokoll in der Adresse&lt;br /&gt;
* 18.01.2011: Timing-Korrekturen für [[IRMP#DENON|DENON]]-Protokoll&lt;br /&gt;
* 04.09.2010: Bugfix für F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
* 02.09.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#RC6_+_RC6A|RC6A]]&lt;br /&gt;
* 29.08.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#JVC|JVC]]&lt;br /&gt;
* 29.08.2010: [[IRMP#KASEIKYO|KASEIKYO]]-Protokoll: Berücksichtigung der Genre-Bits. &#039;&#039;&#039;ACHTUNG: dadurch neue Command-Codes!&#039;&#039;&#039;&lt;br /&gt;
* 29.08.2010: [[IRMP#KASEIKYO|KASEIKYO]]-Protokoll: Verbesserte Behandlung von Wiederholungs-Frames&lt;br /&gt;
* 29.08.2010: Verbesserte Unterstützung des [[IRMP#APPLE|APPLE]]-Protokolls. &#039;&#039;&#039;ACHTUNG: dadurch neue Adress-Codes!&#039;&#039;&#039;&lt;br /&gt;
* 01.07.2010: Bugfix: Einführen eines Timeouts für [[IRMP#NEC_+_extended_NEC|NEC]]-Repetition-Frames, um &amp;quot;Geisterkommandos&amp;quot; zu verhindern.&lt;br /&gt;
* 26.06.2010: Bugfix: Deaktivieren von [[IRMP#RECS80|RECS80]], [[IRMP#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]] bei geringer Interrupt-Rate&lt;br /&gt;
* 25.06.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#RCCAR|RCCAR]]&lt;br /&gt;
* 25.06.2010: Tastenerkennung für [[IRMP#FDC|FDC]]-Protokoll (IR-keyboard) erweitert&lt;br /&gt;
* 25.06.2010: Interrupt-Frequenz nun bis zu 20kHz möglich&lt;br /&gt;
* 09.06.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 09.06.2010: Timing für [[IRMP#DENON|DENON]]-Protokoll korrigiert&lt;br /&gt;
* 02.06.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
* 26.05.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 26.05.2010: Bugfix Auswertung von langen Tastendrücken bei [[IRMP#GRUNDIG_+_NOKIA|GRUNDIG]]-Protokoll&lt;br /&gt;
* 17.05.2010: Bugfix [[IRMP#SAMSUNG32|SAMSUNG32]]-Protokoll: Kommando-Bit-Maske korrigiert&lt;br /&gt;
* 16.05.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 16.05.2010: Behandlung von automatischen Frame-Wiederholungen beim [[IRMP#SIRCS|SIRCS]]-, [[IRMP#SAMSUNG32|SAMSUNG32]]- und [[IRMP#NUBERT|NUBERT]]-Protokoll verbessert.&lt;br /&gt;
* 28.04.2010: Nur einige kosmetische Code-Optimierungen&lt;br /&gt;
* 16.04.2010: Sämtliche Timing-Toleranzen angepasst/optimiert&lt;br /&gt;
* 12.04.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
* 29.03.2010: Bugfix beim Erkennen von mehrfachen [[IRMP#NEC_+_extended_NEC|NEC]]-Repetition-Frames&lt;br /&gt;
* 29.03.2010: Konfiguration in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] ausgelagert&lt;br /&gt;
* 29.03.2010: Einführung einer Programmversion in README.txt: Version 1.0&lt;br /&gt;
* 17.03.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#NUBERT|NUBERT]]&lt;br /&gt;
* 16.03.2010: Korrektur der RECS80-Startbit-Timings&lt;br /&gt;
* 16.03.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
* 15.03.2010: Codeoptimierung&lt;br /&gt;
* 14.03.2010: Portierung auf PIC&lt;br /&gt;
* 11.03.2010: Anpassungen an verschiedene ATMega-Typen durchgeführt&lt;br /&gt;
* 07.03.2010: Bugfix: Zurücksetzen der Statemachine nach einem unvollständigen [[IRMP#RC5_+_RC5X|RC5]]-Frame&lt;br /&gt;
* 05.03.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#APPLE|APPLE]]&lt;br /&gt;
* 05.03.2010: Die Daten irmp_data.addr + irmp_data.command werden nun in der jeweiligen Bit-Order des verwendeten Protokolls gespeichert&lt;br /&gt;
* 04.03.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP#NEC_+_extended_NEC|NEC]]-Protokoll)&lt;br /&gt;
* 04.03.2010: Änderung der [[IRMP#SIRCS|SIRCS]]- und [[IRMP#KASEIKYO|KASEIKYO]]-Toleranzen&lt;br /&gt;
* 02.03.2010: [[IRMP#SIRCS|SIRCS]]: Korrekte Erkennung und Unterdrückung von automatischen Frame-Wiederholungen&lt;br /&gt;
* 02.03.2010: [[IRMP#SIRCS|SIRCS]]: Device-ID-Bits werden nun in irmp_data.command und nicht mehr in irmp_data.address gespeichert&lt;br /&gt;
* 02.03.2010: Vergrößerung des Scan Buffers (zwecks Protokollierung)&lt;br /&gt;
* 24.02.2010: Neue Variable flags in IRMP_DATA zur Erkennung von langen Tastendrücken&lt;br /&gt;
* 20.02.2010: Bugfix [[IRMP#DENON|DENON]]-Protokoll: Wiederholungsframe grundsätzlich invertiert&lt;br /&gt;
* 19.02.2010: Erkennung von [[IRMP#NEC_+_extended_NEC|NEC]]-Protokoll-Varianten, z.&amp;amp;nbsp;B. [[IRMP#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 19.02.2010: Erkennung von [[IRMP#RC6_+_RC6A|RC6]]- und [[IRMP#DENON|DENON]]-Protokoll&lt;br /&gt;
* 19.02.2010: Verbesserung des [[IRMP#RC5_+_RC5X|RC5]]-Decoders (Bugfixes)&lt;br /&gt;
* 13.02.2010: Bugfix: Puls/Pausen-Counter um 1 zu niedrig, nun bessere Erkennung bei Protokollen mit sehr kurzen Pulszeiten&lt;br /&gt;
* 13.02.2010: Erkennung der [[IRMP#NEC_+_extended_NEC|NEC]]-Wiederholungssequenz&lt;br /&gt;
* 12.02.2010: [[IRMP#RC5_+_RC5X|RC5]]-Protokoll-Decoder hinzugefügt&lt;br /&gt;
* 05.02.2010: Konflikt zwischen [[IRMP#SAMSUNG|SAMSUNG]]- und [[IRMP#MATSUSHITA|MATSUSHITA]]-Protokoll beseitigt&lt;br /&gt;
* 07.01.2010: Erste Version&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
&lt;br /&gt;
=== IR-Übersicht ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.net/knowledge/ir/index.php&lt;br /&gt;
* http://www.epanorama.net/links/irremote.html&lt;br /&gt;
* http://www.elektor.de/jahrgang/2008/juni/cc2-avr-projekt-%283%29-unsichtbare-kommandos.497184.lynkx?tab=4 (IR Übersicht &amp;amp; RC5)&lt;br /&gt;
* http://mc.mikrocontroller.com/de/IR-Protokolle.php&lt;br /&gt;
&lt;br /&gt;
=== SIRCS-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.net/knowledge/ir/sirc.php&lt;br /&gt;
* http://mc.mikrocontroller.com/de/IR-Protokolle.php#SIRCS&lt;br /&gt;
* http://www.ustr.net/infrared/sony.shtml&lt;br /&gt;
* http://users.telenet.be/davshomepage/sony.htm&lt;br /&gt;
* http://picprojects.org.uk/projects/sirc/&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== NEC-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.net/knowledge/ir/nec.php&lt;br /&gt;
* http://www.ustr.net/infrared/nec.shtml&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== ACP24-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
Das ACP24-Protokoll wird von Stiebel-Eltron-Klimaanlagen verwendet.&lt;br /&gt;
&lt;br /&gt;
Die 70 Datenbits sind folgendermaßen aufgebaut:&lt;br /&gt;
&lt;br /&gt;
              1         2         3         4         5         6&lt;br /&gt;
    0123456789012345678901234567890123456789012345678901234567890123456789&lt;br /&gt;
    N VVMMM    ? ???    t vmA x                 y                     TTTT&lt;br /&gt;
    0011001000000111000010001010000000000000000010000000000000000000001111on, temp=30&lt;br /&gt;
&lt;br /&gt;
Diese werden in die folgenden 16 Bits von irmp_data.command gewandelt:&lt;br /&gt;
&lt;br /&gt;
        5432109876543210&lt;br /&gt;
        NAVVvMMMmtxyTTTT&lt;br /&gt;
&lt;br /&gt;
Bedeutung der Symbole:&lt;br /&gt;
&lt;br /&gt;
    TTTT = Temperatur + 15 Grad&lt;br /&gt;
            TTTT&lt;br /&gt;
            ----------&lt;br /&gt;
            0000        ???&lt;br /&gt;
            0001        ???&lt;br /&gt;
            0010        ???&lt;br /&gt;
            0011        18 Grad&lt;br /&gt;
            0100        19 Grad&lt;br /&gt;
            0101        20 Grad&lt;br /&gt;
            0110        21 Grad&lt;br /&gt;
            ...&lt;br /&gt;
            1111        30 Grad&lt;br /&gt;
&lt;br /&gt;
    N    = Nacht-Modus&lt;br /&gt;
            N&lt;br /&gt;
            ----------&lt;br /&gt;
            0           aus&lt;br /&gt;
            1           ein&lt;br /&gt;
&lt;br /&gt;
    VV   = Luefter-Stufe, v muss 1 sein!&lt;br /&gt;
            VV   v&lt;br /&gt;
            ----------&lt;br /&gt;
            00   1      Stufe 1&lt;br /&gt;
            01   1      Stufe 2&lt;br /&gt;
            10   1      Stufe 3&lt;br /&gt;
            11   1      Automatik&lt;br /&gt;
&lt;br /&gt;
    MMM  = Modus&lt;br /&gt;
            MMM  m&lt;br /&gt;
            ----------&lt;br /&gt;
            000  0      Ausschalten&lt;br /&gt;
            001  0      Einschalten&lt;br /&gt;
            001  1      Kuehlen&lt;br /&gt;
            010  1      Lueften&lt;br /&gt;
            011  1      Entfeuchten&lt;br /&gt;
            100  1      ???&lt;br /&gt;
            101  1      ---&lt;br /&gt;
            110  1      ---&lt;br /&gt;
            111  1      ---&lt;br /&gt;
&lt;br /&gt;
    A    = Automatik-Programm&lt;br /&gt;
            A&lt;br /&gt;
            ----------&lt;br /&gt;
            0           aus&lt;br /&gt;
            1           ein&lt;br /&gt;
&lt;br /&gt;
    t   = Timer&lt;br /&gt;
            t   x y&lt;br /&gt;
            ----------&lt;br /&gt;
            1   1 0     Timer 1&lt;br /&gt;
            1   0 1     Timer 2&lt;br /&gt;
&lt;br /&gt;
Um die Klimaanlage mittels [[IRSND]] anzusteuern, kann man folgende Funktionen verwenden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;irmp.h&amp;quot;&lt;br /&gt;
#include &amp;quot;irsnd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define IRMP_ACP24_TEMPERATURE_MASK         0x000F                                          // TTTT&lt;br /&gt;
&lt;br /&gt;
#define IRMP_ACP24_SET_TIMER_MASK           (1&amp;lt;&amp;lt;6)                                          // t&lt;br /&gt;
#define IRMP_ACP24_TIMER1_MASK              (1&amp;lt;&amp;lt;5)                                          // x&lt;br /&gt;
#define IRMP_ACP24_TIMER2_MASK              (1&amp;lt;&amp;lt;4)                                          // y&lt;br /&gt;
&lt;br /&gt;
#define IRMP_ACP24_SET_MODE_MASK            (1&amp;lt;&amp;lt;7)                                          // m&lt;br /&gt;
#define IRMP_ACP24_MODE_POWER_ON_MASK       (1&amp;lt;&amp;lt;8)                                          // MMMm = 0010 Einschalten&lt;br /&gt;
#define IRMP_ACP24_MODE_COOLING_MASK        (IRMP_ACP24_SET_MODE_MASK | (1&amp;lt;&amp;lt;8))             // MMMm = 0011 Kuehlen&lt;br /&gt;
#define IRMP_ACP24_MODE_VENTING_MASK        (IRMP_ACP24_SET_MODE_MASK | (1&amp;lt;&amp;lt;9))             // MMMm = 0101 Lueften&lt;br /&gt;
#define IRMP_ACP24_MODE_DEMISTING_MASK      (IRMP_ACP24_SET_MODE_MASK | (1&amp;lt;&amp;lt;10) | (1&amp;lt;&amp;lt;8))   // MMMm = 1001 Entfeuchten&lt;br /&gt;
&lt;br /&gt;
#define IRMP_ACP24_SET_FAN_STEP_MASK        (1&amp;lt;&amp;lt;11)                                         // v&lt;br /&gt;
#define IRMP_ACP24_FAN_STEP_MASK            0x3000                                          // VV&lt;br /&gt;
#define IRMP24_ACP_FAN_STEP_BIT             12                                              // VV&lt;br /&gt;
#define IRMP_ACP24_AUTOMATIC_MASK           (1&amp;lt;&amp;lt;14)                                         // A&lt;br /&gt;
#define IRMP_ACP24_NIGHT_MASK               (1&amp;lt;&amp;lt;15)                                         // N&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// possible values for acp24_set_mode();&lt;br /&gt;
#define ACP24_MODE_COOLING                  1&lt;br /&gt;
#define ACP24_MODE_VENTING                  2&lt;br /&gt;
#define ACP24_MODE_DEMISTING                3&lt;br /&gt;
&lt;br /&gt;
static uint8_t temperature = 18;                                                    // 18 degrees&lt;br /&gt;
&lt;br /&gt;
static void&lt;br /&gt;
acp24_send (uint16_t cmd)&lt;br /&gt;
{&lt;br /&gt;
    IRMP_DATA irmp_data;&lt;br /&gt;
&lt;br /&gt;
    cmd |=  (temperature - 15) &amp;amp; IRMP_ACP24_TEMPERATURE_MASK;&lt;br /&gt;
&lt;br /&gt;
    irmp_data.protocol = IRMP_ACP24_PROTOCOL;&lt;br /&gt;
    irmp_data.address  = 0x0000;&lt;br /&gt;
    irmp_data.command  = cmd;&lt;br /&gt;
    irmp_data.flags    = 0;&lt;br /&gt;
&lt;br /&gt;
    irsnd_send_data (&amp;amp;irmp_data, 1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void&lt;br /&gt;
acp24_set_temperature (uint8_t temp)&lt;br /&gt;
{&lt;br /&gt;
    uint16_t    cmd = IRMP_ACP24_MODE_POWER_ON_MASK;&lt;br /&gt;
&lt;br /&gt;
    temperature = temp;&lt;br /&gt;
    acp24_send (cmd);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void&lt;br /&gt;
acp24_off (void)&lt;br /&gt;
{&lt;br /&gt;
    uint16_t    cmd = 0;&lt;br /&gt;
    acp24_send (cmd);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#define ACP_FAN_STEP1       0&lt;br /&gt;
#define ACP_FAN_STEP2       1&lt;br /&gt;
#define ACP_FAN_STEP3       2&lt;br /&gt;
#define ACP_FAN_AUTOMATIC   3&lt;br /&gt;
&lt;br /&gt;
void&lt;br /&gt;
acp24_fan (uint8_t fan_step)&lt;br /&gt;
{&lt;br /&gt;
    uint16_t    cmd = IRMP_ACP24_MODE_POWER_ON_MASK;&lt;br /&gt;
&lt;br /&gt;
    cmd |= IRMP_ACP24_SET_FAN_STEP_MASK | ((fan_step &amp;lt;&amp;lt; IRMP24_ACP_FAN_STEP_BIT) &amp;amp; IRMP_ACP24_FAN_STEP_MASK);&lt;br /&gt;
&lt;br /&gt;
    acp24_send (cmd);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void&lt;br /&gt;
acp24_set_mode (uint8_t mode)&lt;br /&gt;
{&lt;br /&gt;
    uint16_t    cmd = 0;&lt;br /&gt;
&lt;br /&gt;
    switch (mode)&lt;br /&gt;
    {&lt;br /&gt;
        case ACP24_MODE_COOLING:    cmd = IRMP_ACP24_MODE_COOLING_MASK;     break;&lt;br /&gt;
        case ACP24_MODE_VENTING:    cmd = IRMP_ACP24_MODE_VENTING_MASK;     break;&lt;br /&gt;
        case ACP24_MODE_DEMISTING:  cmd = IRMP_ACP24_MODE_DEMISTING_MASK;   break;&lt;br /&gt;
        default: return;&lt;br /&gt;
    }&lt;br /&gt;
    acp24_send (cmd);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void&lt;br /&gt;
acp24_program_automatic (void)&lt;br /&gt;
{&lt;br /&gt;
    uint16_t    cmd = IRMP_ACP24_MODE_POWER_ON_MASK | IRMP_ACP24_AUTOMATIC_MASK;&lt;br /&gt;
    acp24_send (cmd);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void&lt;br /&gt;
acp24_program_night (void)&lt;br /&gt;
{&lt;br /&gt;
    uint16_t    cmd = IRMP_ACP24_MODE_POWER_ON_MASK | IRMP_ACP24_NIGHT_MASK;&lt;br /&gt;
    acp24_send (cmd);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LGAIR-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
Der LG Air Conditioner ist eine Klimaanlage, die durch eine &amp;quot;intelligente&amp;quot; Fernbedienung gesteuert wird.&lt;br /&gt;
Dies sind die &amp;quot;entschlüsselten&amp;quot; Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    Befehl                  AAAAAAAA  PW  Z  S  T  mmm  tttt  vvvv  PPPP&lt;br /&gt;
    --------------------------------------------------------------------&lt;br /&gt;
    ON 23C                  10001000  00  0  0  0  000  1000  0100  1100&lt;br /&gt;
    ON 26C                  10001000  00  0  0  0  000  1011  0100  1111&lt;br /&gt;
&lt;br /&gt;
    OFF                     10001000  11  0  0  0  000  0000  0101  0001&lt;br /&gt;
    TURN OFF                10001000  11  0  0  0  000  0000  0101  0001  (18C currently, identical with off)&lt;br /&gt;
&lt;br /&gt;
    TEMP DOWN 23C           10001000  00  0  0  1  000  1000  0100  0100&lt;br /&gt;
    MODE (to mode0, 23C)    10001000  00  0  0  1  000  1000  0100  0100&lt;br /&gt;
&lt;br /&gt;
    TEMP UP (24C)           10001000  00  0  0  1  000  1001  0100  0101&lt;br /&gt;
    TEMP DOWN 24C           10001000  00  0  0  1  000  1001  0100  0101&lt;br /&gt;
&lt;br /&gt;
    TEMP UP (25C)           10001000  00  0  0  1  000  1010  0100  0110&lt;br /&gt;
    TEMP DOWN 25C           10001000  00  0  0  1  000  1010  0100  0110&lt;br /&gt;
&lt;br /&gt;
    TEMP UP (26C)           10001000  00  0  0  1  000  1011  0100  0111&lt;br /&gt;
&lt;br /&gt;
    MODE                    10001000  00  0  0  1  011  0111  0100  0110  (to mode1, 22C - when switching to mode1 temp automaticall sets to 22C)&lt;br /&gt;
    ON (mode1, 22C)         10001000  00  0  0  0  011  0111  0100  1110&lt;br /&gt;
&lt;br /&gt;
    MODE                    10001000  00  0  0  1  001  1000  0100  0101  (to mode2, no temperature displayed)&lt;br /&gt;
    ON (mode2)              10001000  00  0  0  0  001  1000  0100  1101&lt;br /&gt;
    MODE (to mode3, 23C)    10001000  00  0  0  1  100  1000  0100  1000&lt;br /&gt;
    ON (mode3, 23C)         10001000  00  0  0  0  100  1000  0100  0000&lt;br /&gt;
&lt;br /&gt;
    VENTILATION SLOW        10001000  00  0  0  1  000  0011  0000  1011&lt;br /&gt;
    VENTILATION MEDIUM      10001000  00  0  0  1  000  0011  0010  1101&lt;br /&gt;
    VENTILATION HIGH        10001000  00  0  0  1  000  0011  0100  1111&lt;br /&gt;
    VENTILATION LIGHT       10001000  00  0  0  1  000  0011  0101  0000&lt;br /&gt;
&lt;br /&gt;
    SWING ON/OFF            10001000  00  0  1  0  000  0000  0000  0001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    Format:     1 start bit + 8 address bits + 16 data bits + 4 checksum bits + 1 stop bit&lt;br /&gt;
&lt;br /&gt;
    Address:    AAAAAAAA = 0x88 (8 bits)&lt;br /&gt;
&lt;br /&gt;
    Data:       PW Z S T MMM tttt vvvv PPPP (16 bits)&lt;br /&gt;
&lt;br /&gt;
                PW:         Power:     00 = On, 11 = Off&lt;br /&gt;
&lt;br /&gt;
                Z:          N/A:       Always 0&lt;br /&gt;
&lt;br /&gt;
                S:          Swing:     1 = Toggle swing, all other data bits are zeros.&lt;br /&gt;
&lt;br /&gt;
                T:          Temp/Vent: 1 = Set temperature and ventilation&lt;br /&gt;
&lt;br /&gt;
                MMM:        Mode, can be combined with temperature&lt;br /&gt;
                            000=Mode 0&lt;br /&gt;
                            001=Mode 2&lt;br /&gt;
                            010=????&lt;br /&gt;
                            011=Mode 1&lt;br /&gt;
                            100=Mode 3&lt;br /&gt;
                            101=???&lt;br /&gt;
                            111=???&lt;br /&gt;
&lt;br /&gt;
                tttt:       Temperature:&lt;br /&gt;
                            0000=used by OFF command&lt;br /&gt;
                            0001=????&lt;br /&gt;
                            0010=????&lt;br /&gt;
                            0011=18°C&lt;br /&gt;
                            0100=19°C&lt;br /&gt;
                            0101=20°C&lt;br /&gt;
                            0110=21°C&lt;br /&gt;
                            0111=22°C&lt;br /&gt;
                            1000=23°C&lt;br /&gt;
                            1001=24°C&lt;br /&gt;
                            1010=25°C&lt;br /&gt;
                            1011=26°C&lt;br /&gt;
                            1011=27°C&lt;br /&gt;
                            1100=28°C&lt;br /&gt;
                            1101=29°C&lt;br /&gt;
                            1111=30°C&lt;br /&gt;
&lt;br /&gt;
                vvvv:       Ventilation:&lt;br /&gt;
                            0000=slow&lt;br /&gt;
                            0010=medium&lt;br /&gt;
                            0011=????&lt;br /&gt;
                            0100=high&lt;br /&gt;
                            0101=light&lt;br /&gt;
                            0110=????&lt;br /&gt;
                            0111=????&lt;br /&gt;
                            ...&lt;br /&gt;
                            1111=????&lt;br /&gt;
&lt;br /&gt;
    Checksum:   PPPP = (DataNibble1 + DataNibble2 + DataNibble3 + DataNibble4) &amp;amp; 0x0F&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NEC16-Protokoll (JVC) ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.net/knowledge/ir/jvc.php&lt;br /&gt;
* http://www.ustr.net/infrared/jvc.shtml&lt;br /&gt;
&lt;br /&gt;
=== SAMSUNG-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
(wurde aus diversen Protokollen (Daewoo u.ä.) zusammengereimt, daher kein direkter Link auf irgendwelche SAMSUNG-Dokumentation verfügbar)&lt;br /&gt;
&lt;br /&gt;
Hier ein Link zum Daewoo-Protokoll, welches dasselbe Prinzip des Sync-Bits in der Mitte eines Frames nutzt, jedoch mit anderen Timing-Werten arbeitet:&lt;br /&gt;
&lt;br /&gt;
* http://users.telenet.be/davshomepage/daewoo.htm&lt;br /&gt;
&lt;br /&gt;
=== MATSUHITA-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO-Protokoll (auch &amp;quot;Japan-Protokoll&amp;quot;) ===&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/attachment/4246/IR-Protokolle_Diplomarbeit.pdf&lt;br /&gt;
* http://www.roboternetz.de/phpBB2/files/entwicklung_und_realisierung_einer_universalinfrarotfernbedienung_mit_timerfunktionen.pdf&lt;br /&gt;
&lt;br /&gt;
=== RECS80- und RECS80-Extended-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.net/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5- und RC5x-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.net/knowledge/ir/rc5.php&lt;br /&gt;
* http://mc.mikrocontroller.com/de/IR-Protokolle.php#RC5&lt;br /&gt;
* http://users.telenet.be/davshomepage/rc5.htm&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
* http://www.opendcc.de/info/rc5/rc5.html&lt;br /&gt;
&lt;br /&gt;
=== Denon-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://mc.mikrocontroller.com/de/IR-Protokolle.php#DENON&lt;br /&gt;
* http://www.manualowl.com/m/Denon/AVR-3803/Manual/170243&lt;br /&gt;
* http://www.remotecentral.com/cgi-bin/mboard/rc-prontong/thread.cgi?1402&lt;br /&gt;
&lt;br /&gt;
=== RC6 und RC6A-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* https://www.sbprojects.net/knowledge/ir/rc6.php&lt;br /&gt;
* http://www.picbasic.nl/info_rc6_uk.htm&lt;br /&gt;
&lt;br /&gt;
=== Bang &amp;amp; Olufsen ===&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/attachment/33137/datalink.pdf&lt;br /&gt;
&lt;br /&gt;
=== Grundig-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.net/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 bzw. MC14497P) ===&lt;br /&gt;
&lt;br /&gt;
* http://www.datasheetcatalog.org/datasheet/motorola/MC14497P.pdf&lt;br /&gt;
&lt;br /&gt;
=== LEGO Power Functions RC ===&lt;br /&gt;
&lt;br /&gt;
* http://www.philohome.com/pf/LEGO_Power_Functions_RC_v110.pdf&lt;br /&gt;
* http://www.philohome.com/pf/LEGO_Power_Functions_RC_v120.pdf&lt;br /&gt;
&lt;br /&gt;
=== RCMM-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.net/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Diverse Protokolle ===&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/attachment/4246/IR-Protokolle_Diplomarbeit.pdf&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
* http://www.roboternetz.de/phpBB2/files/entwicklung_und_realisierung_einer_universalinfrarotfernbedienung_mit_timerfunktionen.pdf&lt;br /&gt;
&lt;br /&gt;
== IRMP auf Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP#top|IRMP]] habe ich auf Youtube gefunden:&lt;br /&gt;
&lt;br /&gt;
* IRMP. AVR (atmega8, avr-gcc) IR decoder. http://www.youtube.com/watch?v=Q7DJvLIyTEI&lt;br /&gt;
&lt;br /&gt;
* Room-fillig powerful 100W RGB LED mood light - Raumfüllendes Stimmungslicht http://www.youtube.com/watch?v=W4tI2axR3-w&lt;br /&gt;
&lt;br /&gt;
* ir steckdose mit teachin http://www.youtube.com/watch?v=SRs98dIe2WE&lt;br /&gt;
&lt;br /&gt;
* RGB-LED mit iR Fernbedienung und Atmega8 / irmp steuern https://www.youtube.com/watch?v=Lf1Z318NKic&lt;br /&gt;
&lt;br /&gt;
== Weitere Artikel zu IRMP ==&lt;br /&gt;
&lt;br /&gt;
[http://www.infineon.com/dgdl/RF2ir+WhitePaper+V1.0.pdf?folderId=db3a3043191a246301192dd3ee2c2ae4&amp;amp;fileId=db3a30432b57a660012b5c16272c2e81 Whitepaper von Martin Gotschlich, Infineon Technologies AG]&lt;br /&gt;
&lt;br /&gt;
== Hardware / IRMP-Projekte ==&lt;br /&gt;
&lt;br /&gt;
=== Remote IRMP ===&lt;br /&gt;
&lt;br /&gt;
Netzwerkfähiger Infrarot-Sender und Empfänger mit Android Handy als Fernbedienung:&lt;br /&gt;
&lt;br /&gt;
 * http://www.mikrocontroller.net/articles/Remote_IRMP&lt;br /&gt;
&lt;br /&gt;
=== USB IR Remote Receiver ===&lt;br /&gt;
&lt;br /&gt;
USB IR Remote Receiver von Hugo Portisch:&lt;br /&gt;
* http://www.mikrocontroller.net/articles/USB_IR_Remote_Receiver&lt;br /&gt;
&lt;br /&gt;
=== USB IR Empfänger/Sender/Einschalter mit Wakeup-Timer ===&lt;br /&gt;
&lt;br /&gt;
* http://www.vdr-portal.de/board18-vdr-hardware/board13-fernbedienungen/123572-fertig-irmp-auf-stm32-ein-usb-ir-empf%C3%A4nger-sender-einschalter-mit-wakeup-timer/&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/articles/IRMP_auf_STM32_-_ein_USB_IR_Empf%C3%A4nger/Sender/Einschalter_mit_Wakeup-Timer&lt;br /&gt;
&lt;br /&gt;
=== USBASP ===&lt;br /&gt;
&lt;br /&gt;
IR-Einschalter auf Grundlage des USBasp&lt;br /&gt;
* http://wiki.easy-vdr.de/index.php?title=USBASP_Einschalter&lt;br /&gt;
&lt;br /&gt;
=== Servo-gesteuerter IR-Sender  ===&lt;br /&gt;
&lt;br /&gt;
Servo-gesteuerter IR-Sender mit Anlernfunktion von Stefan Pendsa:&lt;br /&gt;
* http://forum.mikrokopter.de/topic-21060.html&lt;br /&gt;
* [http://svn.mikrokopter.de/listing.php?repname=Projects&amp;amp;path=%2FServo-Controlled+IR-Transmitter%2F&amp;amp;#Ad2417800d6aa14bf08c571a896e9def7 SVN]&lt;br /&gt;
&lt;br /&gt;
=== Lernfähige IR-Fernbedienung ===&lt;br /&gt;
&lt;br /&gt;
Lernfähige IR-Fernbedienung von Robert und Frank M.&lt;br /&gt;
* http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP&lt;br /&gt;
&lt;br /&gt;
=== AVR Moodlight ===&lt;br /&gt;
&lt;br /&gt;
AVR Moodlight von Axel Schwenke&lt;br /&gt;
* http://www.mikrocontroller.net/topic/244768&lt;br /&gt;
&lt;br /&gt;
RGB Moodlight mit STM8 von Axel Schwenke&lt;br /&gt;
* https://www.mikrocontroller.net/topic/380098&lt;br /&gt;
&lt;br /&gt;
=== Infinity-Mirror-LED-Deckenlampe ===&lt;br /&gt;
&lt;br /&gt;
Infinity-Mirror-LED-Deckenlampe mit Fernbedienung von Philipp Meißner&lt;br /&gt;
* http://digital-nw.de/Infinity-Mirror.htm&lt;br /&gt;
&lt;br /&gt;
=== Kinosteuerung ===&lt;br /&gt;
&lt;br /&gt;
Kinosteuerung von Owagner&lt;br /&gt;
* http://ccc.zerties.org/index.php/Benutzer:Owagner&lt;br /&gt;
&lt;br /&gt;
=== Phasenanschnittsdimmer ===&lt;br /&gt;
&lt;br /&gt;
Phasenanschnittsdimmer - steuerbar über IR-Fernbedienung:&lt;br /&gt;
&lt;br /&gt;
* http://flosserver.dyndns.org/phasenanschnittsdimmer.php&lt;br /&gt;
&lt;br /&gt;
=== IRDioder – Ikea Dioder Hack ===&lt;br /&gt;
&lt;br /&gt;
Ikea Dioder Hack mit Atmel und Infrarotempfaenger:&lt;br /&gt;
&lt;br /&gt;
* http://marco-difeo.de/tag/infrared/&lt;br /&gt;
&lt;br /&gt;
=== Expedit Coffee Bar ===&lt;br /&gt;
&lt;br /&gt;
Ikea Expedit Regal - umgebaut zur Kaffee-Bar:&lt;br /&gt;
&lt;br /&gt;
* http://chaozlabs.blogspot.de/2013/09/expedit-coffee-bar.html&lt;br /&gt;
&lt;br /&gt;
=== Arduino als IR-Empfänger ===&lt;br /&gt;
&lt;br /&gt;
Arduino als IR-Empfänger:&lt;br /&gt;
&lt;br /&gt;
* http://www.vdr-portal.de/board18-vdr-hardware/board13-fernbedienungen/110918-arduino-als-ir-empf%C3%A4nger-einsetzen/&lt;br /&gt;
&lt;br /&gt;
Weitere Beispiele aus der Arduino Library:&lt;br /&gt;
&lt;br /&gt;
* https://github.com/ukw100/IRMP/tree/master/examples&lt;br /&gt;
&lt;br /&gt;
=== IR-Lautstärkesteuerung mit Stellaris Launchpad ===&lt;br /&gt;
&lt;br /&gt;
IR-Lautstärkesteuerung mit Stellaris Launchpad (ARM Cortex-M4F):&lt;br /&gt;
&lt;br /&gt;
* http://www.anthonyvh.com/2013/03/31/ir-volume-control/&lt;br /&gt;
&lt;br /&gt;
=== RemotePi Board ===&lt;br /&gt;
&lt;br /&gt;
Herunterfahren eines RaspPI mittels Fernbedienung:&lt;br /&gt;
&lt;br /&gt;
* http://www.msldigital.com/pages/more-information&lt;br /&gt;
&lt;br /&gt;
=== Ethernut &amp;amp; IRMP ===&lt;br /&gt;
&lt;br /&gt;
IRMP unter dem RTOS Ethernut:&lt;br /&gt;
&lt;br /&gt;
* http://www.klkl.de/ethernut.html&lt;br /&gt;
&lt;br /&gt;
=== LED strip Remote Control ===&lt;br /&gt;
&lt;br /&gt;
LED-Beleuchtung per Fernbedienung steuern:&lt;br /&gt;
&lt;br /&gt;
* http://www.solderlab.de/index.php/misc/led-strip-remote-control&lt;br /&gt;
&lt;br /&gt;
=== ADAT Audio Mixer ===&lt;br /&gt;
&lt;br /&gt;
Audio Mixer:&lt;br /&gt;
&lt;br /&gt;
* http://mailtonne.de/adat-audio-mixer/&lt;br /&gt;
&lt;br /&gt;
=== Ethersex &amp;amp; IRMP ===&lt;br /&gt;
&lt;br /&gt;
IRMP + IRSND Modul in Ethersex, einer modularen Firmware für AVR MCUs&lt;br /&gt;
&lt;br /&gt;
* http://ethersex.de/index.php/IRMP&lt;br /&gt;
&lt;br /&gt;
=== Mastermind Solver ===&lt;br /&gt;
&lt;br /&gt;
Mastermind-Solver mit LED-Streifen und IR-Fernbedienung &lt;br /&gt;
&lt;br /&gt;
* http://www.mystrobl.de/Plone/basteleien/weitere-bulls-and-cows-mastermind-implementationen/mm-v1821/mastermind-solver-mit-led-streifen-und-ir-fernbedienung&lt;br /&gt;
&lt;br /&gt;
=== A MythTV Remote Control without LIRC ===&lt;br /&gt;
&lt;br /&gt;
PC Remote Control mit ATtiny85&lt;br /&gt;
&lt;br /&gt;
* http://tomscircuits.blogspot.de/2014/12/a-mythtv-remote-control-without-lirc.html&lt;br /&gt;
&lt;br /&gt;
=== IRMP2Keyboard infrared remote to PS2/USB keyboard converter ===&lt;br /&gt;
&lt;br /&gt;
IRMP2Keyboard infrared remote to PS2/USB keyboard converter&lt;br /&gt;
&lt;br /&gt;
https://github.com/M-Reimer/irmp2keyboard&lt;br /&gt;
&lt;br /&gt;
=== IRMP + IRSND Library für STM32F4 ===&lt;br /&gt;
&lt;br /&gt;
IRMP für STM32F4&lt;br /&gt;
&lt;br /&gt;
* http://mikrocontroller.bplaced.net/wordpress/?page_id=1516&lt;br /&gt;
&lt;br /&gt;
IRSND für STM32F4&lt;br /&gt;
&lt;br /&gt;
* http://mikrocontroller.bplaced.net/wordpress/?page_id=1940&lt;br /&gt;
&lt;br /&gt;
=== IRMP auf STM32 - Bauanleitung ===&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/articles/IRMP_auf_STM32_-_Bauanleitung&lt;br /&gt;
&lt;br /&gt;
=== Studienarbeit - Erweiterung der Arduino Plattform ===&lt;br /&gt;
&lt;br /&gt;
* http://www.eislab.fim.uni-passau.de/files/publications/2010/StudentDiener_ErweiterungDerArduinoPlattform.pdf&lt;br /&gt;
&lt;br /&gt;
=== Forumsbeiträge ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/444061 Forumsbeitrag]: IRMP und IRSND als Protokoll für 433 MHz Sender/Empfänger funktioniert nicht so ganz &lt;br /&gt;
* [https://www.mikrocontroller.net/topic/441010#5248149 Forumsbeitrag]: Frage zu IR-Remote+LED-Strips an AVR&lt;br /&gt;
&lt;br /&gt;
== Danksagung ==&lt;br /&gt;
&lt;br /&gt;
Ganz herzlich bedanken möchte ich mich bei Vlad Tepesch, Klaus Leidinger und Peter K., die mich mit Scan-Dateien ihrer Infrarot-Fernbedienungen versorgt haben. Dank auch an Klaus für seine nächtelangen Tests von [[IRMP#top|IRMP]] &amp;amp; [[IRSND#top|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND]]-Variante des Pentax-Protokolls.&lt;br /&gt;
&lt;br /&gt;
Als letztes möchte ich mich bedanken bei Jojo S., der den größten Teil dieser Dokumentation ins Englische übersetzt hat. Great Job, Jojo!&lt;br /&gt;
&lt;br /&gt;
== Diskussion ==&lt;br /&gt;
&lt;br /&gt;
Meinungen, Verbesserungsvorschläge, harsche Kritik und ähnliches kann im [http://www.mikrocontroller.net/topic/162119 Beitrag: Infrared Multi Protocol Decoder] geäussert werden.&lt;br /&gt;
&lt;br /&gt;
Viel Spaß mit IRMP!&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infrarot]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Forum-Erweiterungen&amp;diff=101325</id>
		<title>Forum-Erweiterungen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Forum-Erweiterungen&amp;diff=101325"/>
		<updated>2019-11-24T13:15:25Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um das Erscheinungsbild von mikrocontroller.net im Browser an die eigenen Bedürfnisse anzupassen, gibt es folgende Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
* [https://www.userchrome.org/ userChrome.css] oder Client-Side [https://de.wikipedia.org/wiki/JavaScript JavaScript] nur für [https://www.mozilla.org/de/firefox/ Firefox] direkt, bei Chrome ist ein Add-On nötig.&amp;lt;ref&amp;gt;[https://superuser.com/questions/52967/change-default-css-of-google-chrome#191170 SuperUser.com change default css of Google Chrome]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [https://www.squarefree.com/bookmarklets/ Bookmarklets]&lt;br /&gt;
* Browser-Erweiterung:&lt;br /&gt;
** [https://www.greasespot.net GreaseMonkey] Add-On für Firefox&lt;br /&gt;
** [https://tampermonkey.net TamperMonkey] Add-On für Firefox, Chrome, Opera Next, Edge, Safari&lt;br /&gt;
** [https://violentmonkey.github.io/get-it/ ViolentMonkey] Add-On für Firefox, Chrome, Opera&lt;br /&gt;
* Automatischen Import als Extension in [https://de.wikipedia.org/wiki/Google_Chrome Google Chrome] oder [https://de.wikipedia.org/wiki/Vivaldi_(Browser) Vivaldi]&lt;br /&gt;
&lt;br /&gt;
== Threads im Forum ==&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/176190 Sonderzeichen für µC.net Posting-Editor]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/200578 Übersicht über alle Dateianhänge in einem Thread]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/219612 JavaScript: Suchfeld in der mikrocontroller.net Titelleiste]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/219625 mikrocontroller.net: statisches Menü]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/261114#2723233 Farbmarkierungen]&lt;br /&gt;
** Einfärben Beiträge nach Alter&lt;br /&gt;
** Farbmarkierung eigene Beiträge&lt;br /&gt;
** Farbmarkierung Beitrgäge, in denen eigener Name vorkommt&lt;br /&gt;
** Farbmarkierung TO (funktioniert nicht bei mehrseitigen Threads)&lt;br /&gt;
** Farbmarkierung VIP (zB Andreas)&lt;br /&gt;
* Wo wurden die Beiträge zitiert? [https://www.mikrocontroller.net/topic/423933#5477508 Umgekehrte Beitragsreferenzen] ([https://www.mikrocontroller.net/topic/423933#6050083 für Greasemonkey])&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/414770#4836572 Beiträge eines Benutzers farblich hervorheben] ([https://www.mikrocontroller.net/topic/414770#6050425 für Greasemonkey])&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Ich sehe nicht was der Link damit zu tun hat.&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Linksammlung#Ungewöhnliche Basteleien (Hacks)|Linksammlung: Ungewöhnliche Basteleien (Hacks)]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Forum]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Forum-Erweiterungen&amp;diff=101324</id>
		<title>Forum-Erweiterungen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Forum-Erweiterungen&amp;diff=101324"/>
		<updated>2019-11-24T13:12:07Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um das Erscheinungsbild von mikrocontroller.net im Browser an die eigenen Bedürfnisse anzupassen, gibt es folgende Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
* [https://www.userchrome.org/ userChrome.css] oder Client-Side [https://de.wikipedia.org/wiki/JavaScript JavaScript] nur für [https://www.mozilla.org/de/firefox/ Firefox] direkt, bei Chrome ist ein Add-On nötig.&amp;lt;ref&amp;gt;[https://superuser.com/questions/52967/change-default-css-of-google-chrome#191170 SuperUser.com change default css of Google Chrome]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [https://www.squarefree.com/bookmarklets/ Bookmarklets]&lt;br /&gt;
* Browser-Erweiterung:&lt;br /&gt;
** [https://www.greasespot.net GreaseMonkey] Add-On für Firefox&lt;br /&gt;
** [https://tampermonkey.net TamperMonkey] Add-On für Firefox, Chrome, Opera Next, Edge, Safari&lt;br /&gt;
** [https://violentmonkey.github.io/get-it/ ViolentMonkey] Add-On für Firefox, Chrome, Opera&lt;br /&gt;
* Automatischen Import als Extension in [https://de.wikipedia.org/wiki/Google_Chrome Google Chrome] oder [https://de.wikipedia.org/wiki/Vivaldi_(Browser) Vivaldi]&lt;br /&gt;
&lt;br /&gt;
== Threads im Forum ==&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/176190 Sonderzeichen für µC.net Posting-Editor]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/200578 Übersicht über alle Dateianhänge in einem Thread]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/219612 JavaScript: Suchfeld in der mikrocontroller.net Titelleiste]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/219625 mikrocontroller.net: statisches Menü]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/261114#2723233 Farbmarkierungen]&lt;br /&gt;
** Einfärben Beiträge nach Alter&lt;br /&gt;
** Farbmarkierung eigene Beiträge&lt;br /&gt;
** Farbmarkierung Beitrgäge, in denen eigener Name vorkommt&lt;br /&gt;
** Farbmarkierung TO (funktioniert nicht bei mehrseitigen Threads)&lt;br /&gt;
** Farbmarkierung VIP (zB Andreas)&lt;br /&gt;
* Wo wurden die Beiträge zitiert? [https://www.mikrocontroller.net/topic/423933#5477508 Umgekehrte Beitragsreferenzen] ([https://www.mikrocontroller.net/topic/414770#6050425 für Greasemonkey])&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/414770#4836572 Beiträge eines Benutzers farblich hervorheben] ([https://www.mikrocontroller.net/topic/414770#6050425 für Greasemonkey])&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Ich sehe nicht was der Link damit zu tun hat.&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Linksammlung#Ungewöhnliche Basteleien (Hacks)|Linksammlung: Ungewöhnliche Basteleien (Hacks)]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Forum]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_f%C3%BCr_Einsteiger&amp;diff=96733</id>
		<title>STM32 für Einsteiger</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_f%C3%BCr_Einsteiger&amp;diff=96733"/>
		<updated>2017-06-30T06:33:54Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Immer wiederkehrend hier im Forum &amp;quot;Mit welchem Mikrocontroller anfangen?&amp;quot;. Es gibt eine große Auswahl und eben so viele Empfehlungen. In diesem Artikel soll zu erst geholfen werden ob ein Cortex-M3/M4 Kern überhaupt der Richtige für den Start ist.&lt;br /&gt;
Nicht für jeden ist der [[Cortex]] zu empfehlen, denn die Anforderungen und Wünsche die man realisieren möchte, sowie die eigenen Fähigkeiten sind verschieden.&lt;br /&gt;
&lt;br /&gt;
Es werden meist die Prozessoren [[AVR]], [[PIC]], [[Arduino]], [[MSP430]], [[LPC1xxx]] und [[STM32]] empfohlen. Seltener auch 8051 und M16C. Alle haben Vorzüge und ebenso auch Nachteile.&lt;br /&gt;
&lt;br /&gt;
[[Bild:STM32F407SB.jpg|thumb|right|340px|STM32F417 auf einem Selbstbau-Board]]&lt;br /&gt;
&lt;br /&gt;
= Eigene Fähigkeiten und Wünsche =&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel geht davon aus, dass bereits Elektronikkenntnisse vorhanden sind. Wenn nicht dann sollte man erst einmal den Artikel &amp;quot;[[Absolute Beginner]]&amp;quot; durcharbeiten, sowie die anderen Artikel aus der Kategorie &amp;quot;[http://www.mikrocontroller.net/articles/Kategorie:Grundlagen Grundlagen]&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;Weitere Artikel die andere Prozessoren näher darstellen da sich dieser Artikel hauptsächlich auf [[STM32]] konzentriert: [[Entscheidung Mikrocontroller]] und [[Mikrocontroller Vergleich]]. Die Seiten [[AVR]], [[MSP430]], [[LPC1xxx]] und [[PIC]] zeigen mehr Details über diese µC. Hier werden nur grob ein paar Tabelle zum Vergleichen gezeigt.&lt;br /&gt;
&lt;br /&gt;
Zu erst einmal die Randbedingungen, mit der man sich selbst zu erst einmal einschätzen sollte:&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|- bgcolor=&amp;quot;#d0d0ff&amp;quot;&lt;br /&gt;
! Fähigkeit || [[Cortex]] || [[AVR]]  || [[Arduino]] || colspan=&amp;quot;3&amp;quot; | [[PIC]] || [[MSP430]]&lt;br /&gt;
|-&lt;br /&gt;
| Bitbreite, jedoch unwichtig für Einsteiger || align=&amp;quot;center&amp;quot; | 32-bit || colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | 8-bit || align=&amp;quot;center&amp;quot; | 8-bit (PIC18) || align=&amp;quot;center&amp;quot; | 16-bit (PIC24) || align=&amp;quot;center&amp;quot; | 32-bit (PIC32) || align=&amp;quot;center&amp;quot; | 16-bit&lt;br /&gt;
|-&lt;br /&gt;
| Neueinsteiger, kaum Elektronikkenntnisse, noch nie programmiert &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O &amp;lt;ref name=&amp;quot;AVR_TUT1&amp;quot;&amp;gt;[http://www.rn-wissen.de/index.php/AVR-Einstieg_leicht_gemacht], RoboterNetz: AVR-Einstieg leicht gemacht&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;AVR_TUT2&amp;quot;&amp;gt;[http://www.avr-asm-tutorial.net/avr_de/], Tutorial für das Erlernen der Assemblersprache von AVR-Einchip-Prozessoren&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | O&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O &lt;br /&gt;
|-&lt;br /&gt;
| Wunsch ist SD-Card oder Grafik-Display&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | O &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O &amp;lt;ref name=&amp;quot;PIC_SD&amp;quot;&amp;gt;[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=2680&amp;amp;dDocName=en537999], Microchip Memory Disk Drive File System for PIC18 PIC24 dsPIC PIC32&amp;lt;/ref&amp;gt; || align=&amp;quot;center&amp;quot; | X&amp;lt;ref name=&amp;quot;PIC_SD&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;PIC_LCD&amp;quot;&amp;gt;[http://www.microchip.com/pagehandler/en-us/technology/graphics/], Microchip Graphics Library&amp;lt;/ref&amp;gt; || align=&amp;quot;center&amp;quot; | X&amp;lt;ref name=&amp;quot;PIC_SD&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;PIC_LCD&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &lt;br /&gt;
|-&lt;br /&gt;
| Wunsch ist TCP/IP Netzwerk&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | O&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | X &amp;lt;ref name=&amp;quot;PIC_TCP&amp;quot;&amp;gt;[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=2505&amp;amp;param=en535724], Microchip TCP/IP stack&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Wunsch ist Kamera und Video-/Bildbearbeitung&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - || align=&amp;quot;center&amp;quot; | - || align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
|-&lt;br /&gt;
| Möchte die Erkenntnisse beruflich nutzen &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
|-&lt;br /&gt;
| Strom sparende Anwendungen &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &amp;lt;br&amp;gt; 300 nA Sleep&amp;lt;ref name=&amp;quot;STM_Power&amp;quot;&amp;gt;[http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1295], [[STM32]] L1 series of ultra-low-power MCUs&amp;lt;/ref&amp;gt;&amp;lt;br&amp;gt;230 μA/MHz&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &amp;lt;br&amp;gt;100 nA Sleep&amp;lt;ref name=&amp;quot;AVR_Power1&amp;quot;&amp;gt;[http://www.atmel.com/technologies/lowpower/default.aspx], Atmel picoPower Technology&amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;AVR_Power2&amp;quot;&amp;gt;[http:/www.futurlec.com/News/Atmel/PicoPower.shtml], Atmel Releases New picoPower AVR Microcontrollers&amp;lt;/ref&amp;gt;&amp;lt;br&amp;gt;340 μA/MHz&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | X&amp;lt;br&amp;gt;9 nA Sleep&amp;lt;ref name=&amp;quot;PIC_XLPvsTI&amp;quot;&amp;gt;[http://ww1.microchip.com/downloads/en/DeviceDoc/39989A.pdf], The Truth about Power Consumption in PIC® MCUs with &lt;br /&gt;
XLP Technology vs. TI’s MSP430&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;PIC_XLP&amp;quot;&amp;gt;[http://ww1.microchip.com/downloads/en/DeviceDoc/30009941F.pdf], nanoWatt XLP eXtreme Low Power PIC® Microcontrollers&amp;lt;/ref&amp;gt;&amp;lt;br&amp;gt;35 μA/MHz || align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &amp;lt;br&amp;gt; 100 nA Sleep&amp;lt;ref name=&amp;quot;TI_Power1&amp;quot;&amp;gt;[http://www.ti.com/lit/wp/slay015/slay015.pdf], Texas Instruments: Ultra-Low Power Comparison: MSP430 vs. Microchip XLP&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;TI_Power2&amp;quot;&amp;gt;[http://www.ti.com/ww/mx/multimedia/webcasts/Aspectos_Generales_MSP430.pdf], Texas Instruments: Meet MSP430&amp;lt;/ref&amp;gt;&amp;lt;br&amp;gt;100 μA/MHz &lt;br /&gt;
|-&lt;br /&gt;
| Multithreading, RTOS, Schedulern &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &amp;lt;ref name=&amp;quot;AVR_RTOS1&amp;quot;&amp;gt;[http://www.freertos.org/a00098.html], Atmel AVR freeRTOS port&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;AVR_RTOS2&amp;quot;&amp;gt;[http://www.femtoos.org/], Femto OS: RTOS for small MCU&#039;s like AVR&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &amp;lt;ref name=&amp;quot;PIC_RTOS2&amp;quot;&amp;gt;[http://www.freertos.org/a00097.html], Microchip PICmicro (PIC18) freeRTOS Port&amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;PIC_RTOS3&amp;quot;&amp;gt;[http://www.pumpkininc.com/], Salvo RTOS&amp;lt;/ref&amp;gt;|| align=&amp;quot;center&amp;quot; | X&amp;lt;ref name=&amp;quot;PIC_RTOS&amp;quot;&amp;gt;[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en531543&amp;amp;redirects=rtos], 3rd Party RTOS selection guide&amp;lt;/ref&amp;gt; || align=&amp;quot;center&amp;quot; | X&amp;lt;ref name=&amp;quot;PIC_RTOS&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &amp;lt;ref name=&amp;quot;TI_RTOS&amp;quot;&amp;gt;[http://processors.wiki.ti.com/index.php/MSP430_Real_Time_Operating_Systems_Overview], TI Wiki: MSP430 Real Time Operating Systems Overview&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Besonders große, speicherintensive Programme&amp;lt;br&amp;gt;z.B. Grafiken, Fonts &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | bis 2MB Flash&amp;lt;br&amp;gt;bis 256kB SRAM &amp;lt;ref name=&amp;quot;STM32Ueb&amp;quot;&amp;gt;[http://www.st.com/web/en/catalog/mmc/FM141/SC1169], Übersicht aller verfügbaren [[STM32]] µC von ST&amp;lt;/ref&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | bis 256kB Flash&amp;lt;br&amp;gt;bis 16kB SRAM &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | bis 128kB Flash&amp;lt;br&amp;gt;bis 4kB SRAM || bis 2MB Flash&amp;lt;br&amp;gt;bis 98kB SRAM || bis 2MB Flash&amp;lt;br&amp;gt;bis 512kB SRAM &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | bis 512KB Flash&amp;lt;br&amp;gt;bis 66kB SRAM &lt;br /&gt;
|-&lt;br /&gt;
| Sehr viel PWM mit komplexem Timing&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | AT90Spwm &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - || align=&amp;quot;center&amp;quot; | X || align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O &lt;br /&gt;
|-&lt;br /&gt;
| Deutschsprachige Community &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &amp;lt;ref name=&amp;quot;PIC-Projekte&amp;quot;&amp;gt;[http://pic-projekte.de/], pic-projekte.de&amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;SPRUT&amp;quot;&amp;gt;[http://www.sprut.de/], sprut.de&amp;lt;/ref&amp;gt; || align=&amp;quot;center&amp;quot; | - || align=&amp;quot;center&amp;quot; | - &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &lt;br /&gt;
|-&lt;br /&gt;
| Anzahl möglicher HW-Breakpoints &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4 bis 6 &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | 2 &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1 bis 5 &amp;lt;ref name=&amp;quot;PIC_HWBP&amp;quot;&amp;gt;[http://www.microchip.com/stellent/groups/SiteComm_sg/documents/DeviceDoc/en556761.pdf], PIC Hardware Breakpoints (Seite 6)&amp;lt;/ref&amp;gt; || align=&amp;quot;center&amp;quot; | 1 bis 10 &amp;lt;ref name=&amp;quot;PIC_HWBP&amp;quot;/&amp;gt; || align=&amp;quot;center&amp;quot; | 6&amp;lt;ref name=&amp;quot;PIC_HWBP&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2 &lt;br /&gt;
|}&lt;br /&gt;
* X = ja&lt;br /&gt;
* O = Teilweise, Einschränkungen&lt;br /&gt;
* - = nicht empfohlen&lt;br /&gt;
Nur um nicht zu verwirren, auch wenn Teile &amp;quot;nicht empfohlen&amp;quot; sind, heißt das nicht dass es mit dem Prozessor nicht geht, vielmehr dass es mehr Aufwand ist das zu realisieren oder mehr Einschränkungen hat.&lt;br /&gt;
Viele Eigenschaften weisen nur bestimmte Modelle einer Mikrocontrollerfamilie auf. Der Wechsel innerhalb einer Familie gestaltet sich jedoch oft einfach (z.B. innerhalb [[STM32]] oder innerhalb PIC24).&lt;br /&gt;
&lt;br /&gt;
Die Spalte Cortex zeigt die Prozessorfamilie von STM32F0xx bis STM32F4xx mit einem Cortex-M0 oder M3/M4 Kern. Die technischen Daten sind ähnlich anderer Hersteller die auch einen Cortex-Mx Kern verbauen wie z.B. NXP ([[LPC1xxx]]), Freescale, Atmel, TI, Toshiba, usw. Jedoch bietet ST mit dem [[STM32]] eine hohe Flexibilität an Gehäuse-Variationen (vergleichbar mit NXP [[LPC1xxx]]) und ist privat recht leicht beschaffbar. Übersicht aller verfügbaren [[STM32]] µC von ST&amp;lt;ref name=&amp;quot;STM32Ueb&amp;quot;&amp;gt;[http://www.st.com/web/en/catalog/mmc/FM141/SC1169], Übersicht aller verfügbaren [[STM32]] µC von ST&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Der STM32 ist in der Tat nicht der beste in der Kategorie &amp;quot;Stromsparend&amp;quot;, jedoch um eine Alternative mit Cortex-Mx Kern auf zu zeigen:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;quot;EFM32&amp;quot; von Silabs&amp;lt;ref name=&amp;quot;EFM32&amp;quot;&amp;gt;[http://www.silabs.com/products/mcu/lowpower/Pages/efm32-energy-modes.aspx], EFM32, der Stromsparende mit Cortex-Mx Kern&amp;lt;/ref&amp;gt; benötigt nur 0,9 µA im Sleep Mode.&lt;br /&gt;
&lt;br /&gt;
Die Spalte PIC zeigt die Eigenschaften der 8-Bit PIC18 (vergleichbar mit [[AVR]]), 16-Bit [[PIC24]]/[[dsPIC]] (vergleichbar mit [[MSP430]]) und 32-Bit [[PIC32]] (vergleichbar mit [[STM32]]). Ein Wechsel des Mikrocontrollers innerhalb der Familien ist Codetechnisch problemlos möglich. &amp;lt;ref name=&amp;quot;PIC_codeswitch&amp;quot;&amp;gt;[http://www.elektor.nl/Uploads/Files/PIC24FIntro_5f082806.pdf], Microchip: Introduction to the 16-bit PIC24F Microcontroller Family&amp;lt;/ref&amp;gt; Hardwaretechnisch sind verschiedene Modelle gleicher Familie zudem auch meist Pin-Kompatibel &amp;lt;ref name=&amp;quot;PIC_PinCompatibility&amp;quot;&amp;gt;[http://ww1.microchip.com/downloads/en/DeviceDoc/00148m.pdf], Microchip: 2007 Product Selector Guide (Seite 114 ff.)&amp;lt;/ref&amp;gt; sodass ohne Design-Änderung zwischen verschiedenen Modellen gewechselt werden kann.&lt;br /&gt;
Ein Wechsel zwischen den Familien ist Architekturbedingt aufwendiger, vor allem von 8-Bit auf 16/32-Bit. &amp;lt;ref name=&amp;quot;PIC_8to16Migration&amp;quot;&amp;gt;[http://ww1.microchip.com/downloads/en/DeviceDoc/39764a.pdf], Microchip: PIC18F to PIC24F Migration: An Overview&amp;lt;/ref&amp;gt; Aufgrund gleichbleibender IDE (Mplab) sowie gleichbleibenden Libraries bei Verwendung einer Hochsprache (C) jedoch vor allem zwischen 16-Bit und 32-Bit ohne weitere Probleme möglich &amp;lt;ref name=&amp;quot;PIC_16to32Migration&amp;quot;&amp;gt;[http://www.embedded.com/design/mcus-processors-and-socs/4007683/Practical-migration-from-8-16-to-32-bit-PIC], Artikel: Practical migration from 8-/16- to 32-bit PIC&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;Ein PIC10/12/16 ist für den Einstieg nicht empfohlen, da diese Architekturbedingt viele Einschränkungen haben, die eher hinderlich für das Lernen sind.&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;[[Arduino]]&amp;quot; ist kein eigenständiger Prozessor, sondern ein fertiges Board mit einer &amp;quot;[[Arduino]]&amp;quot; Programmierumgebung (und einem AVR Prozessor), extra geschaffen für Einsteiger. Allerdings ist da der Lerneffekt viel geringer da man den Prozessor mit der [[Arduino]]-Software programmiert und nicht direkt die Register. Anderseits ist der Arduino besser für jemanden geeignet, der eigentlich nicht lernen möchte, sondern nur mal schnell etwas steuern/basteln will und so ohne großartige µC Kenntnisse zum Ziel kommt. Für diese Zielgruppe ist der Arduino perfekt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Unwichtige Randbedingungen =&lt;br /&gt;
&lt;br /&gt;
Oftmals werden fälschlicherweise Argumente für oder gegen eine µC-Familie ausgesprochen, die in der Praxis &#039;&#039;&#039;zum Einstieg&#039;&#039;&#039; (bei konkreten Anwendungen kann das anders aussehen) eher unwichtig sind.&lt;br /&gt;
&lt;br /&gt;
* Spannungsversorgung 3,3V / 5V (Wobei z.B Atmel XMega keine 5V Tolerante Eingänge besitzt)&lt;br /&gt;
* 8 (z.B. [[AVR]]), 16 (z.B. [[MSP430]]) oder 32 (z.B. [[STM32]]) Bit&lt;br /&gt;
* Prozessorkern Cortex-M0/M3/M4, MIPS, ARM7/9/..., AVR-RISC, PIC-RISC, 8051, ...&lt;br /&gt;
* Interrupt System mit mehr oder weniger Features&lt;br /&gt;
* Programmiersprache (Assembler, Basic, C, C++, Pascal)&lt;br /&gt;
* Programmierumgebung - ist ohnehin Geschmackssache&lt;br /&gt;
* Assembler verstehen (Sollte nur theoretisch verstanden werden, ein Programm sollte in einer Hochsprache geschrieben sein)&lt;br /&gt;
* DIL Gehäuse - steckbretttauglich ([[STM32]]-Prozessoren gibt es auch fertig gelötet auf einem steckbretttauglichen Board)&lt;br /&gt;
* Programmieradapter - solange er auch debuggen kann&lt;br /&gt;
* zu 90% reicht doch ein kleiner Prozessor ([[AVR]]/PIC) - und für die restlichen kann man immer noch einen großen nehmen. Warum also nicht gleich einen großen nehmen?&lt;br /&gt;
&lt;br /&gt;
= Kosten =&lt;br /&gt;
&lt;br /&gt;
Grobe Abschätzung was das alles denn kosten wird. Hier sind nur einige Beispiele gezeigt (Einzelpreise bei Bezugsquellen in Deutschland).&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|- bgcolor=&amp;quot;#d0d0ff&amp;quot;&lt;br /&gt;
! Board || [[STM32]] || [[AVR]] || PIC18/24/32 || [[MSP430]] || [[Arduino]]&lt;br /&gt;
|-&lt;br /&gt;
| Demo-Board &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;ref name=&amp;quot;STM32F4DISCOVERY&amp;quot;&amp;gt;[http://www.st.com/web/en/catalog/tools/FM116/SC959/SS1532/PF252419], ST STM32F4DISCOVERY Demoboard&amp;lt;/ref&amp;gt; 9..20€ (incl. Programmieradapter und Debugger) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5..500€, z.B. [[Arduino]] || align=&amp;quot;center&amp;quot;| &amp;lt;ref name=&amp;quot;PICDEMOBOARD&amp;quot;&amp;gt;[http://www.microchipdirect.com/ProductDetails.aspx?Catalog=BuyMicrochip&amp;amp;Category=Starter%20Kits&amp;amp;mid=1&amp;amp;lmid=610], Microchip Demoboard&amp;lt;/ref&amp;gt; durchschnittlich 18€ .. 50€ (Für 16 und 32bit auch mit integriertem Debugger + Programmer)  &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;ref name=&amp;quot;MSP430DEMOBOARD&amp;quot;&amp;gt;[http://www.ti.com/tool/msp-exp430fr5739], MSP430 Demoboard&amp;lt;/ref&amp;gt; ~35€ &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20€&lt;br /&gt;
|-&lt;br /&gt;
| Steckbrettaugliches Board &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | s.o. oder &amp;lt;ref name=&amp;quot;STM32F405Board&amp;quot;&amp;gt;[http://re.reworld.eu/de/produkte/s64dil-405/index.htm], S64DIL-405 mit STM32F405&amp;lt;/ref&amp;gt;S64DIL-405 30€, STM32F103C8 4€ (China)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | DIP IC &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | DIP IC oder Microstick&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | DIP IC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ab ca. 1.50€ (Pro Mini, China)&lt;br /&gt;
|-&lt;br /&gt;
| Einzelchip (Einzelstückpreise)&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| 2..15€ nur SMD (TSSOP..LQFP..BGA) &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|0,6–5€ SMD + DIP &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|0,5-15€ SMD + DIP &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|?? &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|siehe AVR&lt;br /&gt;
|-&lt;br /&gt;
| Programmieradapter &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0€ da Bootloader (ROM) UART / USB usw. unterstützt&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ab 4€ &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| Programmieradapter mit Debugger &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | s.o. oder z.B &amp;lt;ref name=&amp;quot;JLINKEDU&amp;quot;&amp;gt;[http://www.segger.com/j-link-edu.html], Segger J-LINK EDU&amp;lt;/ref&amp;gt; Segger J-LINK EDU 50€ (sehr schnell und unterstützt viele Prozessoren) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;ref name=&amp;quot;AVRDragon&amp;quot;&amp;gt;[http://www.atmel.com/tools/AVRDRAGON.aspx], Atmel AVR Dragon&amp;lt;/ref&amp;gt; AVR Dragon 40€&amp;lt;br&amp;gt;&amp;lt;ref name=&amp;quot;JTAGICE3&amp;quot;&amp;gt;[http://www.atmel.com/tools/JTAGICE3.aspx], AT JTAG ICE3&amp;lt;/ref&amp;gt; AT JTAG ICE3  99€ &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;ref name=&amp;quot;PICKIT3&amp;quot;&amp;gt;[http://www.microchipdirect.com/ProductSearch.aspx?keywords=PG164130], Microchip PICkit 3&amp;lt;/ref&amp;gt; PICkit 3 30€&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | z.B. Dragon 50€ &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20€ (Man muss DebugWire aktivieren)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das Demo-Board sollte ein Board sein, nicht zu teuer, um die ersten Erfahrungen zu sammeln. Wenn einem der Prozessor gefällt, so kann man später immer noch mit einem zweiten Demo-Board, z.B. mit Display aufrüsten.&lt;br /&gt;
&lt;br /&gt;
Wenn man gerne mit einem Steckbrett sich die Schaltung zusammen stecken möchte, so kann man entweder die benötigten Drähte am Demo-Board anlöten oder bei z.B. [[AVR]]/[[PIC]] Prozessoren gibt es Ausführungen im DIL Gehäuse, die direkt steckbar sind.&lt;br /&gt;
&lt;br /&gt;
Ein Programmieradapter sollte unbedingt auch einen Debugger beinhalten. Denn für den Start ist es ungemein hilfreich zu sehen was im Prozessor gerade geschieht. Die JTAG-Adapter für einen [[STM32]] Prozessor sind alle Debugger-Tauglich. Für die [[AVR]] Controller gibt es auch oft reine Programmer (AVR ISP oder Selbstbau-Lösungen über die serielle oder parallele Schnittstelle) welche den Mikrocontroller nur beschreiben können. Für die [[PIC]] Controller werden solche reinen Programmer vereinzelt auch noch angeboten. Sinvoller sind hingegen Debugger, die die Ausführung eines Mikrocontrollers anhalten können um die aktuelle Position im Programmcode, Variableninhalt, Register, ... auszulesen bzw. zur Laufzeit zu ändern. &lt;br /&gt;
&lt;br /&gt;
Der für den [[STM32]] empfohlene Segger J-LINK EDU ist zwar nicht der günstigste (z.B. auf einem STM32F4DISCOVERY Board ist ein ST-LINK/V2 mit drauf, den man für andere [[STM32]] nutzen kann) aber eines der besten, mit sehr guten Software-Tools und nutzbar für alle Prozessoren mit ARM-Kern (ARM7/9/11/... Cortex-Mx der Hersteller Atmel, Energy Micro, Freescale, Holtek, TI, NXP, Nuvoton, ST, Toshiba, ... unter Windows, Linux und MAC). Niemals am Werkzeug sparen und man hat viel mehr Freude bei der Arbeit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Programmierumgebungen=&lt;br /&gt;
&lt;br /&gt;
Bei den Programmierumgebungen gibt es zu allen Prozessorfamilien kostenlose und Leistungsfähige Software&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|- bgcolor=&amp;quot;#d0d0ff&amp;quot;&lt;br /&gt;
! Betriebssystem || [[STM32]] || [[AVR]] || [[PIC]] || [[MSP430]] || [[Arduino]]&lt;br /&gt;
|-&lt;br /&gt;
| Windows &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[http://www.coocox.org/CooCox_CoIDE.htm CooCox, EmBitz, Eclipse] &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Atmel-Studio &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[http://www.microchip.com/pagehandler/en-us/family/mplabx/ MPLAB X] (IDE inklusive compiler) &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|TI Code Composer Studio&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Arduino]] IDE&lt;br /&gt;
|-&lt;br /&gt;
| Linux&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[http://eclipse.org/downloads/ Eclipse IDE for C/C++ Developers] &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|z.B. [http://eclipse.org/downloads/ Eclipse IDE for C/C++ Developers] &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[http://www.microchip.com/pagehandler/en-us/family/mplabx/ MPLAB X] (IDE inklusive compiler) &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|TI Code Composer Studio&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Arduino]] IDE&lt;br /&gt;
|-&lt;br /&gt;
| MacOS&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[http://eclipse.org/downloads/ Eclipse IDE for C/C++ Developers] &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|??&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[http://www.microchip.com/pagehandler/en-us/family/mplabx/ MPLAB X] (IDE inklusive compiler) &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|TI Code Composer Studio &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Arduino]] IDE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
natürlich gibt es noch viele weitere (für [[STM32]] siehe [[STM32#Programmierung]]), es sollte jedoch nur die jeweils einfachste kostenlose (und ohne Codebegrenzung) für den ersten Einstieg gezeigt werden.&lt;br /&gt;
&lt;br /&gt;
* [http://www.coocox.org/CooCox_CoIDE.htm CooCox] Anleitung wie man innerhalb einer Stunde die LED eines Nagel neuen STM32F4DISCOVERY Boards zum blinken bekommt, Artikel: [[STM32 CooCox Installation]]. Diese Anleitung ist eine Schritt-Für-Schritt Anleitung um den aller ersten Start zu vereinfachen.&lt;br /&gt;
* Mit [http://www.coocox.org/CooCox_CoIDE.htm CooCox] können sehr viele Prozessoren mit Cortex-M0, M3 und M4 Kern programmiert werden. Unter anderem der Firmen Atmel, Energy Micro, Freescale, Holtek, TI, NXP, Nuvoton, ST und Toshiba. Somit hat man eine Entwicklungsumgebung und ist damit nicht an einen Hersteller der µC gebunden.&lt;br /&gt;
* Mit [http://www.microchip.com/pagehandler/en-us/family/mplabx/ MPLAB X] können alle Prozessoren von Microchip (z.B. PIC18, PIC24, PIC32, dsPIC) programmiert werden.&lt;br /&gt;
&lt;br /&gt;
= Dokumentation=&lt;br /&gt;
&lt;br /&gt;
Bevor man sich für einen Prozessor entscheidet, sollte man unbedingt deren Dokumentation mal zumindest überfliegen und auch deren Errata lesen. Nicht dass man eine Anwendung erstellen möchte und stellt hinterher fest, dass genau dieser Teil so buggy ist, dass er nicht genutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Beim [[STM32]] hat die Dokumentation doch recht viele Seiten, viel mehr als bei einem [[AVR]] oder PIC, dabei ist vieles eher knapp beschrieben. Der Aufbau der [[STM32]] Dokumentation ist [http://www.mikrocontroller.net/articles/STM32#Struktur_der_Dokumentation: hier] beschrieben.&lt;br /&gt;
&amp;lt;br&amp;gt;Bei den PICs ist die Dokumentation wiederum anders strukturiert, [http://www.mikrocontroller.net/articles/PIC#Dokumenatation siehe im PIC Artikel].&lt;br /&gt;
&lt;br /&gt;
Für die [[STM32]], [[AVR]] und [[PIC]] Mikrocontroller gibt es zudem viele, auch deutschsprachige Einsteigerhilfestellungen und Tutorials.&lt;br /&gt;
&lt;br /&gt;
Parallel zur Dokumentation sollte man sich auch die Demo-Beispiele der Hersteller anschauen, dann wird vieles gleich verständlicher.&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht über die Funktionen gibt es im Artikel: [[STM32]]&lt;br /&gt;
&lt;br /&gt;
= Die Arbeit mit dem [[STM32]]=&lt;br /&gt;
&lt;br /&gt;
Zu erst einmal SOOO groß sind die Unterschiede zwischen den einzelnen Prozessoren nicht. Alle haben Ein-/Ausgänge und um mittels einem Port-Pin eine LED ansteuern zu können, muss bei jedem Prozessor der Pin erst einmal parametriert werden, egal ob das jetzt ein [[STM32]] oder ein [[AVR]] oder ein [[MSP430]] ist. Nur hat man bei einem [[STM32]] doch einige Funktionen mehr, z.B. zuschaltbarer Pull-Up oder Pull-Down Widerstand und spezielle Setz-Rücksetzregister, die andere Prozessoren nicht haben, jedoch das Programmieren vereinfachen.&lt;br /&gt;
Der Haupt-Unterschied zu den anderen Prozessoren ist, dass der [[STM32]] so viele Peripherie-Module beherbergt, dass man die einzeln immer mit einem Clock aktivieren muss, denn damit lässt sich viel Strom sparen.&lt;br /&gt;
&lt;br /&gt;
Und mal ganz ehrlich die Diskussion, welcher µc einfacher zu konfigurieren ist, ist doch absoluter Unsinn. Der Weg ist immer der Gleiche:&lt;br /&gt;
*1. Blick ins Datenblatt, welche Register für diese Funktion benötigt werden.&lt;br /&gt;
*2. Werte ermitteln, die in die Register eingetragen werden.&lt;br /&gt;
*3. Werte ins Register schreiben. Da machte es GAR KEINEN UNTERSCHIED, ob es ein [[AVR]], 8051/2, [[ARM]],...... ist.&lt;br /&gt;
&lt;br /&gt;
Stimmt schon, es gibt Unterschiede. Die Register haben anderen Namen, andere Adressen, andere Bitbedeutungen,...&lt;br /&gt;
Aber es steht doch alles im Datenblatt. Und ob ich jetzt einen [[AVR]] oder einen [[ARM]] das erste Mal vor mir liegen hab. Ich brauch in allen Fällen die oben beschriebenen Schritte.&lt;br /&gt;
&lt;br /&gt;
Das Interruptsystem ist bei einem [[STM32]] zusätzlich priorisiert. Damit kann man festlegen, welcher Interrupt vorrangig bearbeitet wird. Die Prioritätenvergabe ist auch kein Hexenwerk.&lt;br /&gt;
&lt;br /&gt;
Zu allen Prozessoren liefern die jeweiligen Hersteller umfangreiche Demo-Codes und Libraries mit. Meist sind alle in C geschrieben, daher sollte auch die Programmiersprache C verwendet werden. Vor allem auch wenn man berufliche Absichten verfolgt.&lt;br /&gt;
&lt;br /&gt;
Und wenn man einen [[STM32]] kann, dann ist ein Umstieg auf einen [[LPC1xxx]] (NXP) oder andere Hersteller überhaupt kein Problem (*), denn die bieten ebenfalls Prozessoren mit Cortex-M3 Kern und man kann diese mit der gleichen Programmierumgebung programmieren. Somit ist man nicht zwingend herstellerabhängig. (* jeder Hersteller verbaut seine eigene Peripherie, die andere Funktionalitäten haben.)&lt;br /&gt;
&lt;br /&gt;
Mit einem [[STM32]] kann man als Hobby-Baster und professionell nahezu alle Anwendungen realisieren. Der hat genügend RAM und FLASH Speicher und auch genügend Geschwindigkeit. Viele Gehäuse-Varianten, um kleine bis hin zu größere Geräte zu erstellen. Viele Schnittstellen sind im Artikel [[STM32]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Für den Einstig gibt es diverse, auch deutschsprachige, Tutorials im Netz. Eine Übersicht ist [http://www.mikrocontroller.net/articles/STM32#Weblinks.2C_Foren.2C_Communities.2C_Tutorials hier auf der STM32 Seite]. (Beispiel: [http://diller-technologies.de/stm32_wide.html STM32 Tutorial in Deutsch von Diller Technologies])&lt;br /&gt;
&amp;lt;br&amp;gt;Wobei dazugesagt werden muss, dass diese meist auf die Standard ST-Libs aufbauen. Diese Libs vereinfachen zum einen das Ansteuern/die Benutzung der Peripheriefunktion zum anderen muss man diese erst mal kennenlernen. Vereinfacht wird das da ALLE [http://www.st.com/stonline/stappl/productcatalog/app?page=partNumberSearchPage&amp;amp;levelid=SS1577&amp;amp;parentid=1743&amp;amp;resourcetype=SW ST-Demo-Codebeispiele] ebenfalls auf diesen Lib&#039;s basieren und somit wird der Wechsel innerhalb des [[STM32]] deutlich vereinfacht.&lt;br /&gt;
&amp;lt;br&amp;gt;STM32F4xx Library von ST: [http://www.st.com/web/en/catalog/tools/PF257901# &amp;quot;STSW-STM32065 STM32F4 DSP and standard peripherals library&amp;quot;] incl. Dokumentation und Demo-Projekte zu allen CPU-Funktionen.&lt;br /&gt;
&lt;br /&gt;
Der einzige Nachteil beim [[STM32]]: Man muss etwas mehr lesen, da eine Peripherie doch viel mehr Funktionalität hat (sofern man das Modul überhaupt benötigt). Ansonsten kenne ich nicht wirklich einen Grund, warum man als Neueinsteiger keinen [[STM32]] nehmen sollte.&lt;br /&gt;
&lt;br /&gt;
= Programmiersprachen =&lt;br /&gt;
* Wie bei vielen anderen Controllern wird beim [[STM32]] auch hauptsächlich C und C++ verwendet. Kennen sollte man die Programmiersprache C schon, wenn man davon noch keine Ahnung hat dann sollte man erst mal mittels einem Tutorial auf einem PC ein Konsoleprogramm schreiben, sodass man es einigermaßen kennen lernt. Hier im Forum gibt es ebenfalls Artikel dazu. Zielt man auf die (spätere) Anwendung in der Industrie, sollte aufgrund der Verbreitung auf jeden Fall C (oder C++) gewählt werden; außerdem sind die meisten verfügbaren Libraries in C geschrieben.&lt;br /&gt;
* Assembler sollte man nur grob verstehen, Details wie ein Befehl arbeitet ist unwichtig. Selbst wenn man die Zyklen für einen Funktionsaufruf wissen will, so bietet der [[STM32]] (Cortex-M3) einen Cycle-Counter den man auslesen kann; durch die komplexere Pipeline und Cache-Effekte sind die Laufzeiten allerdings nicht genau vorhersehbar. Wird zyklengenause Timing benötigt, sollten Timer verwendet werden - davon hat der [[STM32]] genug.&lt;br /&gt;
&lt;br /&gt;
Der 32bit-Adressraum, der RAM, Flash, I/O-Register vereinheitlicht ansprechen kann (im Gegensatz zu z.B. [[AVR]]) ist ideal für eine Verwendung durch Hochsprachen; bei Pointern muss keine zusätzliche Information verwaltet werden, in welche Art Speicher sie zeigen. Die Adresse gibt dies eindeutig an (es gibt nur &#039;&#039;&#039;eine&#039;&#039;&#039; Adresse 42, und nicht 2 wie z.B. beim [[AVR]] (Flash, RAM &amp;amp; I/O)) und die Hardware spricht automatisch den richtigen Speicher an. Die Möglichkeiten zur Offset-Adressierung, der Barrel-Shifter, Divsions-Einheit, die FPU (bei STM32F4), Interrupt-Modell etc. begünstigen ebenfalls die Erzeugung effizienteren Codes. Außerdem haben die [[STM32]] einfach mehr &amp;quot;rohe Leistung&amp;quot;, d.h. mehr Flash/RAM-Speicher und höhere Taktfrequenzen.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Folgerung&#039;&#039;&#039;: Die Programmierung in Hochsprachen ist &#039;&#039;&#039;bequemer als bei 8-Bittern&#039;&#039;&#039;, denn man muss sich einfach weniger Gedanken machen, ob der Compiler ein Programm nun effizent umsetzen kann (kann man natürlich trotzdem machen, um noch mehr Leistung &amp;quot;herauszuquetschen&amp;quot;, wenn man will).&lt;br /&gt;
&lt;br /&gt;
= Weitere Randbedingungen für die Entscheidung=&lt;br /&gt;
&lt;br /&gt;
Der wichtige Punkt, der oftmals auch vergessen wird: die Beschaffbarkeit. Wenn jemand einen Renesas M16C oder Fujitsu empfiehlt, dann sucht man erst mal und findet nur wenige vereinzelte die man privat kaufen kann.&lt;br /&gt;
&lt;br /&gt;
Oder auch die Unterstützung im Internet - ist bei einigen Exoten spärlich. Dieses Forum bietet die beste Hilfe für [[AVR]], PIC, [[MSP430]], [[LPC1xxx]] und [[STM32]].&lt;br /&gt;
&lt;br /&gt;
Andere Prozessoren sind schon sehr alt, bzw. nicht mehr modern da deren Peripherie zum Teil doch recht eingeschränkte Funktionalität bietet. z.B. viele 8051 Typen oder PIC16 (oder auch dsPIC30). Die mögen für Mini-Anwenungen gut sein, aber wer will den schon gerne sich extra für eine Kleinanwendung mit einem kleinen µC auseinandersetzen, wenn er schon einen [[STM32]] kennt, mit dem er alles machen kann (und sich bereits gute Funktionen geschrieben hat)?&lt;br /&gt;
&lt;br /&gt;
Daher mein Resümee: wer nicht gerade auf den Kopf gefallen ist, der kann getrost mit einem [[STM32]] starten. Ein [http://www.st.com/web/en/catalog/tools/FM116/SC959/SS1532/PF252419?s_searchtype=keyword STM32F4DISCOVERY] Board kostet nur ca. 20 EUR - und mehr muss für den ersten Start nicht investiert werden - wenn es doch zu komplex sein sollte gibt es hier im Forum auch viel Hilfe. Jedenfalls sind diese 20 EUR wirklich keine große Investition.&lt;br /&gt;
&amp;lt;br&amp;gt;Wer berufliche Absichten verfolgt, sollte zu einem späteren Zeitpunk sich unbedingt auch mit einem zweiten, anderen Prozessor beschäftigen um so die nötigen Erfahrungen zu gewinnen.&lt;br /&gt;
&lt;br /&gt;
Ein paar Forenbeiträge:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/317792#3481048 &amp;quot;Klein anfangen!&amp;quot; heisst die Devise]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/312330#3483218 Einen 8-Bitter nehme ich nur noch aus &amp;quot;Nostalgiegründen&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
= Übersicht CPU Funktionalitäten=&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt ist kurz gezeigt welche Möglichkeiten die CPUs bei den oben empfohlenen Einsteigerboards haben&lt;br /&gt;
&lt;br /&gt;
=== STM32F407 - vom STM32F4DISCOVERY Board ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Datei:STM32F407.png|mini|x400px]]&lt;br /&gt;
| [[Datei:stm32f4_discovery2.png|mini|x400px]]&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1577/LN11/PF252140?s_searchtype=partnumber Blockdiagramm STM32F407]&lt;br /&gt;
| [http://www.st.com/web/en/catalog/tools/FM116/SC959/SS1532/PF252419 STM32F4DISCOVERY Demoboard]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Es sind sehr viele Peripheriemodule im µC implementiert. Jedes einzelne Peripherie-Modul (z.B. Ethernet, USB, CAN, Timer, AD-Wandler, usw.) kann aktiviert werden, indem der Clock freigeschaltet wird. So lange der Clock nicht aktiviert wurde verhält sich das Modul so als ob es nicht vorhanden wäre und beeinträchtigt in keinster Weise die Bearbeitung vom Prozessor. Somit lässt sich der Stromverbrauch senken.&lt;br /&gt;
&lt;br /&gt;
Eine ganze Auflistung der Einzelmodule steht im Artikel: [[STM32]] und [http://www.st.com/web/en/catalog/mmc/FM141/SC1169 auf der Homepage von ST]&lt;br /&gt;
&lt;br /&gt;
Zu Anfang mag vielleicht die interne Busstruktur verwirren, jedoch braucht man diese nicht beachten. Wenn nun die CPU auf UART4 zugreifen möchte, so gehen die Daten durch die Busse &amp;quot;AHB1&amp;quot; &amp;gt; &amp;quot;ABH/APB1-Bridge&amp;quot; &amp;gt; &amp;quot;APB1&amp;quot;. Dies erledigt der µC ganz von alleine. Diese Unterteilung ist technisch nötig, da die Peripheriebusse nicht mit dem gleichen Prozessortakt betrieben werden (wie z.B. bei [[MSP430], siehe Schaubild unten), die &amp;quot;Bridge&amp;quot; managt ganz alleine das Handling und generiert automatisch Wait-Befehle für die CPU.&lt;br /&gt;
&amp;lt;br&amp;gt;Die &amp;quot;AHB-Bus-Matrix&amp;quot; ist ebenfalls für den Anwender meist uninteressant. ST hat damit ein System geschaffen, damit die CPU, DMAs und Displaycontroller gleichzeitig auf die verschiedenen RAM-Bereiche zugreifen können um mehr Daten parallel zu verarbeiten. Somit braucht man diese Matrix erst mal nicht beachten.&lt;br /&gt;
&lt;br /&gt;
Ebenso braucht man zu Anfang sich auch keine Gedanken um den Prozessortakt machen, wenn man nichts initialisiert so läuft der STM32F4xx mit dem internen RC-Oszillator von 16MHz und die Peripheriebusse laufen ebenfalls mit der gleichen Geschwindigkeit. Erst wenn man später umfangreichere Applikationen schreibt, bei der die 16MHz nicht mehr reichen, so kann man die PLL aktivieren und die Taktrate flexibel bis auf 168MHz hochsetzen. (Siehe Demo-Projekt von [[STM32 CooCox Installation]].)&lt;br /&gt;
&lt;br /&gt;
=== [[AVR]] ([[Arduino]])===&lt;br /&gt;
&lt;br /&gt;
Details können im Artikel [[AVR]] gelesen werden.&lt;br /&gt;
&lt;br /&gt;
=== PIC18, PIC24, PIC32===&lt;br /&gt;
&lt;br /&gt;
Details können im Artikel [[PIC]] gelesen werden.&lt;br /&gt;
&lt;br /&gt;
=== MSP430 - vom MSP-EXP430FR5739 Experimentier-Board===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Datei:MSP430FR5739.gif|mini|450px]]&lt;br /&gt;
| [[Datei:MSP-EXP430FR5739.jpg|mini|x350px]]&lt;br /&gt;
|-&lt;br /&gt;
| Blockdiagramm MSP430FR5739&lt;br /&gt;
| MSP-EXP430FR5739 Demoboard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Details können im Artikel [[MSP430]] gelesen werden.&lt;br /&gt;
&lt;br /&gt;
=== LPC1x d.h. Cortex -M0 &amp;amp; -M3 Familie von NXP ===&lt;br /&gt;
Details können aus dem Leitartikel [[LPC1xxx]] und den darin verlinkten Artikeln entnommen werden.&lt;br /&gt;
&lt;br /&gt;
= Tipps und Tricks bei der Programmierung=&lt;br /&gt;
&lt;br /&gt;
===Interruptcontroller vom Cortex-M3/M4===&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;Nested Vectored Interrupt Controller&amp;quot; (NVIC) ist eine Funktion der ARMv7M Architektur und ist über die CMSIS verwendbar.&lt;br /&gt;
&lt;br /&gt;
Beim STM32 hat jeder Interrupt eine Priorität von 4 Bit (bei ARMv7M je nach Implementation bis 8bit möglich). Diese 4 Bit können in eine &amp;quot;pre-emption priority&amp;quot; und &amp;quot;subpriority&amp;quot; unterteilt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel 2 Bit zu 2 Bit Unterteilung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 2 Bits für pre-emption priority&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Somit kann &amp;quot;pre-emption priority&amp;quot; den Wert 0..3 und &amp;quot;subpriority&amp;quot; auch 0..3 erhalten. Um so kleiner die Zahl ist um so höherwertig ist der Interrupt.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;br&amp;gt;ISR1 Pre 2 / Sub 1&lt;br /&gt;
&amp;lt;br&amp;gt;ISR2 Pre 1 / Sub 1&lt;br /&gt;
&amp;lt;br&amp;gt;ISR3 Pre 1 / Sub 2&lt;br /&gt;
&lt;br /&gt;
Wenn jetzt ISR1 kommt, dann wird der aufgerufen. Kommt während dem ein ISR2 dann darf der den ISR1 unterbrechen, da er eine höhere &amp;quot;pre-emption priority&amp;quot; Wertigkeit hat.&lt;br /&gt;
&lt;br /&gt;
Wenn ISR2 bereits aktiv ist, so darf ISR3 diesen nicht unterbrechen, ISR1 ebenfalls nicht.&lt;br /&gt;
&lt;br /&gt;
Wenn ISR2 und ISR3 gleichzeitig kommen, so wird zu erst ISR2 bearbeitet, anschließend ISR3 da beide die gleiche &amp;quot;pre-emption priority&amp;quot; haben fällt die Entscheidung anhand der &amp;quot;subpriority&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Beispiel Interrupt Konfiguration für USART1 mittels CMSIS-Funktionen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
NVIC_InitTypeDef NVIC_InitSt;&lt;br /&gt;
NVIC_InitSt.NVIC_IRQChannel = USART1_IRQn;&lt;br /&gt;
NVIC_InitSt.NVIC_IRQChannelPreemptionPriority = 3; // &amp;lt;&amp;lt; Tiefe Prio&lt;br /&gt;
NVIC_InitSt.NVIC_IRQChannelSubPriority = 1;&lt;br /&gt;
NVIC_InitSt.NVIC_IRQChannelCmd = ENABLE;&lt;br /&gt;
NVIC_Init(&amp;amp;NVIC_InitSt);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Taktzeitberechnung und Überwachung===&lt;br /&gt;
&lt;br /&gt;
Bei zeitkritischen Applikationen stellt sich immer wieder die Frage wie viele Prozessortakte nun die Funktion verbraucht. Ist der Interrupt auch wirklich nicht zu lange und wie viel Reserve gibt es noch?&lt;br /&gt;
&amp;lt;br&amp;gt;Der ARMv7M -Kern hat dafür extra einen Takt-Zähler in der DWT-Einheit implementiert, den man mittels der CMSIS nutzen kann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt; // Für die Standard-Typen uint32_t etc.&lt;br /&gt;
#include &amp;lt;stm32f4xx.h&amp;gt; // Hier die Header-Datei der CMSIS für die jeweilige Familie verwenden.&lt;br /&gt;
&lt;br /&gt;
// DWT-Einheit aktivieren&lt;br /&gt;
inline void DWT_Enable() {&lt;br /&gt;
  CoreDebug-&amp;gt;DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;&lt;br /&gt;
}&lt;br /&gt;
// Takt-Zähler - Messen der Anzahl der Befehle des Prozessors:&lt;br /&gt;
inline void DWT_CycCounterEn () {&lt;br /&gt;
  DWT-&amp;gt;CTRL = 0x40000001;&lt;br /&gt;
}&lt;br /&gt;
inline void DWT_CycCounterDis () {&lt;br /&gt;
  DWT-&amp;gt;CTRL = 0x40000000;&lt;br /&gt;
}&lt;br /&gt;
inline uint32_t DWT_CycCounterRead () {&lt;br /&gt;
  return DWT-&amp;gt;CYCCNT;&lt;br /&gt;
}&lt;br /&gt;
inline void DWT_CycCounterClear () {&lt;br /&gt;
  DWT-&amp;gt;CYCCNT = 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main () {&lt;br /&gt;
  // ... Programmcode ...&lt;br /&gt;
&lt;br /&gt;
  // Systick-Zähler benutzen&lt;br /&gt;
  DWT_Enable(); // DWT-Einheit aktivieren&lt;br /&gt;
  DWT_CycCounterEn (); // Zähler aktivieren&lt;br /&gt;
  DWT_CycCounterClear (); // Zähler löschen&lt;br /&gt;
  // ... Programmbearbeitung ...&lt;br /&gt;
  uint32_t iZ = DWT_CycCounterRead (); // Zähler auslesen&lt;br /&gt;
  &lt;br /&gt;
  // ... weiterer Programmcode ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In iZ steht nun wie viele Maschinentakte der Prozessor für die Bearbeitung benötigt hat und kann mit folgender Formel umgerechnet werden:&lt;br /&gt;
&lt;br /&gt;
Zeit in µSec = iZ / CPU-Takt in MHz&lt;br /&gt;
&lt;br /&gt;
= FAQ - Anfängerfragen=&lt;br /&gt;
&lt;br /&gt;
* Muss ich, wenn ich die Debugging-Funktionen nutzen möchte einen JTAG Adapter anschließen? - Ja. Auf dem STM32F4DISCOVERY ist jedoch bereits einer mit drauf.&lt;br /&gt;
* Mit diesem kann ich dann den µC auch programmieren? - Ja, programmieren und debuggen.&lt;br /&gt;
* Ich möchte eine eigene Platine entwickelt, jedoch der 20polige [[JTAG]]-Anschluss ist mir zu groß, gibt es eine Alternative? - Ja, [http://www.mikrocontroller.net/articles/JTAG#Der_10-polige_JTAG_Stecker_von_mmvisual &amp;quot;Der 10-polige JTAG Stecker von mmvisual&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
= Weblinks, Foren, Communities, Tutorials =&lt;br /&gt;
* [[STM32]] Hauptartikel, [http://www.mikrocontroller.net/articles/STM32#Weblinks.2C_Foren.2C_Communities.2C_Tutorials dortige Linksammlung]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/319328 Diskussion zum Artikel]&lt;br /&gt;
* [[STM32 CooCox Installation]]&lt;br /&gt;
* [[STM32 Eclipse Installation]]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/423300#new Totzeitrechner für STM32]&lt;br /&gt;
* [[LPC1xxx für Umsteiger]]&lt;br /&gt;
* [http://stefanfrings.de/stm32/index.html Notizen zu ARM Cortex M3 Mikrocontrollern der STM32F1 Serie]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:STM32]]&lt;br /&gt;
[[Kategorie:Mikrocontroller]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sonnenfolger_/_Heliostat&amp;diff=95390</id>
		<title>Sonnenfolger / Heliostat</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sonnenfolger_/_Heliostat&amp;diff=95390"/>
		<updated>2017-02-28T06:08:03Z</updated>

		<summary type="html">&lt;p&gt;Kichi: Änderung 95389 von 46.0.218.231 (Diskussion) rückgängig gemacht.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
===Allgemeines===&lt;br /&gt;
Ursache für den Tageslauf der Sonne ist die Rotation der Erde um sich selbst. Die Höhen-Änderung der Sonnenbahn resultiert aus dem jährlichen Umlauf der Erde (Erdbahn) um die Sonne in Kombination mit der im Weltall annähernd fixen Richtung der gegen die Erdbahn geneigten Erdachse (Schiefe der Ekliptik). (Quelle Wikipedia)&lt;br /&gt;
&lt;br /&gt;
Würde man die Sonne an jedem Tag des Jahres immer genau um 12:00 Uhr Mittags (DCF77 Uhr) fotografieren und die Fotos alle übereinander legen, erhielte man die Analemma-Figur mit zusätzlichen Sprüngen von einer Stunde Ende März und Ende Oktober. Das heißt, eine Sonnenuhr geht bis zu 15 Minuten zuzüglich Sommerzeitverschiebung falsch, da die Sonne mal rechts und mal links von der Position steht, die man vereinfacht erwarten würde.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Analemma_pattern_in_the_sky.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
(Foto Quelle Wikipedia)&lt;br /&gt;
&lt;br /&gt;
Wie alle sicherlich beobachtet haben, ändert sich je nach Jahreszeit und nach dem Breitengrad der Aufstellung der Solaranlage die Sonnenhöhe (Höhenwinkel, Azimuth) &lt;br /&gt;
&lt;br /&gt;
Weiterhin leben wir in einer recht großen Zeitzone vom östlichsten Zipfel von Norwegen bis nach Spanien. Daher kann die Sonne um 12:00 Uhr nicht überall genau im Süden stehen. Je nach Längengrad der Aufstellung der Solaranlage ändert sich die Himmelsrichtung für die Stellung der Sonne in der Mittagszeit. Hinzu kommt die Sommer- Winterzeitumstellung.&lt;br /&gt;
&lt;br /&gt;
===Lösungsansätze===&lt;br /&gt;
Durch eine Nachführung wird entweder eine Solarzelle genau zur Sonne ausgerichtet oder ein Spiegel lenkt das Sonnenlicht auf einen Zielpunkt. Der Spiegel muss dann auf der Winkelhalbierenden zwischen Sonnenstand und dem Ziel stehen.&lt;br /&gt;
&lt;br /&gt;
Es kann generell zwischen analogen Lösungen mit Messung der Helligkeit ohne Inteligenz,  Messung der Helligkeit mit Mikrocontrollerauswertung und Uhrzeitnachführungen mit Berechung der Sonnenposition unterscheiden. Die Berechnung der Sonnenposition ist durch die oben beschriebene Problematik recht aufwendig, hat aber den Vorteil, dass keine Optik sauber gehalten werden muss.&lt;br /&gt;
&lt;br /&gt;
==einachsige Nachführung==&lt;br /&gt;
Zur Nachführung einer Solarzelle oder thermischen Solarpanels kann auf die Nachführung in der vertikalen Achse verzichtet werden. Man spart Mechanik, verliert aber Leistungsausbeute.&lt;br /&gt;
Kippt man die Drehachse um einen Winkel der gleich der geographische Breite des Aufstellorts ist nach Norden, so wird der Verlust erheblich minimiert. (Parallaktische Montierung)&lt;br /&gt;
&lt;br /&gt;
===Analog===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Lichtfolger_analog.png|400px]]&lt;br /&gt;
&lt;br /&gt;
hier eine der vielen analogen Lichtfolgerschaltungen. An den Ausgängen wird eine H-Brücke als Motortreiber und ein Getriebemotor angeschlossen.&lt;br /&gt;
&lt;br /&gt;
In der Schaltung befinden sich zwei Spannungsteiler. Zu einen die&lt;br /&gt;
Reihenschaltung aus den beiden LDR´s. Werden beide gleichmäßig&lt;br /&gt;
beleuchtet, teilt sich die Spannung gleichmäßig auf.&lt;br /&gt;
Die Spannung Vcc teilt sich an der Reihenschaltung der Widerstände in&lt;br /&gt;
drei Teile auf:&lt;br /&gt;
Spannung U1 über Poti R1 und R3, Spannung U2 über Poti R2 und die&lt;br /&gt;
Spannung U3 über R4.&lt;br /&gt;
&lt;br /&gt;
Die Spannung U2 ist die Hysterese bei der sich beide Ausgänge auf 0 V&lt;br /&gt;
Potential befinden.&lt;br /&gt;
Die Spannungen U1 und Vcc-U3 sind die Schaltpunkte.&lt;br /&gt;
&lt;br /&gt;
Google nach: Fensterkomparator&lt;br /&gt;
&lt;br /&gt;
===Mikrocontroller===&lt;br /&gt;
&lt;br /&gt;
[[Bild:Lichtfolger_Tiny.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Ähnliche Signalbildung, aber Auswertung durch einen Tiny. Hier kann die Hysterese und Schaltverzögerungen per Software eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
==zweiachsige Nachführung==&lt;br /&gt;
Nach einer Weile an Überlegung habe ich mich für die Lösung mit DCF 77 Uhr, Berechnung des Sonnenstandes und Schrittmotoren entschieden.&lt;br /&gt;
&lt;br /&gt;
===Hardware===&lt;br /&gt;
&lt;br /&gt;
[[Bild:Base_Board_L317_alles.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Beim Anschluss der ISP Schnittstelle bin ich etwas vom &amp;quot;Kanda-Standard&amp;quot; abgewichen und nur Pin10 des Wannensteckers für Masse benutzt. Dadurch waren die Pins 8,6,4 noch für das LCD frei. Zum Programmieren benutze ich einen Adapter, der diese Pins isoliert, um einen Kurzschluss zu vermeiden. Der Vorteil, ich habe nur einen Stecker für das LCD und zur Programmierung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download Hardware:  [[Media:Heliostep Hardware.zip‎|download zip-File]]&lt;br /&gt;
&lt;br /&gt;
===Software===&lt;br /&gt;
Der Programmteil DCF77 Empfang ist von Ulrich Rading, die Sonnenstandsberechnung von Clueso hier aus dem Forum, die LCD Anzeige ist ebenfalls aus dem Forum.&lt;br /&gt;
Da möchte ich mich nicht mit falschen Federn schmücken. Aber es blieben noch genügend Herausfordeungen zum Testen und Probieren.&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/forum/codesammlung?filter=sonne*&lt;br /&gt;
* http://www.mikrocontroller.net/topic/111783&lt;br /&gt;
* http://www.mikrocontroller.net/topic/121049&lt;br /&gt;
&lt;br /&gt;
====Motortest Software====&lt;br /&gt;
Download Software zum Motortest:  [[Media:Heliostep 05 Motor Test.zip‎|download zip-File]]&lt;br /&gt;
&lt;br /&gt;
Fährt die Schrittmotre zuerst in die Homeposition. Fährt dann die Steppermotore bei Tastendruck jeweils 2000 Schritte vorwärts, bzw wieder zurück in die Homeposition.&lt;br /&gt;
&lt;br /&gt;
====Heliostat Software====&lt;br /&gt;
Download Software zur Steuerung:  [[Media:Heliostep_15.zip‎|download zip-File]]&lt;br /&gt;
&lt;br /&gt;
Wartet auf DCF Empfang, fährt den Heliostat in die Homeposition Down und Ost, berechnet die Sonnenposition alle Minute und fährt den Spiegel entsprechend der Berechnung.&lt;br /&gt;
&lt;br /&gt;
Während der Wartezeit auf den ersten gültigen DCF77 Empfang wird das Trägersignal als blinkende 1 oder 0 im Sekundentakt auf den LCD angezeigt. Dies eignet sich gut zur Ausrichtung der DCF Antenne.&lt;br /&gt;
&lt;br /&gt;
Nach dem ersten gültigen Empfang wird nochmals 20 Sekunden auf das Signal Sommer- oder Winterzeit gewartet.&lt;br /&gt;
Mit diesem Signal und der aktuellen Uhrzeit wird die UTC Zeit berechnet (MEZ - 1h, oder MESZ - 2h). Die aktuelle Zeit in UTC wird auf dem LCD in der ersten Zeile angezeigt.&lt;br /&gt;
&lt;br /&gt;
Mit der UTC Zeit und dem Standort des Heliostaten wird die Position der Sonne in Radiant berechnet. Die Elevation und der Azimut multipliziert mit jeweils einem Faktor ergeben die Anzahl der Schritte die der jeweilige Schrittmotor fahren muss. Die beiden Faktoren werden in der zweiten Zeile auf den LCD angezeigt.&lt;br /&gt;
&lt;br /&gt;
===Video Mechanik===&lt;br /&gt;
Hier noch ein kleiner Videofilm von der Mechanik:&lt;br /&gt;
&lt;br /&gt;
http://www.youtube.com/watch?v=s7gXmlWX7Ro&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* http://de.wikipedia.org/wiki/Sonnenstand&lt;br /&gt;
* http://de.wikipedia.org/wiki/Heliostat&lt;br /&gt;
* Programm &amp;quot;Orbitron&amp;quot; http://www.stoff.pl/&lt;br /&gt;
* [http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2009/nw59_yt322/nw59_yt322/index.html Heliostat Skylight] (ECE 476 Final Project by Yinan Tang and Nana Wu)&lt;br /&gt;
* http://de.wikipedia.org/wiki/Windlast&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR-Projekte]]&lt;br /&gt;
[[Kategorie:DCF77]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32&amp;diff=92289</id>
		<title>STM32</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32&amp;diff=92289"/>
		<updated>2016-03-10T07:38:37Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;STM32 ist eine Mikrocontroller-Familie von [http://www.st.com/mcu/inchtml-pages-stm32.html ST] mit einer 32-Bit [[ARM]] Cortex-M0/M3/M4 CPU. Diese Architektur ist speziell für den Einsatz in Mikrocontrollern neu entwickelt und löst damit die bisherigen ARM7-basierten Controller weitestgehend ab. Den STM32 gibt es von ST in unzähligen Varianten mit variabler Peripherie und verschiedenen Gehäusegrößen und -formen. Durch die geringe Chipfläche des Cores ist es ST möglich, eine 32 Bit-CPU für weniger als 1&amp;amp;nbsp;€ anzubieten.&lt;br /&gt;
&lt;br /&gt;
[[Bild:stm32F103xc.png|thumb|right|340px|Blockdiagramm STM32F103xC/D/E]]&lt;br /&gt;
&lt;br /&gt;
== STM32-Familien ==&lt;br /&gt;
&lt;br /&gt;
Bisher gibt es elf STM32-Familien:&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1588.jsp STM32F0]&lt;br /&gt;
** Cortex M0&lt;br /&gt;
** Mikrocontroller zum Einstieg&lt;br /&gt;
** Bis 48MHz (38 DMIPS)&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1169.jsp STM32F1]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Bis 72MHz (61 DMIPS)&lt;br /&gt;
**Verschiedene Unterfamilien:&lt;br /&gt;
*** Connectivity line&lt;br /&gt;
*** Performance line&lt;br /&gt;
*** USB Access line&lt;br /&gt;
*** Access Line&lt;br /&gt;
*** Value line&lt;br /&gt;
* [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1575 STM32F2]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Bis 120MHz (150 DMIPS)&lt;br /&gt;
** Wie die STM32F1 Serie, Camera-Interface, 32-Bit Timer, Crypto-Engine...&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1605.jsp STM32F3]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
** Bis 72MHz (90 DMIPS)&lt;br /&gt;
** Fast 12-bit 5 MSPS and precise 16-bit sigma-delta ADCs&lt;br /&gt;
** Touch sensing controller (TSC)&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1521.jsp STM32F4]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
** Bis 180MHz (225 DMIPS)&lt;br /&gt;
** Bis zu 2MB Flash&lt;br /&gt;
* [http://www.st.com/web/en/catalog/mmc/SC1169/SS1858 STM32F7]&lt;br /&gt;
** Cortex M7&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
** Bis 200MHz (428 DMIPS)&lt;br /&gt;
** Mehr Peripherie: SPDIF-IN/OUT, SAI, HDMI-CEC, Dual Quad SPI&lt;br /&gt;
** DMA&#039;s auch für Ethernet, USB und Chrom-ART&lt;br /&gt;
* [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1817 STM32L0]&lt;br /&gt;
** Cortex M0+&lt;br /&gt;
** Low Power &lt;br /&gt;
** mit LCD Treiber&lt;br /&gt;
** Bis 32MHz (26 DMIPS)&lt;br /&gt;
* [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1295 STM32L1]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Low Power &lt;br /&gt;
** mit LCD Treiber&lt;br /&gt;
** Bis 32MHz (33 DMIPS)&lt;br /&gt;
* [http://www.st.com/web/en/web/catalog/mmc/FM141/SC1169/SS1580 STM32L4]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
** Ultra Low Power (bis zu 30nA mit I/O Wake-Up)&lt;br /&gt;
** Bis 80MHz (100 DMIPS)&lt;br /&gt;
** 256KB...1MB Flash, 128KB SRAM&lt;br /&gt;
** mit Segment-LCD Treiber&lt;br /&gt;
** Digital-Filter für ΣΔ-Modulatoren&lt;br /&gt;
* [http://http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1582 STM32T]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** 72MHz&lt;br /&gt;
** Touch Sensing&lt;br /&gt;
* [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1581 STM32W]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** BIS 24MHz&lt;br /&gt;
** RF-MCU &lt;br /&gt;
[http://www.st.com/web/en/catalog/mmc/FM141/SC1169 Hier eine Übersicht zum Auswählen eines STM32Fxxx]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* Cortex-M0 / Cortex-M3 / Cortex-M4F / Cortex-M7 Kern (mit FPU)&lt;br /&gt;
* 16KB ... 2MB  [[Flash-ROM]]&lt;br /&gt;
* 4KB ... 256KB [[Speicher#SRAM|SRAM]]&lt;br /&gt;
* 2KB ... 16KB [[Speicher#EEPROM|EEPROM]] (STM32L)&lt;br /&gt;
* SDRAM-Controller bei den [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1577/LN1806 STM32F42xxx und STM32F43xxx], bis 512 MByte externer SDRAM addressierbar&lt;br /&gt;
* 512 one-time programmable Bytes(STM32F2/4)&lt;br /&gt;
* [[IC-Gehäuseformen | Gehäuse]] 20 ... 216 Pins als LCSP, TSSOP, QFN, LQFP und BGA&lt;br /&gt;
* Derzeit sind über &#039;&#039;&#039;500&#039;&#039;&#039; [http://www.st.com/web/en/catalog/mmc/FM141/SC1169 STM32 Derivate/Varianten verfügbar]&lt;br /&gt;
* Bis 72MHz CPU-Takt, bis 120MHz beim STM32F2xx, bis 168/180 MHz beim STM32F4xx, wobei eine spezielle prefetch-hardware bis 120/168 MHz eine Geschwindigkeit erzielen soll, die 0 Wait-States entspricht. Der CPU-Takt wird über einen Multiplikator aus dem internen RC-Takt oder einem externen Quarz-Takt abgeleitet. Bis 216MHz CPU-Takt bei STM32F7xx.&lt;br /&gt;
* Externes Businterface (nur bei Gehäusen ab 100 Pin und nur bei STM32F4, STM32F2 und STM32F1 Performance line)&lt;br /&gt;
* LCD Treiber für 8x40 Punkte (nicht beim STM32F2xx)&lt;br /&gt;
* TFT Treiber bei STM32F429 / STM32F439&lt;br /&gt;
* Spannungsbereich 1,65 ... 3,6V, nur eine Betriebsspannung nötig&lt;br /&gt;
* Temperaturbereich bis 125 °C&lt;br /&gt;
* Bis zu 168 IOs, viele davon [[Pegelwandler|5V-tolerant]]&lt;br /&gt;
* Interner, kalibrierter RC-Oszillator mit 8MHz (16MHz bei STM32F2/F4xx)&lt;br /&gt;
* Externer Quarz&lt;br /&gt;
* Real Time Clock mit eigenem Quarz und separater Stromversorgung&lt;br /&gt;
* Bis zu 16 [[Timer]], je Timer bis zu 4 IC/OC/PWM Ausgänge. Davon 2x Motion Control Timer (bei STM32F103xF/G), (bis zu 32 PWM Ausgänge)&lt;br /&gt;
* Systick Counter&lt;br /&gt;
* Bis zu 3 12-Bit [[AD-Wandler]] mit insgesamt 24 AD-Eingängen, integrierter [[Temperatursensor]], Referenzspannung Vrefint und VBatt Spannungsmessung (STM32F4xx)&lt;br /&gt;
* Bis zu 2 12-Bit [[DA-Wandler]] (bis zu 3 beim STM32F3xx)&lt;br /&gt;
* Bis zu 2 [[DMA]] Controller mit bis zu 12 Kanälen (16 beim STM32F2/4xx)&lt;br /&gt;
* Bis zu 2x [[I2C|I²C]]&lt;br /&gt;
* Bis zu 5x [[UART|USART]] mit LIN, IrDA und Modem Control (bis zu 8 beim STM32F2/F4xx)&lt;br /&gt;
* Bis zu 3x [[SPI]] (bis zu 6 beim STM32F4xx)&lt;br /&gt;
* Bis zu 2x [[I2S|I²S]]&lt;br /&gt;
* Bis zu 2x [[CAN#STMicroelectronics STM32 (Cortex M3/M4)|CAN]]&lt;br /&gt;
* Hardware [[CRC]] Unit, bei der STM32F3xx Serie mit einem einstellbaren Polynom &lt;br /&gt;
* Unique device ID register (96 Bits)&lt;br /&gt;
* RNG - Random Number Generator (STM32F2/4xx)&lt;br /&gt;
* Cryptographic Processor (CRYP) (STM32F2/4xx)&lt;br /&gt;
* Hash Processor (HASH) (STM32F2/4xx)&lt;br /&gt;
* Kamera-Interface (DCMI) (STM32F2/4xx)&lt;br /&gt;
* [[USB]] 2.0 Full Speed / OTG&lt;br /&gt;
* [[USB]] 2.0 Hi Speed OTG mit extra PHY-Chip (STM32F2/4xx)&lt;br /&gt;
* SDIO Interface (z.B. SD-Card Reader)&lt;br /&gt;
* Ethernet&lt;br /&gt;
* Watchdog mit Window-Mode&lt;br /&gt;
* Jedes Peripheriemodul ist separat einschaltbar, wodurch sich erheblich [[Ultra low power|Strom sparen]] lässt&lt;br /&gt;
* [[JTAG]] und SWD (Serial Wire Debug) Interface&lt;br /&gt;
* Bis zu 6 Hardware-Breakpoints für Debuggen&lt;br /&gt;
* und vieles mehr ...&lt;br /&gt;
&lt;br /&gt;
== Struktur der Dokumentation ==&lt;br /&gt;
Die Dokumentation der STM32 ist im Vergleich zur [[AVR]]-Familie umfangreicher und komplexer. Sie teilt sich in mehrere Dokumente auf.&lt;br /&gt;
Als Beispiel der Dokumentation soll stellvertretend der [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1031/LN1565/PF164486 STM32F103RC] genannt werden. Die Seite von ST beinhaltet alle nötigen Informationen passend zu diesem Prozessor.&lt;br /&gt;
&lt;br /&gt;
Diese Dokumente von ST beschreiben den Controller:&lt;br /&gt;
&lt;br /&gt;
* Im [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/CD00191185.pdf STM32F103xC/D/E Datasheet] sind die speziellen Eigenschaften einer bestimmten Modellreihe beschrieben und die exakten Daten und Pinouts aufgeführt, sowie die Zuordnung Chipname - Flash/RAM-Größe. Die Peripheriemodule werden nur aufgeführt, nicht detailliert beschrieben.&lt;br /&gt;
* Im [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/reference_manual/CD00171190.pdf Reference Manual (RM0008)] sind alle Peripheriemodule der jeweiligen STM32-Controllerfamilie im Detail beschrieben.&lt;br /&gt;
* Das [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0403c/index.html ARMv7M Architecture Reference Manual] beschreibt detailliert den Prozessorkern, wie das Exception Model, die CPU Instruktionen inklusive Encoding, etc.&lt;br /&gt;
* Das [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/programming_manual/CD00228163.pdf STM32 Cortex-M3 Programming Manual] ist eine Zusammenfassung des ARMv7M Architecture Reference Manual bezogen auf die STM32.&lt;br /&gt;
* Wer nicht die ST Firmware-Library verwendet, der benötigt zusätzlich das [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/programming_manual/CD00283419.pdf Flash Programming Manual] für die Betriebsart des Flash-ROMs, d.h. die frequenzabhängige Konfiguration der Waitstates.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sollten auch die [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/errata_sheet/CD00197763.pdf Errata Sheets] beachtet werden. Empfohlen sei auch die Appnote &amp;quot;[http://www.st.com/web/en/resource/technical/document/application_note/CD00164185.pdf AN2586 Getting started with STM32F10xxx hardware development]&amp;quot;.&lt;br /&gt;
Die jeweiligen Dokumentations-PDFs sind auf der Produktseite von ST eines jeden Mikrocontrollers verlinkt.&lt;br /&gt;
&lt;br /&gt;
== Hardware Zugriffs-Libraries ==&lt;br /&gt;
=== CMSIS ===&lt;br /&gt;
&lt;br /&gt;
Die CMSIS (ARM® &#039;&#039;&#039;C&#039;&#039;&#039;ortex™ &#039;&#039;&#039;M&#039;&#039;&#039;icrocontroller &#039;&#039;&#039;S&#039;&#039;&#039;oftware &#039;&#039;&#039;I&#039;&#039;&#039;nterface &#039;&#039;&#039;S&#039;&#039;&#039;tandard) ist eine Library von ARM für den Zugriff auf die herstellerübergreifenden Funktionen des ARM-Cores. Hierzu gehört bei den Cortex-M4F-Cores auch die DSP und Floating-Point Funktionalität. Weiterhin existieren eine Zahl von Helferfunktionen für den NVIC, den Sys-Tick-Counter, sowie eine SystemInit-Funktion, welche sich um die PLL kümmert. &lt;br /&gt;
&lt;br /&gt;
Im Rahmen des CMSIS-Standards ([http://www.onARM.com www.onARM.com]) wurden die Headerdateien standardisiert, der Zugriff auf die Register erfolgt per &#039;&#039;&#039;Peripheral-&amp;gt;Register&#039;&#039;&#039;. Die CMSIS C-Dateien bzw. Header enthalten auch Anpassungen für die verschiedenen Compiler. Die Portierung eines Real-Time-Betriebsystems sollte unter Verwendung der CMSIS, für Chips der verschiedenen Hersteller, stark vereinfacht möglich sein (z.B. einheitliche Adressen für Core-Hardware/Sys-Tick-Counter).&lt;br /&gt;
&lt;br /&gt;
Die CMSIS ist im Download der ‎STM32 Standard Peripheral Library enthalten. Die Compiler-Hersteller liefern eine jeweils zur ihrer Tool-Version passende bzw. geprüfte Library (incl. CMSIS) aus. Diese Libs können, gegenüber den Downloads beim Chip-Hersteller, auch ältere Version beinhalten.&lt;br /&gt;
&lt;br /&gt;
=== ‎STM32 Standard Peripheral Library ===&lt;br /&gt;
&lt;br /&gt;
ST bietet für jede Controller-Familie eine umfangreiche zur CMSIS passende Peripherie-Bibliothek. Alle Funktionen um die Peripherie zu benutzen sind gekapselt in einfache Strukturen und Funktionsaufrufe. Somit muss man sich nicht selbst um die Peripherie-Register kümmern. Diese Library und ihre Dokumentation setzen das grundlegende Verständnis der Funktion des jeweiligen Peripheriemoduls voraus, wie es die o.a. Referenz und diverse Appnotes vermitteln. Die Library beinhaltet außerdem für fast jede Peripherie mehrere Beispiele.&lt;br /&gt;
Für die USB Schnittstelle gibt es noch eine extra Library, genauso wie für Ethernet.&lt;br /&gt;
&lt;br /&gt;
Auf der &amp;quot;Design Resources&amp;quot; Seite der Produktseite von ST eines jeden STM32 Mikrocontrollers kann die Library für den jeweiligen Controller heruntergeladen werden, z.B. [http://www.st.com/web/en/catalog/tools/PF257890 hier für den o.g. STM32F103RC].&lt;br /&gt;
&lt;br /&gt;
Library für STM32F4xx: [http://www.st.com/web/en/catalog/tools/PF257901# STSW-STM32065 STM32F4 DSP and standard peripherals library]&lt;br /&gt;
&lt;br /&gt;
=== ‎STM32Cube / HAL ===&lt;br /&gt;
&lt;br /&gt;
Wird in Zukunft die Standard Library ablösen.&lt;br /&gt;
* http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/LN1897&lt;br /&gt;
&lt;br /&gt;
== Programmierung ==&lt;br /&gt;
Zur Programmierung der STM32 gibt es verschiedene Möglichkeiten, sowohl kommerzielle proprietäre als auch mit Freier Software.&lt;br /&gt;
&lt;br /&gt;
Der GCC (in seinen verschiedenen Binärdistributionen) ist der einzige ARM Compiler der [http://de.wikipedia.org/wiki/C%2B%2B11 C++11] unterstützt.&lt;br /&gt;
&lt;br /&gt;
=== Freie Software/Freeware ===&lt;br /&gt;
==== Selber zusammenstellen ====&lt;br /&gt;
Man nehme...:&lt;br /&gt;
* Eine Entwicklungsumgebung nach Wahl:&lt;br /&gt;
** [http://www.eclipse.org Eclipse] mit [http://www.eclipse.org/cdt/ C/C++ Development Tooling] und [http://gnuarmeclipse.livius.net/blog/ GNU ARM Plug-in] (Bei Verwendung vom GCC-ARM-Embedded als Toolchain &amp;quot;Sourcery G++ Lite&amp;quot; auswählen, dieser sieht für eclipse gleich aus) (Linux, Windows)&lt;br /&gt;
** [http://netbeans.org/ Netbeans] mit [http://plugins.netbeans.org/plugin/37426/gdbserver GDBserver-Plugin] (Linux, Windows)&lt;br /&gt;
** [http://www.kdevelop.org/ KDevelop] (Linux)&lt;br /&gt;
** [http://www.geany.org/ Geany] (Linux, Windows)&lt;br /&gt;
** Oder ein einfacher Texteditor&lt;br /&gt;
* Einen C,C++ Compiler:&lt;br /&gt;
** Eine der [[ARM_GCC#GCC_Bin.C3.A4rdistributionen|GCC-Binärdistributionen]], siehe auch [[#GCC|GCC]] (je nach Distribution Linux, Windows)&lt;br /&gt;
* Programmiersoftware zum Flashen des Target:&lt;br /&gt;
** [http://openocd.sourceforge.net/ OpenOCD] unterstützt viele Debug/Programmier-Adapter (Linux, Windows)&lt;br /&gt;
** [https://github.com/texane/stlink Texane stlink] funktioniert gut mit den ST-Link Adaptern wie sie zB. auf den STM32 Discovery Boards zu finden sind (Linux)&lt;br /&gt;
** Turtelizer2 oder andere JTAG Programmieradapter&lt;br /&gt;
** Bei Verwendung eines Segger J-Link, den [http://www.segger.com/admin/uploads/productDocs/UM08005_JLinkGDBServer.pdf Segger GDB-Server] in Verbindung mit dem beim GCC mitgelieferten GDB (Linux, Windows).&lt;br /&gt;
&lt;br /&gt;
==== Komplette IDE&#039;s ====&lt;br /&gt;
* [https://developer.mbed.org/platforms ARM mbed Developer Site] ist der ultimative Compiler für denjenigen, der nur mal schnüffeln will. Doppelklick of das gewünschte Board, Beispielprogramm (rechts am Rand auswählen), kompilieren und über USB hochladen. Schon blinkt es! Wermutstropfen: mbed läuft nicht lokal, nur im WWW.&lt;br /&gt;
* [http://www.codesourcery.com/sgpp/lite_edition.html Codesourcery Lite Edition] Mit dieser Umgebung muss man sich anfreunden können, was mir bisher nicht gelungen ist. Es sind nur wenig Beispielprojekte verfügbar. Nicht mehr kostenlos verfügbar.&lt;br /&gt;
* [http://www.coocox.org/ Coocox Eclipse IDE] kostenlose IDE für STM32F0/F1/F2/F3/F4. Basiert auf der ARM-GCC Toolchain und es gibt eine breite Unterstützung. Es ist sogar ein freies RTOS verfügbar. Beim Start der IDE muss man geduldig sein, was jedoch für alle Eclipse basierten IDE&#039;s gilt. Eine gute Wahl ohne Limits mit breiter Debugger-Unterstützung. Hilfreiche Infos gibt es im [http://www.mikrocontroller.net/topic/214719?goto=new#2228482 hier] und [http://www.mikrocontroller.net/topic/214719?goto=new#2229943 hier] Forum, Artikel: [[STM32 CooCox Installation]] &lt;br /&gt;
* [http://emide.org/ emIDE] kostenlose IDE von Segger. Die emIDE basiert auf Code::Blocks. Sie ist auf ARM-GCC aufgebaut und unterstützt eine große Zahl an unterschiedlichen JTAG/SWD Debugger - natürlich auch den J-Link aus gleichem Hause.  &lt;br /&gt;
* [http://www.emblocks.org EmBlocks] kostenlose IDE, Code::Blocks basiert, unterstützt STM32 L1/F0/F1/F2/F3/F4/W, integrierter Compiler (ARM-GCC), integrierter GDB-Debugger, Jlink/ST-Link, System view (Peripherie Register anzeigen) beim Debuggen, Project Wizard (Eigene Wizards können mit Squirrel geschrieben werden), Basiert auf Code::Blocks und gefällt mir recht gut da man ihn fast so gut nutzen kann wie die µVision von Keil, jedoch ohne deren Limit, http://www.mikrocontroller.net/articles/STM32_-_Einstieg_mit_Em::Blocks STM32 - Einstieg mit Em::Blocks]&lt;br /&gt;
** heisst jetzt EmBitz beta 0.42 -&amp;gt; http://www.emblocks.org/web/downloads-main&lt;br /&gt;
* [http://cms.seng.de/service-support/downloads/ Entwicklungsumgebung GNU/Linux] für STM32F1 mit OpenOCD und Olimex ARM-USB-OCD-H, Bedienung über Eclipse IDE oder Kommandozeile.&lt;br /&gt;
* [http://www.openstm32.org/blog1-System-Workbench-for-STM32 System Workbench for STM32] (SW4STM32) ist eine uneingeschränkte und kostenlose IDE. Sie wird von [http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1533/PF261797 ST] offiziell unterstützt. Die Entwicklungsumgebung ist in der Version 1.0 seit 5.2.2015 erhältlich. Seit Februar 2016 ist eine Version für Linux verfügbar.&lt;br /&gt;
&lt;br /&gt;
==== Andere Programmiersprachen ====&lt;br /&gt;
&lt;br /&gt;
* [http://mecrisp.sourceforge.net Mecrisp-Stellaris], eine native Forth-Implementation für ARM Cortex M0/M3/M4. Es werden bereits mehrere STM32 Targets unterstützt und neue Portierungen sind herzlich willkommen. Auch Chips von TI, NXP und Freescale sind im aktuellen Paket enthalten.&lt;br /&gt;
&lt;br /&gt;
=== Kommerzielle Umgebungen ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp Keil µVision] (Demo max. 32KB Code/Free für STM32F0/STM32L0): Die sehr komfortable µVison IDE ist neben dem ARM Compiler per Menue auch für einen beliebigen GNU-Compiler konfigurierbar. Damit besteht das 32k-Limit nur noch für den integrierten Debugger / Simulator. In Verbindung mit einem ULINK2 ist die Umgebung schon sehr einfach zu bedienen - leider ist der Compiler mit großen Abstand der langsamste den ich je nutzte da er keine parallel Option wie der GNU-CC besitzt. Mit der µVision lässt sich kein fremdes File in den Controller in den Flashspeicher des Controllers schreiben. Für den Anfänger eine gute Wahl. Der Preis ist jedoch ein guter Grund auf andere freie IDE&#039;s zu wechseln. µVison selbst kann kostenlos mit dem MDK-Evaluationkit heruntergeladen werden. [https://www.keil.com/arm/demo/eval/arm.htm#DOWNLOAD download] Wer sich nur auf STM32 Cortex M0/L0 beschränkt kann die Keil MDK auch ohne 32K Begrenzung frei nutzen. [http://www2.keil.com/stmicroelectronics-stm32/mdk download]&lt;br /&gt;
* [http://www.iar.com/en/Products/IAR-Embedded-Workbench/ IAR-Embedded-Workbench] (Demo max. 32KB Code) [http://supp.iar.com/Download/SW/?item=EWARM-EVAL download]&lt;br /&gt;
* [http://www.isystem.com/download/winideaopen winIDEAOpen] Keine Code Limitierung, GCC und Testwerkzeug beinhaltet. Läuft mit dem iTag50 Adapter, Segger J-Link und dem ST-Link&lt;br /&gt;
* [http://www.raisonance.com Raisonance Ride7] (GCC Compiler, kostenlose Version auf Debugging von max. 32KB Code limitiert, keine Limitierung beim Complilieren)&lt;br /&gt;
* [http://www.atollic.com Atollic] (Lite Version (bis V2.3.0) ohne Code-Limit, auf GCC basierend. Die neueste Version ab V3 hat fast keine Beschränkungen mehr außer jetzt einen Code-Limit von 32kB. Außerdem werden jetzt die meisten ARM Familien unterstützt. )&lt;br /&gt;
* [http://www.rowley.co.uk/arm/ Rowley Crossworks] (Demo 30 Tage unbeschränkt, 150$ für nichtkommerzielle Nutzung, auf GCC basierend). Mir ist nicht klar warum man für diese IDE Geld bezahlen soll. Der GNU-Compiler ist frei und die Entwicklungsumgebungen die auf Eclipse basieren, ebenfalls. Allerdings ist diese Einstellungsarbeit schon was für den etwas erfahrenen Entwickler.&lt;br /&gt;
* [http://www.code-red-tech.com Code Red] (GCC basierend)&lt;br /&gt;
* [http://www.sisy.de/index.php?id=17&amp;amp;no_cache=1 SiSy ARM oder SiSy Micrcontroller++] (Demo verfügbar keine Gößenbegrenzung, basiert auf GNU-Compiler, grafische Programmierung mit UML möglich, integrierter Debugger)&lt;br /&gt;
* [http://www.comsytec.eu/epsdebugger.php EPS Debugger Plugin, für STM32 Development mit Code::Blocks]&lt;br /&gt;
* [http://www.mikroe.com MikroE bietet neben Pascal und Basic auch C mit kompletter Oberfläche mit Compiler etc. pp relativ günstig]&lt;br /&gt;
&lt;br /&gt;
=== STM32CubeMX ===&lt;br /&gt;
Dies ist eine Software von ST selbst, die die Auswahl und Konfiguration von STM32-Mikrocontrollern vereinfacht:&lt;br /&gt;
* Auswahl der Controller oder Entwicklungsboards mit einer parametrischen Suche&lt;br /&gt;
* grafische Konfiguration der Pins und Alternate Functions (inkl. Überprüfung auf Kollisionen - bei Entwicklungsboards sind gewisse Pins schon vorkonfiguriert und werden angezeigt)&lt;br /&gt;
* grafische Konfiguration des Clock-Trees&lt;br /&gt;
* Generierung von C-Code entsprechend der grafischen Konfiguration. Dieser funktioniert nur mit den neuen STM32CubeFx Libraries, nicht mit den alten Standard Peripheral Libraries.&lt;br /&gt;
* Simulation des Strom-Verbrauchs unter Auswahl verschiedenster Stromquellen und Batterien&lt;br /&gt;
Die Software kann [http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF259242 bei ST heruntergeladen] werden. Sie wird im Windows Executable Format angeboten und erweckt daher den Eindruck, ausschließlich für Windows geeignet zu sein, ist aber tatsächlich Java-basiert und daher betriebssystem-unabhängig.&lt;br /&gt;
==== STM32CubeMX unter Linux ====&lt;br /&gt;
Ab der Version 4.13 liegt jetzt ein Linux-Installer mit bei.&lt;br /&gt;
&lt;br /&gt;
Unter Linux kann STM32CubeMX installiert werden, indem man das heruntergeladene .zip-Archiv entpackt, und den enthaltenen Installer per Java über ein Terminal startet:&lt;br /&gt;
&amp;lt;pre&amp;gt;java -jar SetupSTM32CubeMX-4.5.0.exe&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das Anlegen der Desktop/Startmenü-Shortcuts funktioniert unter Linux nicht richtig und kann daher deaktiviert werden. Um STM32CubeMX nach der Installation zu starten, wechselt man im Terminal in den Installationsort und gibt ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;java -jar STM32CubeMX.exe&amp;lt;/pre&amp;gt;&lt;br /&gt;
Damit das funktioniert, muss die Oracle Java Runtime Environment 1.8 installiert sein (Siehe z.B. [http://wiki.ubuntuusers.de/Java/Installation/Oracle_Java/Java_8#Java-8-JRE hier] für Ubuntu). Nicht benötigt wird wine.&lt;br /&gt;
&lt;br /&gt;
=== Tutorials für diverse Tool-Kombinationen ===&lt;br /&gt;
* [[STM32 Eclipse Installation|Windows,Linux, Eclipse + Yagarto/CodeSourcery + OpenOCD/ST-Link]]&lt;br /&gt;
* [[STM32 Eclipse JLink Linux/Windows|Windows,Linux, Eclipse + GCC-ARM-Embedded + JLink]]&lt;br /&gt;
* [[Linux auf STM32|Linux auf STM32 (ucLinux)]]&lt;br /&gt;
&lt;br /&gt;
* Windows&lt;br /&gt;
** Eclipse&lt;br /&gt;
*** [http://www.mikrocontroller.net/topic/216554 Windows, Eclipse, codesourcery, st-link ]&lt;br /&gt;
*** [http://www.firefly-power.de/ARM/debugging.html Eclipse Plugin &amp;quot;GDB Hardware Debugging&amp;quot; mit OpenOCD]&lt;br /&gt;
** Code::Blocks&lt;br /&gt;
*** [http://www.mikrocontroller.net/topic/265600 Windows, Code::Blocks, STM32F4]&lt;br /&gt;
** STM32 mit EmBlocks&lt;br /&gt;
*** [http://www.emblocks.org/web/downloads-main Download EmBlocks]&lt;br /&gt;
*** [https://www.youtube.com/watch?v=coHPJylnzC8 Video STM32 Project Wizzard in EmBlocks]&lt;br /&gt;
** Atollic TrueSTUDIO&lt;br /&gt;
*** [[STM32 LEDBlinken AtollicTrueStudio|Atollic TrueSTUDIO Installation + Demo]]&lt;br /&gt;
** MDK-ARM Lite mit Einstellungen für STM32F0/F4-Discovery Board&lt;br /&gt;
*** [https://www.keil.com/demo/eval/arm.htm KEIL MDK-ARM Download]&lt;br /&gt;
*** [https://www.youtube.com/watch?v=RXOOxby5nns&amp;amp;list=PL6-W3FoUyb48WFI5PQv3SDJj2G1t2FonV&amp;amp;index=1 Installations Video STM32F4 Discovery Board]&lt;br /&gt;
*** [https://www.youtube.com/watch?annotation_id=annotation_203294&amp;amp;feature=iv&amp;amp;index=4&amp;amp;list=PL6-W3FoUyb48WFI5PQv3SDJj2G1t2FonV&amp;amp;src_vid=sN4gDZ7H8gw&amp;amp;v=BeZcQjXxk9A Einstellungen STM32F0 Discovery Board Video]&lt;br /&gt;
** SiSy ARM, STM32&lt;br /&gt;
*** Download: [http://www.sisy.de/index.php?id=59 SiSy DEMO] kein Begrenzung der Codegröße&lt;br /&gt;
*** [http://www.youtube.com/watch?v=84Y3jYLWYpo Videobeispiel]&lt;br /&gt;
** Microsoft Visual Studio&lt;br /&gt;
*** [http://visualgdb.com/tutorials/arm/stm32/f4_discovery/ &amp;quot;STM32F4-Discovery tutorial with Visual Studio&amp;quot;]&lt;br /&gt;
* Ubuntu&lt;br /&gt;
** [http://cms.seng.de/service-support/downloads/ Installing a toolchain for Cortex-M3/STM32 on GNU/Linux] - How-to manual, für STM32F1 unter GNU/Linux mit OpenOCD und Olimex ARM-USB-OCD-H. Integrierte Make files, Linker Skripte, Startup-Code, diverse Tools und Demo-Projekt/Programm. Einbindung in Eclipse IDE oder Bedienung über Kommandozeile.&lt;br /&gt;
** [http://fun-tech.se/stm32/index.php Ubuntu, Selbstcompilierter GCC, STM32/Cortex-M3]&lt;br /&gt;
** [http://thetoolchain.com The ToolChain] - Automatisch installierende Entwicklungsumgebung mit eigenen und externen Treibern, Unterstützt QtCreator als IDE, Flexibel erweiterbar über Shellskripte&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/214719 Tipps für Installation mit Eclipse]&lt;br /&gt;
&lt;br /&gt;
===Programmieradapter===&lt;br /&gt;
* [http://www.segger.com/jlink-model-overview.html SEGGER J-LINK / J-TRACE] für u.a. alle ARM7/9/11, Cortex-M0/M1/M3/M4/A5/A8/A9/R4 als [http://www.segger.com/cms/j-link-edu.html Non-Commercial] J-LINK-EDU für ca. 50,- zu haben, läuft in µVision, IAR, GDB (Linux &amp;amp; Windows über einen eigenen [http://www.segger.com/admin/uploads/productDocs/UM08005_JLinkGDBServer.pdf GDB-Server]), Keil, ... Der J-Link ist mit Abstand der schnellste Debugger den ich bisher testen konnte. Wer es beim Debuggen eilig hat, ist mit dem J-Link von Segger auf den besten Seite.&lt;br /&gt;
* Keil [http://www.keil.com/ulinkme/ ULINK-ME], [http://www.keil.com/arm/ulink2/ ULINK2], [http://www.keil.com/arm/ulinkpro/ ULINK pro] Wenn man die die µVision IDE nicht verlassen mag, kann man sich mit diesen Adaptern anfreunden denn sie arbeiten nur mit dieser IDE zusammen. Sie benötigen keine USB-Treiber denn sie nutzen geschickt das HID-Device des Betriebssystems. Es lässt sich kein fremdes Binary oder Hex-File flashen. Der ULINK2 kostet genau soviel wie ein Segger J-Link Basic bei gleichem Funktionsumfang. Dieser lässt sich aber auch in Verbindung mit anderen IDE&#039;s  (GDB, usw) einsetzten. &lt;br /&gt;
* [http://www.st.com/internet/evalboard/product/219866.jsp ST-LINK],  [http://www.st.com/internet/evalboard/product/251168.jsp ST-LINK/V2]&lt;br /&gt;
* Jedes STM32 Discovery board hat einen ST-Link für Programmierung/Debugging per SWD on-board, welcher auch für eigene STM32 Target Hardware benutzt werden kann (ca. 12,- bis 19,-€, je nach Typ). Diese ist jedoch mit 1.8Mhz Takt ein sehr langsamer Vertreter seiner Art. Mit ihm lässt sich jedoch sowohl Debuggen als auch Flashen von fremden Hex- und Binary-Files. Er unterstützt aber nur MCU&#039;s von ST. NXP, Atmel oder TI lassen sich damit nicht programmieren. Der Discovery-JTAG beherrscht nur SWD, kein JTAG und hat keine Treiber, die den Programmierprozessor vom Zielsystem elektrisch entkoppelt. Der ST-Link in der Adapterversion hat diese Nachteile nicht und kostet auch nur um 20 €.&lt;br /&gt;
* [http://www.raisonance.com/~rlink-debugger-programmer__microcontrollers__tool~tool__T018:4cn9ziz4bnx6.html Raisonance RLink]&lt;br /&gt;
* [http://www.amontec.com Amontec] (Achtung: keine Reaktion auf Bestellung, Telefon, Email...)&lt;br /&gt;
* [http://www.hjtag.com H-JTAG] Personal Edition für ca. 60,- zu haben, läuft mit ADS, SDT, IAR, Vision und RVDS &lt;br /&gt;
* [http://www.isystem.com/products/itag iTag] für 50.- bei Amazon zu bestellen, oder als Eigenbau version (offenes Design) läuft mit der freien winIDEAiTag version (siehe oben)&lt;br /&gt;
&lt;br /&gt;
In der Regel haben die [[JTAG]] Adapter einen 20-Poligen Stecker, den man direkt auf die Demo-Boards, die auch einen 20-Poligen [[JTAG]]-Anschluss haben, einstecken kann. Die Pinbelegung ist genormt, siehe Artikel [[JTAG]]. Die Discovery-Boards haben keinen separaten JTAG-Stecker, aber zumindest für das STM32F4 Discovery kann man sich leicht einen Adapter Pinheader-&amp;gt;JTAG Stecker selber bauen.&lt;br /&gt;
&lt;br /&gt;
Andere [[JTAG]] Adapter wie z.B. der ULink2 von Keil funktionieren nur mit dem Keil Compiler. Leider kann dieser auch kein fremdes Binary oder Hex-File in den Controller schreiben.&lt;br /&gt;
&lt;br /&gt;
===Programmieradapter Open-Source===&lt;br /&gt;
&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/JTAG/ARM-JTAG-COOCOX/ ARM-JTAG-COOCOX], CoLinkEX Nachbau von Olimex, unterstützt JTAG sowie SWD&lt;br /&gt;
** [http://www.coocox.org/colinkEx.htm unterstützte uC]&lt;br /&gt;
** unterstütze IDEs: [http://www.keil.com/arm/mdk.asp Keil MDK-ARM 4.03] oder neuer, [http://www.iar.com/en/Products/IAR-Embedded-Workbench/ IAR Embedded Workbench 5.xx] oder neuer sowie die [http://www.coocox.org/CooCox_CoIDE.htm CooCox CoIDE]&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/JTAG/ Olimex] ARM-USB-OCD (ca. 60.-, hat zusätzlich einen Spannungsausgen und einen COM Port)&lt;br /&gt;
* [http://www.oocdlink.com/ OOCDLink]  [_Link ist derzeit nicht verfügbar_]&lt;br /&gt;
* [https://github.com/texane/stlink Stlink]&lt;br /&gt;
* [http://www.randomprojects.org/wiki/Floss-JTAG FLOSS-JTAG]&lt;br /&gt;
* [http://capitanio.org/mlink/ Linux Demo Code für die Discovery&#039;s ST-Link Programmierung]&lt;br /&gt;
&lt;br /&gt;
Der Controller hat auch einen fest eingebauten Boot-Lader. Damit läßt er sich auch über eine gewöhnliche serielle Schnittstelle programmieren, ohne dass man einen JTAG-Adapter benötigt. Dies erfordert ggf. entsprechende Konfiguration über die BOOTx-Pins und/oder die Option-Bytes, und ein Programm wie [https://code.google.com/p/stm32flash/ stm32flash].&lt;br /&gt;
&lt;br /&gt;
=== Demo-Projekte ===&lt;br /&gt;
&lt;br /&gt;
* Einführung in die GPIO Programmierung der STM32F10x und STM32F30x Prozessoren am Beispiel des STM32F3 Discovery Boards und Vergleich zur AVR IO Registerstruktur [http://www.mikrocontroller.net/topic/300472#new]&lt;br /&gt;
* [[prog_bsp_timer_1_timer2|Programmbeispiel für die Verwendung von Timer2 zusammen mit dem Interrupt]]&lt;br /&gt;
* [http://www.firefly-power.de/ARM/printf.html Printf() debugging mit minimalem Aufwand]&lt;br /&gt;
* [[STM32_BLDC_Control_with_HALL_Sensor|Programmbeispiel für BLDC Motoransteuerung (Timer 1) mit HALLSensor (Timer 3)]]&lt;br /&gt;
* [[Cortex_M3_OCM3U]]&lt;br /&gt;
* Martin Thomas hat ein umfangreiches Projekt erstellt, in der die Eclipse Einstellungen enthalten sind:&lt;br /&gt;
** [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html &amp;quot;ChaN&#039;s FAT-Module with STM32 SPI&amp;quot;]&lt;br /&gt;
* [[STM32 USB-FS-Device Lib]]&lt;br /&gt;
* Modellbau-Sender auf STM32-Basis mit vielen Treibern [http://www.rcos.eu www.rcos.eu]&lt;br /&gt;
* Ausführliches [https://github.com/jkerdels/stm32edu Einstiegs-Tutorial] in Codeform für das [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4 discovery board]&lt;br /&gt;
* [http://www.redacom.ch/keillab/ Schweizer Gondelbahnsteuerung über Webserver auf ETT STM32F ARM KIT Board in Keil RTOS] mit Webcam&lt;br /&gt;
* Die [http://ethernut.svn.sourceforge.net/viewvc/ethernut/trunk/ Ethernut SVN Version] unterstützt inzwischen viele STM32 Typen, viele Devices und einige STM32 Demoboards&lt;br /&gt;
* [http://mikrocontroller.bplaced.net/wordpress/?page_id=744 Uwe Becker&#039;s Libraries für den STM32F4]&lt;br /&gt;
* [http://mikrocontroller.bplaced.net/wordpress/?page_id=3290 Uwe Becker&#039;s STM32F429 Discovery Board Oszilloskop], hier der [http://www.mikrocontroller.net/topic/319831#new Thread]&lt;br /&gt;
* [http://mikrocontroller.bplaced.net/wordpress/?page_id=3424 Uwe Becker&#039;s STM32F429 Discovery Board ZX-Spectrum Emulator]&lt;br /&gt;
&lt;br /&gt;
== Debug- und Trace-Interface (CoreSight™ Debug and Trace Technologie)==&lt;br /&gt;
&lt;br /&gt;
Übersicht über beide Funktionalitäten und den Schnittstellen:&lt;br /&gt;
http://www.keil.com/support/man/docs/ulink2/ulink2_cs_core_sight.htm&lt;br /&gt;
&lt;br /&gt;
Die Coresight-Debug-Architektur ermöglicht ein nicht-invasives Debugging, d.h. es können während des Betriebes (meistens) ohne Beeinflussung des Prozessors Daten vom Speicher gelesen und in selbigen geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
=== Debugger Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Der Debugger-Teil besitzt drei Funktionen:&lt;br /&gt;
* Run Control: z.B. Programm-Start, Stopp und Einzel-Schritte.&lt;br /&gt;
* (Program) Break Points: Ein Programm hält an, wenn der Programm Counter eine bestimmte Programm-Adresse erreicht.&lt;br /&gt;
** Die maximale Anzahl der gleichzeitig möglichen Break Points ist begrenzt (z.B. 6 bei einem STM32).&lt;br /&gt;
** Die Anzahl der Break Points ist nahezu unbegrenzt, wenn ein Debugger über den Memory Access (s.u.) sogenannte Flash Break Points unterstützt. Dabei wird ein geladenes Programm im Flash umprogrammiert, um den Debugger anzuhalten. Diese Funktionalität ist meistens ein kostenpflichtiges Zusatz-Feature des Debugger-Herstellers. &lt;br /&gt;
** Beinhaltet keine Data Watch Funktionalität, welche im Trace-Teil (DWT) realisiert wird.&lt;br /&gt;
* Memory Access: Lesen und Schreiben von Speicheradressen. &lt;br /&gt;
** Diese Funktionalität beinhaltet keine direkte Flash-Programmierung. Der Programmiervorgang für einen Flash ist herstellerspezifisch und muss von dem verwendeten Debugger unterstützt werden.&lt;br /&gt;
&lt;br /&gt;
=== Trace Funktionen ===&lt;br /&gt;
Die Trace-Funktionalität wird in drei Funktionen aufgeteilt:&lt;br /&gt;
* ETM (Embedded Trace Macrocell): Optional, nicht jede CPU besitzt diese Hardware (Kostenfaktor, Ausstattung).&lt;br /&gt;
* ITM (Instrumentation Trace Macrocell): Über diesen Kanal kann ein vereinfachtes Trace des Core ermöglicht werden, sowie &amp;quot;printf-ähnlich&amp;quot; Daten über den ITM Channel 0 geschickt und im Debugger ausgegeben werden.&lt;br /&gt;
* DWT (Data Watchpoint &amp;amp; Trace Unit): &lt;br /&gt;
** Data Watch: 4 Access-Break-Points ( z.B. der Debugger bleibt stehen, wenn das Programm auf einen Speicher zugreift oder der Wert einer Variablen einen bestimmten Wert annimmt). &lt;br /&gt;
** Trace Unit: Programmverlauf (durch Lesen des Program Counters) und Interrupt Aufrufe verfolgen, sowie Zeitmessungen.&lt;br /&gt;
&lt;br /&gt;
Einige der Trace-Funktionalitäten können über die JTAG-Schnittstelle angesprochen werden. Die schnelle Trace-Funktionalität (mit 4 bit Parallel-Port) steht nur mit der erweiterten DEBUG + ETM Schnittstelle zur Verfügung. Im Gegensatz zum Debugger-Teil (Run Control, Break Points und Memory Access) werden Trace-Funktionen nicht von allen Debuggern unterstützt. Debugger mit der vollen Trace-Funktionalität kosten deutlich mehr.&lt;br /&gt;
&lt;br /&gt;
* Beispiele für Trace-Port-Aktivierungen für verschiedene Hersteller: http://www.keil.com/support/man/docs/jlink/jlink_capture_tracedata.htm&lt;br /&gt;
&lt;br /&gt;
Die Aktivierung des parallelen Trace-Ports erfordert, je nach CPU Hersteller, zusätzliche Debugger-Makros für die Aktivierung und Port-Freischaltung. Zusätzlich sind die Schnittstellenauswahl und Einstellung (Frequenzen) im Entwicklungs-Tool (IDE) wichtig, um erfolgreich den Programm-Verlauf &amp;quot;tracen&amp;quot; zu können.&lt;br /&gt;
&lt;br /&gt;
=== Debug und Trace-Schnittstellen ===&lt;br /&gt;
Als Debug Interface stehen zwei Varianten zur Auswahl:&lt;br /&gt;
* [[JTAG]]: Dafür sind mindestens 6 Steuerleitungen nötig. Unterstützt Device Chaining: Mehrere verbundene Geräte können mit einem Debugger/Programmer gleichzeitig angesteuert werden.&lt;br /&gt;
* SWD (Serial Wire Debug): Hier mindestens 2  Steuerleitungen (3 mit SWO, zzgl GND und 3,3V). Die SWD Schnittstelle ist in der Regel schneller und kann auch Funktionen aus dem Trace-Teil beinhalten (z.B. ITM, dafür wird der SWO-Pin benötigt). Device Chaining ist mit dieser Schnittstelle nicht möglich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standard-JTAG Steckerbelegungen: &lt;br /&gt;
http://www.keil.com/support/man/docs/ulink2/ulink2_hw_connectors.htm&lt;br /&gt;
&lt;br /&gt;
=== Der 10polige JTAG-Stecker von mmvisual ===&lt;br /&gt;
mmvisual hat mit dieser Steckerbelegung die Standard JTAG Schnittstelle erweitert:&lt;br /&gt;
&lt;br /&gt;
Ich habe diesen Part in den Artikel [http://www.mikrocontroller.net/articles/JTAG#Der_10-polige_JTAG_Stecker_von_mmvisual JTAG] verschoben.&lt;br /&gt;
Hinzu gekommen ist die Adapterplatine 10-Polig auf Standard JTAG 20 Polig mit TTL/V24 Wandler. [http://www.mikrocontroller.net/articles/JTAG#Die_Adapterplatine Siehe hier.]&lt;br /&gt;
&lt;br /&gt;
== Hardware-Beschaltung ==&lt;br /&gt;
&lt;br /&gt;
Der STM32 benötigt für den Betrieb nur (Minimalbeschaltung):&lt;br /&gt;
&lt;br /&gt;
* VCC 2..3,3V (je nach Typ)&lt;br /&gt;
* AVCC 2..3,3V (sehr wichtig, der STM32 lässt sich ohne diese Spannung nicht programmieren)&lt;br /&gt;
* GND&lt;br /&gt;
* Reset Pin 100nF nach GND (ein Pull-Up Widerstand von ca. 40k ist intern vorhanden)&lt;br /&gt;
* [[#Bootmodi|Boot-Pins]]&lt;br /&gt;
&lt;br /&gt;
ansonsten nur ein paar einzelne Cs 100nF an VCC/GND.&lt;br /&gt;
&lt;br /&gt;
Um Programmieren zu können wird entweder noch die serielle Schnittstelle (Programmieren über den vorprogrammierten Bootloader) oder JTAG oder die SWD Schnittstelle benötigt.&lt;br /&gt;
&lt;br /&gt;
=== Bootmodi ===&lt;br /&gt;
Unterschiedliche Bootmodi lassen sich mittels der PINs BOOT0 und BOOT1 auswählen . Siehe Application Note [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Attachments/18225/AN2606.pdf AN2606]. Außer F1 besitzen neuere Familien ein SYSCFG_MEMR Register. In dieses Register kann man die gewünschten Boot0/1 Werte schreiben und nach einem Core-Reset (!= System_Reset) startet der Prozessor im gewünschten Mode. Eine Neu- bzw. Deinitialisierung der Peripherie empfiehlt sich! &lt;br /&gt;
&lt;br /&gt;
==== Boot from FLASH ====&lt;br /&gt;
Startadresse wird von 0x08000004 geladen&lt;br /&gt;
 BOOT0 Lo&lt;br /&gt;
 BOOT1 X &lt;br /&gt;
&lt;br /&gt;
==== Boot from SRAM ====&lt;br /&gt;
PC Startadresse wird an 0x200001E0 direkt angesprungen.&lt;br /&gt;
 BOOT0 Hi&lt;br /&gt;
 BOOT1 Hi&lt;br /&gt;
Da der interne FLASH der stm32f1x laut Datenblatt nur für 1000 Schreibvorgänge ausgelegt ist, kann mittels BOOT0 (High) und BOOT1 (High) auch aus dem zuvor mit dem Debugger (JTAG/SWD) beschriebenen SRAM booten. &lt;br /&gt;
Hierbei gilt zu beachten:&lt;br /&gt;
 VTOR auf die NVIC Tabelle im SRAM vor dem auslösen des ersten Interrupts remappen.&lt;br /&gt;
&lt;br /&gt;
 Um ein vergleichbares Startverhalten zum FLASH zu erreichen, empfiehlt es sich,&lt;br /&gt;
 0xF1E0F85F an 0x200001E0 zu schreiben. Diese implizite Ausführung von &amp;quot;ldr.w pc,&lt;br /&gt;
 [pc, #-0x01E0]&amp;quot; beim Start erzwingt ein laden der Startadresse von 0x20000004.&lt;br /&gt;
&lt;br /&gt;
==== Boot from SYSMEM (RS232, CAN und USB) ====&lt;br /&gt;
PC Startadresse wird von 0x1FFFF004 geladen&lt;br /&gt;
 BOOT0 Hi&lt;br /&gt;
 BOOT1 Lo&lt;br /&gt;
&lt;br /&gt;
Ab F2 gibt es auch ein SYSCFG_MEMRMR Register. Schreibt man hier den Wert für &amp;quot;System Flash&amp;quot; und macht einen Corereset (keinen Systemreset), so landet man auch im Bootloader, unabhängig vom Wert der Boot Pins.&lt;br /&gt;
&lt;br /&gt;
Auch ohne JTAG lässt sich ein STM32 programmieren (Bootloader-Aktivierung). Dabei stehen, je nach CPU-Typ, verschiedene Möglichkeiten zur Verfügung:&lt;br /&gt;
* RS-232 (bisher alle STMs)&lt;br /&gt;
* USB (alle USB fähigen CPUs &amp;gt; F103)&lt;br /&gt;
* CAN (wie USB nur in bestimmten MCUs)&lt;br /&gt;
&lt;br /&gt;
3 zusätzliche Verbindungen müssen auf dem Board gepatcht werden. Für einen Test geht es auch mit Tastern für RESET und BOOT0.&amp;lt;br&amp;gt;&lt;br /&gt;
RESET=RTS (L-aktiv)&amp;lt;br&amp;gt;&lt;br /&gt;
BOOT0=DTR (H-aktiv)&amp;lt;br&amp;gt;&lt;br /&gt;
BOOT1=LOW&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Details sind hier im Forum: [http://www.mikrocontroller.net/topic/141711 STM32 Programmiertool]&lt;br /&gt;
&lt;br /&gt;
Tools für den Download über den STM32-Bootloader:&lt;br /&gt;
* [http://www.st.com/web/en/catalog/tools/PF257525 STSW-MCU005 STM32 and STM8 Flash loader demonstrator]&lt;br /&gt;
* [https://code.google.com/p/stm32flash/ stm32flash] - Open source flash program (RS-232)&lt;br /&gt;
* [http://dfu-util.sourceforge.net/ dfu-util] - Open source flash program (USB)&lt;br /&gt;
&lt;br /&gt;
== Bewertung ==&lt;br /&gt;
=== Vorteile ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber ARM7:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Interrupt-Controller jetzt Teil des Prozessors (als Core Peripheral), die Vector Table ist jetzt eine echte Vektortabelle, keine Sprungliste wie bei ARM7. Durch Automatismen zwischen Core und NVIC (auto register save r0..r3, lr, sp, pc) bei Interrupt Entry wird eine deutlich schnellere Ausführungszeit bei Interrupts erreicht. Der Interrupt Code muss sich nicht mehr selbst um die Sicherung der o.g. Register kümmern und eine besondere Konfiguration der Handler im Compiler entfällt. Sind vor Beendigung einer ISR (d.h. Rücksprung zum User Code) weitere Interrupts pending, so werden diese ausgeführt, ohne dass eine komplette pop-push-sequenz der Register notwendig ist. Schön beschrieben ist es hier im [http://www.hitex.com/fileadmin/pdf/insiders-guides/stm32/isg-stm32-v18d-scr.pdf Insider&#039;s Guide] unter 2.4.5 / Seite 20.&lt;br /&gt;
* Thumb-2 Befehlssatz, deutlich schneller als Thumb-1 und ebenso kompakt&lt;br /&gt;
* Weniger Pins für Debugging benötigt durch SWD&lt;br /&gt;
* Mehr Hardware Breakpoints machen debuggen einfacher&lt;br /&gt;
* Software ist einfacher weil die Umschaltung zwischen ARM Mode und Thumb Mode wegfällt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber LPC1700 und LPC1300:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Flexiblere Gehäuseformen mit mehr Peripherie bei kleinen Gehäusen&lt;br /&gt;
* FW-Lib für alle STM32 gleich, alle AppNotes/Demos beziehen sich auf diese eine FW-Lib was die Entwicklung der eigenen Applikation sehr beschleunigt.&lt;br /&gt;
* Genauerer und flexiblerer ADC, insbesondere gegenüber LPC1300&lt;br /&gt;
* Flexiblere Varianten der Peripherie &amp;gt;&amp;gt; bei weniger einen deutlichen Preisvorteil&lt;br /&gt;
* ab 0,85 EUR (Stand 2010) Allerdings gibts den LPC1100 mit Cortex-M0 schon ab 0,65 $!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber SAM3/4:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Fast alle Pins sind 5-Volt tolerant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber anderen &amp;quot;Kleinen&amp;quot; wie z.B. PIC, Atmel usw.&#039;&#039;&#039;&lt;br /&gt;
* nahezu gleicher Preis bei Hobby Anwendungen&lt;br /&gt;
* 32 Bit ohne Umwege in Assembler rechenbar&lt;br /&gt;
* Schnelle direkte Offset-Adressierung ermöglicht effizienten Zugriff auf Stack-Variablen, lokal gespeicherte Flash-Konstanten, struct/Array-Elemente&lt;br /&gt;
* Einfache einheitliche Adressierung des gesamten Adressraums, d.h. Pointer auf Peripherieregister, RAM &amp;amp; Flash können exakt gleich behandelt werden, keinerlei Banking/Umschalt-Mechanismen erforderlich auch bei großem Flash/RAM&lt;br /&gt;
* Interrupt-Prioritäten und Prioritätsgruppen&lt;br /&gt;
* Effiziente Pointerarithmetik da Registerbreite=Adressbreite&lt;br /&gt;
* bessere Peripherie wie USB, Ethernet, Vielzahl an Timern&lt;br /&gt;
* der ARM-Core hat eine höhere Taktfrequenz und kann gleichzeitig mehr in weniger Takten berechnen&lt;br /&gt;
* Hardware-Division, bei einigen FPU zur effizienten float-Berechnung&lt;br /&gt;
* Mit größerem Flash/RAM verfügbar&lt;br /&gt;
* Code kann direkt aus dem RAM ausgeführt werden, Speicherschutz und privilegierter Ausführungsmodus können &amp;quot;Kernel&amp;quot;- vor &amp;quot;Anwendungs&amp;quot;-Code schützen, somit wird das dynamische Nachladen von Anwendungen aus externem Speicher effizient &amp;amp; sicher möglich&lt;br /&gt;
* ... und weitere 1000 Punkte ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Links&#039;&#039;&#039;&lt;br /&gt;
* [http://www.arm.com/files/pdf/ARM_Microcontroller_Code_Size_%28full%29.pdf Code Size Analyse zwischen verschiedenen µC]&lt;br /&gt;
&lt;br /&gt;
=== Nachteile ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil gegenüber LPC1700:&#039;&#039;&#039;&lt;br /&gt;
* STM32F1xx: nur 72 MHz statt 100 MHz (LPC1759: 120 MHz) Taktfrequenz; STM32F2xx hat diesen Nachteil nicht (ebenfalls 120MHz, STM32F4xx mit 180MHz)&lt;br /&gt;
* Der LPC1700 besitzt deutlich mehr Mechanismen, um die Auswirkung der Waitstates des Flash-ROMs auf Code- und Datenzugriffe zu reduzieren und das bedeutet mehr Performance bei gleicher Taktfrequenz. Beim STM32F2 entfällt dieser Nachteil wohl aufgrund des ART Accelerators. &lt;br /&gt;
* Alle LPC1xxx haben 32 Bit Timer. Bei den STM32 haben das nur die STM32F2xx und STM32F4xx (2 Stück)&lt;br /&gt;
* I2S Einheit von ST hat keinen FIFO und im 24/32Bit Modus müssen 2x16Bit Halbwörter übertragen werden. Wobei allgemein bei neuen ARM Prozessoren die vorhandenen DMA-Kanäle (basierend auf eigenen BUS-Kanälen und Speicherzugriffen) FIFO in beliebiger Größe bedeutet. (Gilt nicht bei bestimmten STM32F4xx)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil für Hobby-Anwender&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Nicht direkt &amp;quot;Steckbrettauglich&amp;quot;, da kein DIL Gehäuse verfügbar. Der ebay-Shop dipmicro führt jedoch sehr günstige Lötadapter für Umsetzung von LQFP48 auf DIP48. QFP64 in 0.5mm Pinabstand und nicht 0.8mm wie AVR. Von NXP gibt es Cortex-M0 µC im DIL Gehäuse.&lt;br /&gt;
&lt;br /&gt;
* Viel Peripherie, Clocks müssen alle richtig eingestellt werden, ggf. Anpassung des Startup Codes usw.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Errata, Tipps und Tricks ==&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* AD-Wandler PA0: Im Errata steht, dass hier Fehler in der Wandlung entstehen könnten, also einen anderen Pin verwenden.&lt;br /&gt;
* CAN-Bus PD0/PD1: Remap geht erst ab der 100-Pin-Version. Steht im RM0008 unter 9.3.3.: &amp;quot;CAN1 alternate function remapping&amp;quot;. Alle Infos von RM0008 9.3.x sind interessant&lt;br /&gt;
* CAN und USB sind bei der F1 Serie nur bei der &amp;quot;◦Connectivity-Line&amp;quot; gleichzeitig nutzbar. Siehe Datenblätter.&lt;br /&gt;
* Mit internem RC-Oszillator kann die CPU mit maximal 64MHz betrieben werden. Mit einem externen Quarz sind dann 72MHz möglich.&lt;br /&gt;
* Für USB Betrieb muss die CPU mit 48MHz oder 72MHz betrieben werden (bei STM32F1xx).&lt;br /&gt;
* Der Idle Interrupt vom Usart wird zwar ausgelöst, aber nicht vom entsprechenden Statusflag angezeigt&lt;br /&gt;
* Der DMA fängt beim aktivieren immer von vorn an zu zählen, auch wenn er nur kurz angehalten wurde&lt;br /&gt;
* STM32F2xx hat kein Flash Size Register, bei STM32F4xx ist zwar ein flash Size Register beschrieben, kollidiert aber in der Adresse mit einem anderen Register&lt;br /&gt;
* Derivate mit internem EEPROM und nur einer Speicherbank haben das &amp;quot;Feature&amp;quot; bei write/erase des Data-Flashes (EEPROM) einen kompletten stall der code execution zu verursachen (inkl. ISR&#039;s, DMA). Desgleichen bei write/erase des internen Flash (ISP-routinen, EEPROM-Emulation).&lt;br /&gt;
* Der I2C hat diverse Fehler, welche im Errata des jeweiligen Modells (z.B. [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/errata_sheet/CD00238166.pdf STM32F105xx and STM32F107xx Errata sheet] ) zu finden sind. Workarounds hierzu finden sich in der Application Note [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/CD00209826.pdf AN2824]. Am Besten benutzt man jedoch die I2C Communication peripheral application library (CPAL) von ST ([http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF258336 STSW-STM32127])&lt;br /&gt;
* [http://blog.frankvh.com/category/stm32/ weitere undokumentierte Features]&lt;br /&gt;
* Interrupt-Flags in Statusregistern der diversen Peripherals wie der Timer müssen zu &#039;&#039;&#039;Beginn&#039;&#039;&#039; (bzw. möglichst weit vor dem Return) der ISR zurückgesetzt werden, da die ISR sonst eventuell 2x ausgeführt wird (Siehe [https://my.st.com/public/Faq/Lists/faqlst/DispForm.aspx?ID=143&amp;amp;level=1&amp;amp;objectid=141 STM32 FAQ] und [http://www.mikrocontroller.net/topic/312393#new Forum]).&lt;br /&gt;
&lt;br /&gt;
=== Software ===&lt;br /&gt;
==== GCC ====&lt;br /&gt;
Um den GCC direkt zu verwenden (zB. mit selbstgebautem makefile), falls man das nicht von einer Entwicklungsumgebung machen lässt, siehe zunächst [[ARM GCC]]. STM32-spezifisches ist:&lt;br /&gt;
* Wird die [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] und ein Quarz verwendet, so muss noch per Präprozessor-Definition die Frequenz des Quarzes angegeben werden mittels z.B. -DHSE_VALUE=8000000 für 8MHz (wie auf dem STM32F4 Discovery).&lt;br /&gt;
&lt;br /&gt;
===== Startupcode &amp;amp; Linkerscript =====&lt;br /&gt;
* Damit der compilierte Code an den richtigen Stellen im Controller landet (d.h. dem Flash) muss man dem Linker ein Linkerscript mitgeben. Dies geht per &amp;quot;-T &#039;&#039;pfad_zum_linkerscript.ld&#039;&#039;&amp;quot; an den Linker-Befehl. Im Archiv der [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] befindet sich ein Beispiel-Linkerscript für die Atollic TrueSTUDIO IDE, dieses kann direkt mit dem GCC verwendet werden. Beispielsweise für den STM32F4 befindet sich das Script im Pfad &amp;quot;/STM32F4xx_DSP_StdPeriph_Lib_V1.1.0/Project/STM32F4xx_StdPeriph_Templates/TrueSTUDIO/STM324x7I_EVAL/stm32_flash.ld&amp;quot; des Archives.&lt;br /&gt;
* Damit beim Starten die richtigen Initialisierungen vorgenommen werden (wie globale Variablen und bei C++ Konstruktoren globaler Objekt-Instanzen) muss als erstes ein Startupcode laufen, der dann die main()-Funktion aufruft. Der Startupcode ist meistens in Assembler geschrieben, C-Code ist aber auch möglich. Im Archiv der [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] befindet sich ein Beispiel-Startupcode für die Atollic TrueSTUDIO IDE, dieser kann direkt mit dem GCC verwendet werden. Beispielsweise für den STM32F4 befindet sich der Code in Assemblerform im Pfad &amp;quot;/STM32F4xx_DSP_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO/startup_stm32f40xx.s&amp;quot; des Archives. Der Assemblercode kann per arm-none-eabi-as (Flags s.o.) assembliert werden, die resultierende .o -Datei normal mitgelinkt.&lt;br /&gt;
&lt;br /&gt;
Zusammen bieten die beiden Dateien der Anwendung ein Standard-C-Interface, d.h. man kann wie gewohnt globale Variablen verwenden und seinen Code in die main()-Funktion schreiben.&lt;br /&gt;
&lt;br /&gt;
=== Tipps für Umsteiger von Atmel/PIC/8051 ===&lt;br /&gt;
* Prozessortakt hat unterschiedliche Taktquellen und eine PLL.&lt;br /&gt;
* Alle Peripheriemodule haben einen extra Clock, den man aktivieren muss.&lt;br /&gt;
* Wenn man z.B. einen UART benutzen möchte, so muss man den Clock vom UART, Alternate Function IO (AFIO) und dem GPIO-Port aktivieren.&lt;br /&gt;
* Ansonsten hat man nahezu doppelt so viele Möglichkeiten in den Peripheriemodulen.&lt;br /&gt;
* Interrupt-Flags müssen in der ISR selber gelöscht werden&lt;br /&gt;
* Forum zu [http://www.mikrocontroller.net/topic/175888 Interrupts vs. Events]&lt;br /&gt;
&lt;br /&gt;
=== Errata vom STM32F4xx die nicht im Errata von ST stehen ===&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/267439#2788478 Aktivieren von DMA], wenn mehr als 3 DMA Kanäle aktiviert werden, kann es sein dass die nicht alle korrekt bedient werden. Auch klappt der DMA mit dem FSMC nicht immer zuverlässig. [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FWarning%20limit%20simultaneous%20DMAs%20to%202&amp;amp;FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&amp;amp;currentviews=811 siehe hier] [http://blog.frankvh.com/2012/01/13/stm32f2xx-stm32f4xx-dma-maximum-transactions/ und hier]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/260637#2700761 Nerviger Bug in &amp;quot;stm32f4xx.h&amp;quot;] Änderung Struktur GPIO_TypeDef&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/261690#2714754 Batterie wird leer gezogen], nur bei manchen Chips mit Rev. A&lt;br /&gt;
* [http://www.efton.sk/STM32/STM32F4xx_doc_errors.txt Liste von Dokumentations-Fehlern]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
Versand Europaweit im endasmedia.ch Shop&lt;br /&gt;
* STM32F105 Controller für 2.50€ [http://shop.endasmedia.ch/index.php?id_product=8&amp;amp;controller=product&amp;amp;id_lang=1 shop.endasmedia.ch]&lt;br /&gt;
&lt;br /&gt;
Versandhäuser für Privatpersonen&lt;br /&gt;
* [http://www.reichelt.de/STM-Controller/2/index.html?;ACTION=2;LA=2;GROUPID=2950; Reichelt]&lt;br /&gt;
* [http://darisusgmbh.de/shop/index.php?cat=c2692_ARM-Cortex.html Darisus]&lt;br /&gt;
* [http://www.hbe-shop.de HBE (Farnell Programm für Private)] &lt;br /&gt;
* [http://www.sander-electronic.de/be00069.html Sander]&lt;br /&gt;
* [http://www.tme.eu/de/katalog/index.phtml#cleanParameters%3D1%26search%3DSTM32F10%26bf_szukaj%3D+ TME] &lt;br /&gt;
* [http://teske-electronics.de/index.php?cPath=3_9_53 Teske electronics]&lt;br /&gt;
* [http://de.rs-online.com/web/c/halbleiter/prozessoren-und-mikrocontroller/mikrocontroller/?sort-by=default&amp;amp;sort-order=default&amp;amp;applied-dimensions=4294417325&amp;amp;lastAttributeSelectedBlock=4294425895 RS-Online]&lt;br /&gt;
&lt;br /&gt;
Gewerblich liefern natürlich viele wie EBV, [http://de.futureelectronics.com Future Electronics], Mouser, Farnell, Digikey usw...&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
* Siehe [[:Kategorie:ARM-Boards]]&lt;br /&gt;
* [http://shop.embedded-projects.net/index.php?module=artikel&amp;amp;action=gruppe&amp;amp;id=14 Im Shop von Embedded Projects]&lt;br /&gt;
* [http://www.watterott.com/de/Boards-Kits/ARM/ARM-Cortex-M3 Cortex M3 bei Watterott]&lt;br /&gt;
* [http://www.raisonance.com/~primer-starter-kits__microcontrollers__tool~tool__T018:4enfvamuxbtp.html Primer und Primer2 von Raisonance]&lt;br /&gt;
* [http://www.sander-electronic.de/es0028.html Sander Electronic]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/MP32F103-Stick:_Ein_Mini-Mikrocontroller-Board_mit_USB_und_bis_zu_4MB_Datenspeicher Artikel im Wiki, ARM mit USB und 4MB Speicher]&lt;br /&gt;
* [http://www.futurlec.com/STM32_Development_Board.shtml Futurlec Evalboard, ebenso Header-Board]&lt;br /&gt;
* [http://www.propox.com/products/t_174.html Propox, Header-Boards für 103R und 103V sowie Trägerplatine dafür]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Cortex_M3_OCM3U Cortex M3 Artikel im Wiki]&lt;br /&gt;
* [http://olimex.com/dev/index.html STM32 bei Olimex]&lt;br /&gt;
* [http://de.farnell.com/jsp/displayProduct.jsp?sku=1824325&amp;amp;action=view&amp;amp;CMP=GRHS-1000962 STM32Discovery bei Farnell] Mikrocontroller Board (STM32F100RBT6B) mit onboard USB-Programming Interface für ca. 12,50€&lt;br /&gt;
* [http://www.de.rs-online.com/web/p/products/7458434/ STM32Discovery bei RS-Components] 12,65 € +MwSt.&lt;br /&gt;
* [http://www.segor.de/#Q=STM32 VL DISCOVERY] STM32 Discovery bei Segor&lt;br /&gt;
* [http://www.watterott.com/de/STM32F4Discovery STM32F4DISCOVERY] STM32F4 Cortex M4 Controller mit JTAG-Debugger auf der Platine bei Watterott für 16,66EUR.&lt;br /&gt;
* [http://www.conrad.de/ce/de/product/443910/ STM32F4 Discovery Kit bei Conrad] 17,11 €&lt;br /&gt;
* [http://www.ST.com/stm32l152c-discovery STM32 L1 Discovery] mit kleiner LCD-Anzeige; [http://www.ST.com/web/en/catalog/tools/PF250990 Weitere Informationen dazu]&lt;br /&gt;
* [http://www.mcu-raisonance.com/~open4-development-platform__microcontrollers__tool~tool__T018:g65gu6ghg2n.html/ Open 4 oder auch genannt Evo-Primer]&lt;br /&gt;
* [http://www.wayengineer.com/index.php?main_page=index&amp;amp;cPath=50_66&amp;amp;page=1&amp;amp;sort=3a WayEngineer]&lt;br /&gt;
* [http://thinkembedded.ch/ST-STMicroelectronics:::24.html Im Thinkembedded Shop] in der Schweiz / DiscoveryF4, div. ETT und Olimex Boarde ab 20,18 CHF / 16,15 EUR (inkl. MwSt.) zzgl. Versandkosten&lt;br /&gt;
* [http://shop.myavr.de/ARM-Produktlinie/STM32F4-Discovery.htm?sp=article.sp.php&amp;amp;artID=200072 Im myAVR Shop] DiscoveryF4 mit möglichem Zubehör 16,45 EUR (inkl. MwSt.) zzgl. Versandkosten&lt;br /&gt;
* [http://www.keil.com/boards/cortexm.asp Keil/ARM Demoboards]&lt;br /&gt;
* [http://www.phytec.de Phytec]&lt;br /&gt;
* [http://shop.myavr.de/index.php?sp=artlist_kat.sp.php&amp;amp;katID=37 verschiedene ARM Produkte und Erweiterungen bei myAVR]&lt;br /&gt;
* [http://re.reworld.eu/de/produkte/s64dil-405/index.htm S64DIL-405 STM32Fxxx ARM Cortex M3 Mikrocontrollermodul mit USB-Schnittstelle, Steckbretttauglich] (Leerplatine eignet sich auch für STM32F1xx Prozessoren.)&lt;br /&gt;
* [http://www.amazon.de/STM32F4-DISCOVERY-STM32F429-Cortex-M4-Development/dp/B00HGG0KHY STM32F429 DISCOVERY Cortex M4 mit 2,4&amp;quot; Touch-TFT, 3-Achs Sensor, 64 MBit SDRAM ab ~25 EUR bei Amazon, Ebay u.a.]&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities, Tutorials ==&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/STM32_-_Einstieg_mit_Em::Blocks STM32 - Einstieg mit Em::Blocks Tutorial]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/173753 Diskussion zum Artikel]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/mikrocontroller-elektronik?filter=ARM*+STM32*+Cortex* Suche im Forum]&lt;br /&gt;
* [[STM32 für Einsteiger]]&lt;br /&gt;
* [[STM32 CooCox Installation]]&lt;br /&gt;
* [https://my.st.com/public/STe2ecommunities/mcu/Lists/ARM%20CortexM3%20STM32/AllItems.aspx Forum auf der ST Homepage] &lt;br /&gt;
* [http://www.stm32circle.com/hom/index.php STM32 Community] &lt;br /&gt;
*[http://joe-c.de/pages/posts/einstieg_mikrocontroller_stm32f103_101.php Einstieg:  STM32board mit Kamera (deutsch)] &lt;br /&gt;
* [http://www.ebv.com/fileadmin/products/Press_Print/Brochures/Product_Brochures/EBV_Cortex%20Collection_V2.pdf Übersicht der Cortex Prozessoren und deren Hersteller (nicht nur ST, von EBV)]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/258652 Tutorial]&lt;br /&gt;
* [http://diller-technologies.de/stm32_wide.html STM32 Tutorial in Deutsch von Diller Technologies]&lt;br /&gt;
* [http://mySTM32.de STM32 C und C++ Tutorial in Deutsch ]&lt;br /&gt;
* [http://mikrocontroller.bplaced.net STM32F4 Quellcode-Librarys und CooCox-Projekte in Deutsch ]&lt;br /&gt;
* [http://myugl.de Tutorial für Grafik-Librarys und SiSy-Projekte in Deutsch ]&lt;br /&gt;
* [http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1533/PF251717 MicroXplorer MCU graphical configuration tool ]&lt;br /&gt;
* [http://www.harerod.de/CoreMark_STM32.pdf Testbericht über CoreMark 1.0 auf Cortex-M3/M4 mit verschiedenen Compiler- und MCU-Einstellungen]&lt;br /&gt;
* [http://klaus4.blogspot.com/2014/05/stm32f4-discovery-mit-opensource.html STM32-Toolchain mit Eclipse CDT 4.3, GnuArmEclipse, OpenOCD 0.8.0, Gnu Arm GCC 4.8, STM32CubeMX]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:STM32]]&lt;br /&gt;
[[Kategorie:Mikrocontroller]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM_Cortex_Mikrocontroller&amp;diff=91594</id>
		<title>ARM Cortex Mikrocontroller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM_Cortex_Mikrocontroller&amp;diff=91594"/>
		<updated>2016-02-03T11:10:17Z</updated>

		<summary type="html">&lt;p&gt;Kichi: /* Compiler &amp;amp; Software (alphabetisch) sortiert */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Firma ARM stellt selbst keine Prozessoren/Controller her, sondern entwickelt nur sogenannte &amp;quot;IP-Cores&amp;quot;, die von Herstellern wie Atmel, Infineon, ST, NXP, TI und vielen anderen lizenziert werden. Diese Hersteller ergänzen den Core um Speicher und Peripherie. Der Vorteil dieses Modells ist, dass dadurch sehr viele Prozessoren mit unterschiedlichster Ausstattung verfügbar sind, die alle mit dem selben Befehlssatz (und damit dem selben Compiler) programmierbar sind.&lt;br /&gt;
&lt;br /&gt;
Allen ARM-Cores gemeinsam ist die 32 Bit RISC-Architektur. Für diese gibt es den klassischen 32bit ARM Befehlssatz und den zusätzlichen, kleineren 16/32 Bit &#039;&#039;&#039;Thumb&#039;&#039;&#039;-Befehlssatz. Die verschiedenen Prozessoren/Controller unterstützen einen oder beide davon. Thumb-fähige Controller sind erkennbar am &#039;&#039;&#039;T&#039;&#039;&#039; in der Bezeichnung, z.&amp;amp;nbsp;B. ARM7&#039;&#039;&#039;T&#039;&#039;&#039;DMI. Thumb kodiert die meisten Instruktionen in 16bit, den Rest in 32bit, was in einem kleineren Prozessor und geringenem Platzbedarf des Codes resultiert [http://www.arm.com/files/pdf/ARM_Microcontroller_Code_Size_%28full%29.pdf]; der Nachteil ist die etwas niedrigere Geschwindigkeit. Die Cortex-M Kerne unterstützen ausschließlich den Thumb2-Befehlssatz.&lt;br /&gt;
&lt;br /&gt;
Seit einigen Jahren sind ARM-basierte Mikrocontroller erhältlich, die aufgrund der vergleichbar einfachen Beschaltung und niedrigem Stromverbrauch eine echte Alternative zu 8-Bit-Controllern wie dem [[AVR]] darstellen. Die ersten Controller mit diesen Eigenschaften verwendeten den ARM7TDMI-Kern (zB. LPC2000) (ARMv4T-Architektur). Mittlerweile wurden diese vom Cortex M-Kern abgelöst (ARMv6M, ARMv7M-Architektur), welcher in verschiedenen Varianten für verschiedene Einsatzzwecke verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;In diesem Artikel geht es primär um die ARM Cortex-M Mikrocontroller, weniger um ARM [[Cortex-A]] Prozessoren, welche in Smartphones, [[Raspberry Pi]] u.ä. eingesetzt werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es gibt folgende Varianten des Cortex-M Mikrocontroller-Kerns, aufgeführt vom energieeffizientesten zum leistungsfähigsten.&lt;br /&gt;
&lt;br /&gt;
== ARM Cortex M0/M0+ ==&lt;br /&gt;
Als günstigste und energieeffizienteste Variante gibt es die Cortex-M0 Cores mit deutlich kleinerem Befehlssatz als z.B. Cortex-M3. Diese&lt;br /&gt;
werden beispielsweise in folgenden Controllern eingesetzt:&lt;br /&gt;
&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1588.jsp?WT.ac=fp_may12_stm32f0 STM32F0] von [http://www.st.com STMicro], siehe &#039;&#039;&#039;[[STM32|STM32 hier im Wiki]]&#039;&#039;&#039;&lt;br /&gt;
* [http://ics.nxp.com/products/lpc1000/lpc11xx/ LPC11xx] von [http://www.nxp.com NXP], siehe &#039;&#039;&#039;[[LPC1xxx|LPC1xxx hier im Wiki]]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.infineon.com/XMC1000 XMC1000] von [http://www.infineon.com Infineon], siehe &#039;&#039;&#039;[[XMCxxxx|XMCxxxx hier im Wiki]]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.nuvoton.com/NuvotonMOSS/Community/ProductInfo.aspx?tp_GUID=5dbf7d7a-b6df-4fe1-91c9-063449500ce7 NuMicro-Controller] von Nuvoton (ex Winbond), laut Datenblatt mit 2.5-5.5V Betriebsspannung!&lt;br /&gt;
* [http://www.cypress.com/PSOC4  PSOC4 Familie] von [http://www.cypress.com  Cypress]&lt;br /&gt;
Für die M0-Familie ist für den LPC1xxx bereits eine &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Codebase_f%C3%BCr_LPC1xxx#Allgemeine_Informationen_zum_Aufbau_der_Code_Base Code-Base]&#039;&#039;&#039;  und ein preisgünstiges &#039;&#039;&#039;[http://www.mikrocontroller.net/wikisoftware/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso Entwicklungskit]&#039;&#039;&#039; vorhanden.&lt;br /&gt;
&lt;br /&gt;
Inzwischen gibt es auch eine optimierte Version des Cortex-M0 - die Cortex-M0+ Cores. Diese können (optional) einige Features der Cortex-M3 Serie beinhalten, wie z.B eine MPU:&lt;br /&gt;
&lt;br /&gt;
* [http://www.silabs.com/products/mcu/32-bit/efm32-zero-gecko/pages/efm32-zero-gecko.aspx EFM32 Zero Gecko] und [http://www.silabs.com/products/mcu/32-bit/efm32-happy-gecko/pages/efm32-happy-gecko.aspx EFM32 Happy Gecko] von [http://www.silabs.com Silicon Labs], siehe &#039;&#039;&#039;[[EFM32|EFM32 hier im Wiki]]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.nxp.com/products/microcontrollers/cortex_m0plus/lpc800/ LPC8xx] von [http://www.nxp.com NXP]&lt;br /&gt;
* [http://www.freescale.com/webapp/sps/site/taxonomy.jsp?code=KINETIS_L_SERIES Kinetis L-Serie] und [http://www.freescale.com/webapp/sps/site/taxonomy.jsp?code=KINETIS_M_SERIES Kinetis M-Serie] von [http://www.freescale.com/ Freescale]&lt;br /&gt;
* [http://www.fujitsu-fm-family.com/products/fm0.html angekündigte FM0+ Familie] von [http://www.fujitsu.com/emea/services/microelectronics Fujitsu]&lt;br /&gt;
* [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1817?icmp=ss1817_pron_pr_feb2014 angekündigte M0+ Familie] von [http://st.com  STMicroelectronics]&lt;br /&gt;
* [http://www.atmel.com/Microsite/samd/default.aspx?utm_campaign=February_2014_Newsletter.html&amp;amp;utm_medium=email&amp;amp;utm_source=Eloqua  SAM D Familie] von [http://atmel.com  Atmel]&lt;br /&gt;
* [http://www.cypress.com/PSOC4  PSOC4 Familie] von [http://www.cypress.com  Cypress]&lt;br /&gt;
&lt;br /&gt;
== ARM Cortex M3 ==&lt;br /&gt;
Der erste Kern der Cortex M-Reihe war der Cortex-M3. Dieser ist vom Leistungsniveau her am ehesten mit seinem Vorgänger, dem ARM7TDMI vergleichbar.&lt;br /&gt;
&lt;br /&gt;
Controllerfamilien dieser Klasse sind:&lt;br /&gt;
&lt;br /&gt;
* [http://www.silabs.com/products/mcu/32-bit/efm32-tiny-gecko/pages/efm32-tiny-gecko.aspx EFM32 Tiny Gecko], [http://www.silabs.com/products/mcu/32-bit/efm32-gecko/pages/efm32-gecko.aspx EFM32 Gecko], [http://www.silabs.com/products/mcu/32-bit/efm32-leopard-gecko/pages/efm32-leopard-gecko.aspx EFM32 Leopard Gecko] sowie [http://www.silabs.com/products/mcu/32-bit/efm32-giant-gecko/pages/efm32-giant-gecko.aspx EFM32 Giant Gecko] von [http://www.silabs.com Silicon Labs] , siehe &#039;&#039;&#039;[[EFM32|EFM32 hier im Wiki]]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.nxp.com LPC13xx/LPC17xx/LPC18xx] von NXP oder die inzwischen schon sehr ausführliche, siehe &#039;&#039;&#039;[[LPC1xxx|LPC1xxx hier im Wiki]]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.ti.com/lsds/ti/microcontroller/tiva_arm_cortex/c_series/tm4c_arm_cortex-m4/overview.page TIVA] von [http://www.ti.com Texas Instruments] (vormals Stellaris, vormals Luminary Micro)&lt;br /&gt;
* [http://www.atmel.com/products/at91/sam3landing.asp?family_id=605 AT91SAM3] von Atmel&lt;br /&gt;
* [http://www.st.com/internet/mcu/family/141.jsp STM32] Baureihen [http://www.st.com/internet/mcu/subclass/1169.jsp F1]/[http://www.st.com/internet/mcu/subclass/1520.jsp F2]/[http://www.st.com/internet/mcu/subclass/1376.jsp L1]/[http://www.st.com/internet/mcu/subclass/1377.jsp W] von STMicroelectronics , siehe &#039;&#039;&#039;[[STM32|STM32 hier im Wiki]]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.toshiba-components.com/microcontroller/TMPM330.html TMPM330] von Toshiba&lt;br /&gt;
* [http://www.spansion.com/Products/microcontrollers/32-bit-ARM-Core/fm3/Pages/FM3-family.aspx FM3] von [http://www.spansion.com Spansion] (vormals Fujitsu)&lt;br /&gt;
* [http://www.holtek.com.tw/english/products/32bit_flashmcu.htm HT32] von Holtek Semiconductor&lt;br /&gt;
* [http://www.cypress.com/PSOC5 PSOC5] von Cypress&lt;br /&gt;
&lt;br /&gt;
Für den LPC1xxx ist bereits eine &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Codebase_f%C3%BCr_LPC1xxx#Allgemeine_Informationen_zum_Aufbau_der_Code_Base Code-Base]&#039;&#039;&#039;  und ein preisgünstiges &#039;&#039;&#039;[[LPC1xxx_Entwicklungskit_LPCXpresso]]&#039;&#039;&#039; vorhanden.&lt;br /&gt;
&lt;br /&gt;
== ARM Cortex M4 ==&lt;br /&gt;
Als hoch performante Variante gibt es dann noch die Cortex-M4 Cores welche mit zusätzlichen [[DSP]]-Funktionen und teilweise einer (single precision) FPU ausgestattet sind. &lt;br /&gt;
&lt;br /&gt;
Diese werden beispielsweise in folgenden Controllern eingesetzt:&lt;br /&gt;
* [http://www.freescale.com/webapp/sps/site/overview.jsp?code=ARM Kinetis Series] von Freescale&lt;br /&gt;
* [http://www.silabs.com/products/mcu/32-bit/efm32-wonder-gecko/pages/efm32-wonder-gecko.aspx EFM32-Wonder Gecko] von [http://www.silabs.com Silicon Labs], siehe &#039;&#039;&#039;[[EFM32|EFM32 hier im Wiki]]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.nxp.com LPC43xx] von NXP (Dual Core)&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1605.jsp STM32F3] von [http://www.st.com STMicro], siehe &#039;&#039;&#039;[[STM32|STM32 hier im Wiki]]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1521.jsp?WT.ac=p2_bn_jun12_stm32f4series STM32F4] von [http://www.st.com STMicro], siehe &#039;&#039;&#039;[[STM32|STM32 hier im Wiki]]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.ti.com/lsds/ti/microcontroller/tiva_arm_cortex/c_series/tm4c_arm_cortex-m4/overview.page Tiva C Series, TM4C] von [http://www.ti.com Texas Instruments]. Früher nannte Texas Instruments diese Controller &#039;&#039;Stellaris LM4F Series&#039;&#039;. 2013 begann TI mit einer große Umbenennung, bei der sogar neue Typenbezeichnung vergeben wurden. So wurde zum Beispiel aus dem LM4F230H5QR der TM4C123GH6PM. Gleichzeitig begann TI die Bezeichnung &#039;&#039;Stellaris&#039;&#039; aus Datenblättern, Software-Bibliotheken und Ähnlichem zu entfernen und durch &#039;&#039;Tiva&#039;&#039; zu ersetzen. Siehe auch [http://www.ti.com/lit/an/spma050a/spma050a.pdf].&lt;br /&gt;
* [http://www.infineon.com/XMC4000 XMC4000] von [http://www.infineon.com Infineon],  siehe &#039;&#039;&#039;[[XMCxxxx|XMCxxxx hier im Wiki]]&#039;&#039;&#039;, [[XMC4500|Artikel zum XMC4500]]&lt;br /&gt;
* [http://www.spansion.com/Products/microcontrollers/32-bit-ARM-Core/fm4/Pages/default.aspx FM4] von [http://www.spansion.com Spansion] (vormals Fujitsu)&lt;br /&gt;
* [http://www.atmel.com/products/at91/sam4landing.asp?family_id=605 AT91SAM4] von Atmel&lt;br /&gt;
&lt;br /&gt;
== ARM Cortex M7 ==&lt;br /&gt;
&lt;br /&gt;
Die neueste Variante der Cortex M-Reihe ist der M7, bei dem gegenüber dem M4 zahlreiche Features hinzukommen die die Brücke zu Anwendungsprozessoren schlagen: eine double precision-FPU, Code- und Daten-Cache, eine 6-stufige Pipeline mit Sprungvorhersage, und unterm Strich eine deutlich höhere Rechenleistung. Controller basierend auf dem Cortex M7 wurden u.a. von Atmel und ST angekündigt, sind aber noch nicht in Stückzahlen erhältlich. Der Cortex M7-Kern wird bereits von GCC unterstützt [https://launchpad.net/gcc-arm-embedded/+announcement/12983].&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/about/news/release.aspx?reference=tcm:26-63538 Pressemeldung von Atmel]&lt;br /&gt;
* [http://www.st.com/web/en/catalog/mmc/SC1169/SS1858 Produktseite der STM32F7-Serie von ST]&lt;br /&gt;
&lt;br /&gt;
== ARM7TDMI ==&lt;br /&gt;
Der Vorgänger der Cortex-M-Cores ist der &#039;&#039;&#039;ARM7&#039;&#039;&#039;TDMI. Controllerfamilien dieser Klasse sind immer noch weit verbreitet:&lt;br /&gt;
* NXP (ehemals Philips) [[LPC2000]] &lt;br /&gt;
* Atmel [[AT91SAM]]7&lt;br /&gt;
* Analog Devices [[ADuC7xxx]]&lt;br /&gt;
* [http://focus.ti.com/mcu/docs/mcuprodoverview.tsp?sectionId=95&amp;amp;tabId=203&amp;amp;familyId=454 Texas Instruments TMS470]&lt;br /&gt;
* SAMSUNG S3C24x0 [http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=229&amp;amp;partnum=S3C2410]&lt;br /&gt;
* STR7xx von ST Microelectronics [http://www.st.com/mcu/inchtml-pages-str7.html]&lt;br /&gt;
* und viele weitere&lt;br /&gt;
&lt;br /&gt;
Mehr Informationen zur ARM-Architektur finden sich in der [http://de.wikipedia.org/wiki/ARM-Architektur Wikipedia], weiterführende Links in der [[Linksammlung#ARM|Linksammlung]].&lt;br /&gt;
&lt;br /&gt;
== Compiler &amp;amp; Software ==&lt;br /&gt;
&lt;br /&gt;
=== [[ARM_GCC|GCC]] ===&lt;br /&gt;
Einer der beliebtesten Compiler für ARM-Prozessoren ist der GCC. Er kann sowohl ARM- als auch Thumb-Code erzeugen. Mehr dazu unter [[ARM GCC]].&lt;br /&gt;
&lt;br /&gt;
=== C/C++ IDEs ===&lt;br /&gt;
Kostenlose Entwicklungsumgebungen (überwiegend GCC-basiert):&lt;br /&gt;
* [http://www.coocox.org/CooCox_CoIDE.htm CooCox IDE] (Eclipse basierend)&lt;br /&gt;
* [http://www.emblocks.org/web/ EmBlocks IDE] (Basiert auf Code::Blocks)&lt;br /&gt;
** Compiler: GNU ARM-GCC (in der Installation enthalten), RealView und IAR &lt;br /&gt;
** Hardware: STlink (mit &amp;quot;Live data&amp;quot;), openOCD, Jlink. &lt;br /&gt;
** Project Import: CoIDE, uVision, Atmel studio, MplabX, Mplab 8&lt;br /&gt;
** OS aware debugging &lt;br /&gt;
***FreeRTOS&lt;br /&gt;
***ChibiOS/RT  &lt;br /&gt;
** Unterstützt sehr viele Controller(-Hersteller):&lt;br /&gt;
***Atmel-ARM&lt;br /&gt;
***NXP-ARM&lt;br /&gt;
***STMicro-ARM&lt;br /&gt;
***EnergyMicro-ARM&lt;br /&gt;
**Keine Beschränkungen&lt;br /&gt;
**Hier gehts zum &#039;&#039;[http://www.emblocks.org/web/downloads-main Download]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.emide.org/ emIDE] Windows, komplette Visual Studio artige Entwicklungsumgebung (basierend auf Code::Blocks) mit GCC und Debugger (Unterstützung für Adapter von Segger) &amp;lt;!-- Projekt eines Segger Mitarbeiters --&amp;gt;&lt;br /&gt;
* [https://mbed.org mbed]: eine kostenlose Online-Entwicklungsumgebung basierend auf dem ARM Realview-Compiler, mit einer umfangreichen C++-Bibliothek für die Controllerfunktionen, integrierter Versionsverwaltung, und vielen Beispielprogrammen. Projekte lassen sich für Keil/IAR/GCC exportieren und offline weiterbearbeiten; die Bibliotheksfunktionen sind Open Source und auch kommerziell einsetzbar.&lt;br /&gt;
* [http://www.isystem.com/products/software/winidea-open winIDEAOpen]Die Fa. iSystem stellt mit der winIDEAOpen nun eine kostenlose Entwicklungsumgebung für alle Cortex-M Bauteile zur Verfügung. Als Compiler wird der GNU GCC verwendet und auch gleich mitinstalliert. Die IDE ist recht intuitiv und mit einer umfangreichen Hilfe ausgestattet. Das Ganze funktioniert mit dem &amp;lt;u&amp;gt;GCC ohne Codesize Limit&amp;lt;/u&amp;gt; und auch ein Testwerkzeug (testIDEA) ist mit integriert. Hardwareseitig werden neben dem iSystem iTag50 [http://www.isystem.com/products/hardware/cortex-debugger/itag] auch die Segger J-Link Debug Probes sowie der ST-Link von ST unterstützt. Auf der Webseite von iSystem sind auch einige schöne Beispielprojekte für diverse Boards zu finden [http://www.isystem.com/download/winideaopen]. Demnächst soll noch die Unterstützung für die ARM und IAR Compiler hinzuzkommen. Hier gehts zum &#039;&#039;[http://www.isystem.com/download/winideaopen Download]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Infineon&#039;&#039;&#039; bietet für seine &#039;&#039;&#039;XMC&#039;&#039;&#039; Prozessorfamilien auch eine kostenlose, professionell gepflegte C/C++ Entwicklungsumgebung an, ohne Einschränkungen auf bestimmte Typen oder Speichergrößen - &amp;lt;u&amp;gt;alle erhältlichen XMC 1000er und 4000er Prozessoren werden unterstützt&amp;lt;/u&amp;gt;. Wenn man sich dazu noch eines der günstigen XMC Evaluierungsboards besorgt (XMC 1100 Bootkit, XMC 4500 Relax (lite) Kit o.ä.), hat man ein erstes Entwicklungssystem inklusive wiederverwendbaren HW-Debugger zur Verfügung. Die Entwicklungsumgebung basiert auf Eclipse, besitzt aber zahlreiche Erweiterungen samt Codegenerierung (sogenannte Apps), die gerade am Anfang viele Dinge abnehmen kann, da man die Peripherals damit einfach grafisch konfigurieren kann. Das ist bei Prozessoren, dessen User Manual einige hundert Seiten ausmacht (oder auch für Umsteiger von 8bitter oder anderen 32bittern), nicht unwichtig. Der generierte Code ist template-basiert, gut lesbar und kann später - wenn man mehr Erfahrung hat, für eigene Entwicklungen weiter nutzen und optimieren. Damit verliert man dann allerdings die Möglichkeit, Updates der generierten Codes aus den Apps zu bekommen, die Infineon ebenfalls kostenfrei zur Verfügung stellt. Die Software nennt sich &#039;&#039;Digital Application Virtual Engineer&#039;&#039; ([http://www.infineon.com/dave DAVE]) und kann nach Registrierung kostenlos für Windows heruntergeladen werden. Innerhalb von Dave kann man dann Apps und viele Beispiele (ohne weitere Anmeldung und Kosten) komplett oder selektiv (für bestimmte Prozessoren) herunterladen. Die aktuell stabile Version ist v3. Es ist eine neue DAVE Umgebung v4 in Arbeit, eine Betaversion kann heruntergeladen werden. Diese neue v4 Variante wird auch ein separates SDK besitzen, um Apps für Dave selbst schreiben zu können (z.B. Bauteilhersteller, die die Anbindung an den XMC für Kunden vereinfachen wollen). Einsteiger sollten aber mit v3 beginnen, um nicht über Bugs der Beta v4 zu stolpern (siehe auch im [http://www.infineonforums.com/forums/8-XMC-Forum XMC-Forum]).&lt;br /&gt;
* &#039;&#039;&#039;NXP&#039;&#039;&#039; bietet für seine &#039;&#039;&#039;LPC&#039;&#039;&#039; Prozessorfamilien eine &amp;lt;u&amp;gt;kostenlose&amp;lt;/u&amp;gt; C/C++ Entwicklungsumgebung an. Die auf Eclipse basierende Entwicklungsumgebung ([http://www.lpcware.com/lpcxpresso LPCXpresso]) ist nach der Installation bis 8kB freigeschaltet und nach einer einfachen und kostenlosen Registrierung für 256kB. [http://www.lpcware.com/lpcxpresso LPCXpresso] steht für Windows, Linux und Mac zur Verfügung.&lt;br /&gt;
* &#039;&#039;&#039;ST&#039;&#039;&#039; bietet für seine &#039;&#039;&#039;STM32&#039;&#039;&#039; Prozessorfamilie eine &amp;lt;u&amp;gt;kostenlose&amp;lt;/u&amp;gt; C/C++ Entwicklungsumgebung an. Die auf Eclipse basierende Entwicklungsumgebung kann nach Registrierung auf der Homepage heruntergeladen werden. [http://www.openstm32.org/] &lt;br /&gt;
&lt;br /&gt;
Kommerzielle Entwicklungsumgebungen (zum Teil kostenlos mit Einschränkungen) für ARM-basierte Mikrocontroller sind z.&amp;amp;nbsp;B.:&lt;br /&gt;
* [http://timor.atollic.com/truestudio/ Atollic TrueStudio] (Windows), Eclipse-basierend inkl. Compiler und Linker für fast alle ARMs, jetzt auch kostenlos mit vielen Beispielen und ohne Codesize-Limitierung, dafür mit anderen Einschränkungen&lt;br /&gt;
* [http://www.cosmicsoftware.com/download_cortex_64k.php Cosmic Software] (Windows), bis 64kB kostenlos&lt;br /&gt;
* [http://rowley.co.uk/arm/ Crossworks ARM] (inkl. Toolchains basierend auf GCC und Clang, für Windows, Mac OS und Linux)&lt;br /&gt;
* [http://www.iar.com/ewarm/ IAR Embedded Workbench for ARM] (Windows)&lt;br /&gt;
* [http://www.keil.com/arm/ MDK-ARM von Keil/ARM] (Windows), Lite-Version bis 32kB kostenlos,&lt;br /&gt;
* [http://www2.keil.com/stmicroelectronics-stm32/mdk MDK-STM32 von KEIL] Speziell für STM32x0 kostenlos ohne Beschränkung &lt;br /&gt;
* [http://www.sisy.de/ SiSy MC++] (Windows), Demo-Version, keine Code-Begrenzung&lt;br /&gt;
&lt;br /&gt;
=== Compiler für sonstige Programmiersprachen ===&lt;br /&gt;
* Basic: http://www.mikroe.com/mikrobasic/arm/&lt;br /&gt;
* Pascal: http://www.mikroe.com/mikropascal/arm/&lt;br /&gt;
&lt;br /&gt;
=== Interpreter ===&lt;br /&gt;
* Forth: https://github.com/ekoeppen/CoreForth&lt;br /&gt;
* JavaScript: http://www.espruino.com/&lt;br /&gt;
* Lua: http://www.eluaproject.net/&lt;br /&gt;
&lt;br /&gt;
=== ARM/XSCALE/CORTEX Instruction Set Simulator ===&lt;br /&gt;
Die Firma Lauterbach bietet unter der Artikelnummer LA-8809 einen Instruction Set Simulator für ARM Cores an. Die Demoversion ist zur Evaluierung kostenlos. Einschränkungen bestehen in der Anzahl der zu ladenden Debugsymbole. Der Simulator unterstützt alle gängigen ARM Derivate und lädt alle üblichen Debugformate, wie die des RealView,  IAR und TI Compilers, oder der freien GCC Tools. Zum Simulator gibt es entsprechende zugehörige Debugtools, die allerdings käuflich zu erwerben sind.&lt;br /&gt;
&lt;br /&gt;
* [http://www.lauterbach.com/frames.html?dwnload.html Download ARM/XSCALE/CORTEX Simulator]&lt;br /&gt;
&lt;br /&gt;
== Debug- und Programmierschnittstellen (JTAG/SWD) ==&lt;br /&gt;
&lt;br /&gt;
Alle ARM-basierten Prozessoren verwenden ein einheitliches [[JTAG]]-Interface, über das Debugging und Speicherzugriff erfolgen kann. Nicht standardisiert sind allerdings die Verfahren zum Beschreiben des Flash-ROMs, deshalb muss man beachten ob die verwendete JTAG-Software Programmierroutinen für den jeweiligen Controller besitzt.&lt;br /&gt;
&lt;br /&gt;
SWD (Serial Wire Debug) ist eine neue mit den Cortex-Mikrocontrollern eingeführte Debug- und Programmierschnittstelle, die weniger Pins benötigt als JTAG. Hier wird Debug-Bandbreite bzw. Speed gegen mehr verfügbare Pins für in-circuit Debugging &amp;quot;getauscht&amp;quot;. Die meisten Controller der Cortex-M0 &amp;amp; M3 Serie können sowohl mittels JTAG als auch mittels SWD programmiert werden, es gibt allerdings auch Exemplare (z.B. [[EFM32]] von [https://www.silabs.com Silicon Labs], XMC1100 von [http://www.infineon.com/xmc Infineon]) welche nur SWD unterstützen.&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht über die empfohlenen Steckerbelegungen für JTAG und SWD gibt ein [http://infocenter.arm.com/help/topic/com.arm.doc.faqs/attached/13634/cortex_debug_connectors.pdf Dokument von ARM].&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus gibt es noch herstellerspezifische Schnittstellen wie SPD (Single Pin Debug) von Infineon, oder vorinstallierte serielle Bootloader, z.B. beim [[STM32]] oder auch bei den [[Infineon XMC]], die dann z.B. über ein eigenes [http://www.infineon.com/cms/de/product/microcontroller/development-tools-software-and-kits/c166/xc166-development-tools-software-and-kits/software-downloads/channel.html?channel=ff80808112ab681d0112ab6b50fe07c9 Tool] ohne weitere Hardware - abgesehen von einem handelsüblichen seriellen Schnittstellenadapter - programmiert werden können. &lt;br /&gt;
&lt;br /&gt;
Viele Entwicklungsboards enthalten auch einen On-Board-Debugadapter zum direkten Anschluss an USB, so dass kein externer SWD- oder JTAG-Adapter notwendig ist. Manche erlauben auch, diesen Adapter abzubrechen und für eigene Entwicklungen weiterzuverwenden, somit ist nach dem Kauf eines Eval-Kits nicht nötig, einen weiteren Adapter später nachzukaufen.&lt;br /&gt;
&lt;br /&gt;
=== Günstige Beispiele zum Einstieg ===&lt;br /&gt;
Ein einfacher JTAG-Adapter für den Parallelport ist der &amp;quot;Wiggler&amp;quot;-kompatible, den man auch einfach selbst bauen kann. Als Software lässt sich unter Windows und Linux [http://openocd.berlios.de/ OpenOCD] (zusammen mit [[GDB]]) oder [http://rowley.co.uk Crossworks ARM] verwenden.  Für USB gibt es ebenfalls OpenOCD-kompatible JTAG-Adapter.&lt;br /&gt;
&lt;br /&gt;
Von NXP sind preiswerte Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG-/-SWD-Programer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits]&#039;&#039;&#039; (PDF), oder diese &#039;&#039;&#039;[http://www.mikrocontroller.net/wikisoftware/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso Beschreibung]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Von ST gibt es günstige MBED/Arduino kompatible Nucleo Entwicklungskits (ca. 12€) z.B. &#039;&#039;&#039;[http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1847/PF260320?s_searchtype=partnumber]&#039;&#039;&#039;. Der integrierte ST-Link Debugger kann mittels SWD und OpenOCD als Software auch andere Chip programmieren. Die etwas teuereren Discoveryboards, z.B. &#039;&#039;&#039;[http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1848/PF260946?s_searchtype=partnumber]&#039;&#039;&#039;, haben mehr externe Bauteile on-board, während die Nucleo Board über Shields erweiterbar sind. Nur bei Nucleo Boards ist eine UART Schnittstelle als Standard über USB zu erreichen, bei Discovery Boards mit ST-Link V2-1 müssen Lötbrücken gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Auch Infineon bietet Arduino-kompatible Boards+Shields mit dem XMC1100 Prozessor und angeflanschtem Debugger an (ab ca. 16€). Weiters gibt es günstige XMC4500 Kits, die auch Ethernet, SPI-Flash und SDCard-Slot Optionen bieten. Am unteren Ende gibt es ein XMC1100 Kit samt Debugger ab ca. 5€, dieses Board für den Schlüsselbund sozusagen nennt sich treffend &amp;quot;XMC 2 Go&amp;quot;. Die Preise können je nach Distributor stark variieren.&lt;br /&gt;
Siehe auch hier &#039;&#039;&#039;[http://www.infineon.com/cms/de/product/microcontroller/32-bit-industrial-microcontroller-based-on-arm-registered-cortex-registered-m/xmc-development-tools-kits-and-boards/channel.html?channel=db3a30433580b3710135a07902883872 XMC-Starter-Kits]&#039;&#039;&#039;.&lt;br /&gt;
Des weiteren werden auch schon Kits in Verbindung mit Sensoren zum Evaluieren angeboten, wie das &amp;quot;3D 2 Go&amp;quot; Board mit einem XMC1100 Prozessor und dem neuen 3D-Magnetfeldsensor von Infineon, um ein Beispiel zu nennen: &#039;&#039;&#039;[http://www.infineon.com/cms/en/product/sensor-ics/magnetic-sensors/3d-magnetic-sensor/channel.html?channel=5546d4624c9e0f0e014c9e105a8a001c 3D-Sensorkit]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Von Silicon Labs gibt es [https://www.silabs.com/products/mcu/Pages/32-bit-microcontroller-tools.aspx Starter Kits] mit integriertem J-Link (Debugger) ab ca. 25 € z.B. das [https://www.silabs.com/products/mcu/lowpower/Pages/efm32tg-stk3300.aspx EFM32 Tiny Gecko Starter Kit] bei [http://www.mouser.de/ProductDetail/Silicon-Laboratories/EFM32TG-STK3300/?qs=%2fha2pyFadujBGJvO8YBq9JikBLXQGi%2fjwmF17imXuts5383tWpQKFA%3d%3d Mouser]&lt;br /&gt;
&lt;br /&gt;
Der [http://www.segger.com/cms/jlink.html J-Link]-&amp;quot;Emulator&amp;quot; von Segger wird von vielen Softwarepaketen unterstützt und ist für den &amp;quot;nicht-kommerziellen&amp;quot; Einsatz von Studenten, Funkamateuren und Hobby-Bastler für ca. €50.- erhältlich (J-Link-Edu). Sein Umfang ist dabei auf das Flashen des Speichers und das Debuggen beschränkt. Die Trace-Option wie sie bei der PRO-Variante zur Verfügung steht, ist nicht vorhanden. Für den Preis (05/2013) bekommt man jedoch ein ausgewachsenes Werkzeug mit breiter Unterstützung und der Möglichkeit sowohl SWD als auch JTAG in einem Gerät vereint zu haben. Wenn man aber plant, ein oben genanntes Kit von ST, NXP, Infineon oder ähnlich zu kaufen kann man für ähnliche Kosten auch gleich ein CPU-Board dazubekommen - daher ist es sinnvoll, sich die Dokumentationen der Evalkits voher genau durchzusehen.&lt;br /&gt;
&lt;br /&gt;
Der ULINK2 von Keil/ARM ist ebenfalls ein wirklich gutes Gerät. Leider ist er nicht ganz so günstig und seine Zusammenarbeit beschränkt sich auf die Arm/Keil IDE µVision. Er benötigt jedoch keine speziellen USB-Treiber sondern nutzt geschickt die Funktionalität der HID-Treiber des Betriebssystems. Das macht ihn sofort auf jedem Windows-Betriebssystem einsatzbereit.&lt;br /&gt;
&lt;br /&gt;
Als Alternative zum Beschreiben des Flash über JTAG ist oft ein serieller [[Bootloader]] im Controller enthalten. Bei ST werden sie über einen speziellen Pin der MPU aktiviert und sind dank Kompression und das intelligente entfernen redundanter Information, bei der Übertragung genauso schnell wie JTAG/SWD Adapter.&lt;br /&gt;
&lt;br /&gt;
== CMSIS - ARM Cortex Software Libraries  ==&lt;br /&gt;
 &lt;br /&gt;
Der ARM Cortex Microcontroller Software Interface Standard (CMSIS) ist ein herstellerunabhängiger Hardware Abstraction Layer für die Cortex-M-Prozessor -Serie. Dieser ermöglicht konsistente und einfache Software-Schnittstellen für den Prozessor und die Peripherie, und vereinfacht damit die Software-Wiederverwendung. &lt;br /&gt;
&lt;br /&gt;
CMSIS besteht aus folgenden Komponenten:&lt;br /&gt;
&lt;br /&gt;
* CMSIS-CORE: Bietet eine Schnittstelle zum Cortex-M0, Cortex-M3, Cortex-M4, SC000 und SC300-Prozessorkern und Peripherie-Registern.&lt;br /&gt;
* CMSIS-DSP: DSP-Bibliothek mit über 60 Funktionen in Festkomma-(fractional q7, q15, q31) und single precision floating-point (32-bit)-Implementierung&lt;br /&gt;
* CMSIS-RTOS API: Standardisierte Programmierschnittstelle für Echtzeit-Betriebssysteme für Thread-Steuerung, Ressourcen-und Zeitmanagement. Implementierungen gibt es z.B. von Keil ([http://www.keil.com/pack/doc/cmsis_rtx/index.html RTX])&lt;br /&gt;
* CMSIS-SVD: System View Beschreibung -  XML-Dateien, die die Programmiereransicht des kompletten Mikrocontroller-Systems einschließlich Peripheriegeräte enthalten&lt;br /&gt;
&lt;br /&gt;
Der Standard ist für Cortex-M-Mikrocontroller skalierbar: Von der  kleinsten 4 KB MCU bis zu MCUs mit anspruchsvoller Kommunikations-Peripherie wie Ethernet oder USB. Die &amp;quot;Core Peripheral Funktionen&amp;quot; benötigt beispielsweise weniger als 1 KB-Code und weniger als 10 Bytes RAM.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
* Software Beispiele von [http://www.energymicro.com/downloads/application-notes Energy Micro] basierend auf CMSIS&lt;br /&gt;
&lt;br /&gt;
Mehr Informationen auf der [http://www.arm.com/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php ARM CMSIS Webseite].&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Linksammlung#ARM|Linksammlung (Abschnitt ARM)]]&lt;br /&gt;
* [[LPC1xxx]]&lt;br /&gt;
* [[LPC1xxx_Entwicklungskit_LPCXpresso]]&lt;br /&gt;
* [[Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red]]&lt;br /&gt;
* [[Codebase_f%C3%BCr_LPC1xxx]]&lt;br /&gt;
* [[ARM-elf-GCC-Tutorial]]&lt;br /&gt;
* [[AVR32]]&lt;br /&gt;
* [[Blackfin]]&lt;br /&gt;
* [[AT91SAM9260]]&lt;br /&gt;
* [[STM32]]&lt;br /&gt;
* [[JTAG]]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/EFM32 EFM32]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/STM32_-_Einstieg_mit_Em::Blocks STM32 - Einstieg mit Em::Blocks Tutorial]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.mySTM32.de Online Tutorial für den STM32]&lt;br /&gt;
* [http://www.myXMC.de Online Tutorial für den XMC von Infineon]&lt;br /&gt;
* [http://www.myUGL.de Online Tutorial für freie Grafikbibliothek, STM32, STM32F429, TFT, Touch]&lt;br /&gt;
* [http://embdev.net/forum/arm-gcc ARM-GCC Forum] im englischsprachigen &amp;quot;Ableger&amp;quot; von mikrocontroller.net embdev.net u.a. für WinARM, Yagarto, CS Codebench&lt;br /&gt;
* [http://www.arm.com/products/processors/cortex-m/index.php Cortex-M Produktseite von ARM]&lt;br /&gt;
* [http://infocenter.arm.com/help/index.jsp Infocenter von ARM Ltd.]&lt;br /&gt;
* [http://www.open-research.org.uk/ARMuC/ ARMuC ARM microcontroller Wiki]&lt;br /&gt;
* [http://chaosradio.ccc.de/cre151.html Chaosradio Express - Die ARM-Architektur]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
*ARM Systems Developer&#039;s Guide (2004) ISBN 1558608745 [http://books.google.de/books?id=HKKUkDQE17QC&amp;amp;output=html Im Buch blättern] [http://booksite.elsevier.com/9781558608740/ Programmbeispiele aus dem Buch, u.a. FFT, FIR/IIR-Filter, Division, Wurzel]&lt;br /&gt;
*ARM Assembly Language - an Introduction (2007) ISBN 1847536964 [http://books.google.de/books?id=8KJX5R8mMvsC&amp;amp;output=html Im Buch blättern]   [http://www.lulu.com/content/1172076 Verlagsseite &amp;quot;Book on demand&amp;quot;]&lt;br /&gt;
*ARM Rechnerarchitekturen für System-on-Chip-Design (2002) ISBN 3826608542&lt;br /&gt;
*Co-Verification of Hardware and Software for Arm Soc Design (2004) ISBN 0750677309&lt;br /&gt;
*ARM System-on-Chip Architecture (2000) ISBN 0201675196 [http://books.google.de/books?id=J_Fu_YTVD9gC&amp;amp;printsec=frontcover&amp;amp;output=html&amp;amp;source=gbs_summary_r&amp;amp;cad=0 Im Buch blättern]&lt;br /&gt;
*ARM Architecture Reference Manual ISBN 0201737191 [http://books.google.de/books?id=O5G-6WX1xWsC&amp;amp;printsec=frontcover&amp;amp;output=html&amp;amp;source=gbs_summary_r&amp;amp;cad=0 Im Buch blättern]&lt;br /&gt;
*Messen, Steuern und Regeln mit ARM-Mikrocontrollern ISBN 3772340172 [http://books.google.de/books?id=TKs4kN-zNYQC&amp;amp;output=html im Buch blättern]&lt;br /&gt;
*Programming Arm Microcontrollers: Using C and the Lpc2100 Family (2005? /ab 1. Dezember 2008) ISBN 0321263359&lt;br /&gt;
*Arm Assembly: Fundamentals and Techniques (ab 1. März 2009) ISBN 1439806101&lt;br /&gt;
*Reliable Embedded Systems: Using 8051 and ARM Microcontrollers (2007) ISBN 0321252918 600 Seiten mit CD [http://vig.pearsoned.co.uk/catalog/academic/product/0,1144,0321252918-TOC,00.html Inhaltsverzeichnis]&lt;br /&gt;
* C und C++ für Embedded Systems (u.a. ARM Cortex-M3) mitp-Verlag 2008 ISBN 382665949X&lt;br /&gt;
* The Definitive Guide to the Arm Cortex-M0 (Joseph Yiu) Newnes Verlag ISBN 0123854776&lt;br /&gt;
* The Definitive Guide to the Arm Cortex-M3 (Joseph Yiu) Newnes Verlag ISBN 185617963X&lt;br /&gt;
&lt;br /&gt;
== Artikel aus der Kategorie ARM ==&lt;br /&gt;
&amp;lt;ncl style=compact maxdepth=2 headings=bullet headstart=2&lt;br /&gt;
      showcats=1 showarts=1&amp;gt;ARM&amp;lt;/ncl&amp;gt;&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/EFM32 &#039;&#039;&#039;EFM32&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/XMCxxxx &#039;&#039;&#039;Infineon XMCxxxx&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/articles/Cortex-A ARM Cortex A]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM| ]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=KiCad&amp;diff=89948</id>
		<title>KiCad</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=KiCad&amp;diff=89948"/>
		<updated>2015-10-12T08:17:37Z</updated>

		<summary type="html">&lt;p&gt;Kichi: /* Problem: Der Ursprung für die Pic und Place bzw. Drill-Daten wurde verändert und lässt sich nicht zurücksetzten. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;KiCAD&#039;&#039;&#039; ist ein Open Source [[Schaltplaneditoren|Schaltplaneditor]] und PCB Layoutprogramm für Windows, Linux, Mac OSX.&lt;br /&gt;
&lt;br /&gt;
Diese Seite ist zunächst eine Zusammenfassung aus den KiCAD Beiträgen im Forum. Und gleich zu Anfang ein grosses DANKE an alle KiCAD-User aus dem Forum. Ihr seid zu viele, um jeden einzeln zu nennen. Aber wer sich diese Seite durchliest und den Links folgt, wird euch kennenlernen.  &lt;br /&gt;
&lt;br /&gt;
Hier sollen alte und neue KiCAD-Anwender einen Anlaufpunkt finden und neue, insbesondere µC-relevante Aktivitäten stattfinden. &lt;br /&gt;
&lt;br /&gt;
Diese Seite will keine Konkurrenz zum offiziellen KiCAD Wiki sein, d.h. was dort steht soll hier nicht wiederholt werden und was hier steht wird hoffentlich zum offiziellen KiCAD Wiki wandern.&lt;br /&gt;
&lt;br /&gt;
Wenn ihr Kritik oder Fragen zu KiCAD habt, dann nutzt das Forum! Sobald KiCAD im Betreff steht, wird der Beitrag gelesen und nach Möglichkeit beantwortet. Auch Ideen zu dieser Seite sind sehr willkommen! &lt;br /&gt;
&lt;br /&gt;
Da diese Seite hier etwas umfangreich geworden ist, empfehle ich eine Textsuche. Jeder Internetbrowser, der etwas auf sich hält, hat auch eine Suchfunktion, mit der der Text der Seite durchsucht werden kann. Bei Firefox/Iceweasel oben im Pull-down Menue unter &amp;quot;Bearbeiten&amp;quot; &amp;gt; &amp;quot;suchen&amp;quot; oder per Shortcut &amp;lt;Strg-F&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch die offizielle FAQ: http://kicad.sourceforge.net/wiki/index.php/FAQ&lt;br /&gt;
&lt;br /&gt;
TODO: Strukturierung (Allg., Schaltplan, Netlists, Module, Bibliotheken, Layout, Export, 3D)&lt;br /&gt;
&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
* Warum gefällt dir KiCAD?&lt;br /&gt;
** http://www.mikrocontroller.net/topic/70905#584639&lt;br /&gt;
** http://www.mikrocontroller.net/topic/81396#680502&lt;br /&gt;
** http://www.mikrocontroller.net/topic/83311#697917&lt;br /&gt;
** http://www.mikrocontroller.net/topic/42614#321502&lt;br /&gt;
* Warum gefällt dir KiCAD nicht?&lt;br /&gt;
** Ich verstehe nicht, was du meinst ;-)&lt;br /&gt;
** http://www.mikrocontroller.net/topic/81396#680502&lt;br /&gt;
** http://www.mikrocontroller.net/topic/83311#697969&lt;br /&gt;
&lt;br /&gt;
* Wo gibt es weitere Infos zu KiCAD?&lt;br /&gt;
** Offizielle Homepage: http://kicad-pcb.org/&lt;br /&gt;
** Die Offizielle Dokumentation: http://bazaar.launchpad.net/~kicad-developers/kicad/doc/files/head:/doc/help/en/&lt;br /&gt;
** Einige allgemeine Notizen zur &#039;&#039;&#039;Installation&#039;&#039;&#039; und zur &#039;&#039;&#039;Arbeitsweise&#039;&#039;&#039; von KiCad finden sich hier: https://docs.google.com/document/d/1M38ByFyqnhwGo8b_jDDyBceyZtEGeaSAuQaP9REzWrU/edit?usp=sharing&lt;br /&gt;
** http://www.mikrocontroller.net/topic/98034#848661 (Von 2008, also seeeehr überholt)&lt;br /&gt;
* Welche Leiterplattenfertiger akzeptieren KiCAD Layouts?&lt;br /&gt;
** http://www.pcb-pool.de KiCAD kann &amp;quot;Extended&amp;quot; Gerber RS-247-X erzeugen. Das wird von PCB-Pool akzeptiert. Dabei http://www.pcb-pool.com/download/spezifikation/deu_cmso020_ext_gerber.pdf beachten! Alternativ, wer KiCAD (noch) nicht traut, diese RS-247-X in deren (PCB-Pools) Tool GC-Prevue  http://www.mikrocontroller.net/topic/120373#1092375 einlesen und als .GWK exportieren. AKTUELL August 2012: Wenn man bei PCB-Pool bestellt, ist deren GC-Prevue NICHT mehr erforderlich, weil PCB-Pool mittlerweile KiCAD *,brd Dateien direkt aktzeptiert. Siehe http://www.pcb-pool.com/ppde/info_dataformat.html &lt;br /&gt;
** http://fischer-leiterplatten.de Ohne Aufpreis für Gerber-Import&lt;br /&gt;
&lt;br /&gt;
* Wie geht man mit KiCAD-Trollen um?&lt;br /&gt;
** Mit gesundem Menschenverstand. Trollregeln wie die US AIR FORCE (http://blog.wired.com/defense/2009/01/usaf-blog-respo.html) brauchen wir nicht ;-)&lt;br /&gt;
* Wie kriege ich raus, welche Leiterbahn welchen Netznamen hat, bzw. ich habe den Überblick verloren und weiss nicht mehr, was aus dem Layout nun was im Schaltplan ist?&lt;br /&gt;
**http://www.mikrocontroller.net/topic/218922#2211644. Zusatz: Funktioniert nur gut, wenn großes Fadenkreuz gewählt ist. Aktueller (zu BZR4513 vom 29. November 2013) ist http://www.mikrocontroller.net/topic/316539#3427724&lt;br /&gt;
** Aber ich hätte gerne noch genauere Informationen, z.b. auch über die Länge einer Leiterbahn ec.&lt;br /&gt;
*** Dazu in PCBnew den gleichen Button rechts wie für das Hinzufügen von Leiterbahnen aktivieren. Oder besser noch rechts den zweiten Button von oben &amp;quot;Netz hervorheben&amp;quot;. Dann mit der rechten Maustaste die fragliche Leiterbahn anklicken. Unten in der Statusleiste werden die Informationen angezeigt. &lt;br /&gt;
* Ich würde gerne kicad OHNE Maus bedienen. Wie geht das?&lt;br /&gt;
**http://www.mikrocontroller.net/topic/267538#new&lt;br /&gt;
* Gibt es Sonderzeichen, die ich für Symbole, Module/Footprints oder Files nicht verwenden sollte2&lt;br /&gt;
** Ja, alles was Sonderzeichen ausser - _ . und keine Zahl ist. Siehe: http://www.mikrocontroller.net/topic/302664#3249204&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
* Woher beziehe ich KiCad?&lt;br /&gt;
** KiCad hat wegen der schnellen Entwicklung z.Z. ein &amp;quot;rolling release&amp;quot;, d.h. es gibt eigentlich keine &amp;quot;offiziellen&amp;quot; Releases, sondern jeder Anwender ist dazu angehalten, sich selber sin KiCad aus den aktuellen Sourcen selber zu compilieren. Dazu gibt es aber Skripte zur Unterstützung, die dieses automatisieren, so dass man nicht unbedingt C/C++ Kenntnisse braucht. Es ist wirklich recht einfach. Ein offizielles &amp;quot;stable release&amp;quot; ist aber wieder für den Spätsommer/Herbst 2015 geplant. Die meisten gängigen Linux Distributionen enthalten aber &amp;quot;old stable&amp;quot; KiCad Releases in ihren Repositories.&lt;br /&gt;
&lt;br /&gt;
** Offizielle Seite (alle Betriebssysteme): http://kicad-pcb.org/download/&lt;br /&gt;
** Leider recht alt: http://iut-tice.ujf-grenoble.fr/cao/&lt;br /&gt;
** Windows: http://www2.futureware.at/~nickoe/ &lt;br /&gt;
*** Welcher Typ? ...-x86_64.exe oder ...-i686.exe ? Ich brauche x86 32 bit.&lt;br /&gt;
**** Für Windows PC 32 bit die ...-i686.exe, und für Windows PC 64 bit ...-x86_64.exe.&lt;br /&gt;
** Veraltet: http://www71.zippyshare.com/v/28617008/file.html Die Quelle ist hier genannt. https://groups.yahoo.com/neo/groups/kicad-users/conversations/messages/18534&lt;br /&gt;
* Kicad entwickelt sich rasant. Wo finde ich eine Liste der Versionsänderungen?&lt;br /&gt;
** Auf der Kicad Launchpad Seite via bazaar. Siehe: http://www.mikrocontroller.net/topic/298311#3187885&lt;br /&gt;
* Ich habe KiCad unter Linux installiert, aber wenn ich KiCad starten will, passiert einfach nichts, oder ich erhalte eine Fehlermeldung wie: &amp;quot;Datei nicht gefunden&amp;quot;. Siehe: http://www.mikrocontroller.net/topic/307517#new&lt;br /&gt;
** 1) KiCad und seine zugeordneten Programme sollten im Suchpfad stehen. Es wird für Debian und Ableger empfolen, KiCad unter usr/local/bin zu installieren. Anmerkung: Das ist die aktuelle Verfahrensweise. Oktober 2013 wurde aber noch folgende Struktur verwendet:&lt;br /&gt;
*** /usr/bin                            - Binaries (executable files).&lt;br /&gt;
*** /usr/share/doc/kicad/               - Various documentation.&lt;br /&gt;
*** /usr/share/doc/kicad/help           - Interactive help.&lt;br /&gt;
*** /usr/share/kicad/demos              - Sample schematics and printed boards.&lt;br /&gt;
*** /usr/share/kicad/internat           - Dictionaries for interface localization.&lt;br /&gt;
*** /usr/share/kicad/library            - Interface localization files.&lt;br /&gt;
*** /usr/share/kicad/modules            - Module libraries for printed boards.&lt;br /&gt;
*** /usr/share/kicad/modules/packages3d - 3D component models (.wrl and .wings format).&lt;br /&gt;
*** Quelle: http://iut-tice.ujf-grenoble.fr/cao/install.txt Hier sind auch Hinweise für Windows user enthalten.&lt;br /&gt;
&lt;br /&gt;
** 2) User sollten dort Lese- und Ausführungsrechte haben. Aber keine Schreibrechte.&lt;br /&gt;
** 3) Wenn ein fertiges Packgage auf einem 64 bit System verwendet wurde, könnte es daran liegen, das es für 32 bit compiliert wurde, und nicht für 64 bit. Es gibt zwei Möglichkeiten:&lt;br /&gt;
*** a) Selbst aus den Sourcen für sein eigenes System compilieren.&lt;br /&gt;
*** b) Die Runtime Libs für 32 Bit könnten fehlen. Nachinstallieren mit sudo apt-get install ia32-libs. Siehe: http://www.mikrocontroller.net/topic/307517#3307638&lt;br /&gt;
* Ich habe das umgekehrte Problem: 32bit system aber 64bit Binarys.&lt;br /&gt;
** Selbst aus den Sourcen neu compilieren.&lt;br /&gt;
*Ich will/muss mir KiCad selber compilieren. Wie gehe ich vor?&lt;br /&gt;
** Aktuell nach: http://www.kicad-pcb.org/display/DEV/Build+KiCad&lt;br /&gt;
**&lt;br /&gt;
**Veraltet! siehe: http://www.mikrocontroller.net/topic/310766#3351269 Aber Achtung. Diese Anleitung (Oktober 2013) muss nicht aktuell sein.&lt;br /&gt;
&lt;br /&gt;
* Sicherheitseinstellungen von Java sind für PCBnew unter JAVA -&amp;gt; JAVA konfigurieren zu finden.&lt;br /&gt;
&lt;br /&gt;
* Diskussionen zum Thema Installation und compilieren:&lt;br /&gt;
** FEDORA: http://www.mikrocontroller.net/topic/338600#new&lt;br /&gt;
** ARCH Linux: http://www.mikrocontroller.net/topic/339509#new&lt;br /&gt;
* Konfigurationsdateien:&lt;br /&gt;
** Ab BZR5114 (ca. 5. September 2014) hat sich der Ordner für die Files mit den Konfigurationsdaten geändert. Unter Linux sind nun die Konfigurations Dateien in $HOME/.config/kicad (entsprechen der FreeDesktop.org Spezifikation). Um Ihre gegenwärtigen Konfigurierungen zu erhalten, können die KiCAd Konfigurationsfiles aus dem Home-Verzeichnis in den aktuellen Ordner kopiert werden. Es muss allerdings der führende &amp;quot;.&amp;quot; (Punkt) der Datei entfernt werden. Ebenso muss die globale &amp;quot;fp-lib-table&amp;quot; aus dem home-Verzeichnis dorthin kopiert werden. Windows User müssen KiCAD leider reconfigurieren. Es gab keinen einfachen Weg um die Registry-Keys in die Konfigurationsdateien zu extrahieren. Die Konfigurationsdateien unter Windows werden genau wie die fp-lib-table im %APPDATA%\kicad Ordner gespeichert. Es ist angeraten, sämmtliche Reste der KiCAD Installation aus der Registry zu entfernen, wenn nicht KiCAD Versionen vor der BZR5114 verwendet werden. Diese Lösung beseitigt die $home Ordner &amp;quot;verschmutzung&amp;quot; und vermeidet die Benutzung der Windows registry, wie es häufig gewünscht wurde. Für OS X User ergeben sich keine Änderungen. Link auf die Originalnachricht (englisch): https://groups.yahoo.com/neo/groups/kicad-users/conversations/messages/18889 (KiCAD-User Group, 05. September 2014, Titel: Configuration file location changes (#18889) Autor: Wayne Stambaugh)&lt;br /&gt;
&lt;br /&gt;
=== Schaltplan ===&lt;br /&gt;
* Wie stellt man die Blattgrösse beim Schaltplan ein?&lt;br /&gt;
** In Page Settings die Blattgröße verstellen (zB von A4 auf A3) http://www.mikrocontroller.net/topic/33653#974295&lt;br /&gt;
* Wie kann man den Schaltplan auf mehreren Seiten verteilen (hierachical sheets)?&lt;br /&gt;
** http://www.mikrocontroller.net/topic/96060&lt;br /&gt;
** http://www.mikrocontroller.net/topic/117873#1060062&lt;br /&gt;
*Wie geht man mit &amp;quot;Power Pins&amp;quot; in hierachischen Schaltplänen um?&lt;br /&gt;
**http://www.mikrocontroller.net/topic/207905#new&lt;br /&gt;
* Wie kann man die &amp;quot;hierachical sheets&amp;quot; benutzen, um aus vorgefertigten Subschaltplänen mit immer gleichen Bauteilgruppen rationell Schaltpläne zusammenzustellen (Building Blocks)?&lt;br /&gt;
** http://www.mikrocontroller.net/articles/KiCAD#Tipps.26Tricks:_Building_Blocks&lt;br /&gt;
** http://www.mikrocontroller.net/topic/175597#1687653&lt;br /&gt;
** http://www.mikrocontroller.net/topic/178683#1724114&lt;br /&gt;
* Ich habe einen hierarchischen Schaltplan angelegt. Wenn ich ihn ausdrucke, werden die Subschaltpläne in der Reihenfolge ausgedruckt, in der sie oben in der Übersicht stehen. Diese Reihenfolge ist aber in meinem Fall ungünstig. Wie kann ich diese nun ändern?&lt;br /&gt;
** Leider im Programm z.Z. noch nicht. Trozdem ist es machbar. Entweder von Hand oder mit einem Python Skript. Näheres zu beidem findet sich hier: http://www.mikrocontroller.net/topic/288394#3064087 . Ein Python 3 Skript, das den Umgang mit dem Kicad-Schaltplan erleichtert, findet sich hier: [[Media:PyKicadSchematic-ID_Interchanger_RevC.zip]].&lt;br /&gt;
*Wie geht man mit Bussen um?&lt;br /&gt;
**http://www.mikrocontroller.net/topic/208870#new&lt;br /&gt;
** und speziell bei hierachischen Schaltplänen: http://www.mikrocontroller.net/topic/209156#new&lt;br /&gt;
* Wie kann man Schaltplanentwurf (KiCAD) und Schaltungssimulation (Spice) verbinden?&lt;br /&gt;
* Ein Tutorial zum Symboleditor für KiCAD, mit dem die Symbole für das Schaltplanmodul (EEschema) erzeugt bzw. editiert werden, findet sich hier: [[Media:SymboleFuerKiCad318082009-RevC-DE.pdf]]. Zur Erstellung von Schaltplansymbolen in aufgelöster Darstellung (Relais: Kontaktsätze einzeln und getrennt von der Spule; IC: Versorgungsspannung getrennt von den einzelnen Gattern) siehe http://www.mikrocontroller.net/topic/273891#new. Bei Problemen noch mal hier nachlesen: http://www.mikrocontroller.net/topic/294095#3136180&lt;br /&gt;
* Wie kann man im Schaltplan Symbole zum Verschieben gruppieren?&lt;br /&gt;
** Siehe http://www.mikrocontroller.net/topic/170913#&lt;br /&gt;
* Und wenn es darum geht, eine solche Gruppe in einen anderen Schaltplan oder Subschaltplan zu verschieben?&lt;br /&gt;
** Die Gruppe ins &amp;quot;Clipboard&amp;quot; stecken. Dazu nach dem Markieren der Gruppe rechte Maustaste beklicken, und dort &amp;quot;Gruppe speichern&amp;quot; wählen. Nun ist die Gruppe im Clipboard. jetzt in den gewünschten Unterschaltplan gehen und die Gruppe dort mithilfe des Clipboardbuttons (Das Klemmbrett Symbol links neben dem &amp;quot;Undo&amp;quot;-Button) in den Schaltplan einfügen. NICHTS mit der rechten Maustaste versuchen! Siehe auch: http://www.mikrocontroller.net/topic/244836#2499782 Das ganze geht nicht nur mit Subschaltplänen, sondern auch genauso in einen ganz anderen Schaltplan, den man dann halt in Eeschema öffnen muss, hinein. Wenn nach dem Einfügen allerdings nur ein Kästchen mit Fragezeichen erscheint, waren die nötigen Symbolbibliotheken für diese Symbole noch nicht in der Projektdatei eingetragen. Das mus man nun nachholen, indem man unter &amp;quot;Einstellungen&amp;quot; die &amp;quot;Bibliotheken&amp;quot; wählt, und die passenden Bibliotheken einträgt. Wenn man nicht genau weiss, wo diese zu finden sind, kann es sinnvoll sein, die *-cache.lib des Herkunftsschaltplanes einzubinden. &lt;br /&gt;
* Wie wird man den merkwürdigen Rahmen los?&lt;br /&gt;
** 1) Bei neueren KiCad Versionen, ab ca. Mitte 2013 (von mir getestet ab BZR 4513 29 November 2013) kann man sich eine Vorlage ohne Rahmen erstellen. Dazu den pl_editor (der ganz rechte Button im KiCad Hauptfenster) starten, und FAST alles entfernen. Dazu in der linken Spalte nacheinander alles aktivieren, und mit rechts anlicken und dann &amp;quot;entfernen&amp;quot; wählen. Aber vorsicht, wenn alles Entfernt wird, taucht das Original Layout wieder auf. Workaround war bei mir, eine zusätzliche Alibilinie hinzuzufügen, die von X 0,000 Y 0,000 bis  X 0,001 Y 0,000 reicht. Das ist ein &amp;quot;Fliegenschiss&amp;quot; in der linken oberen Ecke. Jetzt kann alles andere gelöscht werden. Den so geleerten Rahmen unter einem beliebigen Namen mit der Endung .kicad_wks wegspeichern. Im geöffneten Schaltplan kann der dann unter Datei &amp;gt; Seite einrichten ganz unten unter &amp;quot;page layout file description&amp;quot; die entsprechende Datei eingebunden werden. Es bleibt aber dem Anwender offen, ob er den Rahmen komplett entfernt, oder noch Felder mit Textbeschreibungen übernimmt. Für gesteigerten Komfort kann diese Datei dann auch in ein Template eingebunden werden. &lt;br /&gt;
** 2) Beim Ausdrucken Frame deaktivieren.&lt;br /&gt;
** 3) Als SVG exportieren. Dort den Frame deaktivieren.&lt;br /&gt;
** Siehe: http://www.mikrocontroller.net/topic/343509#3791448&lt;br /&gt;
* Wie schalte die Footprint-Namen in Eeschema global ab?&lt;br /&gt;
** http://www.mikrocontroller.net/topic/253564#new&lt;br /&gt;
* Ich habe ein Problem mit dem ERC. Ständig kommt die Fehlermeldung: &amp;quot;Pin ist mit anderen Pins verbunden, wird jedoch von keinem angesteuert&amp;quot;&lt;br /&gt;
** Netze, die nicht angesteuert werden, werden von Kicad misstrauische beäugt. Das &amp;quot;nicht ansteuern&amp;quot; kann aber schnell passieren, weil Kicad u.A. erwartet, das irgendwo ein Spannungsversorgung ist. Wenn diese aber z.B. über eine Sicherung oder einen Pull-up Widerstand gehen, so wird das nicht bemerkt, weil Sicherungen und Widerstände (oder auch Entstördrosseln) &amp;quot;passive&amp;quot; Pins haben. Siehe: http://www.mikrocontroller.net/topic/292988#new und http://www.mikrocontroller.net/topic/298401#new&lt;br /&gt;
* Ich habe ein Problerm mit dem ERC. Immer in Verbindung mit GND kommt die Fehlermeldung: &amp;quot;Pin ist mit anderen Pins verbunden, wird jedoch von keinem angesteuert&amp;quot;&lt;br /&gt;
**Siehe: http://www.mikrocontroller.net/topic/284089#new&lt;br /&gt;
* Beim ERC kommt die Fehlermeldung &amp;quot;PIN not connected&amp;quot; an Verbindungen, die per Label angeschlossen sind. Was ist da falsch?&lt;br /&gt;
**Sie sind tatsächlich nicht angeschlossen. Siehe: http://www.mikrocontroller.net/topic/346976#new&lt;br /&gt;
* Wie ist der Zusammenhang zwischen Bauteilen und Netznamen? Wie bekomme ich heraus, an welchem Netz mein Bauteil angeschlossen ist?&lt;br /&gt;
** Eeschema vergibt bzw. aktualisiert erst dann Netznamen, wenn eine Netzliste erzeugt wird. Darauf besteht entweder ein Zugriff über PCBnew, oder aber mit einem Editor. Siehe Beitrag http://www.mikrocontroller.net/topic/316539#new&lt;br /&gt;
* Ich habe einen Schaltplan geöffnet, aber alle oder einige der Symbole zeigen nur Kästen mit Fragezeichen.&lt;br /&gt;
** Es fehlen die passenden Symbolbibliotheken für diese Symbole.&lt;br /&gt;
*** Diese müssen in der Liste der Bibliotheken nachgetragen werden. &lt;br /&gt;
*** Hat man von anderswo einen Schaltplan bekommen, kann dieser auf anderen Symbolbibliotheken beruhen, als man selber verwendet. Aus diesem Grunde existiert zu jeder Schaltplandatei (Dateiname.sch) eine Cache Bibliothek (Dateiname-cache.lib). Diese enthält alle im Schaltplan verwendeten Symbole, und sollte darum mit dem Schaltplan zusammen übergeben werden.&lt;br /&gt;
*** Ab BZR4646 (Jan./Feb. 2014) behandelt KiCad Symbolnamen &amp;quot;Case Sensitive&amp;quot;. Das führt zu Problemen mit älteren Schaltplänen, wo &amp;quot;Mixed Case&amp;quot; Symbolnamen aus den Bibliotheken automatisch in &amp;quot;Upper Case&amp;quot; Symbolnamen konvertiert wurden. Diese werden jetzt nicht mehr erkannt. Näheres siehe: http://www.mikrocontroller.net/articles/KiCAD#Problem:_Case_Senitive_Symbols_ab_BZR4646_.28Jan..2FFeb._2014.29&lt;br /&gt;
*Wieviele Textfelder für Symbole kann ich anlegen und wie groß dürfen diese sein?&lt;br /&gt;
** Mindestens 35 Felder, die mindestens 256 Zeichen (tatsächlich deutlich mehr) beinhalten können. Aber Zeilenumbrüche gehen nicht. Siehe: http://www.mikrocontroller.net/topic/331201#3658695&lt;br /&gt;
* Ich habe ein Symbol im Symboleditor geändert. Aber irgendwie taucht diese Änderung dann in Eeschema trotzdem nicht auf.&lt;br /&gt;
** Die Reihenfolge der Einträge in der Bibliotheksliste ist wichtig. Bei gleichem Namen wird immer das zuerst gefundene Symbol verwendet. Steht die -cache.lib in der Reihenfolge zu oberst, wird immer zuerst das Bauteil aus der -cache.lib verwendet. Beheben: Die -cache.lib aus der Bibliotheksliste von Eeschema austragen und neu eintragen, so dass sie unten angefügt wird, und zuletzt geladen wird. Alternativ: Bei Änderungen einen neuen Namen für das Symbol vergeben. Z.B. durch das Pflegen eines Revisions- oder Datecode im Symbolnamen. Einfach nur die -cache.lib löschen langt möglicherweise nicht, weil diese u.U. mit alten Daten neu geschrieben wird (wenn z.b. Eeschema dabei nicht geschlossen ist). Siehe: http://www.mikrocontroller.net/topic/331201&lt;br /&gt;
&lt;br /&gt;
=== Netlist ===&lt;br /&gt;
* Was genau muss man beim Übergang vom Schaltplan (SCH) zum Layout (BRD) machen?&lt;br /&gt;
** http://www.mikrocontroller.net/topic/33653#898771&lt;br /&gt;
** http://www.mikrocontroller.net/topic/39243#290309&lt;br /&gt;
** http://www.mikrocontroller.net/topic/39243#891530&lt;br /&gt;
* Kann man fertige Netzlisten für Gruppen von Bauteilen einbinden?&lt;br /&gt;
** http://www.mikrocontroller.net/topic/33653#1462871&lt;br /&gt;
* Kann man Daten für automatische Bestückung erzeugen?&lt;br /&gt;
** Ja. aber nicht in CVpcb für die Symbol &amp;gt; Footprint Zuordnung, sondern im Layout Modul PCBnew.&lt;br /&gt;
* In meiner Netlist fehlen Bauteile, die im Schaltplan vorhanden und angeschlossen sind. Der ERC läuft problemlos durch. Die Annotation auch, aber nach Erstellung der Netlist sind die Symbole plötzlich mit einem vorangestellten &amp;quot;#&amp;quot; im Schaltplan bezeichnet.&lt;br /&gt;
** Vermutlich sind sie versehentlich als &amp;quot;virtuelles&amp;quot; Bauteil gekennzeichnet. Siehe http://www.mikrocontroller.net/topic/268626#new&lt;br /&gt;
* Wie exportiere ich eine Netlist NUR für einen Subschaltplan?&lt;br /&gt;
** Das geht, nachdem dieser Schaltplan explizit in EEschema geöffnet wurde. Siehe: http://www.mikrocontroller.net/topic/330740#new&lt;br /&gt;
* Ich finde CVpcb nicht mehr am gewohnten Platz zwischen all den anderen Startbuttons!&lt;br /&gt;
** CVpcb ist inzwischen aus diesen entfernt worden, und durch Startbuttons für den Symboleditor und den Footprinteditor ersetzt worden. Dafür kann CVpcb jetzt direkt aus Eeschema heraus gestartet werden. Es findet sich jetzt im oberen Pulldown Menue unter &amp;quot;Werkzeuge&amp;quot; und dann &amp;quot;Bauteilfootprints zuweisen&amp;quot; oder in der oberen Buttonleiste als dritter Button von rechts (BZR5175 vom 11 Oktober 2014).&lt;br /&gt;
** Sollte KiCad abstürzen, wenn man versucht, CVpcb zu starten, so kann man CVpcb auch direkt aus einem Terminal oder aus der Eingabeaufforderung heraus starten.  &lt;br /&gt;
** Versuchsweise mal 10 Minuten warten.....bei Problemen mit der Erkennung von Symbolnamen und Footprintnamen (beim öffnen ganz alter Projekte mit alten Dateiformaten) kann es manchmal extrem lange dauern.&lt;br /&gt;
* Was bedeuten die Maßangaben in der Netlist?&lt;br /&gt;
* Wie überträgt man Kicad Schaltpläne in QUCS Schaltpläne für Simulation?&lt;br /&gt;
&lt;br /&gt;
=== Layout ===&lt;br /&gt;
* Wie stellt man die Rastergrösse im Layout ein?&lt;br /&gt;
** Mit der Rechten Maustaste in das Board klicken. Es poppt ein Menue auf. Dort Raster wählen..... Geht im Modul-Editor genauso.&lt;br /&gt;
* Wie verteile ich die übereinander geladenen Bauteile?&lt;br /&gt;
**Oben das IC Symbol mit den zwei Pfeilen (Mode footprint) aktivieren und mit der rechten Maustaste auf der Platine im Menü &amp;quot;Global spread and place&amp;quot; anwählen und die gewünschte Art auswählen.&lt;br /&gt;
* Wie werden Pads und Leiterbahnen verbunden?&lt;br /&gt;
**Siehe: http://www.mikrocontroller.net/topic/119755#1081455&lt;br /&gt;
**Aktueller: http://www.mikrocontroller.net/topic/220733#new&lt;br /&gt;
* Ich kann keine Leiterbahnen ziehen!&lt;br /&gt;
** Vermutlich hast Du den automatischen DRC (Design rule check) aktiviert. Deaktiviere ihn halt. In PCBnew im linken Buttonbar der oberste Button (Insekt mit Verbotszeichen). http://www.mikrocontroller.net/topic/306476#new&lt;br /&gt;
* Mir fehlen Airwires/Luftlinien/Gummibänder!&lt;br /&gt;
** Vieleicht die falschen Pins als Typ &amp;quot;Spannungsausgang&amp;quot; definiert? Siehe: http://www.mikrocontroller.net/topic/330817#3620918&lt;br /&gt;
* Ich bekomme immer eine Fehlermeldung vom DRC, das ein Pad nicht angeschlossen ist, aber ich habe es angeschlossen.&lt;br /&gt;
**Siehe: http://www.mikrocontroller.net/topic/204717#2018724&lt;br /&gt;
* Ich will ein Bauteil für geringeren Leiterwiderstand sowohl auf der Unterseite- als auch der Oberseite anschliessen. KiCAD löscht aber immer den alten Leiterbahnzug, wenn ich den neuen lege. &lt;br /&gt;
** Deaktiviere unter Einstellungen-&amp;gt;Allgemein das &amp;quot;auto-entfernen-von-Leiterbahnen&amp;quot; (einfachste Lösung). &lt;br /&gt;
** Alternativ: Designe dafür Bauteile mit speziellen Pads. http://www.mikrocontroller.net/topic/187606#1823596 (realistischste u. sauberste Lösung, aber etwas umständlich.)&lt;br /&gt;
* Wie kann man ein Bauteil mit Pads und Leiterbahnen bewegen? &lt;br /&gt;
** http://www.mikrocontroller.net/topic/118539#1067219&lt;br /&gt;
* Wie füllt man eine Fläche aus?&lt;br /&gt;
** Siehe: http://www.mikrocontroller.net/topic/93131#854802&lt;br /&gt;
** Etwas aktueller: http://www.mikrocontroller.net/topic/182271#1772119 Zweiter Teil des Posts.&lt;br /&gt;
** Und wie erzeuge ich konzentrisch ineinanderliegende Flächen?&lt;br /&gt;
*** Siehe: http://www.mikrocontroller.net/topic/327475#new&lt;br /&gt;
** Ja, aber meine Fläche wird nicht gefüllt oder es passiert was ganz merkwürdiges.&lt;br /&gt;
***Siehe: http://www.mikrocontroller.net/topic/298692#new &lt;br /&gt;
***Konkreter: Es sollte darauf geachtet werden, das mindestens ein Endpunkt oder ein Via oder ein Knickpunkt der Leiterbahn, die mit der zu füllenden Fläche verbunden sein soll, innerhalb der als zu füllen definierten Fläche liegen. Siehe http://www.mikrocontroller.net/topic/366199#new&lt;br /&gt;
* Ich habe eine Platine, die von oben und unten bestückt ist. Wenn ich jetzt Bauteile zusammengruppiere, um sie gemeinsam zu verschieben, erwische ich immer alle Bauteile auf Vorder- und Rückseite. Wie bekomme ich das jetzt hin, das ich nur Module auf einer Seite bewege?&lt;br /&gt;
** Indem im Lagenmanager die Seite, die nicht bewegt werden soll, abgeschaltet wird. Siehe: http://www.mikrocontroller.net/topic/311586#new&lt;br /&gt;
* Wie bekommt man ein vernünftiges Boardoutline hin?&lt;br /&gt;
** http://www.mikrocontroller.net/topic/96060#1057511 &lt;br /&gt;
* Wie erstellt man eine Befestigungsbohrung / nichtdurchkontaktierte Bohrung?&lt;br /&gt;
** VERALTET: http://www.mikrocontroller.net/topic/179308#1726990&lt;br /&gt;
** VERALTET:http://www.mikrocontroller.net/topic/120373#1122219 ?????&lt;br /&gt;
** KiCAD kann mittlerweile auch direkt nichtdurchkontaktierte Bohrungen erzeugen. Siehe dazu http://www.mikrocontroller.net/topic/263069#2732405 Enthält auch allgemeine Informationen zum Umgang mit durchkontaktierten und nicht durchkontaktierten Bohrungen.&lt;br /&gt;
* Ich möchte für Passermarken / Fiducials eine deutlich größere Freistellung in der Lötstoppmaske haben. Wie geht das?&lt;br /&gt;
** http://www.mikrocontroller.net/topic/266730#2779498&lt;br /&gt;
* Wie geht das überhaupt mit den Lötstoppmasken?&lt;br /&gt;
** http://www.mikrocontroller.net/topic/283721#new&lt;br /&gt;
* Ja, aber die Lötstoppmaske wird leider nicht angezeigt.&lt;br /&gt;
** http://www.mikrocontroller.net/topic/298028#new&lt;br /&gt;
* Ich möchte Text und Markierungen/Grafik statt im Bestückungsdruck im Lötstopplack erstellen. Geht das überhaupt und wie ist das zu bewerkstelligen?&lt;br /&gt;
** Das geht, und dazu ist der Text oder die grafischen Linien/Kreise direkt in die Lötstoppmaske zu schreiben. Siehe: http://www.mikrocontroller.net/topic/347702#new Die Lötstoppmasken Lagen heissen F.Mask (Bestückungsseite) und B.Mask (Lötseite).&lt;br /&gt;
* Wie kann man Bauteilmaße in den Ansichten (Footprint, Layout, 3D-View) anzeigen?&lt;br /&gt;
** Anzeige im Layout: Layer &amp;quot;Zeichnung&amp;quot; anwählen. In der rechten Menueleiste &amp;quot;Bemaßung hinzufügen&amp;quot; wählen. Das ist der fünfte Button von unten mit der &amp;quot;blauen Bemaßung&amp;quot;. Jetzt an einer Stelle links ins Layout klicken. Maus verschieben und noch einmal links klicken und die Maus seitlich verschieben. Es wird ein Maßpfeilsystem zwischen erstem und und zweitem Mausklick angelegt, deshen höhe man mit der Maus einstellen kan. Ein weiterer linker Mausklick fixiert das System. Das Anklicken der Beschriftung mit der rechten Maustaste erlaubt das Editieren. Das System wird immer in der Einheit angelegt, die in der linken  Menueleiste vorgewählt wurde. Die Rasterung der aktuellen Einstellung wird auch übernommen. Späteres Ändern von Einheit- und Raster ändern die Beschriftung nicht mehr. In 3D und im Footprint geht diese Möglichkeit nicht.&lt;br /&gt;
** Weitere Möglichkeiten: Einen Maßstab als footprint/Modul anfertigen und zum Messen in das Board einfügen.&lt;br /&gt;
** Wenn man im Layout aber direkt etwas ausmessen möchte, so geht das über den relativen Nullpunkt. Unten im Rahmen rechts sind vier Felder. Die beiden linken zeigen die absoluten Koordinaten, an, die beiden rechten die relativen Koordinaten in Bezug auf einen relativen Nullpunkt. Defaultmäßig stimmen absoluter und relativer Nullpunkt ersteinmal überein. Per &amp;quot;Space bar&amp;quot; drücken setzt Du den relativen Nullpunkt an den Ort des Mauszeigers. Wenn Du nun die Maus verfährst, zeigen die relativen Koordinaten nun den vertikalen und horizontalen Abstand zum Nullpunkt. Die Diagonale muss leider über den Pythagoras selber ausgerechnet werden, oder indem man die Polarkoordinateneinstellung wählt (linke Menueleiste). Durch geschicktes setzten des Nullpunktes kann man nun auf der Platine herummessen. Winkel können auch über die Polarkoordinateneinstellung gemessen werden. Im Moduleditor geht das analog. Das 3D-View kann zur Zeit (Jannuar 2011) überhaupt keine Bemaßung.     &lt;br /&gt;
* Wie kann man mit der KiCAD Version 20100314 &#039;&#039;&#039;einseitige&#039;&#039;&#039; Platinen erstellen?&lt;br /&gt;
** http://www.mikrocontroller.net/topic/172015#1651239&lt;br /&gt;
** aktueller: http://www.mikrocontroller.net/topic/172015#1794699&lt;br /&gt;
*Und wie teile ich KiCAD mit, daß der Autorouter nur eine Seite verwenden soll?&lt;br /&gt;
** Auf die doofe Tour: Erst in KiCAD zweiseitig wählen, und dann beide Lagen im Autorouter als &amp;quot;Unterseite&amp;quot; wählen.&lt;br /&gt;
* Wie kann man den Nullpunkt eines Layouts verschieben?&lt;br /&gt;
** http://www.mikrocontroller.net/topic/179680#1730452 für den Layout Editor PCBnew. Im Moduleditor bei Erstellung eines Footprints kann man den Ankerpunkt frei Mithilfe des Anker-Tools aus der rechten Menüleiste (das Ankersymbol) setzten. Gleiches gilt für den Symboleditor.&lt;br /&gt;
* Wie gehen runde Bögen in KiCAD?&lt;br /&gt;
**http://www.mikrocontroller.net/topic/202512#1994063&lt;br /&gt;
* Wie benutze ich den interaktiven Router (Push &amp;amp; Shove) in PCBnew?&lt;br /&gt;
** Dazu muss in PCBnew im Pulldown-Menue unter &amp;quot;Ansicht&amp;quot; die Option &amp;quot;Canvas nach OpenGL umschalten&amp;quot; oder &amp;quot;Canvas nach Cairo umschalten&amp;quot;gewählt werden. Wenn man nun, wie gewohnt, aus der rechten Button Leiste das Verlegen von Leiterbahnen wählt, eine Leiterbahn/Luftlinie wählt und rechts anklickt, erhält man den interaktiven Router. Aber Achtung - wegen des geänderten Kontextmenues kann es sinnvoll sein, für andere Tätigkeiten auf die Voreinstellungen zurückzuschalten.&lt;br /&gt;
* Ich habe mein Board fertig geroutet, stelle aber jetzt fest, das ich noch einige Leiterbahnbreiten ändern muss. Wie geht das am einfachsten?&lt;br /&gt;
**http://www.mikrocontroller.net/topic/205851#new&lt;br /&gt;
*Ich kann Pads nicht anschlissen bzw. ich bekomme vom DRC Fehlermeldungen, daß ich Pads nicht angeschlossen habe, obwohl sie angeschlossen sind.&lt;br /&gt;
**http://www.mikrocontroller.net/topic/204717#new&lt;br /&gt;
*Wie kann ich Daten für automatische Bestückung (Pick&amp;amp;Place) erzeugen?&lt;br /&gt;
** In PCBnew unter Datei &amp;gt; Fertigungsdateien &amp;gt; Bauteile Positionsdatei (.pos). Aber dieses verlangt, das die Footprints auch die richtigen Informationen dazu enthalten. Um diese einzustellen, den Footprint im Moduleditor öffnen und unter dem Button &amp;quot;Bauteileigenschaften&amp;quot; in &amp;quot;Attribute&amp;quot; eine Markierung bei &amp;quot;Normal+Einfügen&amp;quot; machen. Dann wird der Ankerpunkt des Modules für die Positionsdatei verwendet. Damit sinnvolle Daten entstehen, sollte der Ankerpunkt in die Mitte des Footprintes gesetzt worden sein. &lt;br /&gt;
*Und wie erzeuge ich ein Excellon Drillfile?&lt;br /&gt;
** In PCBnew unter Datei &amp;gt; Fertigungsdateien &amp;gt; Bohrdaten. Die Datei enthält auch eine Werkzeugliste. Kicad legt u.U. zwei Drillfiles an, wenn erforderlich. Eines für durchkontaktierte, und eines für nicht durchkontaktierte Bohrungen. Wer eine extra Liste und eine Statistik wünscht, muss auch noch &amp;quot;Bericht über Bohrung&amp;quot; anwählen.&lt;br /&gt;
** Bei mir wird aber nur ein Drillfile erzeugt. Was läuft falsch?&lt;br /&gt;
***Die NPTH Drills müssen im Pad-Editor explizit als solche gekennzeichnet werden. In PCBnew erkennt man sie dann als dicke gelbe Flächen. Siehe: http://www.mikrocontroller.net/topic/322941#3989397 Bei älteren Footprints ist das aber noch nicht komplett umgesetzt. &lt;br /&gt;
* Wenn PCBnew die Netzliste eingelesen hat, liegen alle Bauteile auf einem Haufen. Zum Plazieren eines herausgreifen ist mühsam. Wie geht das am einfachsten?&lt;br /&gt;
** In PCBnew &amp;quot;T&amp;quot; drücken. Es poppt ein Fenster auf, wo man die Bauteilreferenz (den Namen) eingeben kann. Und schon hängt das Bauteil zum Bewegen am Zeiger. Die Bedienung ist letztlich genauso wie das &amp;quot;m&amp;quot; und die Komandozeile in Eagle. Siehe http://www.mikrocontroller.net/topic/293903#3133990&lt;br /&gt;
** &amp;quot;Raef&amp;quot; hat ein Python Script erstellt, das Bauteile automatisch ähnlich der Anordnung im Schaltplan plaziert. Siehe: http://www.mikrocontroller.net/topic/293903#3245990&lt;br /&gt;
* Ich habe ein fertiges Layout. Jetzt möchte ich aber andere Footprints verwenden, und anschliessend nicht neu routen müssen. Wie geht das?&lt;br /&gt;
** Üner CVpcb und Neueinlesen der Netzliste. Siehe: http://www.mikrocontroller.net/topic/297885#new&lt;br /&gt;
* Ich will links herum routen, aber Kicad meint unbedingt rechts herum (...oder umgekehrt). Wie kann ich die Leiterbahnen &amp;quot;flippen&amp;quot;?&lt;br /&gt;
** Mit &amp;quot;/&amp;quot; (Slasch) http://www.mikrocontroller.net/topic/280028#new&lt;br /&gt;
* Ich hätte gerne die Tastenkürzel in kicad so wie in meinem gewohnten Programm. Wie geht das?&lt;br /&gt;
** Siehe http://www.mikrocontroller.net/topic/283959#3007173 . Vieleicht ist einer ja so nett, und stellt Konfigurationsfiles für Leute die aus EAGLE, ORCAD oder so wechseln, bereit.&lt;br /&gt;
* Ich habe ein kleines Board fertig geroutet. Jetzt möchte ich mehrere davon zu einer größeren Platine zusammenführen (sog. Mehrfachnutzen), um sie rationeller fertigen zu können.&lt;br /&gt;
** Siehe http:http://www.mikrocontroller.net/topic/292334#new . Das geht natürlich genauso, wenn man verschiedene Platinen so zu Nutzen zusammenfügen möchte, oder halt kleinere Teillayouts zu einem Gesamtboard.&lt;br /&gt;
* Ich habe einen Schaltplan mit Subschaltplänen, zu denen ich separate Layouts erstellen möchte.&lt;br /&gt;
** Dazu diesen Subschaltplan explizit in EEschema öffnen, und die Netzliste nur für diesen Subschaltplan exportieren.  Weitergehen wie üblich. Siehe: http://www.mikrocontroller.net/topic/330740#new&lt;br /&gt;
* Ich möchte Varianten eines Layouts erstellen. Was ist dazu zu sagen? Siehe: http://www.mikrocontroller.net/topic/330740#3616697&lt;br /&gt;
** Siehe http://www.mikrocontroller.net/topic/292123#new&lt;br /&gt;
* Wie importiere ich DXF-Dateien in PCBnew?&lt;br /&gt;
** Dafür existiert eine Import Funktion in PCBnew: Datei &amp;gt; Importieren &amp;gt; DXF-Datei. Siehe http://www.mikrocontroller.net/topic/327628#new&lt;br /&gt;
* Wie wird man den merkwürdigen Rahmen los?&lt;br /&gt;
** 1) Genauso wie im Schaltplan. Dazu den pl_editor (der ganz rechte Button im KiCad Hauptfenster) starten, und FAST alles entfernen. Dazu in der linken Spalte nacheinander alles aktivieren, und mit rechts anlicken und dann &amp;quot;entfernen&amp;quot; wählen. Aber vorsicht, wenn alles Entfernt wird, taucht das Original Layout wieder auf. Workaround war bei mir, eine zusätzliche Alibilinie hinzuzufügen, die von X 0,000 Y 0,000 bis  X 0,001 Y 0,000 reicht. Das ist ein &amp;quot;Fliegenschiss&amp;quot; in der linken oberen Ecke. Jetzt kann alles andere gelöscht werden. Den so geleerten Rahmen unter einem beliebigen Namen mit der Endung .kicad_wks wegspeichern. Im geöffneten Schaltplan kann der dann unter Datei &amp;gt; Seite einrichten ganz unten unter &amp;quot;page layout file description&amp;quot; die entsprechende Datei eingebunden werden. Es bleibt aber dem Anwender offen, ob er den Rahmen komplett entfernt, oder noch Felder mit Textbeschreibungen übernimmt. Für gesteigerten Komfort kann diese Datei dann auch in ein Template eingebunden werden. &lt;br /&gt;
** 2) Beim Ausdrucken Frame deaktivieren.&lt;br /&gt;
** 3) Als SVG exportieren. Dort den Frame deaktivieren.&lt;br /&gt;
** 4) Beim Plotten (z.B. in Gerber) Frame deaktivieren. Ist eigentlich defaultmäßig eingestellt. &lt;br /&gt;
** Siehe: http://www.mikrocontroller.net/topic/343509#3791448&lt;br /&gt;
* Ich möchte einen bestimmten Footprint verwenden (von dem ich weiss, dass er existiert), kann ihn aber in der Auswahl der Footprints von PCBnew nicht finden.&lt;br /&gt;
**Die Bibliothek, in der er enthalten ist, muss erst in das Verzeichnis der aktiven Bibliotheken in PCBnew eingetragen werden. &lt;br /&gt;
* Ich möchte Footprint-Bibliotheken in das Verzeichnis der verwendeten Bibliotheken von PCBnew eintragen. Wie geht das?&lt;br /&gt;
** https://www.mikrocontroller.net/topic/372123#new  &lt;br /&gt;
* Ich habe Probleme mit den Umgebungsvariablen KISYSMOD, KISYS3DMOD, KIPRJMOD, KIGITHUB beim Eintragen der Bibliothekstabellen.&lt;br /&gt;
** KISYSMOD ist eine Variable, die den Pfad zu den global verwendeten KICAD-Modulen (Footprints) angibt. KIPRJMOD ist das gleiche, für projektspezifische Module. KISYS3DMOD beschreibt den Pfad zu den 3D-Modellen, und KIGITHUB weisst den Pfad ins Internet zu den Githubbibliotheken.&lt;br /&gt;
** Nähere Informationen dazu findet man hier: http://www.mikrocontroller.net/topic/344139#new und hier : http://www.mikrocontroller.net/topic/344029#new&lt;br /&gt;
** Falls alles nichts hilft: Nan kann den Pfad auch komplett am Stück in die Bibliothekstabelle eintragen. Copy&amp;amp;Paste funktioniert dort aber nicht per rechtem Mausklick, sondern per &amp;lt;Str-c&amp;gt; (Kopieren) und &amp;lt;Str-v&amp;gt; (einfügen). Einfacher als die Bibliothekstabelle lässt sich darum die fp-lib-table Datei per Editor bearbeiten. Unter Linux findet sich die Tabelle für globale Bibliotheken bis zur BZR5113 direkt im Homeverzeichnis. Ab BZR5114 (ca. 5. September 2014) fiondet sich die globale fp-lib-table in $HOME/.config/kicad. Die fp-lib-table für projektbezogene Bibliotheken finden sich in den korrespondierenden  Projektverzeichnissen.&lt;br /&gt;
* Ich würde gerne aus den Mikrowellen Tools die Funktion &amp;quot;Polynominales Muster&amp;quot; verwenden. Dabei werde ich nach einem KiCad-Shapefile gefragt, aber ich weiss nicht, wie das File aussehen muss.&lt;br /&gt;
** Einen Hinweis zum Aussehen des Files gibt es hier: https://www.mikrocontroller.net/topic/369330#4166392 Allerdings müssen die Werte der Polynomstruktur anderweitig berechnet werden, und mit einem Editor manuell in diese Form gebracht werden.&lt;br /&gt;
* Wie erstelle ich koplanare Leitungen in KiCad?&lt;br /&gt;
** siehe diese Diskussion: https://www.mikrocontroller.net/topic/370700#new&lt;br /&gt;
* Ich möchte Bauteile im Kreis oder in einem Gittermuster/Array anordnen. Gibt es dafür automatische Hilfestellungen?&lt;br /&gt;
** Ja. Objekt Deiner Wahl rechts anklicken, eventuell Auswahl verfeinern, und dann im aufpoppenden Menue &amp;quot;Array erstellen&amp;quot; wählen. Geht nicht nur für Bauteile, sondern auch für Pads, Leiterbahnen ec. Siehe: http://www.mikrocontroller.net/topic/178816#new&lt;br /&gt;
&lt;br /&gt;
=== Layout: Python Scripting ===&lt;br /&gt;
&lt;br /&gt;
Das Python2-Scripting ist bisher nur in PCBnew implementiert und noch sehr experimentell. Daher ist leider auch der aktuelle Stand der Dokumentation zum Python-Skripting in PCBnew noch etwas dürftig. Trozdem hier Links dazu:&lt;br /&gt;
* http://www.kicad-pcb.org/display/KICAD/KiCad+Scripting+Reference+Manual (Allgemein. Achtung! Kicad braucht beim compilieren spezielle Befehle, um Python-Scripting tauglich zu sein.)&lt;br /&gt;
* http://dev.kicad-pcb.org/doxygen-python/index.html (Definitionen von Namespaces, Classes und Files)&lt;br /&gt;
&lt;br /&gt;
Für Linux-Debian:&lt;br /&gt;
Aktuell (07. Februar 2014) mit  Pcbnew Version: (2014-01-27 BZR 4641)-product Release build auf&lt;br /&gt;
Platform: Linux 3.2.0-4-686-pae i686, 32 bit, Little endian, wxGTK (Debian Wheezy) gilt:&lt;br /&gt;
* Geht aktuell nur für PCBnew.&lt;br /&gt;
* Klassenbibliotheken: Zwei Dateien pcbnew.py und _pcbnew.so auf dem Pfad: /usr/lib/python2.7/dist-packages/&lt;br /&gt;
* Die Klassenbibliothek wird mit den üblichen Python2 Methoden importiert: z.B. &amp;quot;import pcbnew&amp;quot; oder &amp;quot;from pcbnew import *&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Beispielprogramm, das alle Footprints aus einer Legacy-Fotprint Datei auflisted und den Referenzbezeichner dazuschreibt::&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python &lt;br /&gt;
# das war das Shebang.&lt;br /&gt;
&lt;br /&gt;
from pcbnew import * # Import der Bibliothek. &lt;br /&gt;
libpath = &amp;quot;/home/DuUser/KiCad-Daten/Module/ModuleGrosserSampler/KiCadLegacyFottprints.mod&amp;quot; # Übergabe des Pfades.&lt;br /&gt;
lst = FootprintEnumerate(libpath) &lt;br /&gt;
for name in lst:&lt;br /&gt;
    m = FootprintLoad(libpath,name)&lt;br /&gt;
    print name,&amp;quot;-&amp;gt;&amp;quot;, m.GetReference()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Scripting Möglichkeit ist so neu, dass bis jetzt die Scripting Testdateien für das KiCAD interne automatische Qualitätssicherungssystem noch nicht komplett sind.&lt;br /&gt;
Unter http://bazaar.launchpad.net/~kicad-product-committers/kicad/product/files/head:/qa/testcases/ finden sich bereits geprüfte Testskripte, und unter http://bazaar.launchpad.net/~kicad-product-committers/kicad/product/files/head:/pcbnew/scripting/examples/ finden sich ungetestete Testskripte.&lt;br /&gt;
&lt;br /&gt;
Sie alle können als Beispiele genommen werden, wie das mit dem Skripting gemeint ist, und als Vorbild für eigene Skripte dienen.&lt;br /&gt;
&lt;br /&gt;
=== Module Editor ===&lt;br /&gt;
* Wie erstellt man Footprints für Bauteile?&lt;br /&gt;
** Mit dem Footprint Editor. Er ist bei älteren KiCad Versionen nur aus PCBnew heraus zu starten. Bei neueren KiCad Versionen hat er einen eigenen Button im KiCad Start Window.&lt;br /&gt;
** Spezielleres: http://www.mikrocontroller.net/topic/356151#new&lt;br /&gt;
* Wie verbinde kopiere ich etwas aus einem Footprint in einen anderen hinein, bzw. wie verbinde/merge ich zwei Footprints?&lt;br /&gt;
** http://www.mikrocontroller.net/topic/288167#3061997&lt;br /&gt;
* Kann man im Module Editor die Eigenschaften aller Pads gleichzeitig ändern?&lt;br /&gt;
** http://www.mikrocontroller.net/topic/93131#799550 &lt;br /&gt;
* Ich brauche einen Footprint, bei dem mehrere Pads verbunden sind, will aber nicht im Schaltplan zig Pins aufführen und anschliessen müssen.&lt;br /&gt;
**http://www.mikrocontroller.net/topic/208982#new&lt;br /&gt;
**http://www.mikrocontroller.net/topic/204717#new&lt;br /&gt;
* Wie erzeugt man thermal Vias in Kicad?&lt;br /&gt;
** Leider bisher nur experimentell: http://www.mikrocontroller.net/topic/298028#3187259&lt;br /&gt;
* Wie kann man Bauteilmaße in in den Ansichten (Footprint, Layout, 3D-View) anzeigen?&lt;br /&gt;
* Wie verwalte ich Footprint Bibliotheken?&lt;br /&gt;
** Indem man sich ein Board erstellt, alle Footprints, die man zusammenfassen möchte, auf das Board stellt, und dann untet Dateien &amp;gt; Footprints archivieren &amp;gt; Footprint Archiv erstellen wählt. Das so erstellte Board kann auch zu Dokumentationszwecken geplottet werden. Eventuell möchte man einige Footprints, die zu Hilfszwecken (z.B. Skalen) auf dem Board sind, anschliessend mit dem Bibliothekseditor daraus löschen.&lt;br /&gt;
** Alternativ, im dem &amp;quot;neuen&amp;quot; *.pretty Format, mit einem Dateiverwaltungsprogramm Deiner Wahl. Siehe http://www.mikrocontroller.net/topic/320301#new&lt;br /&gt;
* Wie werden die Parameter für Lötpaste/Lötstopmaske vergeben?&lt;br /&gt;
**http://www.mikrocontroller.net/topic/356151&lt;br /&gt;
* Ich möchte für einen Footprint Pads in einem Gittermuster/Array oder im Kreis anordnen. Gibt es dafür automatische Hilfestellungen?&lt;br /&gt;
** Ja. Pad rechts anklicken. Eventuell erfolgt noch eine Feinauswahl. Dann im aufpoppenden Menue &amp;quot;Array erstellen&amp;quot; wählen.&lt;br /&gt;
&lt;br /&gt;
=== 3D-Ansicht ===&lt;br /&gt;
* Die 3D-Ansicht funktioniert bei mir nicht.&lt;br /&gt;
** http://www.mikrocontroller.net/topic/289075#new&lt;br /&gt;
* Kann man die 3D-Ansicht in ein 3D-CAD Programm exportieren? &lt;br /&gt;
**http://www.mikrocontroller.net/topic/203388#new&lt;br /&gt;
* Wie kann man Bauteilmaße in in den Ansichten (Footprint, Layout, 3D-View) anzeigen?&lt;br /&gt;
&lt;br /&gt;
Da KiCAD in Punkto 3D-Ansicht komplett auf Wings3D beruht, und die 3D Modelle der Bauteile wrl-files sind, die mit Wings3D (oder Blender) erstellt werden können, sei hier auf ein Wings3D Handbuch verwiesen: http://www.oortman3d.com/wings3d/TheWings3dHandbook.pdf&lt;br /&gt;
&lt;br /&gt;
Viele Bauteilhersteller (vor allem von eher mechanischen, wie z.B. Stecker, Buchsen, Befestigung...) bieten fertige 3D-Modelle an. Diese sind meistens in den Formaten STEP oder IGES. So kann man diese in das von KiCAD benötigte .wrl (VRML 2.0) konvertieren:&lt;br /&gt;
# STEP oder IGES in [http://gcad3d.org/ gCAD3D] öffnen (File &amp;gt; Open Model)&lt;br /&gt;
# als Wavefront .obj speichern (File &amp;gt; Save Model as &amp;gt; OBJ)&lt;br /&gt;
# Das .obj in [http://www.wings3d.com/ Wings 3D] importieren (File &amp;gt; Import &amp;gt; Wavefront .obj)&lt;br /&gt;
# Als VRML 2 exportieren (File &amp;gt; Export &amp;gt; VRML 2.0 .wrl)&lt;br /&gt;
# Im KiCAD-Moduleditor die .wrl-Datei als 3D-Modell auswählen&lt;br /&gt;
# Eventuell muss man die Skalierung und Positionierung anpassen, die angezeigten Pads und Löcher helfen dabei. Die am meisten benötigten Faktoren dürften dabei 0,3937 und 2,54 sein - bei den Konvertierungen kommt leicht die Einheit Zoll oder cm durcheinander.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine andere Möglichkeit .obj oder .stl-Dateien aus STEP und IGES zu erzeugen ist [http://free-cad.sourceforge.net/ FreeCAD]. Obwohl es auch .wrl direkt erzeugen kann, können diese nicht in KiCAD geladen werden. Der Umweg über .obj oder .stl und Wings 3D löst dies aber auch hier.&lt;br /&gt;
&lt;br /&gt;
Wenn man das Board wieder in einem CAD-Programm verwenden will um z.B. ein Gehäuse zu konstruieren, sollte man wieder STEP-Dateien erzeugen. Neuere KiCAD-Versionen können zwar VRML exportieren, doch das beschreibt nur Umrisse und keine Körper (Solids). CAD-Programme zum Gehäusedesign brauchen jedoch letzteres. So geht die Konvertierung:&lt;br /&gt;
# VRML aus KiCAD exportieren (File &amp;gt; Export &amp;gt; VRML)&lt;br /&gt;
# .wrl-Datei mit Hilfe von [http://www.cs.princeton.edu/~min/meshconv/ meshconv] in eine STL-Datei konvertieren: &amp;lt;code&amp;gt;meshconv boardname.wrl -c stl -o boardname.stl&amp;lt;/code&amp;gt;&lt;br /&gt;
# Die STL-Datei mit [http://www.solveering.com/products/products_stl2step.html stl2step] in eine STEP-Datei konvertieren&lt;br /&gt;
&lt;br /&gt;
Man sollte hinterher im CAD nochmal genau die Maße kontrollieren. Denn die Konvertierung von STL nach STEP ist nur eine Approximierung und keine exakte, verlustfreie Konvertierung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Und wie bedient man Wings3d?&lt;br /&gt;
** Ein (vorläufiger) Merkzettel/Ultrakurzanleitung zur Bedienung von Wings3D findet sich hier: [[Media:Kicad-Wings3D_Merkzettel_29November2012.pdf]]. Wenn man nur mit Wings3d Modelle für Kicad erstellen will, langt das eventuell schon als Tutorial. There is also an English translation of this leaflet about using wings3d for kicad  at [[Media:Kicad-Wings3D_Leaflet_25April2013.pdf]].&lt;br /&gt;
&lt;br /&gt;
=== Drucken/Plotten/Gerber Export/Excellon Drillfiles Export ===&lt;br /&gt;
&lt;br /&gt;
==== Drucken ====&lt;br /&gt;
* Wie exportiert man den Schaltplan oder das Layout als Bild (PNG o.ä.)? &lt;br /&gt;
** Drucken über Postscript-Treiber und Umwandeln mit Ghostscript&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/96060#1061492]&lt;br /&gt;
** Plot to Clipboard [http://www.mikrocontroller.net/topic/117562#1056566]&lt;br /&gt;
* Wie kann ich GENAU ausdrucken? Mein Ausdruck auf ABC ist ca. X % zu klein oder Y% zu groß! &lt;br /&gt;
** So genau sind einfache Drucker bzw. Druckertreiber selten. Aber meistens hilft folgendes: Mache einen 1:1 (100%) Probeausdruck. Messe auf dem Ausdruck nach, wie groß er tatsächlich geworden ist. Berechne die Abweichung und gebe sie in den Drucker bzw. Druckertreiber unter Einstellung ein, vorausgesetzt, der Drucker bzw. Druckertreiber kann das. Mit dem Wert machst Du wieder eine Probeausdruck, messe wieder nach, und wenn es mit der Einstellung funktioniert hat, kannst Du Deine Folie bedrucken. Wenn das nicht klappen kann, weil Du stark abweichende Werte für horizontal und vertikal bräuchtest, aber der Drucker nur einen gleichen Wert für beides kennt, hast Du einen (zu) schlechten Drucker. Trozdem nicht verzweifeln, weil KiCAD beim Drucken oder Plotten in der X- und Y-Achse getrennt skalieren kann. Aber Vorsicht bei Weitergabe der so erzeugten Dateien: Sie sind individuell auf einen Drucker angepasst, und produzieren auf einem anderen Drucker nur falsch skalierte Ausdrucke. Weil der Wert von Drucker zu Drucker unterschiedlich ist, ist es auch sinnvoll, diese Skalierung direkt am speziellen Drucker/Druckertreiber zu machen. Tipp: Wenn Du den Wert erfolgreich ermittelt hast, so kleb Dir einen Zettel auf den Drucker mit dem Wert. Die Werte sind zwar individuell für jeden Drucker, aber meistens für den speziellen Drucker durchaus fix. Und Du hast ihn sofort wieder parat, wenn der Drucker resettet wurde. Dies ist übrigens ein allgemeiner Tipp für das Ausdrucken, der auch für Eagle, Target, Altium usw. gilt.&lt;br /&gt;
** Thema Skalieren - Die aktuelle Situation (August 2013): http://www.mikrocontroller.net/topic/304619#new &lt;br /&gt;
** Und nochmal Thema Skalieren: http://www.mikrocontroller.net/topic/371079#4191106&lt;br /&gt;
* Wie kann man das Layout invers ausdrucken, d.h. alle Leiterbahnen und Pads müssen weiß bleiben, der Rest wird schwarz ausgedruckt?&lt;br /&gt;
** Beim Plotten den Haken bei Negativ-Plot setzen [http://www.mikrocontroller.net/topic/156202#1474507]&lt;br /&gt;
* Ich habe irgendwie Probleme mit dem Ausdrucken.&lt;br /&gt;
** Verzerrt: http://www.mikrocontroller.net/topic/207764#new&lt;br /&gt;
** Sonderzeichen: http://www.mikrocontroller.net/topic/207310#new&lt;br /&gt;
** In der aktuellen Version 2012-01-19 BZR 3256)-stable besteht ein generelles Druckproblem. Aber Plotten geht wunderbar!&lt;br /&gt;
** Aktualisierter Stand 23. Dezember 2012: http://www.mikrocontroller.net/topic/280958#new&lt;br /&gt;
** Aktualisierter Stand vom 21. Juli 2013: http://www.mikrocontroller.net/topic/303043#3249166&lt;br /&gt;
&lt;br /&gt;
* Ich würde gerne PDF Dateien aus meinem Layout erstellen, aber irgendwie ist der Ausdruck defekt.&lt;br /&gt;
** Drucken ist aus Kicad manchmal ein Problem, auch in eine Datei hinein. Aber Plotten und Exportieren in SVG funktioniert gut. Von SVG zu PDF kommt man über Inkscape. Siehe hier: http://www.mikrocontroller.net/topic/303043#3249166&lt;br /&gt;
* Wie kann ich mir einen Bohrplan ausdrucken, um mit der Hand zu bohren?&lt;br /&gt;
**http://www.mikrocontroller.net/topic/266037#new&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== SVG Plotten ====&lt;br /&gt;
&lt;br /&gt;
* Meine erzeugten SVG Plots sind kaputt. Ich erhalte nur Fehlermeldungen, wenn ich sie in Inkscape oder Gimp einlesen will.&lt;br /&gt;
** Es besteht ein Problem mit dem SVG Export, wenn man Schaltpläne oder Boards in SVG exportiert, die ein Ampersand (Kaufmansund, &amp;quot;&amp;amp;&amp;quot;) im Dateinamen haben. Dieser Dateiname tauch dann innerhalb der SVG Datei in einem Titelblock auf, wo das &amp;quot;&amp;amp;&amp;quot; dann ein Problem bedeutet (Es leitet eine Art Escape-Sequenz ein). Sowohl Kicad als auch Inkscape/Gimp aktzeptieren &amp;quot;&amp;amp;&amp;quot; im Dateinamen, und sowol unter Windows als auch Linux ist das &amp;quot;&amp;amp;&amp;quot; im Dateinamen legal....darum bringt auch eine Veränderung des Namens der SVG-Datei keine Lösung. Eine Lösung ist, Grundsätzlich in Kicad keine &amp;quot;&amp;amp;&amp;quot; in Dateinamen zu verwenden, wenn man einen SVG-Export macht. Alternativ kann man mit einem Editor das &amp;quot;&amp;amp;&amp;quot; aus dem Titelblock (Das ist NICHT der Dateiname, sondern in der Datei selber alles zwischen &amp;lt;titel&amp;gt; und &amp;lt;/titel&amp;gt;) der SVG-Datei löschen. Angeblich kommt der Bug aus den verwendeten wx-Bibliotheken. Siehe den Bugreport: https://bugs.launchpad.net/kicad/+bug/1171160&lt;br /&gt;
&lt;br /&gt;
==== Gerber Export ====&lt;br /&gt;
&lt;br /&gt;
* Kann man Gerber-Dateien exportieren?&lt;br /&gt;
** Ja. Es wird extended Gerber 247X exportiert. Einheit ist inch (doppelt sowohl im 247d als auch im 247x Stil definiert). Die Y-Koordinaten sind im allgemeinen negativ. KiCAD verwendet für Flächen das in Gerber spezifizierte Polygon Makro und kein &amp;quot;stroke fill&amp;quot;.&lt;br /&gt;
** Um Gerber Dateien zu erstellen, wählt man aus der oberen Menueleiste ganz links Datei &amp;gt; Plotten und dann oben links unter Plotformat &amp;quot;Gerber&amp;quot; &lt;br /&gt;
** KiCad unterstützt auch die kürzlich eingeführten Gerber-Attribute. Die Anwendung derselben muss aber explizit angewählt werden. Dazu setzt man im Gerber-Plottmenue im Feld &amp;quot;Gerber Optionen&amp;quot; bei &amp;quot;include extended attributes&amp;quot; einen Haken.&lt;br /&gt;
** KiCad kann automatisch die Lötstoppmaske von der Siebdruckmaske (Silk screen - Bestückungsaufdruck) abziehen, damit nicht der Bestückungsaufdruck versehentlich über Pads liegt und dort das Löten verhindert. Dazu muss aber im Gerber-Plottmenue im Feld &amp;quot;Gerber Optionen&amp;quot; bei &amp;quot;Subtrahiere Lötstoppmaske von Siebdruckmaske&amp;quot; ein Haken gesetzt werden.&lt;br /&gt;
* Wie kann man den Gerber-Plot so ausdrucken, dass in der Mitte von Pads und Vias ein Zentrierloch frei bleibt?&lt;br /&gt;
** http://article.gmane.org/gmane.comp.cad.kicad.user/3457&lt;br /&gt;
&lt;br /&gt;
==== Excellon Drillfiles exportieren ====&lt;br /&gt;
&lt;br /&gt;
* Wie erstelle ich mit KiCad Excellon Drillfiles?&lt;br /&gt;
**siehe hier: http://www.mikrocontroller.net/topic/310333#new&lt;br /&gt;
&lt;br /&gt;
==== KiCad Board Dateien direkt zum Hersteller ====&lt;br /&gt;
&lt;br /&gt;
* Bei Bestellungen bei PCB-Pool ist deren GC-Prevue NICHT mehr erforderlich, weil PCB-Pool mittlerweile KiCAD *,brd Dateien direkt aktzeptiert. Siehe http://www.pcb-pool.com/ppde/info_dataformat.html Das gilt auch für viele andere Hersteller. im Zweifel dort einmal nachfragen.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Trotzdem&#039;&#039;&#039; sollte man &#039;&#039;&#039;besser Gerber Dateien&#039;&#039;&#039; zum Platinenhersteller senden. Das gilt &#039;&#039;&#039;grundsätzlich&#039;&#039;&#039; so auch für andere Platinen Layout Programme. Der Grund ist hier angegeben: https://www.mikrocontroller.net/wikisoftware/index.php?title=Gerber-Tools&amp;amp;action=edit&amp;amp;section=8&lt;br /&gt;
&lt;br /&gt;
=== Import ===&lt;br /&gt;
* Kann man EAGLE Dateien importieren? (=&amp;gt; Obacht bei Weitergabe der Daten!)&lt;br /&gt;
** http://www.mikrocontroller.net/topic/70905#797416&lt;br /&gt;
** http://www.mikrocontroller.net/topic/120373#1089933&lt;br /&gt;
** Aktuell: http://www.mikrocontroller.net/articles/KiCAD#Konverter&lt;br /&gt;
* Wie bindet man fremde KiCAD Bibliotheken ein?&lt;br /&gt;
** EESchema (Schaltplaneditor) starten, unter Einstellungen &amp;quot;Bibliothek&amp;quot;  auswählen, auf &amp;quot;Hinzufügen&amp;quot; klicken, neue Bibliothek auswählen dann &amp;quot;öffnen&amp;quot; und in der Projektdatei &amp;quot;Speichern&amp;quot;. Gültig für Version 20090216Final, 2011-04-29-BZR2986-WinXP und Version: (2011-11-27 BZR 3249)-stable unter Platform: Linux 2.6.32-5-686 i686, 32 bit, Little endian, wxGTK.&lt;br /&gt;
&lt;br /&gt;
** VERALTET! Das Verfahren zur Einbindung eigener oder fremder Bibliotheken ist under PCBnew genauso.&lt;br /&gt;
** Aktuell: Siehe http://www.mikrocontroller.net/topic/356855#3988114&lt;br /&gt;
Es empfielt sich dringenst, eigene Bibliotheken NICHT zu den KiCAD Bibliotheken im Ordner kicad/share/library bzw. kicad/share/modules für Footprints zu speichern, weil diese dort bei einem Upgrade gelöscht würden. Stattdessen sollte man sich einen kicad Ordner im eigenen home bzw. Benutzerverzeichnis (oder sonstwo, wo es opportun ist, und man Schreibrechte hat) anlegen, mit einem Ort, um eigene Bibliotheken abzulegen.&lt;br /&gt;
&lt;br /&gt;
=== Neues Projekt ===&lt;br /&gt;
Ein neues Projekt legt kicad automatisch nach der in kicad/share/template hinterlegten Projektdatei an. Möchte man, das kicad ein neues Projekt von vorneherein nur mit ausgewählten eigenen Bibliotheken anlegt, so ist eine entsprechende Projektdatei unter kicad/share/template/kicad.pro abzulegen.&lt;br /&gt;
Dies erfordert dort Schreibrechte. Linux roots müssen diese Datei anschliessend mit chmod 755 Dateiname für user lesbar machen.&lt;br /&gt;
Bei einem upgrade würde kicad.pro gelöscht. Daher sollte man sich davon eine Sicherheitskopie in seinem benutzerverzeichnis hinterlegen.&lt;br /&gt;
&lt;br /&gt;
=== Einstellungen sichern / wiederherstellen===&lt;br /&gt;
* Wo speichert KiCAD die Einstellungen ab und wie lassen sich die originalen Einstellungen wiederherstellen?&lt;br /&gt;
** [[http://kicad.sourceforge.net/wiki/index.php/DE:KiCadHB#Einstellungen_sichern_.2F_wiederherstellen]]&lt;br /&gt;
**Man erstelle ein neues Projekt beliebigen Namens, nehme alle Einstellungen (Bibliotheken, Pfade usw.) vor und speichere diese in der aktuellen Projektdatei &amp;quot;name.pro&amp;quot;. Im Ordner KiCAD Verzeichnis ....../kicad/share/template befindet sich eine Datei &amp;quot;kicad.pro&amp;quot;. Diese Datei &amp;quot;kicad.pro&amp;quot; ist die &amp;quot;Musterprojektdatei&amp;quot;, die für alle neuen Projekte verwendet wird. Man benenne sie um in &amp;quot;kicad-orig.pro, und kopiere die aktuelle Projektdatei &amp;quot;name.pro&amp;quot; nun als &amp;quot;kicad.pro&amp;quot; in diesen Template-Ordner. Leider Funktioniert dieses Verfahren nicht in allen KiCAD Versionen. Den originalen Zustand stellt man wieder her, indem man &amp;quot;kicad.pro&amp;quot; umbenennt, und &amp;quot;kicad-org.pro&amp;quot; wieder in &amp;quot;kicad.pro&amp;quot; zurückumbenennt.&lt;br /&gt;
&lt;br /&gt;
=== Bitmaps als Symbol oder Footprint importieren ===&lt;br /&gt;
Der Programmteil Bitmap2component wandelt Bitmaps wahlweise in Symbole oder in Footprints um. Auf diese Weise können also auch Logos oder spezielle Muster für HF-anwendungen in KiCAD importiert werden, sobald sie als Bitmap vorliegen. Diese Funktion ist allerdings sehr neu (im Frühjahr 2011 eingefügt) und eher als experimentell zu bezeichnen. So funktioniert z.B. der Export in ein Symbol in der Version BZR-2986 NICHT.&lt;br /&gt;
&lt;br /&gt;
== Tipps&amp;amp;Tricks / Eigenheiten / Bugs ==&lt;br /&gt;
&lt;br /&gt;
* Nachbearbeitung mit Skript oder Texteditor (Pin Swapping, Versionskontrolle via SVN, Generierung von Packages aus UCF-Listen) &lt;br /&gt;
** http://www.mikrocontroller.net/topic/120373#1100467&lt;br /&gt;
** http://www.mikrocontroller.net/topic/96860#836967&lt;br /&gt;
** http://stawoo.com/dokuwiki/doku.php?id=ecld:kicad:board&lt;br /&gt;
&lt;br /&gt;
* Veraltet! (2006) Schaltplan: Durchnummerieren von GND und PWR erforderlich http://www.mikrocontroller.net/topic/39243#290309&lt;br /&gt;
&lt;br /&gt;
* Zum Verbinden von Schaltplan und Layout müssen an den Bauteilen die Pinnummern mit den Padnummern der Footprints korrespondieren. Das ist &amp;quot;defaultmäßig&amp;quot; nicht immer zu erreichen, weil es unterschiedliche Nummerierungssysteme gibt. Ausser dem Anlegen eines speziellen Footprints kann diese Anpassung für einzelne Bauteile wärend des Layoutens im Moduleditor vorgenommen werden. http://www.mikrocontroller.net/topic/186121#1805890&lt;br /&gt;
* Ich habe einen hierarchischen Schaltplan angefertigt, indem sich eine Schaltung zig mal wiederholt. Eine dieser Subschaltungen habe ich schon geroutet, und möchte dieses Layout genau wie die hierarchischen Schaltpläne mehrfach auf dem Board verwenden.&lt;br /&gt;
** In PCBnew lassen sich mit &amp;quot;Datei&amp;gt;Platine hinzufügen&amp;quot; auch schon geroutete Gruppen von Bauteilen quasi als Modul einfügen, wenn sie zuvor als Board abgelegt wurden. Ebenso kann eine Bauteilgruppe, die in der Form mehrmals vorkommt, und die die schon einmal geroutet worden ist, gruppiert, kopiert und wiederverwended werden. Die dazu nötige Annotation und das Löschen der überzähligen Bauteile muss aber sorgfältig von Hand gemacht werden. &#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; In neueren Versionen von PCBnew ist diese Funktion ausgegraut, wenn PCBnew &amp;quot;normal&amp;quot; aus dem Menue des KiCad Hauptfensters gestartet wurde. Um diese Funktion zu aktivieren, KiCad schliessen und PCBnew wie ein alleinstehendes Program direkt starten.&lt;br /&gt;
** Wer seinen Subschaltplan separat routen möchte, sollte den Subschaltplan explizit in EEschema öffnen und die Netliste nur dieses Subschaltplanes exportieren. Diese Netlist in ein neues Board in PCBnew einlesen und wie üblich routen.&lt;br /&gt;
* Bibliotheken verwalten, umsortieren bzw. neu strukturieren: http://www.mikrocontroller.net/topic/187107#1817559 &lt;br /&gt;
&lt;br /&gt;
* Layout: Rest-Gummiband an Pins http://www.mikrocontroller.net/topic/120373#1092375&lt;br /&gt;
&lt;br /&gt;
* Produktion: http://www.mikrocontroller.net/topic/98034#848965&lt;br /&gt;
&lt;br /&gt;
* Bug in Version 2010-03-14: Unter Einstellungen lässt sich keine einseitige Platine wählen (wichtig für Autorouter). Lösung: Modifikation des .brd Files mit einem Editor [http://www.mikrocontroller.net/topic/172015#1651239]:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;&lt;br /&gt;
:In der *.brd Datei gleich ganz oben...&lt;br /&gt;
:&lt;br /&gt;
:$GENERAL&lt;br /&gt;
:LayerCount 2                 -&amp;gt; auf 1 setzen&lt;br /&gt;
:&lt;br /&gt;
:$SETUP&lt;br /&gt;
:InternalUnit 0.000100 INCH&lt;br /&gt;
:ZoneGridSize 250&lt;br /&gt;
:Layers 2                     -&amp;gt; auf 1 setzen&lt;br /&gt;
:Layer[0] Rückseite power&lt;br /&gt;
:Layer[15] Vorderseite power  -&amp;gt; hab&#039; ich mal beides so gelassen&lt;br /&gt;
:&amp;lt;/pre&amp;gt;                                                                aktueller: http://www.mikrocontroller.net/topic/172015#1794699&lt;br /&gt;
&lt;br /&gt;
* Das Anlegen von Symbolen/Bauteilen in aufgelöster Darstellung ist etwas stolperig. Siehe: http://www.mikrocontroller.net/topic/294095#3136180&lt;br /&gt;
&lt;br /&gt;
* Es empfielt sich, in Kicad vorläufig KEIN Ampersand (Kaufmansund, &amp;quot;&amp;amp;&amp;quot;) im Namen einer Schaltplan- oder Boarddatei zu Verwenden. Es besteht ein Bug beim Export/Plotten nach SVG. Siehe oben unter &amp;quot;Drucken / Export&amp;quot; und dann &amp;quot;Meine erzeugten SVG Plots sind kaputt.&amp;quot;. Siehe auch: http://tech.groups.yahoo.com/group/kicad-users/message/14952&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Kühlkörper&#039;&#039;&#039; können als Symbol und Footprint (Modul) angelegt werden. Die Befestigungslöcher können im  Modul als Pad ausgeführt werden. Die Padnummer aller Pads sollte gleich sein (gleicher Anschluss / über Kühlkörper verbunden), z.B. &amp;quot;1&amp;quot;. Entsprechend ein Symbol mit Pin und korrespondierender Pinnummer anlegen. Wenn der Kühlkörper elektrisch nirgendwo verbunden sein soll, dann die Anschlusspinne im Schaltplan als &amp;quot;unused&amp;quot; markieren. Als Referenz in Symbol und Footprint habe ich &amp;quot;HS&amp;quot; (HeatSink) gewählt. Es ist zu überlegen, ob &amp;quot;HS&amp;quot; nicht auch als Padnummer besser wäre.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Kartenumrisse/Outlines&#039;&#039;&#039;: Für immer wiederkehrende Platinengrössen, z.B. die beliebte Eurokarte, kann zur Vereinfachung des Zeichnens einmal ein Eurokartenumriss im Layer &amp;quot;outlines&amp;quot; gezeichnet werden, und als Modul abgelegt werden. Um die Zahl der Kollisionen beim Einlesen der Netzliste zu verringern, wird im Schaltplan ein Dummy-Symbol ohne Pinne angelegt. In CVpcb dann dieses Symbol mit dem passenden Kartenumriss Footprint/Modul verbinden, und es wird automatisch in PCBnew eingefügt. Als Referenz in Symbol und Footprint habe ich &amp;quot;Outl&amp;quot; (OUTLine) gewählt.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Sprachanpassung&#039;&#039;&#039;: Ich will mein KiCAD auf Deutsch / Englisch / Französisch / Finnisch oder sonst eine Sprache umstellen. Wie geht das?&lt;br /&gt;
** Siehe : http://www.mikrocontroller.net/topic/262039#2719056&lt;br /&gt;
**Die deutsche Übersetzung der Texte und Hilfetexte/Tooltips ist manchmal etwas unelegant. Wem so etwas auffält, bitte Mitteilung am Ende dieses Threads: http://www.mikrocontroller.net/topic/255932#2641638 (deutschsprachig) oder an die KiCAD user group unter https://groups.yahoo.com/neo/groups/kicad-users/info (englischsprachig, auch bei Fällen wo es um die deutsche Übersetzung geht). Diese Mitteilungen nach Möglichkeit nicht in Launchpad.&lt;br /&gt;
** Ich habe aber keine Möglichkeit, die Sprache umzustellen!&lt;br /&gt;
*** Wenn Debian eine Fehlermeldung &amp;quot;Cannot set locale to &#039;xy_XY&#039;. kommt, ist die entsprechende Umgebung nicht installiert. Unter Debian als root in der Konsole: &amp;quot;dpkg-reconfigure locales&amp;quot; aufrufen. Es öffnet sich eine ncurses-gui, wo die entsprechenden Einstellungen gemacht werden können. Für &amp;quot;Deutsch&amp;quot; wähle ich &amp;quot;de_DE.utf8&amp;quot;.&lt;br /&gt;
*** Wenn nichts passiert, fehlen möglicherweise die localisierungs Dateien. Sie sind NICHT Teil der Sourcen, und finden sich in http://bazaar.launchpad.net/~kicad-developers/kicad/doc/files/head:/internat/. Auf Debian und verwandten Systemen müssen die einzelnen localisationsordner, z. B. &amp;quot;de&amp;quot; nach /usr/local/share/kicad/internat kopiert werden. Dann als root dort Leserechte erteilen mit &amp;quot;chmode -R 755 /usr/local/share/kicad/internat&amp;quot;.&lt;br /&gt;
*** Wenn ein Mischmasch aus Englisch und der gewählten Sprache existiert, sind entweder nicht alle Begriffe übersetzt (siehe oben) oder wegen Umbenennung von Variablen ist eine Inkonsistenz entstanden. Siehe: http://www.mikrocontroller.net/topic/326622#3565178&lt;br /&gt;
** Für die KiCad Localsisation wird &amp;quot;GNU gettext&amp;quot; verwendet. Eine kleine Hilfestellung zur Anpassung der Localisation findet sich hier: http://dev.kicad-pcb.org/docs/GUI_Translation_HOWTO.pdf. Info zu Gnu gettext findet sich hier: http://de.wikipedia.org/wiki/GNU_gettext&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Projektdateien (.pro) Pfadschreibweise&#039;&#039;&#039;: In einer Windowsumgebung ist es anscheinend nötig, relative Pfade speziell zu kennzeichnen. Siehe: http://www.mikrocontroller.net/topic/326869#new&lt;br /&gt;
&lt;br /&gt;
=== Problem: Der Ursprung für die Pick und Place bzw. Drill-Daten wurde verändert und lässt sich nicht zurücksetzten. === &lt;br /&gt;
Siehe: http://www.mikrocontroller.net/topic/363280#new&lt;br /&gt;
&lt;br /&gt;
=== Problem: Case Senitive Symbols ab BZR4646 (Jan./Feb. 2014) ===&lt;br /&gt;
Ab BZR4646 sind die Symbole in Eeschema &amp;quot;Case Sensitive&amp;quot;. Das bedeutet: In alten Schaltplandateien wurden für die Symbolnamen nur Großbuchstaben verwendet, auch wenn die Originalnamen in der Library Kleinbuchstaben enthielten. Ab BZR4646 werden die Symbolnamen in den Schaltplandateien genauso geschrieben wie die Originalnamen in der Library. Leider werden dadurch bei alten Schaltplandateien die großgeschriebenen Symbolnamen nicht mehr in den Bibliotheksdateien erkannt. Auch nicht in den &amp;quot;-cache.lib&amp;quot; Dateien. Ganz so kritisch, wie es sich anhört, ist es wiederum auch nicht, weil KiCad schon seit geraumer Zeit die Schaltpläne in der neuen Version speichert. Jemand, der mit aktuellen KiCad Versionen an aktuellen Schaltplänen arbeitet, wird darum den Übergang vermutlich nicht bemerken. Allerdings tritt das Problem bei alten Schaltplänen auf, die möglicherweise Jahrelang unberührt auf der Festplatte lagen. Um die Symbolnamen in diesen alten Schaltplandateien anzupassen, existiert das Python3 Skript &amp;quot;PyKiCad-CaseSensitiveLibCure_RevD_13Apr2015.zip&amp;quot;. Es ist ein &amp;quot;Stand alone&amp;quot; Python3 skript, das nicht in das KiCad interne Python skripting eingebunden ist. Die Datei kann hier bezogen werden:[[Media:PyKiCad-CaseSensitiveLibCure_RevD_13Apr2015.zip]].&lt;br /&gt;
Autor: Bernd Wiebus, GNU-GPL.&lt;br /&gt;
&lt;br /&gt;
Be einigen Linux Distributionen wird neben Python 3 auch noch das Paket &amp;quot;python3-tk&amp;quot; benötigt.&lt;br /&gt;
Sonst gibt es die Fehlermeldung &amp;quot;ImportError: No module named tkinter&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Manueller Start mit: &amp;quot;python3 PyKiCad-CaseSensitiveLibCure_RevD_13Mar2015.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dieses Skript kann benutzt werden, um Schaltpläne, die mit der Eeschema Version (2013-11-29 BZR 4513) von Ende 2013, die in Linux Repositorys (z.B. Debian 7 &amp;quot;Wheezy&amp;quot;) noch sehr verbreitet ist, auf aktuelle KiCad Versionen anzupassen.&lt;br /&gt;
&lt;br /&gt;
=== Problem: Backporting KiCad-Board Dateien (.kicad_pcb) von Version 5 auf Version 4. 2014/2015) ===&lt;br /&gt;
&lt;br /&gt;
Möchte man z.B mit einer KiCad/PCBnew Version BZR 4027 vom 22 Juni 2014, welche in vielen Repositorys noch weit verbreitet ist, eine Board-Datei ( .kicad_pcb), die mit einer neueren PCBnew Version erstellt wurde, z.B. einer BZR 5513 vom 14. März 2015 (die aktuell kompiliert wurde), öffnen, so stösst man auf Probleme. Aktuell die BZR 5513 verwendet für die Board Dateien Version 5, und die alte BZR 4027 verwendet dort die Version 4. Obwohl das Schema der Boarddateien fast gleich ist, enthält die Version 5 Elemente, die es zur Zeit der Version 4 noch nicht gab, und die darum zu Fehlermeldungen und zum Abbruch des Einlesens der Datei führen. Diese Neuerungen beziehen sich auf den Export von Gerberfiles mit Attributen sowie Platinenlagen, die es vorher noch nicht gab. Diese Fehler sind dank der einfachen, klarschriftlesbaren Filestruktur von KiCad sehr leicht mit einem Texteditor zu beheben. Eine Beschreibung, wie dieses manuell zu machen ist, finden Sie hier: [[Media:KiCad-PCBnewBoardDateienMigrierenVonVersion4Auf5.pdf]]&lt;br /&gt;
&lt;br /&gt;
=== Tipps&amp;amp;Tricks: Building Blocks ===&lt;br /&gt;
* Eine unfertige Dokumentation, wie man das hierarchische Schaltplansystem von KiCAD verwendet, um daraus schnell und rationell Schaltpläne mit vorgefertigten Schaltplänen (Building Blocks) nach dem Baukastensystem aufzubauen. Enthält auch ein Beispielprojekt. Beachte die Liesmich.txt Datei. [[Media:BuildingBlocksKiCAD-EXPERIMENTELL.zip]] Das File  KiCAD-HierarchischeSchaltplaene+buildingBlocksRevA_Vorlaeufig.pdf, enthält eine vorläufige Beschreibung dazu. KiCAD-HierarchischeSchaltplaene+buildingBlocksRevA-EN.pdf is an English description how to use hirarchical schematics as building blocks for a fast and rationel schematic design. Es fehlt noch die Übersetzung und die Bebilderung und ein paar Berichtigungen und Ergänzungen. ;-) . Das echte Hauptbeispielprojekt ist UnderVoltageDetector24V-2Group_Experimental.pro bzw. UnderVoltageDetector24V-2Group_Experimental.sch. Im Ordner Experimentalprojekt23052010 findet sich ein weiterer Ordner BuildingBlocksExperimental. Dieser enthält die Ausgangsbausteine VoltageRegulatorBuildingBlock.sch mit VoltageRegulatorBuildingBlock-cache.lib und  VoltageDetectorBuildingBlock.sch mit VoltageDetectorBuildingBlock-cache.lib. Die Projektdateien der Buildingblocks .pro sind nur der Vollständigkeit und zur leichteren Bearbeitung zugefügt. Aus VoltageDetectorBuildingBlock.sch und VoltageRegulatorBuildingBlock.sch wurde (nach umkopieren, umbenenen und kleiner Änderung) im übergeordneten Ordner das Projekt VoltageRegulatorBuildingBlock.pro unter verwendung des &amp;quot;Zwischenbuildingblocks&amp;quot; UnderVoltageDetectorBuildingBlock.sch zusammengesetzt. NICHT VERGESSEN DIE CACHE.LIB EINZUBINDEN! Sonst gibt es nur Fragezeichen statt Bauteile. Das Beispielprojekt enthält eine 24V Unterspannungsüberwachung für einen Bleiakku, die zwei 12V Gruppen überwacht. Nicht elegant, aber hoffentlich robust. Autor: Bernd Wiebus , GNU-GPL. Der dazubezügliche Beitrag im Forum ist: http://www.mikrocontroller.net/topic/178683#1724114&lt;br /&gt;
*[[Media:HierarchischeSchaltplaeneAlsBausteineInKicad_RevC_23Dec2013.pdf]] VERBESSERTE und AKTUALISIERTE Version von KiCAD-HierarchischeSchaltplaene+buildingBlocksRevA_Vorlaeufig.pdf aus obiger Zip-Datei. Beschreibt, wie mit Hilfe der hierarchischen Schaltplanstruktur aus einzelnen, vorgefertigten Schaltplänen schnell und rationell neue Schaltpläne modular zusammengesetzt werden können. There is also a English translation of this tutorial about using hierarchical schematics as building blocks. You can get it here: [[Media:HierarchicalSchematicsAsBuildingblocksAtKiCad_RevC-EN_06May2015.pdf]]&lt;br /&gt;
* Eine Sammlung von gängigen Schaltungen mit den Längstreglern LM317 /LM78xx /LM79xx und dem Timer 555, die nach dem in obig erwänten Dokument KiCAD_HierarchischeSchaltplaene+buildingBlocksRevA_Vorlaeufig.pdf beschriebenen Vorgehen als Building Blocks in KiCAD verwendet werden können, findet sich unter: http://www.mikrocontroller.net/articles/KiCAD#Building-Blocks&lt;br /&gt;
&lt;br /&gt;
=== Tipps&amp;amp;Tricks: Lochraster Platinen Entwurf mit KiCad ===&lt;br /&gt;
&lt;br /&gt;
Wer viel mit Lochraster Platinen arbeitet, hat gelegentlich auch ein Bedürfnis, diese Tätigkeit mit einem Layoutprogramm zu begleiten. Zum einen um den Platzbedarf besser abschätzen zu können, zum anderen, um dadurch auch eine schnelle und einfache Dokumentation auch für Lochrasterprojekte zu schaffen. Auch dazu kann KiCad verwendet werden.&lt;br /&gt;
* Vorgehensweise: Schaltplan in Eeschema erstellen wie üblich, Netzliste erzeugen, und in CVpcp die Bauteile zuordnen. In PCBnew dann das Raster einblenden und auf 2,54mm (100mil) stellen. Nun geben die Rasterpunkte die Position der Löcher der Lochrasterplatine vor. Nach dem Einlesen der Netzliste bei Lochraster mit Streifenleitungen am besten zweiseitig manuell routen. Auf der Unterseite der Richtung der Streifenleitung in Längstrichtung folgen (z.b. wagerecht). Auf der Oberseite die Brücken dazu quer legen (z.B. senkrecht). Zweipolige Bauteile immer senkrecht oder wagerecht positionieren. Dieses Verfahren geht grundsätzlich mit jedem Layoutprogramm, das ein Raster anzeigen kann.&lt;br /&gt;
** Wer eine Platine erstellen möchte, die nur teilweise ein Lochraster aufweist, dem sei diese Diskussion empfohlen: https://www.mikrocontroller.net/topic/369534#new&lt;br /&gt;
&lt;br /&gt;
=== Tipps&amp;amp;Tricks: KiCad und Freeroute ===&lt;br /&gt;
Leider ist die Freeroute Seite abgeschaltet. Grund:http://www.mikrocontroller.net/topic/337014#new Allerdings gibt es eine Möglichkeit, Freeroute selber zu installieren und zu nutzen: https://github.com/nikropht/FreeRouting und http://freerouting.net/index_de.php &lt;br /&gt;
*Freerouting einseitig bzw. für Lochraster verwenden: http://www.mikrocontroller.net/topic/363335#new&lt;br /&gt;
&lt;br /&gt;
=== Tipps&amp;amp;Tricks: KiCad und Specctra Autorouter ===&lt;br /&gt;
Es treten beim Export der Netzlisten/Designs Fehlermeldungen der Art: &amp;quot;IO_ERROR: Multiple components have identical reference IDs&amp;quot; auf, obwohl offensichtlich keine doppelten Referenzbezeichner vergeben wurden.&lt;br /&gt;
* Die &amp;quot;doppelten Referenzbezeichner&amp;quot; sind doch &amp;quot;irgendwie&amp;quot; versteckt vorhanden. Z.B. dadurch, das Bauteile nicht Referenziert oder Annotiert wurden. Im Zweifel die Files mit einem Texteditor danach durchsuchen, oder die Autoannotation über das Board laufen lassen. Siehe: https://www.mikrocontroller.net/topic/365185#new&lt;br /&gt;
&lt;br /&gt;
== Bibliotheken ==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt sollen unsere Arbeiten an Bibliotheken koordiniert werden. Dabei sollen alle Arbeiten unter der Creative Commons Lizenz stattfinden. Das heisst insbesondere, dass keine Arbeiten mit anderem Copyright unseren Bibliothekspool vergiften sollen z.&amp;amp;nbsp;B. durch unerwünschte Konvertierung von EAGLE-Bibliotheken.  &lt;br /&gt;
&lt;br /&gt;
Unsere Designziele sind:&lt;br /&gt;
* Frei benutzbar (Creative Commons Lizenz) &lt;br /&gt;
* Einheitlich (Richtlinien?)&lt;br /&gt;
** Vorschlag von Marko für Bohrungen und Pads siehe [http://www.mikrocontroller.net/topic/124070#1176177]&lt;br /&gt;
** Die Richtlinien, die die KiCad Librarys selber verwenden: [https://github.com/KiCad/kicad-library/blob/master/KiCad_Library_Convention.txt]&lt;br /&gt;
* Fehlerfrei (Nachkontrolle durch andere User)&lt;br /&gt;
&lt;br /&gt;
=== Wünsche ===&lt;br /&gt;
&lt;br /&gt;
Hier soll eine Strichliste geführt werden, welche neuen Bauteile gesucht sind bzw. welche oder besseren, genaueren Versionen benötigt werden. Bitte gebt an, was bei bestehenden Bauteilen problematisch ist.&lt;br /&gt;
&lt;br /&gt;
Bevor wir Bibliotheken erstellen, sollten auf jeden Fall einige Parameter - insbesondere für die Schaltplansymbole - festgelegt werden: Pinlänge, Pinabstand, Größe der Schriften, Konventionen bzw. Nummerierung (z.B. bei gepolten Bauteilen wie Dioden, Elkos usw.). Sonst entsteht Wildwuchs, weil jeder für sich anderes festlegt.&lt;br /&gt;
&lt;br /&gt;
* Stehende Layouts für 7805 und N-FETs: ||||&lt;br /&gt;
** Passt TO220_VERT ? Natürlich! Nur die Anschlussnumerierung muss ev. passend adaptiert werden. Ist unter &amp;quot;TO-220&amp;quot; in [[Media:KiCAD_Module_Footprints_3D_29Aug2014.zip]] enthalten. In allen Perversionen. Stehend, liegend, rumgedreht von der Rückseite usw....&lt;br /&gt;
* LPC21xx / LPC22xx / LPC23xx |&lt;br /&gt;
* EINE AVR ATmega-Bibliothek, wo ALLE Controller drin sind. |||||||&lt;br /&gt;
* AVR XMegas |&lt;br /&gt;
* AT90CAN128 / allgemein mehr AVRs (MEGA &amp;amp; TINY) ||||||&lt;br /&gt;
*Wegen der AVRs und ATMEGAs: Bitte hier http://www.kicadlib.org/Fichiers/Kerusey_Karyu_Atmel_Library.html mal schauen, und den Wunsch auf den Typ konkretisieren! Der Atmelzoo ist so verwirrend vielfältig.....&lt;br /&gt;
** Leider ist die dazugehörige Bibliothek defekt.&lt;br /&gt;
** Ist aktualisiert worden und in die aktuelle KiCad Symbol Library eingeflossen: [https://github.com/KiCad/kicad-library/blob/master/library/atmel.lib]&lt;br /&gt;
***Weitere Aktualisierungen und Erweiterungen: [https://github.com/KiCad/kicad-library/blob/master/library/atmel.dcm]&lt;br /&gt;
* Schaltregler (u.A. LM257x, LM267x, MC33063, L5973D) |||| Der MC33063 hat gleiches Pinning und Gehäuse wie MC34063! Darum kann der in http://www.mikrocontroller.net/wikifiles/8/84/Symbols_ICs-Diskrete_RevD9.lib verwendet werden.&lt;br /&gt;
* Spulen (z.&amp;amp;nbsp;B. diverse Wuerth) ||&lt;br /&gt;
* Drosseln (B82790 für CAN, Würth 744207) |&lt;br /&gt;
* Transformatoren (allgemein) |&lt;br /&gt;
* Ferrite (7427930 - 32, 742792651, 74279263) |&lt;br /&gt;
** ??? Was genau ist nun Footprint und Referenzmaeßig der Unterschied zwischen Drosseln, Spulen und Ferriten, wenn ich jetzt mal davon ausgehe, das die Teile weder Anzapfung noch mehr als eine Wicklung haben (dann wären es Trafos oder Uebertrager), und die elektrischen Werte in ein Feld eingetragen werden?? Schau mal unten in http://www.mikrocontroller.net/wikifiles/d/da/KiCAD_Module_Footprints_3D_16Sep2013.zip. Kleinere SMD-Entstörferrit Module lassen sich uebrigens aus Footprints für SMD-Widerstaenden zaubern, in dem man sie umbenahmt und mit der Referenz &amp;quot;L&amp;quot; versieht. ;-)&lt;br /&gt;
* STM32 Mikrocontroller Bibliothek (sofern möglich alle) |||&lt;br /&gt;
* Arduinos |&lt;br /&gt;
** Arduino Due ||&lt;br /&gt;
&lt;br /&gt;
=== Entwürfe ===&lt;br /&gt;
&lt;br /&gt;
Neue Bibliotheken oder Änderungen sollen zunächst in diesem Abschnitt &lt;br /&gt;
vorgestellt werden. &lt;br /&gt;
&lt;br /&gt;
==== Symbolbibliotheken ====&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/96460#832961 ATmega3250/TQFP100] von Fred S. (Gast)&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/96460#844741 ATMega3290 im 100Pin-Gehäuse] von Fred S. (Gast)&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/132811#1205130 RFM12-Funkmodul] von Dominik C.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/133310#1210137 CAN Controller MCP2515 und Transceiver MCP2551] von Dominik C.&lt;br /&gt;
&lt;br /&gt;
* [[Media:SymbolsSimilarEN60617+oldDIN617-RevB-en.lib]] VERALTET! Nur aus Kompatibilitätsgründen behalten. Ersetzt für Neuentwicklungen durch Revision E1. Schaltplan Symbolbibliothek fuer KiCAD mit Symbolen, die denen aus der EN60617 oder der ALTEN DIN 617 ÄHNLICH sind. Von Bernd Wiebus&lt;br /&gt;
&lt;br /&gt;
* [[Media:SymbolsSimilarEN60617+oldDIN617-RevC-en.lib]] VERALTET! Nur aus Kompatibilitätsgründen behalten. Ersetzt für Neuentwicklungen durch Revision E1! Schaltplan Symbolbibliothek für KiCAD mit Symbolen, die denen aus der EN60617 oder der ALTEN DIN 617 ÄHNLICH sind. Aenderung gegenueber Rev.B: Kleinere Symbole hinzugefügt. Mit Vorsicht geniessen! Von Bernd Wiebus.&lt;br /&gt;
 &lt;br /&gt;
* [[Media:SymbolsSimilarEN60617+oldDIN617-RevD3-en.lib]] VERALTET! Nur aus Kompatibilitätsgründen behalten. Ersetzt für Neuentwicklungen durch Revision E1! Schaltplan Symbolbibliothek für KiCAD mit Symbolen, die denen aus der EN60617 oder der ALTEN DIN 617 ÄHNLICH sind.  Aenderung gegenueber Rev.C: Kleinere Fehler beseitigt. CLD Symbol hinzugefuegt. Kuehlkoerper Symbol und Dummy-Symbol fuer Boardoutlines hinzugefuegt. Thyristor und Triac Symbol zugefuegt. Copyright Symbole GNU-GPL und CC zugefuegt. Mit Vorsicht geniessen! Von Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
 &lt;br /&gt;
* [[Media:SymbolsSimilarEN60617+oldDIN617-RevE8.lib]] AKTUELLE Version! Ersetzt die Rev. B, C und die Rev. D sowie Vorgängerversionen E1-E7! Schaltplan Symbolbibliothek für KiCAD mit Symbolen, die denen aus der EN60617 oder der ALTEN DIN 617 ÄHNLICH sind.  Aenderung gegenueber Rev.D: Kleinere Fehler beseitigt. Ankerpunkte in die Nähe der Symetrieachsen verlegt. Verbinder DIN41612 / EN60603-2 &amp;quot;Eurokartenstecker&amp;quot; hinzugefügt. Große &amp;quot;BIG&amp;quot; Symbole entfernt und in der Datei BIG-SymbolsSimilarEN60617+oldDIN617-RevE.lib ausgelagert. Mit Vorsicht geniessen! Von Rene Belau und Bernd Wiebus.  CC-Zero/Public Domain!  Defektes Symbol &amp;quot;RESISTOR_RevE_Date15jun2010&amp;quot; repariert am 02. Maerz 2011. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
   &lt;br /&gt;
* [[Media:BIG-SymbolsSimilarEN60617+oldDIN617-RevE.lib]] Einige EN60617 oder der DIN 617 ÄHNLICHE Symbole in besonders GROSSER Ausführung. Vermutlich werden Sie diese GROSSEN Symbole eher NICHT benutzen wollen. Mit Vorsicht geniessen! Von Rene Belau und Bernd Wiebus. Unter GNU GPL. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[http://www.mikrocontroller.net/attachment/74203/obi.lib]] KiCAD Symbol für einen ATMEGA644. Von obi&lt;br /&gt;
&lt;br /&gt;
* [[Media:Symbols_ICs-Diskrete_RevD10.lib]] KiCAD Symbole für einige diskrete ICs. Enthält L200 (Pentawatt Gehäuse), LM2587 (Pentawatt Gehäuse), Längstregler LM317, LM78xx, LM79xx, Timer NE555, NF-Verstärker LM1875 und TDA2003 (Pentawatt Gehäuse), Schaltregler UC38xx (DIP8/SO8 und DIP14/SO14), LM2587, MC34036, LM78S40 und MCP1640, Treiber MIC4422 (DIP8/SO8 und Pentawatt Gehäuse). Allegro Halleffekt Stromwandler Typ ACS754/ACS755/ACS756 und LEM Halleffekt Stromwandler der Serie &amp;quot;HX&amp;quot;. Programierbarer Oszillator Si570/Si571 sowie Quarzoszillator Typ KXO-200. Dazu Transistor Arrays BC847S und BC857S (in einfacher und in aufgelöster Darstellung) und Supressordioden Array SR05. Schieberegister 74HC4094 . Spannungs-/Laderegler uA723/LM723 in 14 und 20 poligem Gehäuse. HF/ZF Verstärker/Mischer/Demodulator TCA440 alias exDDR A244D, FM Frontend TA7358. Spannungsmonitor ICL7665. Autor Bernd Wiebus.  CC-Zero/Public Domain!  Mit Vorsicht geniessen! Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:Symbols_ICs-Opto_RevB_16Sep2013.lib]] KiCAD Symbole für Optokoppler CNY17, IL300. IL388, TLP250, SFH617A-1, SFH617A-2, SFH617A-3, SFH617A-4, KPC357, LTV35x, und PC357. LWL Empfänger Toshiba TORX170 TORX173 TORX193  und TORX194 (Toslink). LWL Sender Toshiba TOTX170 TOTX173 TOTX193  und TOTX194 (Toslink). LWL Empfänger Agilent HFBR-252x und Sender Agilent HFBR-152x Serie (Versatile Link). 7 Segment Anzeigen HDSM531, HDSM533, LTS6760, LTS6780, SBC18-11EGWA. Autor Rene Belau und Bernd Wiebus. CC-Zero / Public domain. Mit VORSICHT geniessen! Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:Transformer-Diskrete_RevA.lib]] KiCAD Symbole für einige diskrete Transformatoren. Coilcraft Q4434-B = Rhombus T1311 und Myrra-74040 ETD29. Autor: Bernd Wiebus. Mit Vorsicht geniessen! Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:Symbols_DCDC-ACDC-Converter_RevC_29Aug2014.lib]] KiCAD Symbole für einige DCDC/ACDC-Converter. Enthält CINCON EC5BC12, CINCON EC6C11, TRACO TED-1212, TRACO TED-XXXX Dual Output, TRACO TED-XXXX Single Output, TRACO TEN10-1212, TRACO TEN10-XXXX, TRACO TME-XXXX, TRACO TMH-XXXX Single Output, TRACO TMH-XXXX Dual Output, sowie TRACO ACDC-Converter der TMLM Serie. BOTHHAND CF-Serie und DELTA DPS05U09D. Neu seit 29 August 2014: Floeth DCDC-Converter SD14-XXXX und SD18-XXXX. Autor: Bernd Wiebus. GNU-GPL. Mit Vorsicht geniessen! Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:Symbols_Socket-DIN41612_RevA.lib]] KiCAD Symbole für DIN41612 Stecker und Buchsen (Die bekannten Eurokartenstecker). Autor: Bernd Wiebus. GNU-GPL. Mit Vorsicht geniessen! Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:Symbols_EN60617_13Mar2013.lib]] KiCAD Symbole für die EN60617. Strikter als die Symbole aus SymbolsSimilarEN60617+oldDIN617-Rev~~.lib. Autor: Bernd Wiebus. CC-Zero/Public Domain! Mit Vorsicht geniessen! Hierzu gehört der Katalog: [[Media:Symbols_EN60617_13Mar2013.pdf]] Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:Symbols_EN60617-10_HF-Radio_DRAFT_12Sep2013.lib]] HF-Blockschaltbild Symbole für KiCad. EXPERIMENTELL! Autor: Bernd Wiebus. Mit Vorsicht geniessen! Lizenz: CC-Zero / Public domain.  Hierzu gehört der Katalog: [[Media:EN60617-10_HF-Radio_SymbolCatalog_DRAFT.pdf]] Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:Symbols_Microcontroller_Philips-NXP_RevA_06Oct2013.lib]] Symbole der NXP Microcontroller LPC2104, LPC2105 und LPC2106 fuer KiCad.  Autor: Bernd Wiebus. Mit Vorsicht geniessen! Lizenz: CC-Zero / Public domain. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
==== Modulbibliotheken ====&lt;br /&gt;
&lt;br /&gt;
* [[Media:KiCAD_Module_Footprints_3D_29Aug2014.zip]] Eine Sammlung von KiCAD Modulen bzw. Footprints diskreter Bauteile. Neben den obligatorischen Rs, Cs und Ls sind Schrack und Omron Kartenrelais (die Footprints passen auch fuer andere Hersteller), diverse Dioden, Klemmen WAGO 236 (RM 5mm) Serie und WAGO 734 Serie, Sicherungshalter (Schurter und Bulgin) für 5x20 und 6x30, SMD Sicherungen 1206 und Sicherungen/Sicherungshalter TE5/TR5,Flachsicherungen Standard und Mini, Kuehlkoerper und Eurokartenoutlines enthalten. Zusaetzlich TO92, TO220, TO220-5 (Pentawatt) und TO247 Gehaeuse. Ebenso die vermissten PISN und PISR SMD Drosseln. Einige Throughhole C&amp;amp;D Bobin Drosseln, Bourns 3296, Spectrol Type 43 / Econtrim und Piher PT15 Trimmer . Potentiometer Alps RK16 und Spectrol Type 148/149. Transformatoren Coilcraft Q4434-B / Rhombus T1311 sowie ETD29 von Epcos und Myrra sind auch dabei. Eurokartenstecker/-buchsen DIN 41612 Typ B1, B2, C1, C2 und C3. Ebenfalls enthalten: GNU-GPL und Creative Commons  Symbole. Dazu Messpunkte. BNC-Buchse, Quarzoszillator, SMD Widerstände und Kondensatoren.  (0805, 1206, 2512) sowie experimentelle Universalfootprints SMD/Throughole. SMD-Dioden: MELF, Mini-MELF, SMA, SMB und SMC. Halleffekt Stromwandler mit Allegro CB-PFF, CB-PSF und CB-FSS Gehäusen.Dazu Stecker Molex Serie KK, Würth SMD Drosseln und Doppeldrosseln. Neosid Filter und Drosseln. TRACO ACDC-Converter der TMLM Seie und SOT23, SOT143, SOT143R, TSOT-6 / MK06A sowie SC70-6 SMD Footprints für Dioden, Transistoren bzw. Dioden und Transistor Arrays und kleinere ICs. Mini Universal Mate-N-Lock Steckersockel (Tyco/AMP). 2-6 Pin, vertikale und horizontale Typen. Verbesserte Fiducials und Logos. Dazu SMD-Tantalkondensatoren und ETAL NF-Transformatoren. TO50-3 und TO50-4 Gehäuse. 7 Segment Anzeigen. LQFP48/TQFP48 Gehäuse. Hallsonden Stromwandler mit Allegro CB-PFF, CB-PSF und CB-FSS Gehäusen. Halleffekt Stromwandler der Serie &amp;quot;HX&amp;quot; von LEM.  Neu in der Version vom 29. August 2014: Floeth DCDC-Converter SD14 und SD18. Fast alles ohne 3D Modelle, aber manchmal mit PDF-Ausdruck zur leichten Identifikation. Mit Vorsicht geniessen! Ohne Garantie und  CC-Zero/Public Domain!  Von Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:KiCAD-Module_Buzzer_Beeper_RevA_25Oct2010.zip]] Einige Footprints von Summern /Buzzern / Beepern für KiCAD. Enthaelt Kingstate KCG0601, Pro Signal ABI-009-RC, Pro Signal ABI-010-RC, Pro Signal ABT-410-RC, Star Micronics HMB-06/HMB-12 und Projects Unlimited AI-4228-TWT-R. Alles ohne 3D Modelle, aber mit PDF-Ausdruck zur leichten Identifikation. Mit Vorsicht geniessen! Ohne Garantie und  CC-Zero/Public Domain!  Von Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:KiCAD-Module_CommonModeChoke_Wuerth_Type-WE-CMB_RevA_25Oct2010.zip]] Footprints der Gleichtaktdrosseln der Serie Würth WE CMB (through hole) für KiCAD. Enthält die Verschieden Bauformen XS, S, M, L, XL und XXL. Alles ohne 3D Modelle, aber mit PDF-Ausdruck zur leichten Identifikation. Mit Vorsicht geniessen! Ohne Garantie und  CC-Zero/Public Domain!  Von Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:DCDC-ACDC-Converter_RevC_20Jul2012.zip]] Footprints von DCDC/ACDC-Convertern für KiCAD. Enthält CINCON EC5BC12, CINCON EC6C11, TRACO TED-1212, TRACO TED-XXXX Dual Output, TRACO TED-XXXX Single Output, TRACO TEN10-1212, TRACO TEN10-XXXX, TRACO TME-XXXX, TRACO TMH-XXXX Single Output, TRACO TMH-XXXX Dual Output, BOTHHAND CF-Serie und DELTA DPS05U09D. Neu seit 20 Juli: TRACO ACDC-Converter der TMLM Serie. Alles ohne 3D Modelle, aber mit PDF-Ausdruck zur leichten Identifikation. Mit Vorsicht geniessen! Ohne Garantie und  CC-Zero/Public Domain!  Von Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:Opto-Devices_RevC_03Oct2012.zip]] Footprints von Optoelectronischen Bauteilen für KiCAD. Enthält 6 Polige DIL Footprints für CNY17, auch in &amp;quot;wide&amp;quot;, SMD Optokoppler Footprints (1 Kanalig) und Footprints für Toshiba (Toslink) und Agilent (Versatile Link) LWL Ssender und Empfänger. Alles ohne 3D Modelle, aber mit PDF-Ausdruck zur leichten Identifikation. Mit Vorsicht geniessen! Ohne Garantie und unter GNU-GPL. Von Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:Pentawatt_RevB_24Oct2012.zip]] Footprints von Pentawatt Gehäusen für KiCAD. Enthält verschiedene Ausführungen der TO220-5 Gehäuse in gerade und verkröpft, sowie stehend und liegend. Mit 3D-Modellen und mit PDF-Ausdruck zur leichten Identifikation. Mit Vorsicht geniessen! Ohne Garantie und unter GNU-GPL. Von Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
*[[Media:Transistor_TO-220_RevB_03Sep2012.zip]] Footprints von TO220-3 Gehäusen für KiCAD. Enthält verschiedene Ausführungen der TO220 Transistor Gehäuse in  stehend und liegend. Mit 3D-Modellen und mit PDF-Ausdruck zur leichten Identifikation. Mit Vorsicht geniessen! CC-Zero/Public domain! Autor: Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
*[[Media:Transistor_TO-247_RevC.zip]] Footprints von TO247 Gehäusen für KiCAD. Enthält verschiedene Ausführungen der Transistor Gehäuse in  stehend und liegend. Mit PDF-Ausdruck zur leichten Identifikation. Mit Vorsicht geniessen! CC-Zero/Public domain! Autor: Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[http://www.mikrocontroller.net/topic/176405#new]] KiCAD Modul / Footprint für ein TSSOP38 Gehäuse. Autor Raphael Reu.&lt;br /&gt;
&lt;br /&gt;
* [[http://www.mikrocontroller.net/topic/190088#1856759]] Texas Instruments TPIC8101 Klopfsensor Interface (für Verbrennungsmotoren). Autor Peter Diener.&lt;br /&gt;
&lt;br /&gt;
* [[Media:IR-directFET_Packages_RevB.zip]] Footprints von directFET SMD-Transistor Gehäusen von International Rectifier für KiCAD. Enthält die SH, SJ, SQ, ST, S1, MN, MP, MT, MX, MZ und die L8-Outline. Nähere Informationen in den Datenblättern betroffener Transistoren und in der International Rectifier Applikationsnotiz AN-1035. &amp;quot;directFET&amp;quot; ist übrigens eine Handelsmarke von International Rectifier und die Gehäuse sind proprietär. Also vorsichtig sein und an &amp;quot;second source&amp;quot; denken. Mit 3D Modellen und mit PDF-Ausdruck zur leichten Identifikation. Mit Vorsicht geniessen! Ohne Garantie und unter CC-Zero / Public domain. Von Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:Neosid-Devices_Coils_Filters_25Apr2012.zip]] Footprints von NEOSID Bauteilen. Spulen, Luftspulen, Filter ec. für KiCAD. Through hole und SMD. Alles ohne 3D Modelle, aber mit PDF-Ausdruck zur leichten Identifikation. Mit Vorsicht geniessen! Ohne Garantie und unter GNU-GPL. Von Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:SOT23_SOT143_SOT143R_TSOT6_MK06A_SC70-6_Housing_14Mar2014.zip]] Footprints von SOT23, SOT143, SOT143R, TSOT-6 /MK06A und SC70-6 SMD Gehäusen, wie sie oft für Dioden und Transistoren, aber auch Dioden und Transistor Arrays verwendet werden. Auch ICs findet man in der Bauform. Es sind Standard Footprints und spezielle für Handlötung vorhanden. KiCad Legacy Format und neues .pretty Format. Alles ohne 3D Modelle, aber mit PDF-Ausdruck zur leichten Identifikation. Mit Vorsicht geniessen! Ohne Garantie und unter GNU-GPL. Von Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:MiniUniversalMate-N-LokSockets_13Aug2012.zip]] Footprints von Mini Universal Mate-N-Lok Steckersockeln (Tyco/AMP). 2-6 Pin, verticale und horizontale Typen. Alles ohne 3D Modelle, aber mit PDF-Ausdruck zur leichten Identifikation. Mit Vorsicht geniessen! Ohne Garantie und unter GNU-GPL. Von Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:NF-Transformer_ETAL_RevA_28Aug2012.zip]] Footprints und 3D-Mesh Modelle von NF-Transformatoren der Firma ETAL (http://www.etalgroup.com). SMD und THT Typen. Mit PDF-Ausdruck zur leichteren Identifikation. In der Bibliothek ist auch der bekannte Übertrager ETAL P1200, der von Box73 (http://www.box73.de) vertrieben wird. Mit Vorsicht geniessen! Ohne Garantie und unter GNU-GPL. Autor: Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de &lt;br /&gt;
&lt;br /&gt;
* [[Media:TantalCapacitors_SMD_RevA_28Aug2012.zip]] Footprints von Tantal Kondensatoren SMD Größe A bis E (EIA-3216, EIA-3528, EIA-6032, EIA-7343 und EIA-7360). Alles ohne 3D Modelle, aber mit PDF-Ausdruck zur leichten Identifikation. Ohne Garantie und unter GNU-GPL. Mit Vorsicht geniessen! Autor: Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:SOT89-3_SOT89-5_Housing_RevA_02Sep2012.zip]] Footprints und 3D-Mesh Modelle von SOT89-3 und SOT89-5 SMD Gehäusen. Mit PDF-Ausdruck zur leichteren Identifikation. Ohne Garantie und unter GNU-GPL.  Mit Vorsicht geniessen! Autor: Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:SOT126_SOT32_Housings_RevA_22Oct2012.zip]] Footprints und 3D-Mesh Modelle von SOT126 / SOT32 Gehäusen. Mit PDF-Ausdruck zur leichteren Identifikation. Ohne Garantie und unter GNU-GPL.  Mit Vorsicht geniessen! Autor: Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:Allegro_HallSensors_24Oct2012.zip]] Footprints und 3D Modelle von Allegro Hall-Effect Stromsensoren mit PFF, PSF oder PSS Gehäuse (ACS754, ACS755, ACS756).  Mit PDF-Ausdruck zur leichteren Identifikation. Ohne Garantie und unter GNU-GPL.  Mit Vorsicht geniessen! Autor: Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
* [[Media:VML0806_Housing_Rohm_27Oct2012.zip]] Footprints und 3D Modell eines Transistors im 0806 Format (VML0806 / Rohm).  Mit PDF-Ausdruck zur leichteren Identifikation. Ohne Garantie und unter GNU-GPL.  Mit Vorsicht geniessen! Autor: Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
*[[Media:TO-50_Housings_RevA_21Apr2013.zip]]  Footprints/Module von TO50-3 und TO50-4 Transistor Gehäusen.Mit PDF-Ausdruck zur leichteren Identifikation. Ohne Garantie und unter CC-Zero / Public Domain.  Mit Vorsicht geniessen! Autor: Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
*[[Media:OldSowjetAera_Transistor_RevA.zip]] Footprints/Module von Kleinleistungstransistoren aus der Sowjetära.Mit 3D-Modell und PDF-Ausdruck zur leichteren Identifikation. Ohne Garantie und unter CC-Zero / Public Domain.  Mit Vorsicht geniessen! Autor: Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
*[[Media:SIP9_Housing_14Jun2013.zip]] Footprints/Module von SIP9 Gehäusen (z.B. TA7358).Mit 3D-Modell und PDF-Ausdruck zur leichteren Identifikation. Ohne Garantie und unter CC-Zero / Public Domain.  Mit Vorsicht geniessen! Autor: Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
*[[Media:7Segment_16Sep2013.zip]] Footprints/Module von 7-Segment Anzeigen HDSM531 (SMD), HDSM533 (SMD), LTS6760, LTS6780 undSBC18-11EGWA. Dazu PDF-Ausdruck zur leichteren Identifikation. Ohne Garantie und unter CC-Zero / Public Domain.  Mit Vorsicht geniessen! Autor: Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
*[[Media:BNC-Sockets_RevA.zip]] Footprints/Module von TYCO BNC-Buchsen für KiCad. Mit 3D Modellen und PDF Preview. Ohne Garantie und unter CC-Zero / Public Domain.  Mit Vorsicht geniessen! Autor: Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
*[[Media:LQFP_TQFP_RevA_06Oct2013.zip]] Footprints/Module von LQDP48/TQFP48 Gehäuseb für KiCad. Ohne 3D Modelle, aber mit PDF Preview. Ohne Garantie und unter CC-Zero / Public Domain.  Mit Vorsicht geniessen! Autor: Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
*[[Media:LEM_HallEffectTransducers_RevA_13Oct2012.zip]] Module/Footprints von Halleffekt Stromwandlern der Serien &amp;quot;HX&amp;quot; und &amp;quot;HTFS&amp;quot; von LEM. Mit 3D-Modellen  und PDF Preview. Ohne Garantie und unter CC-Zero / Public Domain.  Mit Vorsicht geniessen! Autor: Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
==== 3D-Modelle ====&lt;br /&gt;
&lt;br /&gt;
* [[Media:MeshModells_VRML-Wings3D_13Oct2013.zip]]  3D-Modelle diverser elektronischer Bauteile im wrl 2.0 und wings Format. Enthalten: DD-PAK (TO263AB), D-PAK (TO252AA), SMD Dioden MELF, MiniMELF, SMA, SMB und SMC, Transformatoren ETAL P1165, P1200, P2781, P3000, P3181, PP3188 und P3191, SO126 / SOT32 in horizontal und vertikal, SOT223-3, TO263-3, SOT89-3, SOT89-5, TO220 horizontal und vertikal und reverse. TO220-5 horizontal, vertical, inline und verkröpft, VML0806. SIP9. 7 Segment SMD Anzeige HDSM531/HDSM533 in Grün, gelb, rot und orange. directFET SMD-Transistor Gehäusen von International Rectifier für KiCAD. Enthält die SH, SJ, SQ, ST, S1, MN, MP, MT, MX, MZ und die L8-Outlines. Flachsicherungen Standard und Mini. Halleffekt Stromwandler LEM &amp;quot;HX&amp;quot; Serie und Allegro ACS754/ACS755/ACS756 mit CB-PFF, CB-PSF und CB-FSS Gehäusen. Ohne Garantie und unter CC-Zero / Public Domain Lizenz. Mit Vorsicht geniessen! Autor: Bernd Wiebus. Verbesserungsvorschläge willkommen an bernd.wiebus@gmx.de&lt;br /&gt;
&lt;br /&gt;
==== Building-Blocks ====&lt;br /&gt;
*[[Media:BuildingBlocks_16Jun2013.zip]] enthält eine Sammlung von gängigen Schaltungen mit den Längstreglern LM317 /LM78xx /LM79xx und dem Timer 555, die nach dem in diesem [[Media:HierarchischeSchaltplaeneAlsBausteineInKicad_RevC_23Dec2013.pdf]] Dokument beschriebenen Vorgehen als Building Blocks in KiCAD verwendet werden können. Ein Katalog dazu befindet sich hier: [[Media:KatalogUeberKiCadBuildingBlocks_21Apr2013.pdf]]. Autor: Bernd Wiebus, Lizenz: Creative Commons. Experimentell! Ohne Garantie! Mit Vorsicht geniessen!&lt;br /&gt;
&lt;br /&gt;
Wenn mindestens ein weiterer KiCAD User die Bibliothek geprüft hat, kann sie in den folgenden Unterabschnitt verschoben werden.&lt;br /&gt;
&lt;br /&gt;
=== Geprüfte ===&lt;br /&gt;
&lt;br /&gt;
Hier sollen geprüfte Bibliotheken gesammelt werden. Bitte angeben, wer die Prüfung gemacht hat.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/132288#new STM32F103xx (LQFP64) Schaltplansymbol] erstellt/geprüft: Dominik C.; Marko S.&lt;br /&gt;
&lt;br /&gt;
*Bei der STMF103xx fehlt glaub ich der Portpin PD2 :) Grüße :)&lt;br /&gt;
&lt;br /&gt;
=== Sonstige Bibliotheken im Netz ===&lt;br /&gt;
* https://github.com/KiCad/kicad-library Neues offizielles Repository bei Github.&lt;br /&gt;
* https://github.com/KiCad Allgemeines Repository bei Github.&lt;br /&gt;
**https://github.com/KiCad/kicad-library/blob/master/KiCad_Library_Convention.txt Conventionen für die Github Bibliotheken. Bitte beachten, das noch nicht alle Bibliotheken umgestellt sind.&lt;br /&gt;
**https://github.com/KiCad/kicad-library/blob/master/CONTRIBUTING.txt Wie man selber Bibliotheken in das KiCad Repository einfügen kann.&lt;br /&gt;
* http://www.kicadlib.org/&lt;br /&gt;
* http://per.launay.free.fr/kicad/kicad_php/composant.php &lt;br /&gt;
* http://www.reniemarquet.cjb.net/kicad/libs/o_analog.zip (NE555 u.a.)&lt;br /&gt;
* http://github.com/Inte/kicadlib&lt;br /&gt;
* http://www.df0fkw.datenoase.de/index.php?option=com_content&amp;amp;view=article&amp;amp;id=107:kicad-libraries&amp;amp;catid=36:bastelprojekte&amp;amp;Itemid=67&lt;br /&gt;
* http://bytelabs.ch/kicadlib.html&lt;br /&gt;
* http://library.oshec.org/ Von EAGLE konvertiert, also Vorsicht bei der Verwendung! &lt;br /&gt;
* http://smisioto.no-ip.org/elettronica/kicad/kicad-en.htm&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
Da die in KiCad verwendeten Dateien klarschriftlesbar sind, lassen sie sich sehr leicht mit externen Programmen und Skripten bearbeiten, um spezielle Funktionalitäten zu erzeugen. Eine kleine Auswahl an Programmen/Skripten ist hier zusammengestellt:&lt;br /&gt;
&lt;br /&gt;
* [http://kicad.rohrbacher.net/quicklib.php Quick KICAD Library Component Builder]&lt;br /&gt;
* Gerber-Tools sind für KiCAD weniger nötig, da KiCAD mit GerbView seinen eigenen Gerberviewer mitbringt. Dieser ist mächtig genug, die eingelesenen Gerberfiles als Platine in PCBnew zu exportieren, wo sie manipuliert werden können. Dieses geht aber nur mit Gerber-RS274X Daten. Ebensowenig können Gerberfiles zu Nutzen zusammengefügt werden. Hierzu bietet sich &amp;quot;Gerbmerge&amp;quot; http://ruggedcircuits.com/gerbmerge (http://claymore.engineer.gvsu.edu/~steriana/Python/gerbmerge/ Veraltet) an. Wer lediglich aus Sicherheitsgründen die von KiCAD erzeugten Gerberdaten mit einem fremden Gerber-Vierer inspizieren möchte, findet hier Hinweise:http://www.mikrocontroller.net/articles/Gerber-Tools&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/204063#2011138 KiCAD (Multi-)Symbol Tool] von Joghurt3000 zur Erstellung von Symbolen aus einer Textvorlage&lt;br /&gt;
* [http://cyclerecorder.org/footprintbuilder Footprintbuilder] Java-Programm zu Erstellung von Footprints.&lt;br /&gt;
*Wer seine Platine &amp;quot;panelisieren&amp;quot; (d.h. mehrmals nebeneinander anordnen um in einem &amp;quot;Nutzen&amp;quot; gleich mehrere Platinen fertigen zu können) möchte, kann das mit dem Python 2 Skript &amp;quot;panelize.py&amp;quot; tun. Das Programm arbeitet direkt auf den kicad .brd Files, so das das Mehrfachnutzen Board unter PCBnew nachbearbeitet werden kann, für z.B. einen  DRC. &amp;quot;panelize.py&amp;quot; kann hier bezogen werden: http://blog.borg.ch/?p=12&lt;br /&gt;
* &amp;quot;Raef&amp;quot; hat ein Python Script erstellt, das Bauteile automatisch ähnlich der Anordnung im Schaltplan plaziert. Siehe: http://www.mikrocontroller.net/topic/293903#3245990&lt;br /&gt;
*Wer die Reihenfolge der Subschaltpläne ändern will (Wegen Übersichtlichkeit/Bestimmt auch die Reihenfolge beim Ausdrucken), kann dieses Python 3 Skript verwenden (Liesmich/Readme beachten): http://www.mikrocontroller.net/wikifiles/9/90/PyKicadSchematic-ID_Interchanger_RevC.zip Autor: Bernd Wiebus, GNU-GPL. Dieses Skript ist unabhängig von der PCBnew internen Python 2 Schnittstelle.&lt;br /&gt;
* Um ältere Schaltpläne von vor Jan./Feb. 2014 (BZR4646) mit &amp;quot;upper case&amp;quot; Symbolnamen zu konvertieren, kann dieses Python 3 Skript verwendet werden: [[Media:PyKiCad-CaseSensitiveLibCure_RevD_13Apr2015.zip]]. Autor: Bernd Wiebus, GNU-GPL. Dieses Skript ist unabhängig von der PCBnew internen Python 2 Schnittstelle.&lt;br /&gt;
* Wem das Tricksen mit Dateimanager oder Schematic oder Board als Bibliotheksmanager nicht gefällt, findet vieleicht im &amp;quot;KiCad Libarian&amp;quot; ein passendes Tool: http://www.compuphase.com/electronics/kicadlibrarian_en.htm&lt;br /&gt;
* Diverse Skripte, um KiCad Symbole, Footprints oder sonstigen Bibliothekskram zu bearbeiten. [https://github.com/KiCad/kicad-library-utils]&lt;br /&gt;
* Cirillo Bernardo hat einige Programme geschrieben, um VRML 3D Gitter Modelle für Bauteile parametrisch zu erzeugen. Sie finden sich hier: https://github.com/cbernardo/kicad3Dmodels&lt;br /&gt;
* Peter Hofbauer hat einige Windows Programme geschrieben, die zur KiCad Unterstützung dienen: http://www.hcp-hofbauer.de/software.htm Bei den Programmen handelt es sich um &amp;quot;Aufräumprogramme für Bibliotheken, Stücklistenerzeugung, Extraktionsprogramm um eine Verdrahtungsliste aus einer Netzliste zu erzeugen, Ein Programm um Boherdurchmesser zu vereinheitlichen und ein Programm, um zusammen mit &amp;quot;Linegrinder&amp;quot; G-Code aus KiCad Boarddateien zu erzeugen. &lt;br /&gt;
* [http://escalalibre.com/edwt/kicad_sizeConverter.php KiCad Bitmap2Component Skalierer] Erlaubt es, Logos zu skalieren.&lt;br /&gt;
* [http://escalalibre.com/edwt/kicad_modTextChanger.php KiCad Module Text Changer]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konverter ===&lt;br /&gt;
&lt;br /&gt;
Konverter wandeln KiCad-Daten in die Daten anderer Layoutprogramme bzw. die Daten anderer Layoutprogramme in KiCad-Daten um.&lt;br /&gt;
Nativ kann KiCad gEDA Footprints bzw. neuere Eagle Footprints direkt als Bibliothek einbinden. Das ganze ist aber als noch sehr experimentell zu betrachten.&lt;br /&gt;
&lt;br /&gt;
Desweiteren gibt es einige Programme oder Skripte von dritter Seite, die Daten anderer Layoutprogramme in KiCad Daten umwandeln. Auch diese sind als experimentell einzustufen.&lt;br /&gt;
&lt;br /&gt;
Hier eine Auswahl:&lt;br /&gt;
* https://github.com/thesourcerer8/altium2kicad Wandelt Altium Schaltpläne und Layouts in KiCad Daten um.&lt;br /&gt;
* https://github.com/DanChianucci/Eagle2Kicad Wandelt Eagle 6.0 Layouts in KiCad Layouts.&lt;br /&gt;
* https://github.com/lachlanA/eagle-to-kicad Wandelt Eagle 6.0 Layouts in KiCad Layouts.&lt;br /&gt;
* http://www.cadsoft.de/downloads/file/eagle2kicad-0.9c.ulp Direkt von der Cadsoft Seite, ein ULP das Eagle Daten in KiCad Daten wandelt.&lt;br /&gt;
* http://www.cadsoft.de/downloads/file/eagle2kicad_sch.ulp Ebenfalls direkt von der Cadsoft Seite, ein ULP, das Eagle Schaltpläne in KiCad Schaltpläne wandelt.&lt;br /&gt;
* http://sourceforge.net/projects/pcad2kicad/ Wandelt P-CAD Schaltpläne, Layouts und Bibliotheken in KiCad Daten um.&lt;br /&gt;
&lt;br /&gt;
Erfahrungsberichte willkommen!&lt;br /&gt;
&lt;br /&gt;
== Beispielprojekte ==&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/topic/33653#963083 JTag-wiggler&lt;br /&gt;
* http://www.mikrocontroller.net/topic/190088#1856757 Klopfsensor von Peter Diener.&lt;br /&gt;
* http://www.mikrocontroller.net/topic/188897 Open-Hardware / Open-Source USB-basierter SPI BIOS-Chip Programmer von Uwe Hermann&lt;br /&gt;
* http://www.mikrocontroller.net/articles/Modellbahn_Servodecoder_f%C3%BCr_Weichen_mit_R%C3%BCckmeldung Modellbahn Servodecoder für Weichen mit Rückmeldung&lt;br /&gt;
* http://www.mikrocontroller.net/articles/RS485_IO_Board_-_ModellBahnLichtSteuerung RS485 IO Board - ModellBahnLichtSteuerung&lt;br /&gt;
* [[Media:UndervoltageProtection_RevD_14Aug2012.zip]] Beispielprojekt eines Tiefentladeschutzes für einen Blei-Gel Akku, der von den Platinenabmessungen her auf einen typischen 12V/7,2Ah Akku passt. Ausserdem bietet er abgesicherten Zugang zu den Akkuklemmen, was auch in vielen Fällen beachtenswert ist. Leider ist das Projekt noch etwas unaufgeräumt, es fehlen noch Bauteilwerte, und in der Form wurde noch keine fertige Platine daraus hergestellt, aufgebaut und getestet. Autor: Bernd Wiebus, GNU-GPL.&lt;br /&gt;
* http://www.mikrocontroller.net/topic/338835#3724591 Universeller Adapter PDI, JTAG, ISP mit KICAD&lt;br /&gt;
* http://n8vem-sbc.pbworks.com/w/page/4200908/FrontPage Eine Seite mit Selbstbaucomputern, teilweise &amp;quot;Retro&amp;quot; mit S100 Bus.&lt;br /&gt;
* [[Media:DC-50Ohm_Terminierung_RevE_25Mar2015.zip]] 50 Ohm DC entkoppelte Terminierung fuer Oszilloskope. [[Bild:DC-50Ohm_Terminierung_Downside.png|thumb|150px|Unterseite des DC-Messadapters mit kapazitiv entkoppelter 50 Ohm Terminierung]] [[Bild:DC-50Ohm_Terminierung_Upside.png|thumb|150px|Oberseite des DC-Messadapters mit kapazitiv entkoppelter 50 Ohm Terminierung]] Dieses Beispiel enthält Board-Dateien Version 5. Möchte man diese mit einem älteren KiCad, welches nur Version 4 kennt, öffnen, so müssen die Dateien angepasst werden. Eine Anleitung findet sich hier: [[Media:KiCad-PCBnewBoardDateienMigrierenVonVersion4Auf5.pdf]]&lt;br /&gt;
* https://www.mikrocontroller.net/attachment/261855/QRP-SWR-Bridge_ModC_RevA-pretty_11Jul2015.zip Resistive SWR-Messbrücke für QRP Kleinleistung auf Kurzwelle. Einer der Vorteile ist hohe Empfindlichkeit und dass sie auch bei Fehlanpassung dem Senderausgang einen bedämpften, halbwegs passenden Abschluss bietet. Anwendungsbeispiel Moqsquita ( http://www.qrpproject.de/Media/pdf/Mosquita40.pdf ) für 40m und weitere Infos, auch zu Bauteilen, finden sich hier im Thread: https://www.mikrocontroller.net/topic/371365#4194810 Dieses Beispiel enthält Board-Dateien Version 5. Möchte man diese mit einem älteren KiCad, welches nur Version 4 kennt, öffnen, so müssen die Dateien angepasst werden. Eine Anleitung findet sich hier: [[Media:KiCad-PCBnewBoardDateienMigrierenVonVersion4Auf5.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Diskussionen (teilweise seeeehr alt) ==&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/topic/120373#1089075 &lt;br /&gt;
* http://www.mikrocontroller.net/topic/98034#848559&lt;br /&gt;
* http://www.mikrocontroller.net/topic/95864#828660&lt;br /&gt;
* http://www.mikrocontroller.net/topic/77738#647041&lt;br /&gt;
* http://www.mikrocontroller.net/topic/103806#907523&lt;br /&gt;
* http://www.mikrocontroller.net/topic/41999#316195&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://iut-tice.ujf-grenoble.fr/kicad/index.html KiCAD] Homepage 1 und Download&lt;br /&gt;
* [http://www.lis.inpg.fr/realise_au_lis/kicad/ KiCAD] Homepage 2 und Download&lt;br /&gt;
* [http://www.kicad-pcb.org/display/KICAD/KiCad+EDA+Software+Suite KiCAD] Neue Homepage&lt;br /&gt;
* [http://www.kicad-pcb.org/display/KICAD/KiCad+Scripting+Reference+Manual] Speziell Informationen zum Python-Scripting.&lt;br /&gt;
* [http://kicad.sourceforge.net/wiki/index.php/DE:Main_Page KiCAD Wiki]&lt;br /&gt;
* Tutorials: &lt;br /&gt;
** [http://kicad.sourceforge.net/wiki/index.php/DE:Mini_tutorial Mini-Tutorial]&lt;br /&gt;
** [http://timogruss.de/kicad-loesung-fuer-die-leiterplatten-entwicklung/ KiCad Tutorial auf timogruss.de] (deutsch)&lt;br /&gt;
** http://www.curiousinventor.com/guides/kicad&lt;br /&gt;
** http://xtronics.com/reference/kicad.html&lt;br /&gt;
** http://bastler-archiv.de/elektronik/platinenherstellung-platinenlayout-mit-kicad-teil-1/ (deutsch, Teil 1)&lt;br /&gt;
** http://bastler-archiv.de/elektronik/platinenherstellung-platinenlayout-mit-kicad-teil-2/ (deutsch, Teil 2)&lt;br /&gt;
** http://www.kramann.info/73_COACH3/06_Layouting/Layouting_art_Guido_Kramann_12122010.pdf&lt;br /&gt;
** https://contextualelectronics.com/course/kicad-tutorial/ (Video Tutorials auf Englisch)&lt;br /&gt;
&lt;br /&gt;
* Usergroups:&lt;br /&gt;
** [https://groups.yahoo.com/neo/groups/kicad-users/info Yahoo-KiCAD-User-Group (Englischsprachig)]&lt;br /&gt;
** [https://forum.kicad.info/ Endlischsprachiges KiCad Forum]&lt;br /&gt;
** [http://1.cad-kicad-user.cadtalk.us/ Englischsprachige Diskussionen über KiCad im &amp;quot;Cadtalk&amp;quot;-Forum] Leider nicht mehr existent.&lt;br /&gt;
* Tools&lt;br /&gt;
** [http://www.freerouting.net/ Freerouting] Autorouter&lt;br /&gt;
** [http://www.mikrocontroller.net/articles/KiCAD#Tools Liste mit externen Programmen und Skripten im Zusammenhang mit KiCad]&lt;br /&gt;
* Verschiedenes im Zusammenhang mit KiCad&lt;br /&gt;
** [https://github.com/KiCad/kicad-library/wiki/Kicad-Library-Convention Kicad Library Convention / Regeln für offizielle KiCad Bibliotheken (Englisch)]&lt;br /&gt;
** [http://www.compuphase.com/electronics/LibraryFileFormats.pdf Aufbau der unterschiedlichen KiCad Bibliotheks Files (englisch)]&lt;br /&gt;
** [http://www.ohwr.org/projects/cern-kicad/wiki/WorkPackages CERN KiCad development roadmap / Was ist in KiCad Entwicklung geplant? (englisch)]&lt;br /&gt;
** [http://home.web.cern.ch/about/updates/2015/02/kicad-software-gets-cern-treatment Warum das CERN KiCad unterstützt (englisch)]&lt;br /&gt;
** [https://www.youtube.com/watch?v=chejn7dqpfQ Video mit der Leiterbahnlängenanpassen Funktion bzw. der &amp;quot;Differential pair&amp;quot; Funktion in KiCad.]&lt;br /&gt;
** [http://www.youtube.com/watch?v=irqlrVUbjuQ Video mit dem interaktiven Router]&lt;br /&gt;
* Plattformen&lt;br /&gt;
** Mac: http://brokentoaster.com/kicad/&lt;br /&gt;
**Ubuntu: [http://www.mikrocontroller.net/topic/257321#2658268 KiCAD selber compilieren]&lt;br /&gt;
** http://wiki.xtronics.com/index.php/Kicad Transtronics site (englisch)&lt;br /&gt;
* HowTo von Tom Boyd (englisch)&lt;br /&gt;
** http://kicadhowto.wikidot.com/&lt;br /&gt;
** http://kicadhowto.org/&lt;br /&gt;
* Bugreports! Wer einen Bug gefunden hat, bitte [https://bugs.launchpad.net/kicad hier] angeben! Kicad wird laufend verbessert. Hier kann auch schon nach vorhandenen Reports gesucht werden, wenn einem etwas komisch vorkommt.&lt;br /&gt;
&lt;br /&gt;
[[Category:Schaltplaneditoren]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:Wer_hat_was&amp;diff=89575</id>
		<title>Diskussion:Wer hat was</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:Wer_hat_was&amp;diff=89575"/>
		<updated>2015-08-16T08:14:10Z</updated>

		<summary type="html">&lt;p&gt;Kichi: Die Seite wurde neu angelegt: „Evtl. wäre es sinnvoll die Liste nach PLZ-Bereichen aufzubauen.“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Evtl. wäre es sinnvoll die Liste nach PLZ-Bereichen aufzubauen.&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_JLink_Linux/Windows&amp;diff=89167</id>
		<title>STM32 Eclipse JLink Linux/Windows</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_JLink_Linux/Windows&amp;diff=89167"/>
		<updated>2015-06-28T12:25:19Z</updated>

		<summary type="html">&lt;p&gt;Kichi: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
Da viele Tutorials zur Verwendung von Eclipse mit [[STM32]] auf relativ alten Tools aufsetzen, hier eine Anleitung mit aktuellem (2015) Stand. Hier wird die Programmierung von STM32 (ähnlich auch auf andere Cortex-M anwendbar) mit der Tool-Kombination [http://www.eclipse.org/ Eclipse] + [https://www.segger.com/jlink-debug-probes.html Segger JLink] + [https://launchpad.net/gcc-arm-embedded GCC-ARM-Embedded] + GDB erläutert für Linux und Windows. Die Tools gibt es auch für Mac OS, entsprechende Hinweise zur Benutzung fehlen hier noch. Der J-Link ist zwar relativ teuer (ca. 50€ für Privatpersonen), dafür aber schnell und stabil, kennt (fast?) alle ARM&#039;s und funktioniert plattformübergreifend direkt mit der Software vom Hersteller. Diese Kombination ermöglicht:&lt;br /&gt;
* Nutzung der komfortablen und mächtigen Entwicklungsumgebung Eclipse, inkl. Code-Vervollständigung und vielen Plugins wie zB. für Versionsverwaltung&lt;br /&gt;
* Automatische Generierung von makefiles und Aufruf des Compilers, kein manuelles Bearbeiten erforderlich&lt;br /&gt;
* Graphisches und schnelles Flashen und Debugging über JLink und GDB&lt;br /&gt;
* Graphische Anzeige von Registerinhalten beim Debugging&lt;br /&gt;
* Optional: Ausgabe von Texten per printf direkt nach Eclipse&lt;br /&gt;
* Projekte können zwischen Betriebssystemen ausgetauscht werden, Workflow generell fast identisch&lt;br /&gt;
* Voller Support für FPU der Cortex-M4, voller Support für C++, kein Codesize-Limit&lt;br /&gt;
* Es werden generische C/C++ Projekte angelegt; dies ist zwar etwas komplizierter, bietet aber später mehr Einstellungsmöglichkeiten&lt;br /&gt;
* Die Software ist auch für kommerzielle Nutzung komplett gratis und bis auf JLink auch OpenSource. Nur der JLink-Adapter selber ist für kommerzielle Nutzung teurer (aber das ist er bei Verwendung mit anderen IDE&#039;s natürlich auch).&lt;br /&gt;
* Da die normale und keine angepasste Eclipse-Version verwendet wird, können in der selben Eclipse-Instanz auch Projekte für völlig andere Plattformen und Sprachen benutzt werden, wie z.B. C/C++ für den PC, Java, ruby usw.&lt;br /&gt;
Da Eclipse eine sehr vielseitige Entwicklungsumgebung ist, sind einige Schritte erforderlich, um das Projekt auf die speziellen Anforderungen der Embedded-Entwicklung anzupassen. Diese sind im Folgenden erläutert.&lt;br /&gt;
== Installation ==&lt;br /&gt;
Beim Durcharbeiten der nachfolgenden Anleitung ist es empfehlenswert auch immer wieder einen Blick auf die Anweisungen und Beschreibungen auf der [http://gnuarmeclipse.livius.net GNU ARM Eclipse Homepage] zu werfen, da die Vorgehensweise dort gut beschrieben ist und sich, je nach Plugin-Version, auch gelegentlich ändert.&lt;br /&gt;
=== JLink ===&lt;br /&gt;
Zunächst die aktuelle Version von der [https://www.segger.com/jlink-software.html JLink Software] herunterladen und installieren. Da es hier regelmäßig neue Versionen gibt, ist es empfehlenswert sich für die [https://www.segger.com/notification/subscribe.php?prodid=7 E-Mail-Benachrichtigung] für neue Versionen einzutragen. Das Installationsverzeichnis für später merken.&lt;br /&gt;
=== GCC-ARM-Embedded ===&lt;br /&gt;
Die aktuelle Version für das jeweilige Betriebssystem [https://launchpad.net/gcc-arm-embedded herunterladen] und entpacken. Es gibt zwar auch Versionen in der Paketverwaltung mancher Linux-Distributionen aber die sind oft veraltet. Dafür bitte einen kurzen Pfad &#039;&#039;&#039;ohne Leerzeichen&#039;&#039;&#039; verwenden:&lt;br /&gt;
* Windows: z.B. C:\gcc-arm-embedded&lt;br /&gt;
* Linux: z.B. &amp;quot;/home/username/gcc-arm-embedded&amp;quot;&lt;br /&gt;
Den Pfad für später merken.&lt;br /&gt;
=== Make ===&lt;br /&gt;
* Linux: Meistens vorinstalliert. Unter Ubuntu im Paket &amp;quot;build-essential&amp;quot; enthalten.&lt;br /&gt;
* Windows: Hier können die MinGW/MSYS Basis Tools verwendet werden:&lt;br /&gt;
** Dazu [http://sourceforge.net/projects/mingw/files/latest/download hier] den MinGW Installer herunterladen und ausführen.&lt;br /&gt;
** Als Installation Directory am besten &amp;quot;C:\MinGW&amp;quot; beibehalten.&lt;br /&gt;
** So oft &amp;quot;Continue&amp;quot; anklicken, bis der &amp;quot;MinGW Installation Manager&amp;quot; erscheint und eine Liste installierbarer Pakete anzeigt.&lt;br /&gt;
** In der Liste das Paket &amp;quot;msys-base&amp;quot; mit der rechten Maustaste anklicken und &amp;quot;Mark for Installation&amp;quot; anklicken&lt;br /&gt;
** Im Menü &amp;quot;Installation&amp;quot;-&amp;gt;&amp;quot;Apply Changes&amp;quot; anklicken, und mit &amp;quot;Apply&amp;quot; bestätigen.&lt;br /&gt;
** Nachdem der Vorgang abgeschlossen ist, das Programm beenden&lt;br /&gt;
=== Pfade setzen ===&lt;br /&gt;
&#039;&#039;&#039;Vor&#039;&#039;&#039; dem Starten von Eclipse müssen dem System die Pfade der Kommandozeilentools bekannt gemacht werden:&lt;br /&gt;
* Windows:&lt;br /&gt;
** Rechte Maustaste auf den Arbeitsplatz klicken, &amp;quot;Eigenschaften&amp;quot; -&amp;gt; &amp;quot;Erweiterte Systemeinstellungen&amp;quot; -&amp;gt; &amp;quot;Umgebungsvariablen&amp;quot; anklicken.&lt;br /&gt;
** Im &#039;&#039;&#039;unteren&#039;&#039;&#039; Listenfeld den Eintrag &amp;quot;Path&amp;quot; suchen, auf &amp;quot;Bearbeiten&amp;quot; klicken&lt;br /&gt;
** Ans Ende des Textes ein Semikolon hängen (falls nicht schon vorhanden), und durch zwei Semikola getrennt die Pfade zur J-Link Installation, zur GCC-ARM-Embedded -Installation (plus &amp;quot;\bin&amp;quot;) und zur MSYS-Installation &#039;&#039;&#039;anhängen&#039;&#039;&#039;. Also zum Beispiel folgenden Text anhängen (Version anpassen) und alles mit OK bestätigen:&lt;br /&gt;
&amp;lt;code&amp;gt;;C:\gcc-arm-embedded\bin;C:\Program Files (x86)\SEGGER\JLink_V500e;C:\MinGW\msys\1.0\bin&amp;lt;/code&amp;gt;&lt;br /&gt;
** In einem &#039;&#039;&#039;danach&#039;&#039;&#039; erst gestarteten cmd.exe Fenster den Befehl &amp;quot;JLink&amp;quot; eingeben. Es sollte die Lizenzvereinbarung von Segger erscheinen (diese bestätigen), und im Terminal wieder &amp;quot;exit&amp;quot; eingeben. Funktioniert dies nicht, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
** Im selben Fenster &amp;quot;arm-none-eabi-gcc&amp;quot; eingeben. Es sollte eine Meldung im Stil von &amp;quot;arm-none-eabi-gcc: fatal error: no input files&amp;quot; erscheinen. Falls nicht, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
** Im selben Fenster &amp;quot;make&amp;quot; eingeben. Es sollte ein Meldung in der Art von &amp;quot;make: *** No targets specified and no makefile found.  Stop.&amp;quot; erscheinen. Falls nicht, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
* Linux:&lt;br /&gt;
** Mit einem Texteditor die (versteckte) Datei &amp;quot;.profile&amp;quot; im Home-Verzeichnis öffnen bzw. anlegen falls nicht vorhanden. Folgende Zeile &#039;&#039;&#039;anhägen&#039;&#039;&#039; (Pfad anpassen):&lt;br /&gt;
&amp;lt;code&amp;gt;export PATH=$PATH:/home/username/gcc-arm-embedded/bin&amp;lt;/code&amp;gt;&lt;br /&gt;
** Den Benutzer ab- und wieder anmelden&lt;br /&gt;
** In einem Terminal-Fenster &amp;quot;JLinkExe&amp;quot; eingeben. Es sollte sich die JLink-Software mit &amp;quot;SEGGER J-Link Commander V5.00c (&#039;?&#039; for help)&amp;quot; melden. Diese wieder mit &amp;quot;exit&amp;quot; beenden. Falls das nicht funktioniert, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
** Im selben Fenster &amp;quot;arm-none-eabi-gcc&amp;quot; eingeben. Es sollte eine Meldung im Stil von &amp;quot;arm-none-eabi-gcc: fatal error: no input files&amp;quot; erscheinen. Falls nicht, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
Die Umgebungsvariable muss nach jedem Update der JLink-Software neu gesetzt werden, da der Pfad die Versionsnummer enthält.&lt;br /&gt;
=== Eclipse ===&lt;br /&gt;
* Da Eclipse auf Java basiert, muss dies zuerst installiert werden:&lt;br /&gt;
** Windows: Den [http://www.java.com/de/download/ Installer herunterladen] und laufen lassen.&lt;br /&gt;
** Linux: Je nach Distribution unterschiedlich, für Ubuntu [http://wiki.ubuntuusers.de/Java/Installation/Oracle_Java/Java_8#Installation siehe hier]&lt;br /&gt;
* Die aktuelle Version von &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot; [http://www.eclipse.org/downloads/ hier herunterladen]. Unter Linux ist eclipse zwar auch oft in der Paketverwaltung enthalten, diese Version ist aber meist stark veraltet. Das heruntergeladene Archiv muss nur in einen beliebigen Ordner entpackt werden und die enthaltene Programmdatei (Linux: &amp;quot;eclipse&amp;quot;, Windows: &amp;quot;eclipse.exe&amp;quot;) gestartet werden.&lt;br /&gt;
* Den beim ersten Start erscheinenden &amp;quot;Welcome&amp;quot; Tab schließen.&lt;br /&gt;
* Im Menü &amp;quot;Help&amp;quot;-&amp;gt;&amp;quot;Install new software&amp;quot; anwählen, unter &amp;quot;Work With&amp;quot; die URL &amp;lt;nowiki&amp;gt;&amp;quot;http://gnuarmeclipse.sourceforge.net/updates&amp;quot;&amp;lt;/nowiki&amp;gt; eingeben, Enter klicken, den in der Liste erscheinenden Eintrag &amp;quot;GNU ARM C/C++ Cross Development Tools&amp;quot; auswählen, und mit &amp;quot;Next&amp;quot; und &amp;quot;Finish&amp;quot; installieren. Die Sicherheitsabfrage über unsignierte Software bestätigen, und die Abfrage zum Neustart von Eclipse bestätigen. Die Installation dauert etwas, und funktioniert manchmal nicht wenn die Server überlastet sind. Dann einfach später noch einmal probieren.&lt;br /&gt;
* Nur Windows: Im Menü &amp;quot;Window&amp;quot;-&amp;gt;&amp;quot;Preferences&amp;quot; anklicken, in der Baumstruktur des erscheinenden Fensters &amp;quot;Run&amp;quot;-&amp;gt;&amp;quot;String Substitution&amp;quot; anwählen, die Zeile mit &amp;quot;jlink_path&amp;quot; auswählen, &amp;quot;Edit&amp;quot; anklicken, und unter &amp;quot;Value&amp;quot; den Pfad zur JLink-Installation, also zB. &amp;quot;C:\Program Files (x86)\SEGGER\JLink_V500e&amp;quot; eintragen. Alles mit OK schließen.&lt;br /&gt;
* In der Toolbar den Eintrag &amp;quot;Make the C/C++ Packs perspective visible&amp;quot; anklicken, und das Symbol mit den gelben Pfeilen (&amp;quot;Update the package definitions from all repositories&amp;quot;) anklicken. Dieser Vorgang dauert einige Minuten.&lt;br /&gt;
* In der erscheinenden Baumstruktur im Tab &amp;quot;Packs&amp;quot; unter dem Punkt &amp;quot;Keil&amp;quot; die Mikrocontroller auswählen (Mehrfachauswahl mit der Strg-Taste möglich) für die man programmieren möchte (zB. &amp;quot;STM32F4xx_DFP&amp;quot;), und mit der rechten Maustaste und Klick auf &amp;quot;Install&amp;quot; installieren. Auch dies dauert etwas, der Fortschritt des Vorgangs wird etwas versteckt rechts unten im Fenster angezeigt.&lt;br /&gt;
* Danach wieder mit Klick auf den &amp;quot;C/C++&amp;quot; Button oben rechts in die C/C++ Ansicht wechseln.&lt;br /&gt;
&lt;br /&gt;
=== Standard Peripheral Library vorbereiten ===&lt;br /&gt;
Um auf die Hardware-Register direkt zuzugreifen oder die Treiberfunktionen von ST zu verwenden, sowie für den Startup-Code &amp;amp; Linkerscript, wird die Library von ST benötigt.&lt;br /&gt;
* Zum Herunterladen die Produktseite des Mikrocontrollers aufrufen (zB [http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1577/LN11/PF252140 hier] für STM32F407VG), &amp;quot;Design Resources&amp;quot; anklicken, unter dem Punkt &amp;quot;Related Tools and Software&amp;quot; den Eintrag im Stil von &amp;quot;STM32F4 DSP and standard peripherals library&amp;quot; finden (zB [http://www.st.com/web/en/catalog/tools/PF257901 hier] für STM32F4). Ganz unten findet sich der &amp;quot;Download&amp;quot; Button.&lt;br /&gt;
Leider ist das Archiv nicht gut strukturiert. Daher müssen die entsprechenden Dateien herausgesucht werden:&lt;br /&gt;
* Im enthaltenen Verzeichnis &amp;quot;Project/*** Templates&amp;quot; nach Dateien suchen, die auf *.ld enden und die herauskopieren, deren Name zum verwendeten Mikrocontroller passt, also z.B. &amp;quot;STM32F417IG_FLASH.ld&amp;quot; für den STM32F4. Diese ist das Linkerscript und wird später für jedes Projekt benötigt. Zur Sicherheit sollte diese Datei einmal im Texteditor geöffnet und auf Fehler überprüft werden (ST ist bekannt dafür hier Fehler zu machen):&lt;br /&gt;
** Die Speicher-Größen-Angaben der folgenden Zeilen sollten zum Datasheet passen (ggf. anpassen):&lt;br /&gt;
&amp;lt;pre&amp;gt;MEMORY&lt;br /&gt;
{&lt;br /&gt;
FLASH (rx)      : ORIGIN = 0x8000000, LENGTH = 1024K&lt;br /&gt;
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 128K&lt;br /&gt;
CCMRAM (rw)      : ORIGIN = 0x10000000, LENGTH = 64K&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Die Angabe der Adresse der Initialen Stack-Adresse sieht oft so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;_estack = 0x2001FFFF;    /* end of RAM */&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Dies ist &#039;&#039;&#039;falsch&#039;&#039;&#039; (ST weiß selber nicht wie der Cortex-M funktioniert). Die angegebene Adresse sollte Anfangsadresse des RAM&#039;s (immer 0x20000000) plus RAM-Größe (z.B. beim STM32F407 0x20000 Bytes) sein, also z.B. 0x20020000 für den STM32F407:&lt;br /&gt;
&amp;lt;pre&amp;gt;_estack = 0x20020000;    /* end of RAM */&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Ist dies falsch, kann es später zu schwer auffindbaren Problemen im Zusammenhang mit z.B. Floatingpoint-Funktionsargumenten kommen.&lt;br /&gt;
* Im Archiv nach Dateien suchen, deren Namen mit &amp;quot;startup_stm32&amp;quot; beginnt. Eine der Dateien heraussuchen, deren Name zum Mikrocontroller passt, &#039;&#039;&#039;und&#039;&#039;&#039; deren enthaltendes Verzeichnis den Namen TrueSTUDIO trägt, also zB. &amp;quot;Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO/startup_stm32f40_41xxx.s&amp;quot;. Diese Datei herauskopieren, sie ist der Startup-Code und wird später für jedes Projekt benötigt. Dabei die Dateiendung von &amp;quot;.s&amp;quot; auf &amp;quot;.S&amp;quot; ändern, denn sonst erkennt eclipse sie nicht.&lt;br /&gt;
* Im Verzeichnis &amp;quot;Project/*** Templates&amp;quot; die Datei &amp;quot;stm32f***_conf.h&amp;quot; herauskopieren. Diese wird für Einstellungen in der Treiber-Library benötigt.&lt;br /&gt;
* Alles außer dem Verzeichnis &amp;quot;Libraries&amp;quot; löschen.&lt;br /&gt;
* Im Verzeichnis &amp;quot;Libraries&amp;quot; (rekursiv) nach Dateien &amp;amp; Ordnern suchen, die &amp;quot;example&amp;quot; oder &amp;quot;template&amp;quot; im Namen tragen und alle löschen.&lt;br /&gt;
* Die Unterverzeichnisse &amp;quot;Documentation&amp;quot;, &amp;quot;Lib&amp;quot;, &amp;quot;RTOS&amp;quot;, &amp;quot;SVD&amp;quot; löschen. Die Lizenz und Release Notes-Dateien stören zwar nicht, können aber auch gelöscht werden. Im Endeffekt werden nur die .c und .h Dateien benötigt. Die DSP_Lib kann auch gelöscht werden, wenn keine DSP-Funktionen benötigt werden (existiert onehin nur für Cortex-M4 Controller).&lt;br /&gt;
* Leider enthält die Library für alle STM32F4 die Treiber für sowohl den FMC als auch den FSMC, obwohl beide nicht in allen Varianten vorhanden sind. Diese Treiber verursachen Compilerfehler, wenn für den falschen Controller kompiliert. Daher muss die Datei &amp;quot;STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fmc.c&amp;quot; gelöscht werden, wenn kein FMC vorhanden ist (wie beim STM32F40x), bzw. die &amp;quot;STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fsmc.c&amp;quot; wenn kein FSMC vorhanden ist (wie beim STM32F42x).&lt;br /&gt;
* Danach sollte nur noch so eine Struktur übrig bleigen:&lt;br /&gt;
&amp;lt;pre&amp;gt;./STM32F4xx_StdPeriph_Driver&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/src  -   Hier liegt der Quellcode für die Peripherie-Treiber&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/src/stm32f4xx_wwdg.c&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c&lt;br /&gt;
...&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/inc  -   Hier liegen die Includes für die Peripherie-Treiber&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_wwdg.h&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_usart.h&lt;br /&gt;
...&lt;br /&gt;
./CMSIS&lt;br /&gt;
./CMSIS/Include                   -   Hier liegen die Includes für den Prozessorkern (Cortex-M*)&lt;br /&gt;
./CMSIS/Include/core_sc300.h&lt;br /&gt;
./CMSIS/Include/core_sc000.h&lt;br /&gt;
...&lt;br /&gt;
./CMSIS/DSP_Lib/Source/TransformFunctions  - Hier liegt die DSP-Library (optional)&lt;br /&gt;
./CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_q31.c&lt;br /&gt;
./CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_q15.c&lt;br /&gt;
...&lt;br /&gt;
./CMSIS/Device/ST/STM32F4xx/Include&lt;br /&gt;
./CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h   -   Dies ist die Include-Datei für das Clock Setup&lt;br /&gt;
./CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h   -   Dies ist die zentrale Include-Datei für die Register-Definitionen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Soll die Standard Peripheral Library nicht genutzt werden, sondern nur direkt die Register-Definitionen, werden nur die letzten beiden Dateien benötigt sowie die im Verzeichnis CMSIS/Include.&lt;br /&gt;
* In der Datei &amp;quot;CMSIS/Device/ST/STM32***/Include/stm32f***.h&amp;quot; befindet sich ganz oben eine Präprozessor-Fallunterscheidung der Form&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#if !defined (STM32F40_41xxx) &amp;amp;&amp;amp; !defined (STM32F427_437xx) &amp;amp;&amp;amp; !defined (STM32F429_439xx) &amp;amp;&amp;amp; !defined (STM32F401xx) &amp;amp;&amp;amp; !defined (STM32F411xE)&lt;br /&gt;
  /* #define STM32F40_41xxx */   /*!&amp;lt; STM32F405RG, STM32F405VG, STM32F405ZG, STM32F415RG, STM32F415VG, STM32F415ZG,  &lt;br /&gt;
                                      STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG, STM32F407IE, &lt;br /&gt;
                                      STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE, STM32F417IG and STM32F417IE Devices */&lt;br /&gt;
&lt;br /&gt;
  /* #define STM32F427_437xx */  /*!&amp;lt; STM32F427VG, STM32F427VI, STM32F427ZG, STM32F427ZI, STM32F427IG, STM32F427II,  &lt;br /&gt;
                                      STM32F437VG, STM32F437VI, STM32F437ZG, STM32F437ZI, STM32F437IG, STM32F437II Devices */&lt;br /&gt;
&lt;br /&gt;
  /* #define STM32F429_439xx */  /*!&amp;lt; STM32F429VG, STM32F429VI, STM32F429ZG, STM32F429ZI, STM32F429BG, STM32F429BI,  &lt;br /&gt;
                                      STM32F429NG, STM32F439NI, STM32F429IG, STM32F429II, STM32F439VG, STM32F439VI, &lt;br /&gt;
                                      STM32F439ZG, STM32F439ZI, STM32F439BG, STM32F439BI, STM32F439NG, STM32F439NI,&lt;br /&gt;
                                      STM32F439IG and STM32F439II Devices */&lt;br /&gt;
&lt;br /&gt;
  /* #define STM32F401xx */      /*!&amp;lt; STM32F401CB, STM32F401CC,  STM32F401RB, STM32F401RC, STM32F401VB, STM32F401VC  &lt;br /&gt;
                                      STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CExx, STM32F401RE and STM32F401VE Devices */&lt;br /&gt;
&lt;br /&gt;
  /* #define STM32F411xE */      /*!&amp;lt; STM32F411CD, STM32F411RD, STM32F411VD, STM32F411CE, STM32F411RE and STM32F411VE Devices */&lt;br /&gt;
#endif&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Hier mithilfe des Kommentars das Präprozessor-Makro heraussuchen, das zum verwendeten Mikrocontroller passt, also z.B. &amp;quot;STM32F40_41xxx&amp;quot; für den STM32F407VG. Dieses kopieren und für später merken.&lt;br /&gt;
&lt;br /&gt;
== Projekt erstellen ==&lt;br /&gt;
=== Clock-Konfiguration generieren ===&lt;br /&gt;
Zum Initialisieren des Takts wird eine spezielle Funktion benötigt, die je nach Art und Frequenz des Takts spezifisch erzeugt werden muss. ST bietet ein Tool, um diese Datei zu generieren:&lt;br /&gt;
* Auf der Produkt seite des Mikrocontrollers (zB [http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1577/LN11/PF252140 hier] für den STM32F407VG) auf &amp;quot;Design Resources&amp;quot; klicken, und den Eintrag in der Art von &amp;quot;Clock configuration tool for STM32F40x/41x microcontrollers (AN3988)&amp;quot; finden.&lt;br /&gt;
* Die Datei herunterladen und mit MS Excel öffnen. Die gewünschte Clock-Konfiguration auswählen, und den Code generieren lassen. Die Datei zB unter dem Namen system_stm32f4xx.c speichern.&lt;br /&gt;
=== Eclipse Projekt konfigurieren ===&lt;br /&gt;
[[Datei:Eclipse STM32 Project.png|right|thumb|Fertiges Projekt in Eclipse geöffnet]]Neue Projekte werden über &amp;quot;File&amp;quot;-&amp;gt;&amp;quot;New&amp;quot;-&amp;gt;&amp;quot;Project...&amp;quot; angelegt.&lt;br /&gt;
* In der Baumstruktur &amp;quot;C/C++ -&amp;gt; C++ Project&amp;quot; auswählen. Im C++ Projekt kann man natürlich auch einfachen C Code schreiben, aber es ist die Möglichkeit für C++ offen gehalten.&lt;br /&gt;
* In der Baumstruktur &amp;quot;Empty Project&amp;quot; auswählen, und rechts &amp;quot;Cross ARM GCC&amp;quot;. Es können zwar auch die einfacheren Vorlagen für spezifische Controller wie &amp;quot;STM32F4xx C/C++ Project&amp;quot; verwendet werden, dies ist aber weniger flexibel, weswegen hier ersteres erläutert wird.&lt;br /&gt;
* Als Namen bitte einen ohne Leerzeichen oder Sonderzeichen verwenden.&lt;br /&gt;
* Mit 2x &amp;quot;Next&amp;quot; und 1x &amp;quot;Finish&amp;quot; das Erstellen abschließen.&lt;br /&gt;
* Das zuvor gesicherte Linkerscript (mit der Endung .ld) in das Projektverzeichnis kopieren. Den Projektnamen links anklicken, rechts Maustaste, und &amp;quot;Refresh&amp;quot; (oder F5) drücken. Das Linker-Script sollte im Dateibaum erscheinen.&lt;br /&gt;
* Im Projekt müssen zunächst einige Einstellungen vorgenommen werden. Dazu mit der rechten Maustaste auf den Projektnamen im linken Fenster anklicken, und &amp;quot;Properties&amp;quot; auswählen.&lt;br /&gt;
** Im erscheinenden Fenster, im DropDown Menü oben &amp;quot;[All Configurations]&amp;quot; auswählen&lt;br /&gt;
** Nur Linux: In der Baumstruktur &amp;quot;C/C++ Build&amp;quot; auswählen, den Reiter &amp;quot;Behaviour&amp;quot; öffnen, den Haken bei &amp;quot;Enable Parallel Build&amp;quot; setzen. Dies beschleunigt die Kompilierung, funktioniert aber nicht unter Windows (beim Kopieren des Projekts beachten).&lt;br /&gt;
** In der Baumstruktur &amp;quot;C/C++ Build&amp;quot; -&amp;gt; &amp;quot;Settings&amp;quot; anwählen. Das Öffnen dauert in aktuellen Versionen etwas, vermutlich ein Bug.&lt;br /&gt;
*** In der 2. Baumstruktur &amp;quot;Target processor&amp;quot; auswählen.&lt;br /&gt;
**** Unter &amp;quot;ARM family&amp;quot; den gewünschten Prozessor auswählen, also z.B. &amp;quot;cortex-m4&amp;quot; für STMF4 oder &amp;quot;cortex-m3&amp;quot; für STM32F1.&lt;br /&gt;
**** Nur bei Cortex-M4 (zB STM32F3 und STM32F4):&lt;br /&gt;
***** Unter Float ABI &amp;quot;FP instructions (hard)&amp;quot; auswählen&lt;br /&gt;
***** Unter &amp;quot;FPU Type&amp;quot; &amp;quot;fpv4-sp-d16 &amp;quot; auswählen. Siehe [https://launchpadlibrarian.net/209775724/readme.txt hier in der Tabelle] für die möglichen Werte der verschiedenen Prozessoren.&lt;br /&gt;
*** Es ist zu empfehlen, LTO beim Kompilieren im Release-Modus zu aktivieren. Dies resultiert in kleineren und schnelleren Binaries, erschwert aber das Debugging mit GDB sehr:&lt;br /&gt;
**** Oben die Configuration &amp;quot;Release&amp;quot; auswählen&lt;br /&gt;
**** In der 2. Baumstruktur &amp;quot;Optimization&amp;quot; auswählen&lt;br /&gt;
**** &amp;quot;Link-time optimizer (-flto)&amp;quot; aktivieren&lt;br /&gt;
**** Oben wieder &amp;quot;[All configurations]&amp;quot; anklicken&lt;br /&gt;
*** In der 2. Baumstruktur &amp;quot;Cross ARM C++ Compiler -&amp;gt; Optimization&amp;quot; anklicken&lt;br /&gt;
**** Rechts &amp;quot;Do not use exceptions (-fno-exceptions) anwählen&lt;br /&gt;
**** Rechts &amp;quot;Do not use RTTO (-fno-rtti)&amp;quot; anwählen&lt;br /&gt;
*** In der 2. Baumstruktur &amp;quot;Cross ARM C++ Linker&amp;quot; -&amp;gt; &amp;quot;General&amp;quot; auswählen&lt;br /&gt;
**** In der Toolbar auf &amp;quot;Add&amp;quot; klicken, auf &amp;quot;Workspace&amp;quot; klicken, und das soeben in das Projekt kopierte Linkerscript auswählen.&lt;br /&gt;
*** In der 2. Baumstruktur &amp;quot;Cross ARM C++ Linker&amp;quot; -&amp;gt; &amp;quot;Miscellaneous&amp;quot; auswählen&lt;br /&gt;
**** Den Haken bei &amp;quot;Use newlib-nano (--specs=nano.specs)&amp;quot; setzen.&lt;br /&gt;
**** Optional, nur bei Cortex-M4 (zB STM32F3 und STM32F4):&lt;br /&gt;
***** Den Haken bei &amp;quot;Use float with with nano printf (-u _printf_float)&amp;quot; setzen. Dies ermöglicht die Nutzung von &amp;quot;%f&amp;quot; bei &amp;quot;printf&amp;quot;, verbraucht aber automatisch eine Menge Flash+RAM und benötigt die Syscalls für malloc (s.u.). Daher ist ggf. zu empfehlen, dies nur in der Debug-Konfiguration zu aktivieren. Dazu in der Dropbown-Box oben vor aktivieren dieser Einstellung auf &amp;quot;Debug&amp;quot; klicken, und danach wieder auf &amp;quot;[All Configurations]&amp;quot;.&lt;br /&gt;
*** Im Reiter &amp;quot;Devices&amp;quot; in der Baumstruktur den verwendeten Mikrocontroller, wie zB &amp;quot;STM32F407VG&amp;quot; auswählen.&lt;br /&gt;
** In der linken Baumstruktur &amp;quot;C/C++ General&amp;quot;-&amp;gt;&amp;quot;Paths and Symbols&amp;quot; auswählen&lt;br /&gt;
*** Oben im Drop-Down-Menü &amp;quot;Debug&amp;quot; anklicken&lt;br /&gt;
*** Im Reiter &amp;quot;Symbols&amp;quot; rechts auf &amp;quot;Add&amp;quot; klicken und dadurch nacheinander folgende Symbole definieren. Dabei immer beide Häkchen setzen!&lt;br /&gt;
**** Name &amp;quot;HSE_VALUE&amp;quot;    Value=Takt des Quarzes, z.B. 8000000&lt;br /&gt;
**** Name &amp;quot;USE_STDPERIPH_DRIVER&amp;quot;   Value leerlassen&lt;br /&gt;
**** Name &amp;quot;__FPU_PRESENT&amp;quot;    Value=1&lt;br /&gt;
**** Das zuvor gemerkte Präprozessor-Makro aus der &amp;quot;stm32f**.h&amp;quot; (zB. STM32F40_41xxx)   Value leerlassen&lt;br /&gt;
**** Name &amp;quot;ARM_MATH_CM4&amp;quot;, &amp;quot;ARM_MATH_CM3&amp;quot;, &amp;quot;ARM_MATH_CM0&amp;quot;, oder &amp;quot;ARM_MATH_CM0PLUS&amp;quot; je nachdem ob für den Cortex-M4, -M3, -M0, oder -M0+ kompiliert wird; Value leerlassen&lt;br /&gt;
** Das Fenster mit OK schließen.&lt;br /&gt;
Nun ist der Compiler an sich richtig konfiguriert. Allerdings fehlt noch die Library von ST:&lt;br /&gt;
* Die zuvor vorbereitete Standard Peripheral Library (d.h. das Verzeichnis &amp;quot;Libraries&amp;quot;) in das Projektverzeichnis kopieren. Dies ist leider die einzig sinnvolle &amp;amp; einfache Möglichkeit.&lt;br /&gt;
* Den zuvor gesicherten Startup-Code, also zB. &amp;quot;startup_stm32f40_41xxx.S&amp;quot; in das Projektverzeichnis kopieren&lt;br /&gt;
* Die zuvor gesicherte Datei &amp;quot;stm32f***_conf.h&amp;quot; in das Projektverzeichnis kopieren&lt;br /&gt;
* Die zuvor generierte Datei &amp;quot;system_stm32f**&amp;quot; mit der Clock-Konfiguration in das Projektverzeichnis kopieren&lt;br /&gt;
Jetzt müssen dem Compiler noch die Pfade der Header-Dateien der Library mitgeteilt werden:&lt;br /&gt;
* Mit der rechten Maustaste auf den Projektnamen im linken Fenster anklicken, und &amp;quot;Properties&amp;quot; auswählen.&lt;br /&gt;
* Links in der Baumstruktur &amp;quot;C/C++ General&amp;quot; -&amp;gt; &amp;quot;Paths and Symbols&amp;quot; anklicken, und den Reiter &amp;quot;Includes&amp;quot; auswählen.&lt;br /&gt;
* Oben im Drop-Down-Menü &amp;quot;Debug&amp;quot; auswählen.&lt;br /&gt;
* Mit &amp;quot;Add&amp;quot; nacheinander folgende Pfade hinzufügen. Dazu jeweils &amp;quot;Add to all languages&amp;quot; sowie &amp;quot;Add to all configurations&amp;quot; einschalten, und den &amp;quot;Workspace...&amp;quot; Button verwenden.&lt;br /&gt;
** &amp;quot;Libraries/CMSIS/Device/ST/STM32F***/Include&amp;quot;&lt;br /&gt;
** &amp;quot;Libraries/CMSIS/Include&amp;quot;&lt;br /&gt;
** &amp;quot;Libraries/STM32F**_StdPeriph_Driver/inc&amp;quot;&lt;br /&gt;
** Den Pfad, in dem sich die &amp;quot;stm32f***_conf.h&amp;quot; befindet, also typischerweise das Projektverzeichnis selber.&lt;br /&gt;
* Mit OK das Fenster schließen. Danach wird Eclipse die C/C++ Analyse laufen lassen. Dies kann etwas dauern und die weitere Bedienung währenddessen verlangsamen. Der Fortschritt ist unten rechts im Fenster zu sehen.&lt;br /&gt;
&lt;br /&gt;
=== Linkerscript anpassen ===&lt;br /&gt;
Noch einmal das soeben hineinkopierte Linkerscript (mit der Endung .ld) öffnen. Die Zeile mit &amp;quot;_Min_Heap_Size&amp;quot; gibt die Größe des Heaps, d.h. des für malloc() zur Verfügung stehenden Speichers an. Wird malloc() nicht verwendet, kann dies auf 0 gesetzt werden. Soll printf() verwendet werden, ist zu empfehlen hier mindestens 2048 anzugeben, da printf sonst schnell keinen Speicher mehr hat und es zu komischem Verhalten kommt:&lt;br /&gt;
&amp;lt;pre&amp;gt;_Min_Heap_Size = 2048;      /* required amount of heap  */&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optional: Syscalls implementieren ===&lt;br /&gt;
Soll im Code printf() und/oder malloc() verwendet werden können, müssen die [https://sourceware.org/newlib/libc.html#Syscalls Syscalls der C-Library] implementiert werden. Dazu ist es empfehlenswert, [[Media:Newlib cortexm syscalls.c|diesen Beispielcode]] zu verwenden und in das Projektverzeichnis zu kopieren. Er gibt per printf() ausgebenen Texte seriell per SWO aus. Dies ist ein Extra-Pin im SWD-Debug-Interface (bei JTAG nicht verfügbar), der vom JLink eingelesen und über die JLink-Software an Eclipse geschickt wird. Der Code kann auch angepasst werden um den Text zB per UART auszugeben.&lt;br /&gt;
&lt;br /&gt;
== Code schreiben und kompilieren ==&lt;br /&gt;
Dem Projekt kann jetzt eine eigene Quellcodedatei hinzugefügt werden. Dazu mit der rechten Maustaste auf den Projektnamen klicken, &amp;quot;New&amp;quot;-&amp;gt;&amp;quot;Source file&amp;quot; auswählen. Die Datei z.B. &amp;quot;main.c&amp;quot; (für C) oder &amp;quot;main.cpp&amp;quot; (für C++) nennen. [[Media:Stm32f4 eclipse example.c|Hier]] kann ein einfacher Beispielcode für den STM32F407 heruntergeladen werden (funktioniert sowohl mit C als auch C++), der eine LED am Pin PD15 blinken lässt (blaue LED auf dem [http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252419 STM32F4 Discovery Board]). Der Code braucht auf jeden Fall eine &amp;quot;main()&amp;quot;-Funktion, sowie im Falle von C++ eine Funktion namens &amp;quot;__cxa_pure_virtual&amp;quot;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;extern &amp;quot;C&amp;quot; void __cxa_pure_virtual () {&lt;br /&gt;
	// This is an error callback for C++&lt;br /&gt;
	__disable_irq ();&lt;br /&gt;
	while (1) {&lt;br /&gt;
		// Cause debugger breakpoint&lt;br /&gt;
		asm volatile (&amp;quot;bkpt&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die oben verlinkte syscalls.c Datei nicht eingebunden, wird außerdem auch noch eine _exit Funktion benötigt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef __cplusplus&lt;br /&gt;
extern &amp;quot;C&amp;quot;&lt;br /&gt;
void _exit(int) {&lt;br /&gt;
#else&lt;br /&gt;
void _exit (int status) {&lt;br /&gt;
	((void) status);&lt;br /&gt;
#endif&lt;br /&gt;
	// Stop controller in case of fatal error&lt;br /&gt;
	__disable_irq ();&lt;br /&gt;
	while (1) {&lt;br /&gt;
		asm volatile (&amp;quot;bkpt&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	 __builtin_unreachable ();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dies sind Callbacks zur Fehlerbehandlung. Durch Überschreiben durch simples Blockieren des Controllers wird das Einbinden der komplexen Fehlerbehandlung der Standardbibliothek verhindert.&lt;br /&gt;
Danach kann der Code zum ersten Mal kompiliert werden. Dazu das Hammer-Symbol &amp;quot;Build&amp;quot; in der Toolbar benutzen. Fehlermeldungen sollten dem &amp;quot;Console&amp;quot; Fenster entnommen werden, da das &amp;quot;Problems&amp;quot; Fenster nicht immer korrekt funktioniert. Die erzeugten Dateien landen im Unterordner &amp;quot;Debug&amp;quot; bzw. &amp;quot;Release&amp;quot;, je nachdem welche Konfiguration gewählt ist. Die generierte Datei mit der Endung .elf (zB Debug/MeinProjekt.elf) enthält den produzierten Code sowie alle Debug-Informationen. Es wird auch eine .hex Datei angelegt, die das erzeugte Flash-Image enthält.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Debug Configuration anlegen ===&lt;br /&gt;
Um den Code zu flashen und debuggen, wird eine Debug Configuration benötigt. Dazu im Menü auf &amp;quot;Run&amp;quot;-&amp;gt;&amp;quot;Debug Configurations&amp;quot; klicken. Sollen sowohl Debug- als auch Release- Versionen so geflasht/debuggt werden, müssen mehrere Debug Configurations angelegt werden. Dazu ist es am einfachsten, eine anzulegen und mehrfach zu kopieren.&lt;br /&gt;
* Im erscheinenden Fenster in der Liste auf &amp;quot;GDB SEGGER J-Link Debugging&amp;quot; klicken, und oben auf das Symbol &amp;quot;New launch configuration&amp;quot;.&lt;br /&gt;
* Im Reiter &amp;quot;Main&amp;quot;, unter &amp;quot;C/C++ Application&amp;quot; den Pfad zum kompilierten ELF-File angeben, also zB &amp;quot;Debug/ProjektName.elf&amp;quot;.&lt;br /&gt;
* Im Reiter &amp;quot;Startup&amp;quot; sollte &amp;quot;Enable SWO&amp;quot; aktiviert, und daneben die CPU-Frequenz in Hz angegeben werden (zB 168000000 für den STM32F4).&lt;br /&gt;
* Im Reiter &amp;quot;Common&amp;quot; kann in der Liste &amp;quot;Display in favorites menu&amp;quot; ein Haken bei &amp;quot;Debug&amp;quot; gesetzt werden. Dadurch ist diese Debug Configuration schneller über das Käfer-Symbol in der Toolbar im Hauptmenü zugänglich.&lt;br /&gt;
* Über &amp;quot;Apply&amp;quot; und &amp;quot;Close&amp;quot; das Fenster schließen.&lt;br /&gt;
=== Debug Session starten ===&lt;br /&gt;
[[Datei:Eclipse STM32 Debugging.png|right|thumb|Laufende Debug-Session]]* Auf das kleine schwarze Dreieck neben dem Käfer-Symbol (&amp;quot;Debug&amp;quot;) in der Toolbar klicken, und die soeben angelegte Debug-Configuration auswählen. Eclipse wechselt nun in die Debug-Perspektive. Nach Beendigung der Debug-Session kann über den &amp;quot;C/C++&amp;quot;-Knopf oben rechts wieder in die normale Ansicht gewechselt werden.&lt;br /&gt;
* Es ist zu empfehlen die einzelnen Fenster der Ansicht so zu verschieben, dass mehr Code gleichzeitig sichtbar ist.&lt;br /&gt;
* Standardmäßig legt eclipse automatisch einen Breakpoint zu Beginn der &amp;quot;main&amp;quot; Funktion an.&lt;br /&gt;
* Über die Knöpfe &amp;quot;Resume&amp;quot;, &amp;quot;Break&amp;quot;, &amp;quot;Terminate&amp;quot; kann die Ausführung kontrolliert werden. Durch Doppelklick links neben eine Zeile werden Breakpoints gesetzt.&lt;br /&gt;
* Das ARM Plugin ermöglicht das Betrachten von Peripherie-Registern mit Trennung der einzelnen Felder. Dazu im Fenster &amp;quot;Peripherals&amp;quot; die Peripherie-Einheiten, deren Inhalt man betrachten möchte, auswählen. Im &amp;quot;Memory&amp;quot; Fenster werden dann die Register angezeigt. Die Ansicht wird immer nach jedem Ausführungsschritt aktualisiert, nicht immer sofort. Im Zweifelsfall also eine Zeile weiter laufen lassen, um die Ansicht zu aktualisieren.&lt;br /&gt;
* Ausgaben per &amp;quot;printf&amp;quot; erscheinen automatisch unten in der Konsole.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[STM32#Tutorials_f.C3.BCr_diverse_Tool-Kombinationen|Weitere Tutorials für STM32-IDE&#039;s]]&lt;br /&gt;
* [[ARM_GCC|Verwendung des GCC für Bare-Metal ARM]]&lt;br /&gt;
* [http://diller-technologies.de/stm32_wide.html Tutorial zur STM32 Programmierung]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_JLink_Linux/Windows&amp;diff=89166</id>
		<title>STM32 Eclipse JLink Linux/Windows</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_JLink_Linux/Windows&amp;diff=89166"/>
		<updated>2015-06-28T12:21:24Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
Da viele Tutorials zur Verwendung von Eclipse mit [[STM32]] auf relativ alten Tools aufsetzen, hier eine Anleitung mit aktuellem (2015) Stand. Hier wird die Programmierung von STM32 (ähnlich auch auf andere Cortex-M anwendbar) mit der Tool-Kombination [http://www.eclipse.org/ Eclipse] + [https://www.segger.com/jlink-debug-probes.html Segger JLink] + [https://launchpad.net/gcc-arm-embedded GCC-ARM-Embedded] + GDB erläutert für Linux und Windows. Die Tools gibt es auch für Mac OS, entsprechende Hinweise zur Benutzung fehlen hier noch. Der J-Link ist zwar relativ teuer (ca. 50€ für Privatpersonen), dafür aber schnell und stabil, kennt (fast?) alle ARM&#039;s und funktioniert plattformübergreifend direkt mit der Software vom Hersteller. Diese Kombination ermöglicht:&lt;br /&gt;
* Nutzung der komfortablen und mächtigen Entwicklungsumgebung Eclipse, inkl. Code-Vervollständigung und vielen Plugins wie zB. für Versionsverwaltung&lt;br /&gt;
* Automatische Generierung von makefiles und Aufruf des Compilers, kein manuelles Bearbeiten erforderlich&lt;br /&gt;
* Graphisches und schnelles Flashen und Debugging über JLink und GDB&lt;br /&gt;
* Graphische Anzeige von Registerinhalten beim Debugging&lt;br /&gt;
* Optional: Ausgabe von Texten per printf direkt nach Eclipse&lt;br /&gt;
* Projekte können zwischen Betriebssystemen ausgetauscht werden, Workflow generell fast identisch&lt;br /&gt;
* Voller Support für FPU der Cortex-M4, voller Support für C++, kein Codesize-Limit&lt;br /&gt;
* Es werden generische C/C++ Projekte angelegt; dies ist zwar etwas komplizierter, bietet aber später mehr Einstellungsmöglichkeiten&lt;br /&gt;
* Die Software ist auch für kommerzielle Nutzung komplett gratis und bis auf JLink auch OpenSource. Nur der JLink-Adapter selber ist für kommerzielle Nutzung teurer (aber das ist er bei Verwendung mit anderen IDE&#039;s natürlich auch).&lt;br /&gt;
* Da die normale und keine angepasste Eclipse-Version verwendet wird, können in der selben Eclipse-Instanz auch Projekte für völlig andere Plattformen und Sprachen benutzt werden, wie z.B. C/C++ für den PC, Java, ruby usw.&lt;br /&gt;
Da Eclipse eine sehr vielseitige Entwicklungsumgebung ist, sind einige Schritte erforderlich, um das Projekt auf die speziellen Anforderungen der Embedded-Entwicklung anzupassen. Diese sind im Folgenden erläutert.&lt;br /&gt;
== Installation ==&lt;br /&gt;
Parallel zu der nachfolgenden Anleitung ist es empfehlenswert, bei der Einrichtung immer wieder einen Blick auf die Anweisungen und Beschreibungen auf der [http://gnuarmeclipse.livius.net GNU ARM Eclipse Homepage] zu werfen, da die Vorgehensweise dort gut beschrieben ist und sich auch gelegentlich ändert.&lt;br /&gt;
=== JLink ===&lt;br /&gt;
Zunächst die aktuelle Version von der [https://www.segger.com/jlink-software.html JLink Software] herunterladen und installieren. Da es hier regelmäßig neue Versionen gibt, ist es empfehlenswert sich für die [https://www.segger.com/notification/subscribe.php?prodid=7 E-Mail-Benachrichtigung] für neue Versionen einzutragen. Das Installationsverzeichnis für später merken.&lt;br /&gt;
=== GCC-ARM-Embedded ===&lt;br /&gt;
Die aktuelle Version für das jeweilige Betriebssystem [https://launchpad.net/gcc-arm-embedded herunterladen] und entpacken. Es gibt zwar auch Versionen in der Paketverwaltung mancher Linux-Distributionen aber die sind oft veraltet. Dafür bitte einen kurzen Pfad &#039;&#039;&#039;ohne Leerzeichen&#039;&#039;&#039; verwenden:&lt;br /&gt;
* Windows: z.B. C:\gcc-arm-embedded&lt;br /&gt;
* Linux: z.B. &amp;quot;/home/username/gcc-arm-embedded&amp;quot;&lt;br /&gt;
Den Pfad für später merken.&lt;br /&gt;
=== Make ===&lt;br /&gt;
* Linux: Meistens vorinstalliert. Unter Ubuntu im Paket &amp;quot;build-essential&amp;quot; enthalten.&lt;br /&gt;
* Windows: Hier können die MinGW/MSYS Basis Tools verwendet werden:&lt;br /&gt;
** Dazu [http://sourceforge.net/projects/mingw/files/latest/download hier] den MinGW Installer herunterladen und ausführen.&lt;br /&gt;
** Als Installation Directory am besten &amp;quot;C:\MinGW&amp;quot; beibehalten.&lt;br /&gt;
** So oft &amp;quot;Continue&amp;quot; anklicken, bis der &amp;quot;MinGW Installation Manager&amp;quot; erscheint und eine Liste installierbarer Pakete anzeigt.&lt;br /&gt;
** In der Liste das Paket &amp;quot;msys-base&amp;quot; mit der rechten Maustaste anklicken und &amp;quot;Mark for Installation&amp;quot; anklicken&lt;br /&gt;
** Im Menü &amp;quot;Installation&amp;quot;-&amp;gt;&amp;quot;Apply Changes&amp;quot; anklicken, und mit &amp;quot;Apply&amp;quot; bestätigen.&lt;br /&gt;
** Nachdem der Vorgang abgeschlossen ist, das Programm beenden&lt;br /&gt;
=== Pfade setzen ===&lt;br /&gt;
&#039;&#039;&#039;Vor&#039;&#039;&#039; dem Starten von Eclipse müssen dem System die Pfade der Kommandozeilentools bekannt gemacht werden:&lt;br /&gt;
* Windows:&lt;br /&gt;
** Rechte Maustaste auf den Arbeitsplatz klicken, &amp;quot;Eigenschaften&amp;quot; -&amp;gt; &amp;quot;Erweiterte Systemeinstellungen&amp;quot; -&amp;gt; &amp;quot;Umgebungsvariablen&amp;quot; anklicken.&lt;br /&gt;
** Im &#039;&#039;&#039;unteren&#039;&#039;&#039; Listenfeld den Eintrag &amp;quot;Path&amp;quot; suchen, auf &amp;quot;Bearbeiten&amp;quot; klicken&lt;br /&gt;
** Ans Ende des Textes ein Semikolon hängen (falls nicht schon vorhanden), und durch zwei Semikola getrennt die Pfade zur J-Link Installation, zur GCC-ARM-Embedded -Installation (plus &amp;quot;\bin&amp;quot;) und zur MSYS-Installation &#039;&#039;&#039;anhängen&#039;&#039;&#039;. Also zum Beispiel folgenden Text anhängen (Version anpassen) und alles mit OK bestätigen:&lt;br /&gt;
&amp;lt;code&amp;gt;;C:\gcc-arm-embedded\bin;C:\Program Files (x86)\SEGGER\JLink_V500e;C:\MinGW\msys\1.0\bin&amp;lt;/code&amp;gt;&lt;br /&gt;
** In einem &#039;&#039;&#039;danach&#039;&#039;&#039; erst gestarteten cmd.exe Fenster den Befehl &amp;quot;JLink&amp;quot; eingeben. Es sollte die Lizenzvereinbarung von Segger erscheinen (diese bestätigen), und im Terminal wieder &amp;quot;exit&amp;quot; eingeben. Funktioniert dies nicht, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
** Im selben Fenster &amp;quot;arm-none-eabi-gcc&amp;quot; eingeben. Es sollte eine Meldung im Stil von &amp;quot;arm-none-eabi-gcc: fatal error: no input files&amp;quot; erscheinen. Falls nicht, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
** Im selben Fenster &amp;quot;make&amp;quot; eingeben. Es sollte ein Meldung in der Art von &amp;quot;make: *** No targets specified and no makefile found.  Stop.&amp;quot; erscheinen. Falls nicht, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
* Linux:&lt;br /&gt;
** Mit einem Texteditor die (versteckte) Datei &amp;quot;.profile&amp;quot; im Home-Verzeichnis öffnen bzw. anlegen falls nicht vorhanden. Folgende Zeile &#039;&#039;&#039;anhägen&#039;&#039;&#039; (Pfad anpassen):&lt;br /&gt;
&amp;lt;code&amp;gt;export PATH=$PATH:/home/username/gcc-arm-embedded/bin&amp;lt;/code&amp;gt;&lt;br /&gt;
** Den Benutzer ab- und wieder anmelden&lt;br /&gt;
** In einem Terminal-Fenster &amp;quot;JLinkExe&amp;quot; eingeben. Es sollte sich die JLink-Software mit &amp;quot;SEGGER J-Link Commander V5.00c (&#039;?&#039; for help)&amp;quot; melden. Diese wieder mit &amp;quot;exit&amp;quot; beenden. Falls das nicht funktioniert, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
** Im selben Fenster &amp;quot;arm-none-eabi-gcc&amp;quot; eingeben. Es sollte eine Meldung im Stil von &amp;quot;arm-none-eabi-gcc: fatal error: no input files&amp;quot; erscheinen. Falls nicht, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
Die Umgebungsvariable muss nach jedem Update der JLink-Software neu gesetzt werden, da der Pfad die Versionsnummer enthält.&lt;br /&gt;
=== Eclipse ===&lt;br /&gt;
* Da Eclipse auf Java basiert, muss dies zuerst installiert werden:&lt;br /&gt;
** Windows: Den [http://www.java.com/de/download/ Installer herunterladen] und laufen lassen.&lt;br /&gt;
** Linux: Je nach Distribution unterschiedlich, für Ubuntu [http://wiki.ubuntuusers.de/Java/Installation/Oracle_Java/Java_8#Installation siehe hier]&lt;br /&gt;
* Die aktuelle Version von &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot; [http://www.eclipse.org/downloads/ hier herunterladen]. Unter Linux ist eclipse zwar auch oft in der Paketverwaltung enthalten, diese Version ist aber meist stark veraltet. Das heruntergeladene Archiv muss nur in einen beliebigen Ordner entpackt werden und die enthaltene Programmdatei (Linux: &amp;quot;eclipse&amp;quot;, Windows: &amp;quot;eclipse.exe&amp;quot;) gestartet werden.&lt;br /&gt;
* Den beim ersten Start erscheinenden &amp;quot;Welcome&amp;quot; Tab schließen.&lt;br /&gt;
* Im Menü &amp;quot;Help&amp;quot;-&amp;gt;&amp;quot;Install new software&amp;quot; anwählen, unter &amp;quot;Work With&amp;quot; die URL &amp;lt;nowiki&amp;gt;&amp;quot;http://gnuarmeclipse.sourceforge.net/updates&amp;quot;&amp;lt;/nowiki&amp;gt; eingeben, Enter klicken, den in der Liste erscheinenden Eintrag &amp;quot;GNU ARM C/C++ Cross Development Tools&amp;quot; auswählen, und mit &amp;quot;Next&amp;quot; und &amp;quot;Finish&amp;quot; installieren. Die Sicherheitsabfrage über unsignierte Software bestätigen, und die Abfrage zum Neustart von Eclipse bestätigen. Die Installation dauert etwas, und funktioniert manchmal nicht wenn die Server überlastet sind. Dann einfach später noch einmal probieren.&lt;br /&gt;
* Nur Windows: Im Menü &amp;quot;Window&amp;quot;-&amp;gt;&amp;quot;Preferences&amp;quot; anklicken, in der Baumstruktur des erscheinenden Fensters &amp;quot;Run&amp;quot;-&amp;gt;&amp;quot;String Substitution&amp;quot; anwählen, die Zeile mit &amp;quot;jlink_path&amp;quot; auswählen, &amp;quot;Edit&amp;quot; anklicken, und unter &amp;quot;Value&amp;quot; den Pfad zur JLink-Installation, also zB. &amp;quot;C:\Program Files (x86)\SEGGER\JLink_V500e&amp;quot; eintragen. Alles mit OK schließen.&lt;br /&gt;
* In der Toolbar den Eintrag &amp;quot;Make the C/C++ Packs perspective visible&amp;quot; anklicken, und das Symbol mit den gelben Pfeilen (&amp;quot;Update the package definitions from all repositories&amp;quot;) anklicken. Dieser Vorgang dauert einige Minuten.&lt;br /&gt;
* In der erscheinenden Baumstruktur im Tab &amp;quot;Packs&amp;quot; unter dem Punkt &amp;quot;Keil&amp;quot; die Mikrocontroller auswählen (Mehrfachauswahl mit der Strg-Taste möglich) für die man programmieren möchte (zB. &amp;quot;STM32F4xx_DFP&amp;quot;), und mit der rechten Maustaste und Klick auf &amp;quot;Install&amp;quot; installieren. Auch dies dauert etwas, der Fortschritt des Vorgangs wird etwas versteckt rechts unten im Fenster angezeigt.&lt;br /&gt;
* Danach wieder mit Klick auf den &amp;quot;C/C++&amp;quot; Button oben rechts in die C/C++ Ansicht wechseln.&lt;br /&gt;
&lt;br /&gt;
=== Standard Peripheral Library vorbereiten ===&lt;br /&gt;
Um auf die Hardware-Register direkt zuzugreifen oder die Treiberfunktionen von ST zu verwenden, sowie für den Startup-Code &amp;amp; Linkerscript, wird die Library von ST benötigt.&lt;br /&gt;
* Zum Herunterladen die Produktseite des Mikrocontrollers aufrufen (zB [http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1577/LN11/PF252140 hier] für STM32F407VG), &amp;quot;Design Resources&amp;quot; anklicken, unter dem Punkt &amp;quot;Related Tools and Software&amp;quot; den Eintrag im Stil von &amp;quot;STM32F4 DSP and standard peripherals library&amp;quot; finden (zB [http://www.st.com/web/en/catalog/tools/PF257901 hier] für STM32F4). Ganz unten findet sich der &amp;quot;Download&amp;quot; Button.&lt;br /&gt;
Leider ist das Archiv nicht gut strukturiert. Daher müssen die entsprechenden Dateien herausgesucht werden:&lt;br /&gt;
* Im enthaltenen Verzeichnis &amp;quot;Project/*** Templates&amp;quot; nach Dateien suchen, die auf *.ld enden und die herauskopieren, deren Name zum verwendeten Mikrocontroller passt, also z.B. &amp;quot;STM32F417IG_FLASH.ld&amp;quot; für den STM32F4. Diese ist das Linkerscript und wird später für jedes Projekt benötigt. Zur Sicherheit sollte diese Datei einmal im Texteditor geöffnet und auf Fehler überprüft werden (ST ist bekannt dafür hier Fehler zu machen):&lt;br /&gt;
** Die Speicher-Größen-Angaben der folgenden Zeilen sollten zum Datasheet passen (ggf. anpassen):&lt;br /&gt;
&amp;lt;pre&amp;gt;MEMORY&lt;br /&gt;
{&lt;br /&gt;
FLASH (rx)      : ORIGIN = 0x8000000, LENGTH = 1024K&lt;br /&gt;
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 128K&lt;br /&gt;
CCMRAM (rw)      : ORIGIN = 0x10000000, LENGTH = 64K&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Die Angabe der Adresse der Initialen Stack-Adresse sieht oft so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;_estack = 0x2001FFFF;    /* end of RAM */&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Dies ist &#039;&#039;&#039;falsch&#039;&#039;&#039; (ST weiß selber nicht wie der Cortex-M funktioniert). Die angegebene Adresse sollte Anfangsadresse des RAM&#039;s (immer 0x20000000) plus RAM-Größe (z.B. beim STM32F407 0x20000 Bytes) sein, also z.B. 0x20020000 für den STM32F407:&lt;br /&gt;
&amp;lt;pre&amp;gt;_estack = 0x20020000;    /* end of RAM */&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Ist dies falsch, kann es später zu schwer auffindbaren Problemen im Zusammenhang mit z.B. Floatingpoint-Funktionsargumenten kommen.&lt;br /&gt;
* Im Archiv nach Dateien suchen, deren Namen mit &amp;quot;startup_stm32&amp;quot; beginnt. Eine der Dateien heraussuchen, deren Name zum Mikrocontroller passt, &#039;&#039;&#039;und&#039;&#039;&#039; deren enthaltendes Verzeichnis den Namen TrueSTUDIO trägt, also zB. &amp;quot;Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO/startup_stm32f40_41xxx.s&amp;quot;. Diese Datei herauskopieren, sie ist der Startup-Code und wird später für jedes Projekt benötigt. Dabei die Dateiendung von &amp;quot;.s&amp;quot; auf &amp;quot;.S&amp;quot; ändern, denn sonst erkennt eclipse sie nicht.&lt;br /&gt;
* Im Verzeichnis &amp;quot;Project/*** Templates&amp;quot; die Datei &amp;quot;stm32f***_conf.h&amp;quot; herauskopieren. Diese wird für Einstellungen in der Treiber-Library benötigt.&lt;br /&gt;
* Alles außer dem Verzeichnis &amp;quot;Libraries&amp;quot; löschen.&lt;br /&gt;
* Im Verzeichnis &amp;quot;Libraries&amp;quot; (rekursiv) nach Dateien &amp;amp; Ordnern suchen, die &amp;quot;example&amp;quot; oder &amp;quot;template&amp;quot; im Namen tragen und alle löschen.&lt;br /&gt;
* Die Unterverzeichnisse &amp;quot;Documentation&amp;quot;, &amp;quot;Lib&amp;quot;, &amp;quot;RTOS&amp;quot;, &amp;quot;SVD&amp;quot; löschen. Die Lizenz und Release Notes-Dateien stören zwar nicht, können aber auch gelöscht werden. Im Endeffekt werden nur die .c und .h Dateien benötigt. Die DSP_Lib kann auch gelöscht werden, wenn keine DSP-Funktionen benötigt werden (existiert onehin nur für Cortex-M4 Controller).&lt;br /&gt;
* Leider enthält die Library für alle STM32F4 die Treiber für sowohl den FMC als auch den FSMC, obwohl beide nicht in allen Varianten vorhanden sind. Diese Treiber verursachen Compilerfehler, wenn für den falschen Controller kompiliert. Daher muss die Datei &amp;quot;STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fmc.c&amp;quot; gelöscht werden, wenn kein FMC vorhanden ist (wie beim STM32F40x), bzw. die &amp;quot;STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fsmc.c&amp;quot; wenn kein FSMC vorhanden ist (wie beim STM32F42x).&lt;br /&gt;
* Danach sollte nur noch so eine Struktur übrig bleigen:&lt;br /&gt;
&amp;lt;pre&amp;gt;./STM32F4xx_StdPeriph_Driver&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/src  -   Hier liegt der Quellcode für die Peripherie-Treiber&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/src/stm32f4xx_wwdg.c&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c&lt;br /&gt;
...&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/inc  -   Hier liegen die Includes für die Peripherie-Treiber&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_wwdg.h&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_usart.h&lt;br /&gt;
...&lt;br /&gt;
./CMSIS&lt;br /&gt;
./CMSIS/Include                   -   Hier liegen die Includes für den Prozessorkern (Cortex-M*)&lt;br /&gt;
./CMSIS/Include/core_sc300.h&lt;br /&gt;
./CMSIS/Include/core_sc000.h&lt;br /&gt;
...&lt;br /&gt;
./CMSIS/DSP_Lib/Source/TransformFunctions  - Hier liegt die DSP-Library (optional)&lt;br /&gt;
./CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_q31.c&lt;br /&gt;
./CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_q15.c&lt;br /&gt;
...&lt;br /&gt;
./CMSIS/Device/ST/STM32F4xx/Include&lt;br /&gt;
./CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h   -   Dies ist die Include-Datei für das Clock Setup&lt;br /&gt;
./CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h   -   Dies ist die zentrale Include-Datei für die Register-Definitionen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Soll die Standard Peripheral Library nicht genutzt werden, sondern nur direkt die Register-Definitionen, werden nur die letzten beiden Dateien benötigt sowie die im Verzeichnis CMSIS/Include.&lt;br /&gt;
* In der Datei &amp;quot;CMSIS/Device/ST/STM32***/Include/stm32f***.h&amp;quot; befindet sich ganz oben eine Präprozessor-Fallunterscheidung der Form&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#if !defined (STM32F40_41xxx) &amp;amp;&amp;amp; !defined (STM32F427_437xx) &amp;amp;&amp;amp; !defined (STM32F429_439xx) &amp;amp;&amp;amp; !defined (STM32F401xx) &amp;amp;&amp;amp; !defined (STM32F411xE)&lt;br /&gt;
  /* #define STM32F40_41xxx */   /*!&amp;lt; STM32F405RG, STM32F405VG, STM32F405ZG, STM32F415RG, STM32F415VG, STM32F415ZG,  &lt;br /&gt;
                                      STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG, STM32F407IE, &lt;br /&gt;
                                      STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE, STM32F417IG and STM32F417IE Devices */&lt;br /&gt;
&lt;br /&gt;
  /* #define STM32F427_437xx */  /*!&amp;lt; STM32F427VG, STM32F427VI, STM32F427ZG, STM32F427ZI, STM32F427IG, STM32F427II,  &lt;br /&gt;
                                      STM32F437VG, STM32F437VI, STM32F437ZG, STM32F437ZI, STM32F437IG, STM32F437II Devices */&lt;br /&gt;
&lt;br /&gt;
  /* #define STM32F429_439xx */  /*!&amp;lt; STM32F429VG, STM32F429VI, STM32F429ZG, STM32F429ZI, STM32F429BG, STM32F429BI,  &lt;br /&gt;
                                      STM32F429NG, STM32F439NI, STM32F429IG, STM32F429II, STM32F439VG, STM32F439VI, &lt;br /&gt;
                                      STM32F439ZG, STM32F439ZI, STM32F439BG, STM32F439BI, STM32F439NG, STM32F439NI,&lt;br /&gt;
                                      STM32F439IG and STM32F439II Devices */&lt;br /&gt;
&lt;br /&gt;
  /* #define STM32F401xx */      /*!&amp;lt; STM32F401CB, STM32F401CC,  STM32F401RB, STM32F401RC, STM32F401VB, STM32F401VC  &lt;br /&gt;
                                      STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CExx, STM32F401RE and STM32F401VE Devices */&lt;br /&gt;
&lt;br /&gt;
  /* #define STM32F411xE */      /*!&amp;lt; STM32F411CD, STM32F411RD, STM32F411VD, STM32F411CE, STM32F411RE and STM32F411VE Devices */&lt;br /&gt;
#endif&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Hier mithilfe des Kommentars das Präprozessor-Makro heraussuchen, das zum verwendeten Mikrocontroller passt, also z.B. &amp;quot;STM32F40_41xxx&amp;quot; für den STM32F407VG. Dieses kopieren und für später merken.&lt;br /&gt;
&lt;br /&gt;
== Projekt erstellen ==&lt;br /&gt;
=== Clock-Konfiguration generieren ===&lt;br /&gt;
Zum Initialisieren des Takts wird eine spezielle Funktion benötigt, die je nach Art und Frequenz des Takts spezifisch erzeugt werden muss. ST bietet ein Tool, um diese Datei zu generieren:&lt;br /&gt;
* Auf der Produkt seite des Mikrocontrollers (zB [http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1577/LN11/PF252140 hier] für den STM32F407VG) auf &amp;quot;Design Resources&amp;quot; klicken, und den Eintrag in der Art von &amp;quot;Clock configuration tool for STM32F40x/41x microcontrollers (AN3988)&amp;quot; finden.&lt;br /&gt;
* Die Datei herunterladen und mit MS Excel öffnen. Die gewünschte Clock-Konfiguration auswählen, und den Code generieren lassen. Die Datei zB unter dem Namen system_stm32f4xx.c speichern.&lt;br /&gt;
=== Eclipse Projekt konfigurieren ===&lt;br /&gt;
[[Datei:Eclipse STM32 Project.png|right|thumb|Fertiges Projekt in Eclipse geöffnet]]Neue Projekte werden über &amp;quot;File&amp;quot;-&amp;gt;&amp;quot;New&amp;quot;-&amp;gt;&amp;quot;Project...&amp;quot; angelegt.&lt;br /&gt;
* In der Baumstruktur &amp;quot;C/C++ -&amp;gt; C++ Project&amp;quot; auswählen. Im C++ Projekt kann man natürlich auch einfachen C Code schreiben, aber es ist die Möglichkeit für C++ offen gehalten.&lt;br /&gt;
* In der Baumstruktur &amp;quot;Empty Project&amp;quot; auswählen, und rechts &amp;quot;Cross ARM GCC&amp;quot;. Es können zwar auch die einfacheren Vorlagen für spezifische Controller wie &amp;quot;STM32F4xx C/C++ Project&amp;quot; verwendet werden, dies ist aber weniger flexibel, weswegen hier ersteres erläutert wird.&lt;br /&gt;
* Als Namen bitte einen ohne Leerzeichen oder Sonderzeichen verwenden.&lt;br /&gt;
* Mit 2x &amp;quot;Next&amp;quot; und 1x &amp;quot;Finish&amp;quot; das Erstellen abschließen.&lt;br /&gt;
* Das zuvor gesicherte Linkerscript (mit der Endung .ld) in das Projektverzeichnis kopieren. Den Projektnamen links anklicken, rechts Maustaste, und &amp;quot;Refresh&amp;quot; (oder F5) drücken. Das Linker-Script sollte im Dateibaum erscheinen.&lt;br /&gt;
* Im Projekt müssen zunächst einige Einstellungen vorgenommen werden. Dazu mit der rechten Maustaste auf den Projektnamen im linken Fenster anklicken, und &amp;quot;Properties&amp;quot; auswählen.&lt;br /&gt;
** Im erscheinenden Fenster, im DropDown Menü oben &amp;quot;[All Configurations]&amp;quot; auswählen&lt;br /&gt;
** Nur Linux: In der Baumstruktur &amp;quot;C/C++ Build&amp;quot; auswählen, den Reiter &amp;quot;Behaviour&amp;quot; öffnen, den Haken bei &amp;quot;Enable Parallel Build&amp;quot; setzen. Dies beschleunigt die Kompilierung, funktioniert aber nicht unter Windows (beim Kopieren des Projekts beachten).&lt;br /&gt;
** In der Baumstruktur &amp;quot;C/C++ Build&amp;quot; -&amp;gt; &amp;quot;Settings&amp;quot; anwählen. Das Öffnen dauert in aktuellen Versionen etwas, vermutlich ein Bug.&lt;br /&gt;
*** In der 2. Baumstruktur &amp;quot;Target processor&amp;quot; auswählen.&lt;br /&gt;
**** Unter &amp;quot;ARM family&amp;quot; den gewünschten Prozessor auswählen, also z.B. &amp;quot;cortex-m4&amp;quot; für STMF4 oder &amp;quot;cortex-m3&amp;quot; für STM32F1.&lt;br /&gt;
**** Nur bei Cortex-M4 (zB STM32F3 und STM32F4):&lt;br /&gt;
***** Unter Float ABI &amp;quot;FP instructions (hard)&amp;quot; auswählen&lt;br /&gt;
***** Unter &amp;quot;FPU Type&amp;quot; &amp;quot;fpv4-sp-d16 &amp;quot; auswählen. Siehe [https://launchpadlibrarian.net/209775724/readme.txt hier in der Tabelle] für die möglichen Werte der verschiedenen Prozessoren.&lt;br /&gt;
*** Es ist zu empfehlen, LTO beim Kompilieren im Release-Modus zu aktivieren. Dies resultiert in kleineren und schnelleren Binaries, erschwert aber das Debugging mit GDB sehr:&lt;br /&gt;
**** Oben die Configuration &amp;quot;Release&amp;quot; auswählen&lt;br /&gt;
**** In der 2. Baumstruktur &amp;quot;Optimization&amp;quot; auswählen&lt;br /&gt;
**** &amp;quot;Link-time optimizer (-flto)&amp;quot; aktivieren&lt;br /&gt;
**** Oben wieder &amp;quot;[All configurations]&amp;quot; anklicken&lt;br /&gt;
*** In der 2. Baumstruktur &amp;quot;Cross ARM C++ Compiler -&amp;gt; Optimization&amp;quot; anklicken&lt;br /&gt;
**** Rechts &amp;quot;Do not use exceptions (-fno-exceptions) anwählen&lt;br /&gt;
**** Rechts &amp;quot;Do not use RTTO (-fno-rtti)&amp;quot; anwählen&lt;br /&gt;
*** In der 2. Baumstruktur &amp;quot;Cross ARM C++ Linker&amp;quot; -&amp;gt; &amp;quot;General&amp;quot; auswählen&lt;br /&gt;
**** In der Toolbar auf &amp;quot;Add&amp;quot; klicken, auf &amp;quot;Workspace&amp;quot; klicken, und das soeben in das Projekt kopierte Linkerscript auswählen.&lt;br /&gt;
*** In der 2. Baumstruktur &amp;quot;Cross ARM C++ Linker&amp;quot; -&amp;gt; &amp;quot;Miscellaneous&amp;quot; auswählen&lt;br /&gt;
**** Den Haken bei &amp;quot;Use newlib-nano (--specs=nano.specs)&amp;quot; setzen.&lt;br /&gt;
**** Optional, nur bei Cortex-M4 (zB STM32F3 und STM32F4):&lt;br /&gt;
***** Den Haken bei &amp;quot;Use float with with nano printf (-u _printf_float)&amp;quot; setzen. Dies ermöglicht die Nutzung von &amp;quot;%f&amp;quot; bei &amp;quot;printf&amp;quot;, verbraucht aber automatisch eine Menge Flash+RAM und benötigt die Syscalls für malloc (s.u.). Daher ist ggf. zu empfehlen, dies nur in der Debug-Konfiguration zu aktivieren. Dazu in der Dropbown-Box oben vor aktivieren dieser Einstellung auf &amp;quot;Debug&amp;quot; klicken, und danach wieder auf &amp;quot;[All Configurations]&amp;quot;.&lt;br /&gt;
*** Im Reiter &amp;quot;Devices&amp;quot; in der Baumstruktur den verwendeten Mikrocontroller, wie zB &amp;quot;STM32F407VG&amp;quot; auswählen.&lt;br /&gt;
** In der linken Baumstruktur &amp;quot;C/C++ General&amp;quot;-&amp;gt;&amp;quot;Paths and Symbols&amp;quot; auswählen&lt;br /&gt;
*** Oben im Drop-Down-Menü &amp;quot;Debug&amp;quot; anklicken&lt;br /&gt;
*** Im Reiter &amp;quot;Symbols&amp;quot; rechts auf &amp;quot;Add&amp;quot; klicken und dadurch nacheinander folgende Symbole definieren. Dabei immer beide Häkchen setzen!&lt;br /&gt;
**** Name &amp;quot;HSE_VALUE&amp;quot;    Value=Takt des Quarzes, z.B. 8000000&lt;br /&gt;
**** Name &amp;quot;USE_STDPERIPH_DRIVER&amp;quot;   Value leerlassen&lt;br /&gt;
**** Name &amp;quot;__FPU_PRESENT&amp;quot;    Value=1&lt;br /&gt;
**** Das zuvor gemerkte Präprozessor-Makro aus der &amp;quot;stm32f**.h&amp;quot; (zB. STM32F40_41xxx)   Value leerlassen&lt;br /&gt;
**** Name &amp;quot;ARM_MATH_CM4&amp;quot;, &amp;quot;ARM_MATH_CM3&amp;quot;, &amp;quot;ARM_MATH_CM0&amp;quot;, oder &amp;quot;ARM_MATH_CM0PLUS&amp;quot; je nachdem ob für den Cortex-M4, -M3, -M0, oder -M0+ kompiliert wird; Value leerlassen&lt;br /&gt;
** Das Fenster mit OK schließen.&lt;br /&gt;
Nun ist der Compiler an sich richtig konfiguriert. Allerdings fehlt noch die Library von ST:&lt;br /&gt;
* Die zuvor vorbereitete Standard Peripheral Library (d.h. das Verzeichnis &amp;quot;Libraries&amp;quot;) in das Projektverzeichnis kopieren. Dies ist leider die einzig sinnvolle &amp;amp; einfache Möglichkeit.&lt;br /&gt;
* Den zuvor gesicherten Startup-Code, also zB. &amp;quot;startup_stm32f40_41xxx.S&amp;quot; in das Projektverzeichnis kopieren&lt;br /&gt;
* Die zuvor gesicherte Datei &amp;quot;stm32f***_conf.h&amp;quot; in das Projektverzeichnis kopieren&lt;br /&gt;
* Die zuvor generierte Datei &amp;quot;system_stm32f**&amp;quot; mit der Clock-Konfiguration in das Projektverzeichnis kopieren&lt;br /&gt;
Jetzt müssen dem Compiler noch die Pfade der Header-Dateien der Library mitgeteilt werden:&lt;br /&gt;
* Mit der rechten Maustaste auf den Projektnamen im linken Fenster anklicken, und &amp;quot;Properties&amp;quot; auswählen.&lt;br /&gt;
* Links in der Baumstruktur &amp;quot;C/C++ General&amp;quot; -&amp;gt; &amp;quot;Paths and Symbols&amp;quot; anklicken, und den Reiter &amp;quot;Includes&amp;quot; auswählen.&lt;br /&gt;
* Oben im Drop-Down-Menü &amp;quot;Debug&amp;quot; auswählen.&lt;br /&gt;
* Mit &amp;quot;Add&amp;quot; nacheinander folgende Pfade hinzufügen. Dazu jeweils &amp;quot;Add to all languages&amp;quot; sowie &amp;quot;Add to all configurations&amp;quot; einschalten, und den &amp;quot;Workspace...&amp;quot; Button verwenden.&lt;br /&gt;
** &amp;quot;Libraries/CMSIS/Device/ST/STM32F***/Include&amp;quot;&lt;br /&gt;
** &amp;quot;Libraries/CMSIS/Include&amp;quot;&lt;br /&gt;
** &amp;quot;Libraries/STM32F**_StdPeriph_Driver/inc&amp;quot;&lt;br /&gt;
** Den Pfad, in dem sich die &amp;quot;stm32f***_conf.h&amp;quot; befindet, also typischerweise das Projektverzeichnis selber.&lt;br /&gt;
* Mit OK das Fenster schließen. Danach wird Eclipse die C/C++ Analyse laufen lassen. Dies kann etwas dauern und die weitere Bedienung währenddessen verlangsamen. Der Fortschritt ist unten rechts im Fenster zu sehen.&lt;br /&gt;
&lt;br /&gt;
=== Linkerscript anpassen ===&lt;br /&gt;
Noch einmal das soeben hineinkopierte Linkerscript (mit der Endung .ld) öffnen. Die Zeile mit &amp;quot;_Min_Heap_Size&amp;quot; gibt die Größe des Heaps, d.h. des für malloc() zur Verfügung stehenden Speichers an. Wird malloc() nicht verwendet, kann dies auf 0 gesetzt werden. Soll printf() verwendet werden, ist zu empfehlen hier mindestens 2048 anzugeben, da printf sonst schnell keinen Speicher mehr hat und es zu komischem Verhalten kommt:&lt;br /&gt;
&amp;lt;pre&amp;gt;_Min_Heap_Size = 2048;      /* required amount of heap  */&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optional: Syscalls implementieren ===&lt;br /&gt;
Soll im Code printf() und/oder malloc() verwendet werden können, müssen die [https://sourceware.org/newlib/libc.html#Syscalls Syscalls der C-Library] implementiert werden. Dazu ist es empfehlenswert, [[Media:Newlib cortexm syscalls.c|diesen Beispielcode]] zu verwenden und in das Projektverzeichnis zu kopieren. Er gibt per printf() ausgebenen Texte seriell per SWO aus. Dies ist ein Extra-Pin im SWD-Debug-Interface (bei JTAG nicht verfügbar), der vom JLink eingelesen und über die JLink-Software an Eclipse geschickt wird. Der Code kann auch angepasst werden um den Text zB per UART auszugeben.&lt;br /&gt;
&lt;br /&gt;
== Code schreiben und kompilieren ==&lt;br /&gt;
Dem Projekt kann jetzt eine eigene Quellcodedatei hinzugefügt werden. Dazu mit der rechten Maustaste auf den Projektnamen klicken, &amp;quot;New&amp;quot;-&amp;gt;&amp;quot;Source file&amp;quot; auswählen. Die Datei z.B. &amp;quot;main.c&amp;quot; (für C) oder &amp;quot;main.cpp&amp;quot; (für C++) nennen. [[Media:Stm32f4 eclipse example.c|Hier]] kann ein einfacher Beispielcode für den STM32F407 heruntergeladen werden (funktioniert sowohl mit C als auch C++), der eine LED am Pin PD15 blinken lässt (blaue LED auf dem [http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252419 STM32F4 Discovery Board]). Der Code braucht auf jeden Fall eine &amp;quot;main()&amp;quot;-Funktion, sowie im Falle von C++ eine Funktion namens &amp;quot;__cxa_pure_virtual&amp;quot;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;extern &amp;quot;C&amp;quot; void __cxa_pure_virtual () {&lt;br /&gt;
	// This is an error callback for C++&lt;br /&gt;
	__disable_irq ();&lt;br /&gt;
	while (1) {&lt;br /&gt;
		// Cause debugger breakpoint&lt;br /&gt;
		asm volatile (&amp;quot;bkpt&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die oben verlinkte syscalls.c Datei nicht eingebunden, wird außerdem auch noch eine _exit Funktion benötigt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef __cplusplus&lt;br /&gt;
extern &amp;quot;C&amp;quot;&lt;br /&gt;
void _exit(int) {&lt;br /&gt;
#else&lt;br /&gt;
void _exit (int status) {&lt;br /&gt;
	((void) status);&lt;br /&gt;
#endif&lt;br /&gt;
	// Stop controller in case of fatal error&lt;br /&gt;
	__disable_irq ();&lt;br /&gt;
	while (1) {&lt;br /&gt;
		asm volatile (&amp;quot;bkpt&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	 __builtin_unreachable ();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dies sind Callbacks zur Fehlerbehandlung. Durch Überschreiben durch simples Blockieren des Controllers wird das Einbinden der komplexen Fehlerbehandlung der Standardbibliothek verhindert.&lt;br /&gt;
Danach kann der Code zum ersten Mal kompiliert werden. Dazu das Hammer-Symbol &amp;quot;Build&amp;quot; in der Toolbar benutzen. Fehlermeldungen sollten dem &amp;quot;Console&amp;quot; Fenster entnommen werden, da das &amp;quot;Problems&amp;quot; Fenster nicht immer korrekt funktioniert. Die erzeugten Dateien landen im Unterordner &amp;quot;Debug&amp;quot; bzw. &amp;quot;Release&amp;quot;, je nachdem welche Konfiguration gewählt ist. Die generierte Datei mit der Endung .elf (zB Debug/MeinProjekt.elf) enthält den produzierten Code sowie alle Debug-Informationen. Es wird auch eine .hex Datei angelegt, die das erzeugte Flash-Image enthält.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Debug Configuration anlegen ===&lt;br /&gt;
Um den Code zu flashen und debuggen, wird eine Debug Configuration benötigt. Dazu im Menü auf &amp;quot;Run&amp;quot;-&amp;gt;&amp;quot;Debug Configurations&amp;quot; klicken. Sollen sowohl Debug- als auch Release- Versionen so geflasht/debuggt werden, müssen mehrere Debug Configurations angelegt werden. Dazu ist es am einfachsten, eine anzulegen und mehrfach zu kopieren.&lt;br /&gt;
* Im erscheinenden Fenster in der Liste auf &amp;quot;GDB SEGGER J-Link Debugging&amp;quot; klicken, und oben auf das Symbol &amp;quot;New launch configuration&amp;quot;.&lt;br /&gt;
* Im Reiter &amp;quot;Main&amp;quot;, unter &amp;quot;C/C++ Application&amp;quot; den Pfad zum kompilierten ELF-File angeben, also zB &amp;quot;Debug/ProjektName.elf&amp;quot;.&lt;br /&gt;
* Im Reiter &amp;quot;Startup&amp;quot; sollte &amp;quot;Enable SWO&amp;quot; aktiviert, und daneben die CPU-Frequenz in Hz angegeben werden (zB 168000000 für den STM32F4).&lt;br /&gt;
* Im Reiter &amp;quot;Common&amp;quot; kann in der Liste &amp;quot;Display in favorites menu&amp;quot; ein Haken bei &amp;quot;Debug&amp;quot; gesetzt werden. Dadurch ist diese Debug Configuration schneller über das Käfer-Symbol in der Toolbar im Hauptmenü zugänglich.&lt;br /&gt;
* Über &amp;quot;Apply&amp;quot; und &amp;quot;Close&amp;quot; das Fenster schließen.&lt;br /&gt;
=== Debug Session starten ===&lt;br /&gt;
[[Datei:Eclipse STM32 Debugging.png|right|thumb|Laufende Debug-Session]]* Auf das kleine schwarze Dreieck neben dem Käfer-Symbol (&amp;quot;Debug&amp;quot;) in der Toolbar klicken, und die soeben angelegte Debug-Configuration auswählen. Eclipse wechselt nun in die Debug-Perspektive. Nach Beendigung der Debug-Session kann über den &amp;quot;C/C++&amp;quot;-Knopf oben rechts wieder in die normale Ansicht gewechselt werden.&lt;br /&gt;
* Es ist zu empfehlen die einzelnen Fenster der Ansicht so zu verschieben, dass mehr Code gleichzeitig sichtbar ist.&lt;br /&gt;
* Standardmäßig legt eclipse automatisch einen Breakpoint zu Beginn der &amp;quot;main&amp;quot; Funktion an.&lt;br /&gt;
* Über die Knöpfe &amp;quot;Resume&amp;quot;, &amp;quot;Break&amp;quot;, &amp;quot;Terminate&amp;quot; kann die Ausführung kontrolliert werden. Durch Doppelklick links neben eine Zeile werden Breakpoints gesetzt.&lt;br /&gt;
* Das ARM Plugin ermöglicht das Betrachten von Peripherie-Registern mit Trennung der einzelnen Felder. Dazu im Fenster &amp;quot;Peripherals&amp;quot; die Peripherie-Einheiten, deren Inhalt man betrachten möchte, auswählen. Im &amp;quot;Memory&amp;quot; Fenster werden dann die Register angezeigt. Die Ansicht wird immer nach jedem Ausführungsschritt aktualisiert, nicht immer sofort. Im Zweifelsfall also eine Zeile weiter laufen lassen, um die Ansicht zu aktualisieren.&lt;br /&gt;
* Ausgaben per &amp;quot;printf&amp;quot; erscheinen automatisch unten in der Konsole.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[STM32#Tutorials_f.C3.BCr_diverse_Tool-Kombinationen|Weitere Tutorials für STM32-IDE&#039;s]]&lt;br /&gt;
* [[ARM_GCC|Verwendung des GCC für Bare-Metal ARM]]&lt;br /&gt;
* [http://diller-technologies.de/stm32_wide.html Tutorial zur STM32 Programmierung]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_JLink_Linux/Windows&amp;diff=89165</id>
		<title>STM32 Eclipse JLink Linux/Windows</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_JLink_Linux/Windows&amp;diff=89165"/>
		<updated>2015-06-28T12:14:48Z</updated>

		<summary type="html">&lt;p&gt;Kichi: /* Einführung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
Da viele Tutorials zur Verwendung von Eclipse mit [[STM32]] auf relativ alten Tools aufsetzen, hier eine Anleitung mit aktuellem (2015) Stand. Hier wird die Programmierung von STM32 (ähnlich auch auf andere Cortex-M anwendbar) mit der Tool-Kombination [http://www.eclipse.org/ Eclipse] + [https://www.segger.com/jlink-debug-probes.html Segger JLink] + [https://launchpad.net/gcc-arm-embedded GCC-ARM-Embedded] + GDB erläutert für Linux und Windows. Die Tools gibt es auch für Mac OS, entsprechende Hinweise zur Benutzung fehlen hier noch. Der J-Link ist zwar relativ teuer (ca. 50€ für Privatpersonen), dafür aber schnell und stabil, kennt (fast?) alle ARM&#039;s und funktioniert plattformübergreifend direkt mit der Software vom Hersteller. Diese Kombination ermöglicht:&lt;br /&gt;
* Nutzung der komfortablen und mächtigen Entwicklungsumgebung Eclipse, inkl. Code-Vervollständigung und vielen Plugins wie zB. für Versionsverwaltung&lt;br /&gt;
* Automatische Generierung von makefiles und Aufruf des Compilers, kein manuelles Bearbeiten erforderlich&lt;br /&gt;
* Graphisches und schnelles Flashen und Debugging über JLink und GDB&lt;br /&gt;
* Graphische Anzeige von Registerinhalten beim Debugging&lt;br /&gt;
* Optional: Ausgabe von Texten per printf direkt nach Eclipse&lt;br /&gt;
* Projekte können zwischen Betriebssystemen ausgetauscht werden, Workflow generell fast identisch&lt;br /&gt;
* Voller Support für FPU der Cortex-M4, voller Support für C++, kein Codesize-Limit&lt;br /&gt;
* Es werden generische C/C++ Projekte angelegt; dies ist zwar etwas komplizierter, bietet aber später mehr Einstellungsmöglichkeiten&lt;br /&gt;
* Die Software ist auch für kommerzielle Nutzung komplett gratis und bis auf JLink auch OpenSource. Nur der JLink-Adapter selber ist für kommerzielle Nutzung teurer (aber das ist er bei Verwendung mit anderen IDE&#039;s natürlich auch).&lt;br /&gt;
* Da die normale und keine angepasste Eclipse-Version verwendet wird, können in der selben Eclipse-Instanz auch Projekte für völlig andere Plattformen und Sprachen benutzt werden, wie z.B. C/C++ für den PC, Java, ruby usw.&lt;br /&gt;
Da Eclipse eine sehr vielseitige Entwicklungsumgebung ist, sind einige Schritte erforderlich, um das Projekt auf die speziellen Anforderungen der Embedded-Entwicklung anzupassen. Diese sind im Folgenden erläutert.&lt;br /&gt;
&lt;br /&gt;
Ebenfalls sehr empfehlenswert ist es, bei der Einrichtung immer wieder einen Blick auf die Anleitungen und Beschreibungen auf der [http://gnuarmeclipse.livius.net GNU ARM Eclipse Homepage] zu werfen, da die Vorgehensweise dort gut beschrieben ist und sich auch gelegentlich ändert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== JLink ===&lt;br /&gt;
Zunächst die aktuelle Version von der [https://www.segger.com/jlink-software.html JLink Software] herunterladen und installieren. Da es hier regelmäßig neue Versionen gibt, ist es empfehlenswert sich für die [https://www.segger.com/notification/subscribe.php?prodid=7 E-Mail-Benachrichtigung] für neue Versionen einzutragen. Das Installationsverzeichnis für später merken.&lt;br /&gt;
=== GCC-ARM-Embedded ===&lt;br /&gt;
Die aktuelle Version für das jeweilige Betriebssystem [https://launchpad.net/gcc-arm-embedded herunterladen] und entpacken. Es gibt zwar auch Versionen in der Paketverwaltung mancher Linux-Distributionen aber die sind oft veraltet. Dafür bitte einen kurzen Pfad &#039;&#039;&#039;ohne Leerzeichen&#039;&#039;&#039; verwenden:&lt;br /&gt;
* Windows: z.B. C:\gcc-arm-embedded&lt;br /&gt;
* Linux: z.B. &amp;quot;/home/username/gcc-arm-embedded&amp;quot;&lt;br /&gt;
Den Pfad für später merken.&lt;br /&gt;
=== Make ===&lt;br /&gt;
* Linux: Meistens vorinstalliert. Unter Ubuntu im Paket &amp;quot;build-essential&amp;quot; enthalten.&lt;br /&gt;
* Windows: Hier können die MinGW/MSYS Basis Tools verwendet werden:&lt;br /&gt;
** Dazu [http://sourceforge.net/projects/mingw/files/latest/download hier] den MinGW Installer herunterladen und ausführen.&lt;br /&gt;
** Als Installation Directory am besten &amp;quot;C:\MinGW&amp;quot; beibehalten.&lt;br /&gt;
** So oft &amp;quot;Continue&amp;quot; anklicken, bis der &amp;quot;MinGW Installation Manager&amp;quot; erscheint und eine Liste installierbarer Pakete anzeigt.&lt;br /&gt;
** In der Liste das Paket &amp;quot;msys-base&amp;quot; mit der rechten Maustaste anklicken und &amp;quot;Mark for Installation&amp;quot; anklicken&lt;br /&gt;
** Im Menü &amp;quot;Installation&amp;quot;-&amp;gt;&amp;quot;Apply Changes&amp;quot; anklicken, und mit &amp;quot;Apply&amp;quot; bestätigen.&lt;br /&gt;
** Nachdem der Vorgang abgeschlossen ist, das Programm beenden&lt;br /&gt;
=== Pfade setzen ===&lt;br /&gt;
&#039;&#039;&#039;Vor&#039;&#039;&#039; dem Starten von Eclipse müssen dem System die Pfade der Kommandozeilentools bekannt gemacht werden:&lt;br /&gt;
* Windows:&lt;br /&gt;
** Rechte Maustaste auf den Arbeitsplatz klicken, &amp;quot;Eigenschaften&amp;quot; -&amp;gt; &amp;quot;Erweiterte Systemeinstellungen&amp;quot; -&amp;gt; &amp;quot;Umgebungsvariablen&amp;quot; anklicken.&lt;br /&gt;
** Im &#039;&#039;&#039;unteren&#039;&#039;&#039; Listenfeld den Eintrag &amp;quot;Path&amp;quot; suchen, auf &amp;quot;Bearbeiten&amp;quot; klicken&lt;br /&gt;
** Ans Ende des Textes ein Semikolon hängen (falls nicht schon vorhanden), und durch zwei Semikola getrennt die Pfade zur J-Link Installation, zur GCC-ARM-Embedded -Installation (plus &amp;quot;\bin&amp;quot;) und zur MSYS-Installation &#039;&#039;&#039;anhängen&#039;&#039;&#039;. Also zum Beispiel folgenden Text anhängen (Version anpassen) und alles mit OK bestätigen:&lt;br /&gt;
&amp;lt;code&amp;gt;;C:\gcc-arm-embedded\bin;C:\Program Files (x86)\SEGGER\JLink_V500e;C:\MinGW\msys\1.0\bin&amp;lt;/code&amp;gt;&lt;br /&gt;
** In einem &#039;&#039;&#039;danach&#039;&#039;&#039; erst gestarteten cmd.exe Fenster den Befehl &amp;quot;JLink&amp;quot; eingeben. Es sollte die Lizenzvereinbarung von Segger erscheinen (diese bestätigen), und im Terminal wieder &amp;quot;exit&amp;quot; eingeben. Funktioniert dies nicht, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
** Im selben Fenster &amp;quot;arm-none-eabi-gcc&amp;quot; eingeben. Es sollte eine Meldung im Stil von &amp;quot;arm-none-eabi-gcc: fatal error: no input files&amp;quot; erscheinen. Falls nicht, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
** Im selben Fenster &amp;quot;make&amp;quot; eingeben. Es sollte ein Meldung in der Art von &amp;quot;make: *** No targets specified and no makefile found.  Stop.&amp;quot; erscheinen. Falls nicht, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
* Linux:&lt;br /&gt;
** Mit einem Texteditor die (versteckte) Datei &amp;quot;.profile&amp;quot; im Home-Verzeichnis öffnen bzw. anlegen falls nicht vorhanden. Folgende Zeile &#039;&#039;&#039;anhägen&#039;&#039;&#039; (Pfad anpassen):&lt;br /&gt;
&amp;lt;code&amp;gt;export PATH=$PATH:/home/username/gcc-arm-embedded/bin&amp;lt;/code&amp;gt;&lt;br /&gt;
** Den Benutzer ab- und wieder anmelden&lt;br /&gt;
** In einem Terminal-Fenster &amp;quot;JLinkExe&amp;quot; eingeben. Es sollte sich die JLink-Software mit &amp;quot;SEGGER J-Link Commander V5.00c (&#039;?&#039; for help)&amp;quot; melden. Diese wieder mit &amp;quot;exit&amp;quot; beenden. Falls das nicht funktioniert, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
** Im selben Fenster &amp;quot;arm-none-eabi-gcc&amp;quot; eingeben. Es sollte eine Meldung im Stil von &amp;quot;arm-none-eabi-gcc: fatal error: no input files&amp;quot; erscheinen. Falls nicht, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
Die Umgebungsvariable muss nach jedem Update der JLink-Software neu gesetzt werden, da der Pfad die Versionsnummer enthält.&lt;br /&gt;
=== Eclipse ===&lt;br /&gt;
* Da Eclipse auf Java basiert, muss dies zuerst installiert werden:&lt;br /&gt;
** Windows: Den [http://www.java.com/de/download/ Installer herunterladen] und laufen lassen.&lt;br /&gt;
** Linux: Je nach Distribution unterschiedlich, für Ubuntu [http://wiki.ubuntuusers.de/Java/Installation/Oracle_Java/Java_8#Installation siehe hier]&lt;br /&gt;
* Die aktuelle Version von &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot; [http://www.eclipse.org/downloads/ hier herunterladen]. Unter Linux ist eclipse zwar auch oft in der Paketverwaltung enthalten, diese Version ist aber meist stark veraltet. Das heruntergeladene Archiv muss nur in einen beliebigen Ordner entpackt werden und die enthaltene Programmdatei (Linux: &amp;quot;eclipse&amp;quot;, Windows: &amp;quot;eclipse.exe&amp;quot;) gestartet werden.&lt;br /&gt;
* Den beim ersten Start erscheinenden &amp;quot;Welcome&amp;quot; Tab schließen.&lt;br /&gt;
* Im Menü &amp;quot;Help&amp;quot;-&amp;gt;&amp;quot;Install new software&amp;quot; anwählen, unter &amp;quot;Work With&amp;quot; die URL &amp;lt;nowiki&amp;gt;&amp;quot;http://gnuarmeclipse.sourceforge.net/updates&amp;quot;&amp;lt;/nowiki&amp;gt; eingeben, Enter klicken, den in der Liste erscheinenden Eintrag &amp;quot;GNU ARM C/C++ Cross Development Tools&amp;quot; auswählen, und mit &amp;quot;Next&amp;quot; und &amp;quot;Finish&amp;quot; installieren. Die Sicherheitsabfrage über unsignierte Software bestätigen, und die Abfrage zum Neustart von Eclipse bestätigen. Die Installation dauert etwas, und funktioniert manchmal nicht wenn die Server überlastet sind. Dann einfach später noch einmal probieren.&lt;br /&gt;
* Nur Windows: Im Menü &amp;quot;Window&amp;quot;-&amp;gt;&amp;quot;Preferences&amp;quot; anklicken, in der Baumstruktur des erscheinenden Fensters &amp;quot;Run&amp;quot;-&amp;gt;&amp;quot;String Substitution&amp;quot; anwählen, die Zeile mit &amp;quot;jlink_path&amp;quot; auswählen, &amp;quot;Edit&amp;quot; anklicken, und unter &amp;quot;Value&amp;quot; den Pfad zur JLink-Installation, also zB. &amp;quot;C:\Program Files (x86)\SEGGER\JLink_V500e&amp;quot; eintragen. Alles mit OK schließen.&lt;br /&gt;
* In der Toolbar den Eintrag &amp;quot;Make the C/C++ Packs perspective visible&amp;quot; anklicken, und das Symbol mit den gelben Pfeilen (&amp;quot;Update the package definitions from all repositories&amp;quot;) anklicken. Dieser Vorgang dauert einige Minuten.&lt;br /&gt;
* In der erscheinenden Baumstruktur im Tab &amp;quot;Packs&amp;quot; unter dem Punkt &amp;quot;Keil&amp;quot; die Mikrocontroller auswählen (Mehrfachauswahl mit der Strg-Taste möglich) für die man programmieren möchte (zB. &amp;quot;STM32F4xx_DFP&amp;quot;), und mit der rechten Maustaste und Klick auf &amp;quot;Install&amp;quot; installieren. Auch dies dauert etwas, der Fortschritt des Vorgangs wird etwas versteckt rechts unten im Fenster angezeigt.&lt;br /&gt;
* Danach wieder mit Klick auf den &amp;quot;C/C++&amp;quot; Button oben rechts in die C/C++ Ansicht wechseln.&lt;br /&gt;
&lt;br /&gt;
=== Standard Peripheral Library vorbereiten ===&lt;br /&gt;
Um auf die Hardware-Register direkt zuzugreifen oder die Treiberfunktionen von ST zu verwenden, sowie für den Startup-Code &amp;amp; Linkerscript, wird die Library von ST benötigt.&lt;br /&gt;
* Zum Herunterladen die Produktseite des Mikrocontrollers aufrufen (zB [http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1577/LN11/PF252140 hier] für STM32F407VG), &amp;quot;Design Resources&amp;quot; anklicken, unter dem Punkt &amp;quot;Related Tools and Software&amp;quot; den Eintrag im Stil von &amp;quot;STM32F4 DSP and standard peripherals library&amp;quot; finden (zB [http://www.st.com/web/en/catalog/tools/PF257901 hier] für STM32F4). Ganz unten findet sich der &amp;quot;Download&amp;quot; Button.&lt;br /&gt;
Leider ist das Archiv nicht gut strukturiert. Daher müssen die entsprechenden Dateien herausgesucht werden:&lt;br /&gt;
* Im enthaltenen Verzeichnis &amp;quot;Project/*** Templates&amp;quot; nach Dateien suchen, die auf *.ld enden und die herauskopieren, deren Name zum verwendeten Mikrocontroller passt, also z.B. &amp;quot;STM32F417IG_FLASH.ld&amp;quot; für den STM32F4. Diese ist das Linkerscript und wird später für jedes Projekt benötigt. Zur Sicherheit sollte diese Datei einmal im Texteditor geöffnet und auf Fehler überprüft werden (ST ist bekannt dafür hier Fehler zu machen):&lt;br /&gt;
** Die Speicher-Größen-Angaben der folgenden Zeilen sollten zum Datasheet passen (ggf. anpassen):&lt;br /&gt;
&amp;lt;pre&amp;gt;MEMORY&lt;br /&gt;
{&lt;br /&gt;
FLASH (rx)      : ORIGIN = 0x8000000, LENGTH = 1024K&lt;br /&gt;
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 128K&lt;br /&gt;
CCMRAM (rw)      : ORIGIN = 0x10000000, LENGTH = 64K&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Die Angabe der Adresse der Initialen Stack-Adresse sieht oft so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;_estack = 0x2001FFFF;    /* end of RAM */&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Dies ist &#039;&#039;&#039;falsch&#039;&#039;&#039; (ST weiß selber nicht wie der Cortex-M funktioniert). Die angegebene Adresse sollte Anfangsadresse des RAM&#039;s (immer 0x20000000) plus RAM-Größe (z.B. beim STM32F407 0x20000 Bytes) sein, also z.B. 0x20020000 für den STM32F407:&lt;br /&gt;
&amp;lt;pre&amp;gt;_estack = 0x20020000;    /* end of RAM */&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Ist dies falsch, kann es später zu schwer auffindbaren Problemen im Zusammenhang mit z.B. Floatingpoint-Funktionsargumenten kommen.&lt;br /&gt;
* Im Archiv nach Dateien suchen, deren Namen mit &amp;quot;startup_stm32&amp;quot; beginnt. Eine der Dateien heraussuchen, deren Name zum Mikrocontroller passt, &#039;&#039;&#039;und&#039;&#039;&#039; deren enthaltendes Verzeichnis den Namen TrueSTUDIO trägt, also zB. &amp;quot;Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO/startup_stm32f40_41xxx.s&amp;quot;. Diese Datei herauskopieren, sie ist der Startup-Code und wird später für jedes Projekt benötigt. Dabei die Dateiendung von &amp;quot;.s&amp;quot; auf &amp;quot;.S&amp;quot; ändern, denn sonst erkennt eclipse sie nicht.&lt;br /&gt;
* Im Verzeichnis &amp;quot;Project/*** Templates&amp;quot; die Datei &amp;quot;stm32f***_conf.h&amp;quot; herauskopieren. Diese wird für Einstellungen in der Treiber-Library benötigt.&lt;br /&gt;
* Alles außer dem Verzeichnis &amp;quot;Libraries&amp;quot; löschen.&lt;br /&gt;
* Im Verzeichnis &amp;quot;Libraries&amp;quot; (rekursiv) nach Dateien &amp;amp; Ordnern suchen, die &amp;quot;example&amp;quot; oder &amp;quot;template&amp;quot; im Namen tragen und alle löschen.&lt;br /&gt;
* Die Unterverzeichnisse &amp;quot;Documentation&amp;quot;, &amp;quot;Lib&amp;quot;, &amp;quot;RTOS&amp;quot;, &amp;quot;SVD&amp;quot; löschen. Die Lizenz und Release Notes-Dateien stören zwar nicht, können aber auch gelöscht werden. Im Endeffekt werden nur die .c und .h Dateien benötigt. Die DSP_Lib kann auch gelöscht werden, wenn keine DSP-Funktionen benötigt werden (existiert onehin nur für Cortex-M4 Controller).&lt;br /&gt;
* Leider enthält die Library für alle STM32F4 die Treiber für sowohl den FMC als auch den FSMC, obwohl beide nicht in allen Varianten vorhanden sind. Diese Treiber verursachen Compilerfehler, wenn für den falschen Controller kompiliert. Daher muss die Datei &amp;quot;STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fmc.c&amp;quot; gelöscht werden, wenn kein FMC vorhanden ist (wie beim STM32F40x), bzw. die &amp;quot;STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fsmc.c&amp;quot; wenn kein FSMC vorhanden ist (wie beim STM32F42x).&lt;br /&gt;
* Danach sollte nur noch so eine Struktur übrig bleigen:&lt;br /&gt;
&amp;lt;pre&amp;gt;./STM32F4xx_StdPeriph_Driver&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/src  -   Hier liegt der Quellcode für die Peripherie-Treiber&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/src/stm32f4xx_wwdg.c&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c&lt;br /&gt;
...&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/inc  -   Hier liegen die Includes für die Peripherie-Treiber&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_wwdg.h&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_usart.h&lt;br /&gt;
...&lt;br /&gt;
./CMSIS&lt;br /&gt;
./CMSIS/Include                   -   Hier liegen die Includes für den Prozessorkern (Cortex-M*)&lt;br /&gt;
./CMSIS/Include/core_sc300.h&lt;br /&gt;
./CMSIS/Include/core_sc000.h&lt;br /&gt;
...&lt;br /&gt;
./CMSIS/DSP_Lib/Source/TransformFunctions  - Hier liegt die DSP-Library (optional)&lt;br /&gt;
./CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_q31.c&lt;br /&gt;
./CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_q15.c&lt;br /&gt;
...&lt;br /&gt;
./CMSIS/Device/ST/STM32F4xx/Include&lt;br /&gt;
./CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h   -   Dies ist die Include-Datei für das Clock Setup&lt;br /&gt;
./CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h   -   Dies ist die zentrale Include-Datei für die Register-Definitionen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Soll die Standard Peripheral Library nicht genutzt werden, sondern nur direkt die Register-Definitionen, werden nur die letzten beiden Dateien benötigt sowie die im Verzeichnis CMSIS/Include.&lt;br /&gt;
* In der Datei &amp;quot;CMSIS/Device/ST/STM32***/Include/stm32f***.h&amp;quot; befindet sich ganz oben eine Präprozessor-Fallunterscheidung der Form&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#if !defined (STM32F40_41xxx) &amp;amp;&amp;amp; !defined (STM32F427_437xx) &amp;amp;&amp;amp; !defined (STM32F429_439xx) &amp;amp;&amp;amp; !defined (STM32F401xx) &amp;amp;&amp;amp; !defined (STM32F411xE)&lt;br /&gt;
  /* #define STM32F40_41xxx */   /*!&amp;lt; STM32F405RG, STM32F405VG, STM32F405ZG, STM32F415RG, STM32F415VG, STM32F415ZG,  &lt;br /&gt;
                                      STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG, STM32F407IE, &lt;br /&gt;
                                      STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE, STM32F417IG and STM32F417IE Devices */&lt;br /&gt;
&lt;br /&gt;
  /* #define STM32F427_437xx */  /*!&amp;lt; STM32F427VG, STM32F427VI, STM32F427ZG, STM32F427ZI, STM32F427IG, STM32F427II,  &lt;br /&gt;
                                      STM32F437VG, STM32F437VI, STM32F437ZG, STM32F437ZI, STM32F437IG, STM32F437II Devices */&lt;br /&gt;
&lt;br /&gt;
  /* #define STM32F429_439xx */  /*!&amp;lt; STM32F429VG, STM32F429VI, STM32F429ZG, STM32F429ZI, STM32F429BG, STM32F429BI,  &lt;br /&gt;
                                      STM32F429NG, STM32F439NI, STM32F429IG, STM32F429II, STM32F439VG, STM32F439VI, &lt;br /&gt;
                                      STM32F439ZG, STM32F439ZI, STM32F439BG, STM32F439BI, STM32F439NG, STM32F439NI,&lt;br /&gt;
                                      STM32F439IG and STM32F439II Devices */&lt;br /&gt;
&lt;br /&gt;
  /* #define STM32F401xx */      /*!&amp;lt; STM32F401CB, STM32F401CC,  STM32F401RB, STM32F401RC, STM32F401VB, STM32F401VC  &lt;br /&gt;
                                      STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CExx, STM32F401RE and STM32F401VE Devices */&lt;br /&gt;
&lt;br /&gt;
  /* #define STM32F411xE */      /*!&amp;lt; STM32F411CD, STM32F411RD, STM32F411VD, STM32F411CE, STM32F411RE and STM32F411VE Devices */&lt;br /&gt;
#endif&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Hier mithilfe des Kommentars das Präprozessor-Makro heraussuchen, das zum verwendeten Mikrocontroller passt, also z.B. &amp;quot;STM32F40_41xxx&amp;quot; für den STM32F407VG. Dieses kopieren und für später merken.&lt;br /&gt;
&lt;br /&gt;
== Projekt erstellen ==&lt;br /&gt;
=== Clock-Konfiguration generieren ===&lt;br /&gt;
Zum Initialisieren des Takts wird eine spezielle Funktion benötigt, die je nach Art und Frequenz des Takts spezifisch erzeugt werden muss. ST bietet ein Tool, um diese Datei zu generieren:&lt;br /&gt;
* Auf der Produkt seite des Mikrocontrollers (zB [http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1577/LN11/PF252140 hier] für den STM32F407VG) auf &amp;quot;Design Resources&amp;quot; klicken, und den Eintrag in der Art von &amp;quot;Clock configuration tool for STM32F40x/41x microcontrollers (AN3988)&amp;quot; finden.&lt;br /&gt;
* Die Datei herunterladen und mit MS Excel öffnen. Die gewünschte Clock-Konfiguration auswählen, und den Code generieren lassen. Die Datei zB unter dem Namen system_stm32f4xx.c speichern.&lt;br /&gt;
=== Eclipse Projekt konfigurieren ===&lt;br /&gt;
[[Datei:Eclipse STM32 Project.png|right|thumb|Fertiges Projekt in Eclipse geöffnet]]Neue Projekte werden über &amp;quot;File&amp;quot;-&amp;gt;&amp;quot;New&amp;quot;-&amp;gt;&amp;quot;Project...&amp;quot; angelegt.&lt;br /&gt;
* In der Baumstruktur &amp;quot;C/C++ -&amp;gt; C++ Project&amp;quot; auswählen. Im C++ Projekt kann man natürlich auch einfachen C Code schreiben, aber es ist die Möglichkeit für C++ offen gehalten.&lt;br /&gt;
* In der Baumstruktur &amp;quot;Empty Project&amp;quot; auswählen, und rechts &amp;quot;Cross ARM GCC&amp;quot;. Es können zwar auch die einfacheren Vorlagen für spezifische Controller wie &amp;quot;STM32F4xx C/C++ Project&amp;quot; verwendet werden, dies ist aber weniger flexibel, weswegen hier ersteres erläutert wird.&lt;br /&gt;
* Als Namen bitte einen ohne Leerzeichen oder Sonderzeichen verwenden.&lt;br /&gt;
* Mit 2x &amp;quot;Next&amp;quot; und 1x &amp;quot;Finish&amp;quot; das Erstellen abschließen.&lt;br /&gt;
* Das zuvor gesicherte Linkerscript (mit der Endung .ld) in das Projektverzeichnis kopieren. Den Projektnamen links anklicken, rechts Maustaste, und &amp;quot;Refresh&amp;quot; (oder F5) drücken. Das Linker-Script sollte im Dateibaum erscheinen.&lt;br /&gt;
* Im Projekt müssen zunächst einige Einstellungen vorgenommen werden. Dazu mit der rechten Maustaste auf den Projektnamen im linken Fenster anklicken, und &amp;quot;Properties&amp;quot; auswählen.&lt;br /&gt;
** Im erscheinenden Fenster, im DropDown Menü oben &amp;quot;[All Configurations]&amp;quot; auswählen&lt;br /&gt;
** Nur Linux: In der Baumstruktur &amp;quot;C/C++ Build&amp;quot; auswählen, den Reiter &amp;quot;Behaviour&amp;quot; öffnen, den Haken bei &amp;quot;Enable Parallel Build&amp;quot; setzen. Dies beschleunigt die Kompilierung, funktioniert aber nicht unter Windows (beim Kopieren des Projekts beachten).&lt;br /&gt;
** In der Baumstruktur &amp;quot;C/C++ Build&amp;quot; -&amp;gt; &amp;quot;Settings&amp;quot; anwählen. Das Öffnen dauert in aktuellen Versionen etwas, vermutlich ein Bug.&lt;br /&gt;
*** In der 2. Baumstruktur &amp;quot;Target processor&amp;quot; auswählen.&lt;br /&gt;
**** Unter &amp;quot;ARM family&amp;quot; den gewünschten Prozessor auswählen, also z.B. &amp;quot;cortex-m4&amp;quot; für STMF4 oder &amp;quot;cortex-m3&amp;quot; für STM32F1.&lt;br /&gt;
**** Nur bei Cortex-M4 (zB STM32F3 und STM32F4):&lt;br /&gt;
***** Unter Float ABI &amp;quot;FP instructions (hard)&amp;quot; auswählen&lt;br /&gt;
***** Unter &amp;quot;FPU Type&amp;quot; &amp;quot;fpv4-sp-d16 &amp;quot; auswählen. Siehe [https://launchpadlibrarian.net/209775724/readme.txt hier in der Tabelle] für die möglichen Werte der verschiedenen Prozessoren.&lt;br /&gt;
*** Es ist zu empfehlen, LTO beim Kompilieren im Release-Modus zu aktivieren. Dies resultiert in kleineren und schnelleren Binaries, erschwert aber das Debugging mit GDB sehr:&lt;br /&gt;
**** Oben die Configuration &amp;quot;Release&amp;quot; auswählen&lt;br /&gt;
**** In der 2. Baumstruktur &amp;quot;Optimization&amp;quot; auswählen&lt;br /&gt;
**** &amp;quot;Link-time optimizer (-flto)&amp;quot; aktivieren&lt;br /&gt;
**** Oben wieder &amp;quot;[All configurations]&amp;quot; anklicken&lt;br /&gt;
*** In der 2. Baumstruktur &amp;quot;Cross ARM C++ Compiler -&amp;gt; Optimization&amp;quot; anklicken&lt;br /&gt;
**** Rechts &amp;quot;Do not use exceptions (-fno-exceptions) anwählen&lt;br /&gt;
**** Rechts &amp;quot;Do not use RTTO (-fno-rtti)&amp;quot; anwählen&lt;br /&gt;
*** In der 2. Baumstruktur &amp;quot;Cross ARM C++ Linker&amp;quot; -&amp;gt; &amp;quot;General&amp;quot; auswählen&lt;br /&gt;
**** In der Toolbar auf &amp;quot;Add&amp;quot; klicken, auf &amp;quot;Workspace&amp;quot; klicken, und das soeben in das Projekt kopierte Linkerscript auswählen.&lt;br /&gt;
*** In der 2. Baumstruktur &amp;quot;Cross ARM C++ Linker&amp;quot; -&amp;gt; &amp;quot;Miscellaneous&amp;quot; auswählen&lt;br /&gt;
**** Den Haken bei &amp;quot;Use newlib-nano (--specs=nano.specs)&amp;quot; setzen.&lt;br /&gt;
**** Optional, nur bei Cortex-M4 (zB STM32F3 und STM32F4):&lt;br /&gt;
***** Den Haken bei &amp;quot;Use float with with nano printf (-u _printf_float)&amp;quot; setzen. Dies ermöglicht die Nutzung von &amp;quot;%f&amp;quot; bei &amp;quot;printf&amp;quot;, verbraucht aber automatisch eine Menge Flash+RAM und benötigt die Syscalls für malloc (s.u.). Daher ist ggf. zu empfehlen, dies nur in der Debug-Konfiguration zu aktivieren. Dazu in der Dropbown-Box oben vor aktivieren dieser Einstellung auf &amp;quot;Debug&amp;quot; klicken, und danach wieder auf &amp;quot;[All Configurations]&amp;quot;.&lt;br /&gt;
*** Im Reiter &amp;quot;Devices&amp;quot; in der Baumstruktur den verwendeten Mikrocontroller, wie zB &amp;quot;STM32F407VG&amp;quot; auswählen.&lt;br /&gt;
** In der linken Baumstruktur &amp;quot;C/C++ General&amp;quot;-&amp;gt;&amp;quot;Paths and Symbols&amp;quot; auswählen&lt;br /&gt;
*** Oben im Drop-Down-Menü &amp;quot;Debug&amp;quot; anklicken&lt;br /&gt;
*** Im Reiter &amp;quot;Symbols&amp;quot; rechts auf &amp;quot;Add&amp;quot; klicken und dadurch nacheinander folgende Symbole definieren. Dabei immer beide Häkchen setzen!&lt;br /&gt;
**** Name &amp;quot;HSE_VALUE&amp;quot;    Value=Takt des Quarzes, z.B. 8000000&lt;br /&gt;
**** Name &amp;quot;USE_STDPERIPH_DRIVER&amp;quot;   Value leerlassen&lt;br /&gt;
**** Name &amp;quot;__FPU_PRESENT&amp;quot;    Value=1&lt;br /&gt;
**** Das zuvor gemerkte Präprozessor-Makro aus der &amp;quot;stm32f**.h&amp;quot; (zB. STM32F40_41xxx)   Value leerlassen&lt;br /&gt;
**** Name &amp;quot;ARM_MATH_CM4&amp;quot;, &amp;quot;ARM_MATH_CM3&amp;quot;, &amp;quot;ARM_MATH_CM0&amp;quot;, oder &amp;quot;ARM_MATH_CM0PLUS&amp;quot; je nachdem ob für den Cortex-M4, -M3, -M0, oder -M0+ kompiliert wird; Value leerlassen&lt;br /&gt;
** Das Fenster mit OK schließen.&lt;br /&gt;
Nun ist der Compiler an sich richtig konfiguriert. Allerdings fehlt noch die Library von ST:&lt;br /&gt;
* Die zuvor vorbereitete Standard Peripheral Library (d.h. das Verzeichnis &amp;quot;Libraries&amp;quot;) in das Projektverzeichnis kopieren. Dies ist leider die einzig sinnvolle &amp;amp; einfache Möglichkeit.&lt;br /&gt;
* Den zuvor gesicherten Startup-Code, also zB. &amp;quot;startup_stm32f40_41xxx.S&amp;quot; in das Projektverzeichnis kopieren&lt;br /&gt;
* Die zuvor gesicherte Datei &amp;quot;stm32f***_conf.h&amp;quot; in das Projektverzeichnis kopieren&lt;br /&gt;
* Die zuvor generierte Datei &amp;quot;system_stm32f**&amp;quot; mit der Clock-Konfiguration in das Projektverzeichnis kopieren&lt;br /&gt;
Jetzt müssen dem Compiler noch die Pfade der Header-Dateien der Library mitgeteilt werden:&lt;br /&gt;
* Mit der rechten Maustaste auf den Projektnamen im linken Fenster anklicken, und &amp;quot;Properties&amp;quot; auswählen.&lt;br /&gt;
* Links in der Baumstruktur &amp;quot;C/C++ General&amp;quot; -&amp;gt; &amp;quot;Paths and Symbols&amp;quot; anklicken, und den Reiter &amp;quot;Includes&amp;quot; auswählen.&lt;br /&gt;
* Oben im Drop-Down-Menü &amp;quot;Debug&amp;quot; auswählen.&lt;br /&gt;
* Mit &amp;quot;Add&amp;quot; nacheinander folgende Pfade hinzufügen. Dazu jeweils &amp;quot;Add to all languages&amp;quot; sowie &amp;quot;Add to all configurations&amp;quot; einschalten, und den &amp;quot;Workspace...&amp;quot; Button verwenden.&lt;br /&gt;
** &amp;quot;Libraries/CMSIS/Device/ST/STM32F***/Include&amp;quot;&lt;br /&gt;
** &amp;quot;Libraries/CMSIS/Include&amp;quot;&lt;br /&gt;
** &amp;quot;Libraries/STM32F**_StdPeriph_Driver/inc&amp;quot;&lt;br /&gt;
** Den Pfad, in dem sich die &amp;quot;stm32f***_conf.h&amp;quot; befindet, also typischerweise das Projektverzeichnis selber.&lt;br /&gt;
* Mit OK das Fenster schließen. Danach wird Eclipse die C/C++ Analyse laufen lassen. Dies kann etwas dauern und die weitere Bedienung währenddessen verlangsamen. Der Fortschritt ist unten rechts im Fenster zu sehen.&lt;br /&gt;
&lt;br /&gt;
=== Linkerscript anpassen ===&lt;br /&gt;
Noch einmal das soeben hineinkopierte Linkerscript (mit der Endung .ld) öffnen. Die Zeile mit &amp;quot;_Min_Heap_Size&amp;quot; gibt die Größe des Heaps, d.h. des für malloc() zur Verfügung stehenden Speichers an. Wird malloc() nicht verwendet, kann dies auf 0 gesetzt werden. Soll printf() verwendet werden, ist zu empfehlen hier mindestens 2048 anzugeben, da printf sonst schnell keinen Speicher mehr hat und es zu komischem Verhalten kommt:&lt;br /&gt;
&amp;lt;pre&amp;gt;_Min_Heap_Size = 2048;      /* required amount of heap  */&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optional: Syscalls implementieren ===&lt;br /&gt;
Soll im Code printf() und/oder malloc() verwendet werden können, müssen die [https://sourceware.org/newlib/libc.html#Syscalls Syscalls der C-Library] implementiert werden. Dazu ist es empfehlenswert, [[Media:Newlib cortexm syscalls.c|diesen Beispielcode]] zu verwenden und in das Projektverzeichnis zu kopieren. Er gibt per printf() ausgebenen Texte seriell per SWO aus. Dies ist ein Extra-Pin im SWD-Debug-Interface (bei JTAG nicht verfügbar), der vom JLink eingelesen und über die JLink-Software an Eclipse geschickt wird. Der Code kann auch angepasst werden um den Text zB per UART auszugeben.&lt;br /&gt;
&lt;br /&gt;
== Code schreiben und kompilieren ==&lt;br /&gt;
Dem Projekt kann jetzt eine eigene Quellcodedatei hinzugefügt werden. Dazu mit der rechten Maustaste auf den Projektnamen klicken, &amp;quot;New&amp;quot;-&amp;gt;&amp;quot;Source file&amp;quot; auswählen. Die Datei z.B. &amp;quot;main.c&amp;quot; (für C) oder &amp;quot;main.cpp&amp;quot; (für C++) nennen. [[Media:Stm32f4 eclipse example.c|Hier]] kann ein einfacher Beispielcode für den STM32F407 heruntergeladen werden (funktioniert sowohl mit C als auch C++), der eine LED am Pin PD15 blinken lässt (blaue LED auf dem [http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252419 STM32F4 Discovery Board]). Der Code braucht auf jeden Fall eine &amp;quot;main()&amp;quot;-Funktion, sowie im Falle von C++ eine Funktion namens &amp;quot;__cxa_pure_virtual&amp;quot;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;extern &amp;quot;C&amp;quot; void __cxa_pure_virtual () {&lt;br /&gt;
	// This is an error callback for C++&lt;br /&gt;
	__disable_irq ();&lt;br /&gt;
	while (1) {&lt;br /&gt;
		// Cause debugger breakpoint&lt;br /&gt;
		asm volatile (&amp;quot;bkpt&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die oben verlinkte syscalls.c Datei nicht eingebunden, wird außerdem auch noch eine _exit Funktion benötigt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef __cplusplus&lt;br /&gt;
extern &amp;quot;C&amp;quot;&lt;br /&gt;
void _exit(int) {&lt;br /&gt;
#else&lt;br /&gt;
void _exit (int status) {&lt;br /&gt;
	((void) status);&lt;br /&gt;
#endif&lt;br /&gt;
	// Stop controller in case of fatal error&lt;br /&gt;
	__disable_irq ();&lt;br /&gt;
	while (1) {&lt;br /&gt;
		asm volatile (&amp;quot;bkpt&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	 __builtin_unreachable ();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dies sind Callbacks zur Fehlerbehandlung. Durch Überschreiben durch simples Blockieren des Controllers wird das Einbinden der komplexen Fehlerbehandlung der Standardbibliothek verhindert.&lt;br /&gt;
Danach kann der Code zum ersten Mal kompiliert werden. Dazu das Hammer-Symbol &amp;quot;Build&amp;quot; in der Toolbar benutzen. Fehlermeldungen sollten dem &amp;quot;Console&amp;quot; Fenster entnommen werden, da das &amp;quot;Problems&amp;quot; Fenster nicht immer korrekt funktioniert. Die erzeugten Dateien landen im Unterordner &amp;quot;Debug&amp;quot; bzw. &amp;quot;Release&amp;quot;, je nachdem welche Konfiguration gewählt ist. Die generierte Datei mit der Endung .elf (zB Debug/MeinProjekt.elf) enthält den produzierten Code sowie alle Debug-Informationen. Es wird auch eine .hex Datei angelegt, die das erzeugte Flash-Image enthält.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Debug Configuration anlegen ===&lt;br /&gt;
Um den Code zu flashen und debuggen, wird eine Debug Configuration benötigt. Dazu im Menü auf &amp;quot;Run&amp;quot;-&amp;gt;&amp;quot;Debug Configurations&amp;quot; klicken. Sollen sowohl Debug- als auch Release- Versionen so geflasht/debuggt werden, müssen mehrere Debug Configurations angelegt werden. Dazu ist es am einfachsten, eine anzulegen und mehrfach zu kopieren.&lt;br /&gt;
* Im erscheinenden Fenster in der Liste auf &amp;quot;GDB SEGGER J-Link Debugging&amp;quot; klicken, und oben auf das Symbol &amp;quot;New launch configuration&amp;quot;.&lt;br /&gt;
* Im Reiter &amp;quot;Main&amp;quot;, unter &amp;quot;C/C++ Application&amp;quot; den Pfad zum kompilierten ELF-File angeben, also zB &amp;quot;Debug/ProjektName.elf&amp;quot;.&lt;br /&gt;
* Im Reiter &amp;quot;Startup&amp;quot; sollte &amp;quot;Enable SWO&amp;quot; aktiviert, und daneben die CPU-Frequenz in Hz angegeben werden (zB 168000000 für den STM32F4).&lt;br /&gt;
* Im Reiter &amp;quot;Common&amp;quot; kann in der Liste &amp;quot;Display in favorites menu&amp;quot; ein Haken bei &amp;quot;Debug&amp;quot; gesetzt werden. Dadurch ist diese Debug Configuration schneller über das Käfer-Symbol in der Toolbar im Hauptmenü zugänglich.&lt;br /&gt;
* Über &amp;quot;Apply&amp;quot; und &amp;quot;Close&amp;quot; das Fenster schließen.&lt;br /&gt;
=== Debug Session starten ===&lt;br /&gt;
[[Datei:Eclipse STM32 Debugging.png|right|thumb|Laufende Debug-Session]]* Auf das kleine schwarze Dreieck neben dem Käfer-Symbol (&amp;quot;Debug&amp;quot;) in der Toolbar klicken, und die soeben angelegte Debug-Configuration auswählen. Eclipse wechselt nun in die Debug-Perspektive. Nach Beendigung der Debug-Session kann über den &amp;quot;C/C++&amp;quot;-Knopf oben rechts wieder in die normale Ansicht gewechselt werden.&lt;br /&gt;
* Es ist zu empfehlen die einzelnen Fenster der Ansicht so zu verschieben, dass mehr Code gleichzeitig sichtbar ist.&lt;br /&gt;
* Standardmäßig legt eclipse automatisch einen Breakpoint zu Beginn der &amp;quot;main&amp;quot; Funktion an.&lt;br /&gt;
* Über die Knöpfe &amp;quot;Resume&amp;quot;, &amp;quot;Break&amp;quot;, &amp;quot;Terminate&amp;quot; kann die Ausführung kontrolliert werden. Durch Doppelklick links neben eine Zeile werden Breakpoints gesetzt.&lt;br /&gt;
* Das ARM Plugin ermöglicht das Betrachten von Peripherie-Registern mit Trennung der einzelnen Felder. Dazu im Fenster &amp;quot;Peripherals&amp;quot; die Peripherie-Einheiten, deren Inhalt man betrachten möchte, auswählen. Im &amp;quot;Memory&amp;quot; Fenster werden dann die Register angezeigt. Die Ansicht wird immer nach jedem Ausführungsschritt aktualisiert, nicht immer sofort. Im Zweifelsfall also eine Zeile weiter laufen lassen, um die Ansicht zu aktualisieren.&lt;br /&gt;
* Ausgaben per &amp;quot;printf&amp;quot; erscheinen automatisch unten in der Konsole.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[STM32#Tutorials_f.C3.BCr_diverse_Tool-Kombinationen|Weitere Tutorials für STM32-IDE&#039;s]]&lt;br /&gt;
* [[ARM_GCC|Verwendung des GCC für Bare-Metal ARM]]&lt;br /&gt;
* [http://diller-technologies.de/stm32_wide.html Tutorial zur STM32 Programmierung]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_JLink_Linux/Windows&amp;diff=89164</id>
		<title>STM32 Eclipse JLink Linux/Windows</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_JLink_Linux/Windows&amp;diff=89164"/>
		<updated>2015-06-28T12:13:35Z</updated>

		<summary type="html">&lt;p&gt;Kichi: /* Einführung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
Da viele Tutorials zur Verwendung von Eclipse mit [[STM32]] auf relativ alten Tools aufsetzen, hier eine Anleitung mit aktuellem (2015) Stand. Hier wird die Programmierung von STM32 (ähnlich auch auf andere Cortex-M anwendbar) mit der Tool-Kombination [http://www.eclipse.org/ Eclipse] + [https://www.segger.com/jlink-debug-probes.html Segger JLink] + [https://launchpad.net/gcc-arm-embedded GCC-ARM-Embedded] + GDB erläutert für Linux und Windows. Die Tools gibt es auch für Mac OS, entsprechende Hinweise zur Benutzung fehlen hier noch. Der J-Link ist zwar relativ teuer (ca. 50€ für Privatpersonen), dafür aber schnell und stabil, kennt (fast?) alle ARM&#039;s und funktioniert plattformübergreifend direkt mit der Software vom Hersteller. Diese Kombination ermöglicht:&lt;br /&gt;
* Nutzung der komfortablen und mächtigen Entwicklungsumgebung Eclipse, inkl. Code-Vervollständigung und vielen Plugins wie zB. für Versionsverwaltung&lt;br /&gt;
* Automatische Generierung von makefiles und Aufruf des Compilers, kein manuelles Bearbeiten erforderlich&lt;br /&gt;
* Graphisches und schnelles Flashen und Debugging über JLink und GDB&lt;br /&gt;
* Graphische Anzeige von Registerinhalten beim Debugging&lt;br /&gt;
* Optional: Ausgabe von Texten per printf direkt nach Eclipse&lt;br /&gt;
* Projekte können zwischen Betriebssystemen ausgetauscht werden, Workflow generell fast identisch&lt;br /&gt;
* Voller Support für FPU der Cortex-M4, voller Support für C++, kein Codesize-Limit&lt;br /&gt;
* Es werden generische C/C++ Projekte angelegt; dies ist zwar etwas komplizierter, bietet aber später mehr Einstellungsmöglichkeiten&lt;br /&gt;
* Die Software ist auch für kommerzielle Nutzung komplett gratis und bis auf JLink auch OpenSource. Nur der JLink-Adapter selber ist für kommerzielle Nutzung teurer (aber das ist er bei Verwendung mit anderen IDE&#039;s natürlich auch).&lt;br /&gt;
* Da die normale und keine angepasste Eclipse-Version verwendet wird, können in der selben Eclipse-Instanz auch Projekte für völlig andere Plattformen und Sprachen benutzt werden, wie z.B. C/C++ für den PC, Java, ruby usw.&lt;br /&gt;
Da Eclipse eine sehr vielseitige Entwicklungsumgebung ist, sind einige Schritte erforderlich, um das Projekt auf die speziellen Anforderungen der Embedded-Entwicklung anzupassen. Diese sind im Folgenden erläutert.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich dazu ist es sehr empfehlenswert bei der Einrichtung immer wieder einen Blick auf die Anleitungen und Beschreibungen auf der [http://gnuarmeclipse.livius.net GNU ARM Eclipse Homepage] zu werfen, da die Vorgehensweise dort gut beschrieben ist und sich auch gelegentlich ändert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== JLink ===&lt;br /&gt;
Zunächst die aktuelle Version von der [https://www.segger.com/jlink-software.html JLink Software] herunterladen und installieren. Da es hier regelmäßig neue Versionen gibt, ist es empfehlenswert sich für die [https://www.segger.com/notification/subscribe.php?prodid=7 E-Mail-Benachrichtigung] für neue Versionen einzutragen. Das Installationsverzeichnis für später merken.&lt;br /&gt;
=== GCC-ARM-Embedded ===&lt;br /&gt;
Die aktuelle Version für das jeweilige Betriebssystem [https://launchpad.net/gcc-arm-embedded herunterladen] und entpacken. Es gibt zwar auch Versionen in der Paketverwaltung mancher Linux-Distributionen aber die sind oft veraltet. Dafür bitte einen kurzen Pfad &#039;&#039;&#039;ohne Leerzeichen&#039;&#039;&#039; verwenden:&lt;br /&gt;
* Windows: z.B. C:\gcc-arm-embedded&lt;br /&gt;
* Linux: z.B. &amp;quot;/home/username/gcc-arm-embedded&amp;quot;&lt;br /&gt;
Den Pfad für später merken.&lt;br /&gt;
=== Make ===&lt;br /&gt;
* Linux: Meistens vorinstalliert. Unter Ubuntu im Paket &amp;quot;build-essential&amp;quot; enthalten.&lt;br /&gt;
* Windows: Hier können die MinGW/MSYS Basis Tools verwendet werden:&lt;br /&gt;
** Dazu [http://sourceforge.net/projects/mingw/files/latest/download hier] den MinGW Installer herunterladen und ausführen.&lt;br /&gt;
** Als Installation Directory am besten &amp;quot;C:\MinGW&amp;quot; beibehalten.&lt;br /&gt;
** So oft &amp;quot;Continue&amp;quot; anklicken, bis der &amp;quot;MinGW Installation Manager&amp;quot; erscheint und eine Liste installierbarer Pakete anzeigt.&lt;br /&gt;
** In der Liste das Paket &amp;quot;msys-base&amp;quot; mit der rechten Maustaste anklicken und &amp;quot;Mark for Installation&amp;quot; anklicken&lt;br /&gt;
** Im Menü &amp;quot;Installation&amp;quot;-&amp;gt;&amp;quot;Apply Changes&amp;quot; anklicken, und mit &amp;quot;Apply&amp;quot; bestätigen.&lt;br /&gt;
** Nachdem der Vorgang abgeschlossen ist, das Programm beenden&lt;br /&gt;
=== Pfade setzen ===&lt;br /&gt;
&#039;&#039;&#039;Vor&#039;&#039;&#039; dem Starten von Eclipse müssen dem System die Pfade der Kommandozeilentools bekannt gemacht werden:&lt;br /&gt;
* Windows:&lt;br /&gt;
** Rechte Maustaste auf den Arbeitsplatz klicken, &amp;quot;Eigenschaften&amp;quot; -&amp;gt; &amp;quot;Erweiterte Systemeinstellungen&amp;quot; -&amp;gt; &amp;quot;Umgebungsvariablen&amp;quot; anklicken.&lt;br /&gt;
** Im &#039;&#039;&#039;unteren&#039;&#039;&#039; Listenfeld den Eintrag &amp;quot;Path&amp;quot; suchen, auf &amp;quot;Bearbeiten&amp;quot; klicken&lt;br /&gt;
** Ans Ende des Textes ein Semikolon hängen (falls nicht schon vorhanden), und durch zwei Semikola getrennt die Pfade zur J-Link Installation, zur GCC-ARM-Embedded -Installation (plus &amp;quot;\bin&amp;quot;) und zur MSYS-Installation &#039;&#039;&#039;anhängen&#039;&#039;&#039;. Also zum Beispiel folgenden Text anhängen (Version anpassen) und alles mit OK bestätigen:&lt;br /&gt;
&amp;lt;code&amp;gt;;C:\gcc-arm-embedded\bin;C:\Program Files (x86)\SEGGER\JLink_V500e;C:\MinGW\msys\1.0\bin&amp;lt;/code&amp;gt;&lt;br /&gt;
** In einem &#039;&#039;&#039;danach&#039;&#039;&#039; erst gestarteten cmd.exe Fenster den Befehl &amp;quot;JLink&amp;quot; eingeben. Es sollte die Lizenzvereinbarung von Segger erscheinen (diese bestätigen), und im Terminal wieder &amp;quot;exit&amp;quot; eingeben. Funktioniert dies nicht, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
** Im selben Fenster &amp;quot;arm-none-eabi-gcc&amp;quot; eingeben. Es sollte eine Meldung im Stil von &amp;quot;arm-none-eabi-gcc: fatal error: no input files&amp;quot; erscheinen. Falls nicht, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
** Im selben Fenster &amp;quot;make&amp;quot; eingeben. Es sollte ein Meldung in der Art von &amp;quot;make: *** No targets specified and no makefile found.  Stop.&amp;quot; erscheinen. Falls nicht, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
* Linux:&lt;br /&gt;
** Mit einem Texteditor die (versteckte) Datei &amp;quot;.profile&amp;quot; im Home-Verzeichnis öffnen bzw. anlegen falls nicht vorhanden. Folgende Zeile &#039;&#039;&#039;anhägen&#039;&#039;&#039; (Pfad anpassen):&lt;br /&gt;
&amp;lt;code&amp;gt;export PATH=$PATH:/home/username/gcc-arm-embedded/bin&amp;lt;/code&amp;gt;&lt;br /&gt;
** Den Benutzer ab- und wieder anmelden&lt;br /&gt;
** In einem Terminal-Fenster &amp;quot;JLinkExe&amp;quot; eingeben. Es sollte sich die JLink-Software mit &amp;quot;SEGGER J-Link Commander V5.00c (&#039;?&#039; for help)&amp;quot; melden. Diese wieder mit &amp;quot;exit&amp;quot; beenden. Falls das nicht funktioniert, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
** Im selben Fenster &amp;quot;arm-none-eabi-gcc&amp;quot; eingeben. Es sollte eine Meldung im Stil von &amp;quot;arm-none-eabi-gcc: fatal error: no input files&amp;quot; erscheinen. Falls nicht, wurde die Umgebungsvariable falsch gesetzt.&lt;br /&gt;
Die Umgebungsvariable muss nach jedem Update der JLink-Software neu gesetzt werden, da der Pfad die Versionsnummer enthält.&lt;br /&gt;
=== Eclipse ===&lt;br /&gt;
* Da Eclipse auf Java basiert, muss dies zuerst installiert werden:&lt;br /&gt;
** Windows: Den [http://www.java.com/de/download/ Installer herunterladen] und laufen lassen.&lt;br /&gt;
** Linux: Je nach Distribution unterschiedlich, für Ubuntu [http://wiki.ubuntuusers.de/Java/Installation/Oracle_Java/Java_8#Installation siehe hier]&lt;br /&gt;
* Die aktuelle Version von &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot; [http://www.eclipse.org/downloads/ hier herunterladen]. Unter Linux ist eclipse zwar auch oft in der Paketverwaltung enthalten, diese Version ist aber meist stark veraltet. Das heruntergeladene Archiv muss nur in einen beliebigen Ordner entpackt werden und die enthaltene Programmdatei (Linux: &amp;quot;eclipse&amp;quot;, Windows: &amp;quot;eclipse.exe&amp;quot;) gestartet werden.&lt;br /&gt;
* Den beim ersten Start erscheinenden &amp;quot;Welcome&amp;quot; Tab schließen.&lt;br /&gt;
* Im Menü &amp;quot;Help&amp;quot;-&amp;gt;&amp;quot;Install new software&amp;quot; anwählen, unter &amp;quot;Work With&amp;quot; die URL &amp;lt;nowiki&amp;gt;&amp;quot;http://gnuarmeclipse.sourceforge.net/updates&amp;quot;&amp;lt;/nowiki&amp;gt; eingeben, Enter klicken, den in der Liste erscheinenden Eintrag &amp;quot;GNU ARM C/C++ Cross Development Tools&amp;quot; auswählen, und mit &amp;quot;Next&amp;quot; und &amp;quot;Finish&amp;quot; installieren. Die Sicherheitsabfrage über unsignierte Software bestätigen, und die Abfrage zum Neustart von Eclipse bestätigen. Die Installation dauert etwas, und funktioniert manchmal nicht wenn die Server überlastet sind. Dann einfach später noch einmal probieren.&lt;br /&gt;
* Nur Windows: Im Menü &amp;quot;Window&amp;quot;-&amp;gt;&amp;quot;Preferences&amp;quot; anklicken, in der Baumstruktur des erscheinenden Fensters &amp;quot;Run&amp;quot;-&amp;gt;&amp;quot;String Substitution&amp;quot; anwählen, die Zeile mit &amp;quot;jlink_path&amp;quot; auswählen, &amp;quot;Edit&amp;quot; anklicken, und unter &amp;quot;Value&amp;quot; den Pfad zur JLink-Installation, also zB. &amp;quot;C:\Program Files (x86)\SEGGER\JLink_V500e&amp;quot; eintragen. Alles mit OK schließen.&lt;br /&gt;
* In der Toolbar den Eintrag &amp;quot;Make the C/C++ Packs perspective visible&amp;quot; anklicken, und das Symbol mit den gelben Pfeilen (&amp;quot;Update the package definitions from all repositories&amp;quot;) anklicken. Dieser Vorgang dauert einige Minuten.&lt;br /&gt;
* In der erscheinenden Baumstruktur im Tab &amp;quot;Packs&amp;quot; unter dem Punkt &amp;quot;Keil&amp;quot; die Mikrocontroller auswählen (Mehrfachauswahl mit der Strg-Taste möglich) für die man programmieren möchte (zB. &amp;quot;STM32F4xx_DFP&amp;quot;), und mit der rechten Maustaste und Klick auf &amp;quot;Install&amp;quot; installieren. Auch dies dauert etwas, der Fortschritt des Vorgangs wird etwas versteckt rechts unten im Fenster angezeigt.&lt;br /&gt;
* Danach wieder mit Klick auf den &amp;quot;C/C++&amp;quot; Button oben rechts in die C/C++ Ansicht wechseln.&lt;br /&gt;
&lt;br /&gt;
=== Standard Peripheral Library vorbereiten ===&lt;br /&gt;
Um auf die Hardware-Register direkt zuzugreifen oder die Treiberfunktionen von ST zu verwenden, sowie für den Startup-Code &amp;amp; Linkerscript, wird die Library von ST benötigt.&lt;br /&gt;
* Zum Herunterladen die Produktseite des Mikrocontrollers aufrufen (zB [http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1577/LN11/PF252140 hier] für STM32F407VG), &amp;quot;Design Resources&amp;quot; anklicken, unter dem Punkt &amp;quot;Related Tools and Software&amp;quot; den Eintrag im Stil von &amp;quot;STM32F4 DSP and standard peripherals library&amp;quot; finden (zB [http://www.st.com/web/en/catalog/tools/PF257901 hier] für STM32F4). Ganz unten findet sich der &amp;quot;Download&amp;quot; Button.&lt;br /&gt;
Leider ist das Archiv nicht gut strukturiert. Daher müssen die entsprechenden Dateien herausgesucht werden:&lt;br /&gt;
* Im enthaltenen Verzeichnis &amp;quot;Project/*** Templates&amp;quot; nach Dateien suchen, die auf *.ld enden und die herauskopieren, deren Name zum verwendeten Mikrocontroller passt, also z.B. &amp;quot;STM32F417IG_FLASH.ld&amp;quot; für den STM32F4. Diese ist das Linkerscript und wird später für jedes Projekt benötigt. Zur Sicherheit sollte diese Datei einmal im Texteditor geöffnet und auf Fehler überprüft werden (ST ist bekannt dafür hier Fehler zu machen):&lt;br /&gt;
** Die Speicher-Größen-Angaben der folgenden Zeilen sollten zum Datasheet passen (ggf. anpassen):&lt;br /&gt;
&amp;lt;pre&amp;gt;MEMORY&lt;br /&gt;
{&lt;br /&gt;
FLASH (rx)      : ORIGIN = 0x8000000, LENGTH = 1024K&lt;br /&gt;
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 128K&lt;br /&gt;
CCMRAM (rw)      : ORIGIN = 0x10000000, LENGTH = 64K&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Die Angabe der Adresse der Initialen Stack-Adresse sieht oft so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;_estack = 0x2001FFFF;    /* end of RAM */&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Dies ist &#039;&#039;&#039;falsch&#039;&#039;&#039; (ST weiß selber nicht wie der Cortex-M funktioniert). Die angegebene Adresse sollte Anfangsadresse des RAM&#039;s (immer 0x20000000) plus RAM-Größe (z.B. beim STM32F407 0x20000 Bytes) sein, also z.B. 0x20020000 für den STM32F407:&lt;br /&gt;
&amp;lt;pre&amp;gt;_estack = 0x20020000;    /* end of RAM */&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Ist dies falsch, kann es später zu schwer auffindbaren Problemen im Zusammenhang mit z.B. Floatingpoint-Funktionsargumenten kommen.&lt;br /&gt;
* Im Archiv nach Dateien suchen, deren Namen mit &amp;quot;startup_stm32&amp;quot; beginnt. Eine der Dateien heraussuchen, deren Name zum Mikrocontroller passt, &#039;&#039;&#039;und&#039;&#039;&#039; deren enthaltendes Verzeichnis den Namen TrueSTUDIO trägt, also zB. &amp;quot;Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO/startup_stm32f40_41xxx.s&amp;quot;. Diese Datei herauskopieren, sie ist der Startup-Code und wird später für jedes Projekt benötigt. Dabei die Dateiendung von &amp;quot;.s&amp;quot; auf &amp;quot;.S&amp;quot; ändern, denn sonst erkennt eclipse sie nicht.&lt;br /&gt;
* Im Verzeichnis &amp;quot;Project/*** Templates&amp;quot; die Datei &amp;quot;stm32f***_conf.h&amp;quot; herauskopieren. Diese wird für Einstellungen in der Treiber-Library benötigt.&lt;br /&gt;
* Alles außer dem Verzeichnis &amp;quot;Libraries&amp;quot; löschen.&lt;br /&gt;
* Im Verzeichnis &amp;quot;Libraries&amp;quot; (rekursiv) nach Dateien &amp;amp; Ordnern suchen, die &amp;quot;example&amp;quot; oder &amp;quot;template&amp;quot; im Namen tragen und alle löschen.&lt;br /&gt;
* Die Unterverzeichnisse &amp;quot;Documentation&amp;quot;, &amp;quot;Lib&amp;quot;, &amp;quot;RTOS&amp;quot;, &amp;quot;SVD&amp;quot; löschen. Die Lizenz und Release Notes-Dateien stören zwar nicht, können aber auch gelöscht werden. Im Endeffekt werden nur die .c und .h Dateien benötigt. Die DSP_Lib kann auch gelöscht werden, wenn keine DSP-Funktionen benötigt werden (existiert onehin nur für Cortex-M4 Controller).&lt;br /&gt;
* Leider enthält die Library für alle STM32F4 die Treiber für sowohl den FMC als auch den FSMC, obwohl beide nicht in allen Varianten vorhanden sind. Diese Treiber verursachen Compilerfehler, wenn für den falschen Controller kompiliert. Daher muss die Datei &amp;quot;STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fmc.c&amp;quot; gelöscht werden, wenn kein FMC vorhanden ist (wie beim STM32F40x), bzw. die &amp;quot;STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fsmc.c&amp;quot; wenn kein FSMC vorhanden ist (wie beim STM32F42x).&lt;br /&gt;
* Danach sollte nur noch so eine Struktur übrig bleigen:&lt;br /&gt;
&amp;lt;pre&amp;gt;./STM32F4xx_StdPeriph_Driver&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/src  -   Hier liegt der Quellcode für die Peripherie-Treiber&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/src/stm32f4xx_wwdg.c&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c&lt;br /&gt;
...&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/inc  -   Hier liegen die Includes für die Peripherie-Treiber&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_wwdg.h&lt;br /&gt;
./STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_usart.h&lt;br /&gt;
...&lt;br /&gt;
./CMSIS&lt;br /&gt;
./CMSIS/Include                   -   Hier liegen die Includes für den Prozessorkern (Cortex-M*)&lt;br /&gt;
./CMSIS/Include/core_sc300.h&lt;br /&gt;
./CMSIS/Include/core_sc000.h&lt;br /&gt;
...&lt;br /&gt;
./CMSIS/DSP_Lib/Source/TransformFunctions  - Hier liegt die DSP-Library (optional)&lt;br /&gt;
./CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_q31.c&lt;br /&gt;
./CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_q15.c&lt;br /&gt;
...&lt;br /&gt;
./CMSIS/Device/ST/STM32F4xx/Include&lt;br /&gt;
./CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h   -   Dies ist die Include-Datei für das Clock Setup&lt;br /&gt;
./CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h   -   Dies ist die zentrale Include-Datei für die Register-Definitionen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Soll die Standard Peripheral Library nicht genutzt werden, sondern nur direkt die Register-Definitionen, werden nur die letzten beiden Dateien benötigt sowie die im Verzeichnis CMSIS/Include.&lt;br /&gt;
* In der Datei &amp;quot;CMSIS/Device/ST/STM32***/Include/stm32f***.h&amp;quot; befindet sich ganz oben eine Präprozessor-Fallunterscheidung der Form&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#if !defined (STM32F40_41xxx) &amp;amp;&amp;amp; !defined (STM32F427_437xx) &amp;amp;&amp;amp; !defined (STM32F429_439xx) &amp;amp;&amp;amp; !defined (STM32F401xx) &amp;amp;&amp;amp; !defined (STM32F411xE)&lt;br /&gt;
  /* #define STM32F40_41xxx */   /*!&amp;lt; STM32F405RG, STM32F405VG, STM32F405ZG, STM32F415RG, STM32F415VG, STM32F415ZG,  &lt;br /&gt;
                                      STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG, STM32F407IE, &lt;br /&gt;
                                      STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE, STM32F417IG and STM32F417IE Devices */&lt;br /&gt;
&lt;br /&gt;
  /* #define STM32F427_437xx */  /*!&amp;lt; STM32F427VG, STM32F427VI, STM32F427ZG, STM32F427ZI, STM32F427IG, STM32F427II,  &lt;br /&gt;
                                      STM32F437VG, STM32F437VI, STM32F437ZG, STM32F437ZI, STM32F437IG, STM32F437II Devices */&lt;br /&gt;
&lt;br /&gt;
  /* #define STM32F429_439xx */  /*!&amp;lt; STM32F429VG, STM32F429VI, STM32F429ZG, STM32F429ZI, STM32F429BG, STM32F429BI,  &lt;br /&gt;
                                      STM32F429NG, STM32F439NI, STM32F429IG, STM32F429II, STM32F439VG, STM32F439VI, &lt;br /&gt;
                                      STM32F439ZG, STM32F439ZI, STM32F439BG, STM32F439BI, STM32F439NG, STM32F439NI,&lt;br /&gt;
                                      STM32F439IG and STM32F439II Devices */&lt;br /&gt;
&lt;br /&gt;
  /* #define STM32F401xx */      /*!&amp;lt; STM32F401CB, STM32F401CC,  STM32F401RB, STM32F401RC, STM32F401VB, STM32F401VC  &lt;br /&gt;
                                      STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CExx, STM32F401RE and STM32F401VE Devices */&lt;br /&gt;
&lt;br /&gt;
  /* #define STM32F411xE */      /*!&amp;lt; STM32F411CD, STM32F411RD, STM32F411VD, STM32F411CE, STM32F411RE and STM32F411VE Devices */&lt;br /&gt;
#endif&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Hier mithilfe des Kommentars das Präprozessor-Makro heraussuchen, das zum verwendeten Mikrocontroller passt, also z.B. &amp;quot;STM32F40_41xxx&amp;quot; für den STM32F407VG. Dieses kopieren und für später merken.&lt;br /&gt;
&lt;br /&gt;
== Projekt erstellen ==&lt;br /&gt;
=== Clock-Konfiguration generieren ===&lt;br /&gt;
Zum Initialisieren des Takts wird eine spezielle Funktion benötigt, die je nach Art und Frequenz des Takts spezifisch erzeugt werden muss. ST bietet ein Tool, um diese Datei zu generieren:&lt;br /&gt;
* Auf der Produkt seite des Mikrocontrollers (zB [http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1577/LN11/PF252140 hier] für den STM32F407VG) auf &amp;quot;Design Resources&amp;quot; klicken, und den Eintrag in der Art von &amp;quot;Clock configuration tool for STM32F40x/41x microcontrollers (AN3988)&amp;quot; finden.&lt;br /&gt;
* Die Datei herunterladen und mit MS Excel öffnen. Die gewünschte Clock-Konfiguration auswählen, und den Code generieren lassen. Die Datei zB unter dem Namen system_stm32f4xx.c speichern.&lt;br /&gt;
=== Eclipse Projekt konfigurieren ===&lt;br /&gt;
[[Datei:Eclipse STM32 Project.png|right|thumb|Fertiges Projekt in Eclipse geöffnet]]Neue Projekte werden über &amp;quot;File&amp;quot;-&amp;gt;&amp;quot;New&amp;quot;-&amp;gt;&amp;quot;Project...&amp;quot; angelegt.&lt;br /&gt;
* In der Baumstruktur &amp;quot;C/C++ -&amp;gt; C++ Project&amp;quot; auswählen. Im C++ Projekt kann man natürlich auch einfachen C Code schreiben, aber es ist die Möglichkeit für C++ offen gehalten.&lt;br /&gt;
* In der Baumstruktur &amp;quot;Empty Project&amp;quot; auswählen, und rechts &amp;quot;Cross ARM GCC&amp;quot;. Es können zwar auch die einfacheren Vorlagen für spezifische Controller wie &amp;quot;STM32F4xx C/C++ Project&amp;quot; verwendet werden, dies ist aber weniger flexibel, weswegen hier ersteres erläutert wird.&lt;br /&gt;
* Als Namen bitte einen ohne Leerzeichen oder Sonderzeichen verwenden.&lt;br /&gt;
* Mit 2x &amp;quot;Next&amp;quot; und 1x &amp;quot;Finish&amp;quot; das Erstellen abschließen.&lt;br /&gt;
* Das zuvor gesicherte Linkerscript (mit der Endung .ld) in das Projektverzeichnis kopieren. Den Projektnamen links anklicken, rechts Maustaste, und &amp;quot;Refresh&amp;quot; (oder F5) drücken. Das Linker-Script sollte im Dateibaum erscheinen.&lt;br /&gt;
* Im Projekt müssen zunächst einige Einstellungen vorgenommen werden. Dazu mit der rechten Maustaste auf den Projektnamen im linken Fenster anklicken, und &amp;quot;Properties&amp;quot; auswählen.&lt;br /&gt;
** Im erscheinenden Fenster, im DropDown Menü oben &amp;quot;[All Configurations]&amp;quot; auswählen&lt;br /&gt;
** Nur Linux: In der Baumstruktur &amp;quot;C/C++ Build&amp;quot; auswählen, den Reiter &amp;quot;Behaviour&amp;quot; öffnen, den Haken bei &amp;quot;Enable Parallel Build&amp;quot; setzen. Dies beschleunigt die Kompilierung, funktioniert aber nicht unter Windows (beim Kopieren des Projekts beachten).&lt;br /&gt;
** In der Baumstruktur &amp;quot;C/C++ Build&amp;quot; -&amp;gt; &amp;quot;Settings&amp;quot; anwählen. Das Öffnen dauert in aktuellen Versionen etwas, vermutlich ein Bug.&lt;br /&gt;
*** In der 2. Baumstruktur &amp;quot;Target processor&amp;quot; auswählen.&lt;br /&gt;
**** Unter &amp;quot;ARM family&amp;quot; den gewünschten Prozessor auswählen, also z.B. &amp;quot;cortex-m4&amp;quot; für STMF4 oder &amp;quot;cortex-m3&amp;quot; für STM32F1.&lt;br /&gt;
**** Nur bei Cortex-M4 (zB STM32F3 und STM32F4):&lt;br /&gt;
***** Unter Float ABI &amp;quot;FP instructions (hard)&amp;quot; auswählen&lt;br /&gt;
***** Unter &amp;quot;FPU Type&amp;quot; &amp;quot;fpv4-sp-d16 &amp;quot; auswählen. Siehe [https://launchpadlibrarian.net/209775724/readme.txt hier in der Tabelle] für die möglichen Werte der verschiedenen Prozessoren.&lt;br /&gt;
*** Es ist zu empfehlen, LTO beim Kompilieren im Release-Modus zu aktivieren. Dies resultiert in kleineren und schnelleren Binaries, erschwert aber das Debugging mit GDB sehr:&lt;br /&gt;
**** Oben die Configuration &amp;quot;Release&amp;quot; auswählen&lt;br /&gt;
**** In der 2. Baumstruktur &amp;quot;Optimization&amp;quot; auswählen&lt;br /&gt;
**** &amp;quot;Link-time optimizer (-flto)&amp;quot; aktivieren&lt;br /&gt;
**** Oben wieder &amp;quot;[All configurations]&amp;quot; anklicken&lt;br /&gt;
*** In der 2. Baumstruktur &amp;quot;Cross ARM C++ Compiler -&amp;gt; Optimization&amp;quot; anklicken&lt;br /&gt;
**** Rechts &amp;quot;Do not use exceptions (-fno-exceptions) anwählen&lt;br /&gt;
**** Rechts &amp;quot;Do not use RTTO (-fno-rtti)&amp;quot; anwählen&lt;br /&gt;
*** In der 2. Baumstruktur &amp;quot;Cross ARM C++ Linker&amp;quot; -&amp;gt; &amp;quot;General&amp;quot; auswählen&lt;br /&gt;
**** In der Toolbar auf &amp;quot;Add&amp;quot; klicken, auf &amp;quot;Workspace&amp;quot; klicken, und das soeben in das Projekt kopierte Linkerscript auswählen.&lt;br /&gt;
*** In der 2. Baumstruktur &amp;quot;Cross ARM C++ Linker&amp;quot; -&amp;gt; &amp;quot;Miscellaneous&amp;quot; auswählen&lt;br /&gt;
**** Den Haken bei &amp;quot;Use newlib-nano (--specs=nano.specs)&amp;quot; setzen.&lt;br /&gt;
**** Optional, nur bei Cortex-M4 (zB STM32F3 und STM32F4):&lt;br /&gt;
***** Den Haken bei &amp;quot;Use float with with nano printf (-u _printf_float)&amp;quot; setzen. Dies ermöglicht die Nutzung von &amp;quot;%f&amp;quot; bei &amp;quot;printf&amp;quot;, verbraucht aber automatisch eine Menge Flash+RAM und benötigt die Syscalls für malloc (s.u.). Daher ist ggf. zu empfehlen, dies nur in der Debug-Konfiguration zu aktivieren. Dazu in der Dropbown-Box oben vor aktivieren dieser Einstellung auf &amp;quot;Debug&amp;quot; klicken, und danach wieder auf &amp;quot;[All Configurations]&amp;quot;.&lt;br /&gt;
*** Im Reiter &amp;quot;Devices&amp;quot; in der Baumstruktur den verwendeten Mikrocontroller, wie zB &amp;quot;STM32F407VG&amp;quot; auswählen.&lt;br /&gt;
** In der linken Baumstruktur &amp;quot;C/C++ General&amp;quot;-&amp;gt;&amp;quot;Paths and Symbols&amp;quot; auswählen&lt;br /&gt;
*** Oben im Drop-Down-Menü &amp;quot;Debug&amp;quot; anklicken&lt;br /&gt;
*** Im Reiter &amp;quot;Symbols&amp;quot; rechts auf &amp;quot;Add&amp;quot; klicken und dadurch nacheinander folgende Symbole definieren. Dabei immer beide Häkchen setzen!&lt;br /&gt;
**** Name &amp;quot;HSE_VALUE&amp;quot;    Value=Takt des Quarzes, z.B. 8000000&lt;br /&gt;
**** Name &amp;quot;USE_STDPERIPH_DRIVER&amp;quot;   Value leerlassen&lt;br /&gt;
**** Name &amp;quot;__FPU_PRESENT&amp;quot;    Value=1&lt;br /&gt;
**** Das zuvor gemerkte Präprozessor-Makro aus der &amp;quot;stm32f**.h&amp;quot; (zB. STM32F40_41xxx)   Value leerlassen&lt;br /&gt;
**** Name &amp;quot;ARM_MATH_CM4&amp;quot;, &amp;quot;ARM_MATH_CM3&amp;quot;, &amp;quot;ARM_MATH_CM0&amp;quot;, oder &amp;quot;ARM_MATH_CM0PLUS&amp;quot; je nachdem ob für den Cortex-M4, -M3, -M0, oder -M0+ kompiliert wird; Value leerlassen&lt;br /&gt;
** Das Fenster mit OK schließen.&lt;br /&gt;
Nun ist der Compiler an sich richtig konfiguriert. Allerdings fehlt noch die Library von ST:&lt;br /&gt;
* Die zuvor vorbereitete Standard Peripheral Library (d.h. das Verzeichnis &amp;quot;Libraries&amp;quot;) in das Projektverzeichnis kopieren. Dies ist leider die einzig sinnvolle &amp;amp; einfache Möglichkeit.&lt;br /&gt;
* Den zuvor gesicherten Startup-Code, also zB. &amp;quot;startup_stm32f40_41xxx.S&amp;quot; in das Projektverzeichnis kopieren&lt;br /&gt;
* Die zuvor gesicherte Datei &amp;quot;stm32f***_conf.h&amp;quot; in das Projektverzeichnis kopieren&lt;br /&gt;
* Die zuvor generierte Datei &amp;quot;system_stm32f**&amp;quot; mit der Clock-Konfiguration in das Projektverzeichnis kopieren&lt;br /&gt;
Jetzt müssen dem Compiler noch die Pfade der Header-Dateien der Library mitgeteilt werden:&lt;br /&gt;
* Mit der rechten Maustaste auf den Projektnamen im linken Fenster anklicken, und &amp;quot;Properties&amp;quot; auswählen.&lt;br /&gt;
* Links in der Baumstruktur &amp;quot;C/C++ General&amp;quot; -&amp;gt; &amp;quot;Paths and Symbols&amp;quot; anklicken, und den Reiter &amp;quot;Includes&amp;quot; auswählen.&lt;br /&gt;
* Oben im Drop-Down-Menü &amp;quot;Debug&amp;quot; auswählen.&lt;br /&gt;
* Mit &amp;quot;Add&amp;quot; nacheinander folgende Pfade hinzufügen. Dazu jeweils &amp;quot;Add to all languages&amp;quot; sowie &amp;quot;Add to all configurations&amp;quot; einschalten, und den &amp;quot;Workspace...&amp;quot; Button verwenden.&lt;br /&gt;
** &amp;quot;Libraries/CMSIS/Device/ST/STM32F***/Include&amp;quot;&lt;br /&gt;
** &amp;quot;Libraries/CMSIS/Include&amp;quot;&lt;br /&gt;
** &amp;quot;Libraries/STM32F**_StdPeriph_Driver/inc&amp;quot;&lt;br /&gt;
** Den Pfad, in dem sich die &amp;quot;stm32f***_conf.h&amp;quot; befindet, also typischerweise das Projektverzeichnis selber.&lt;br /&gt;
* Mit OK das Fenster schließen. Danach wird Eclipse die C/C++ Analyse laufen lassen. Dies kann etwas dauern und die weitere Bedienung währenddessen verlangsamen. Der Fortschritt ist unten rechts im Fenster zu sehen.&lt;br /&gt;
&lt;br /&gt;
=== Linkerscript anpassen ===&lt;br /&gt;
Noch einmal das soeben hineinkopierte Linkerscript (mit der Endung .ld) öffnen. Die Zeile mit &amp;quot;_Min_Heap_Size&amp;quot; gibt die Größe des Heaps, d.h. des für malloc() zur Verfügung stehenden Speichers an. Wird malloc() nicht verwendet, kann dies auf 0 gesetzt werden. Soll printf() verwendet werden, ist zu empfehlen hier mindestens 2048 anzugeben, da printf sonst schnell keinen Speicher mehr hat und es zu komischem Verhalten kommt:&lt;br /&gt;
&amp;lt;pre&amp;gt;_Min_Heap_Size = 2048;      /* required amount of heap  */&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optional: Syscalls implementieren ===&lt;br /&gt;
Soll im Code printf() und/oder malloc() verwendet werden können, müssen die [https://sourceware.org/newlib/libc.html#Syscalls Syscalls der C-Library] implementiert werden. Dazu ist es empfehlenswert, [[Media:Newlib cortexm syscalls.c|diesen Beispielcode]] zu verwenden und in das Projektverzeichnis zu kopieren. Er gibt per printf() ausgebenen Texte seriell per SWO aus. Dies ist ein Extra-Pin im SWD-Debug-Interface (bei JTAG nicht verfügbar), der vom JLink eingelesen und über die JLink-Software an Eclipse geschickt wird. Der Code kann auch angepasst werden um den Text zB per UART auszugeben.&lt;br /&gt;
&lt;br /&gt;
== Code schreiben und kompilieren ==&lt;br /&gt;
Dem Projekt kann jetzt eine eigene Quellcodedatei hinzugefügt werden. Dazu mit der rechten Maustaste auf den Projektnamen klicken, &amp;quot;New&amp;quot;-&amp;gt;&amp;quot;Source file&amp;quot; auswählen. Die Datei z.B. &amp;quot;main.c&amp;quot; (für C) oder &amp;quot;main.cpp&amp;quot; (für C++) nennen. [[Media:Stm32f4 eclipse example.c|Hier]] kann ein einfacher Beispielcode für den STM32F407 heruntergeladen werden (funktioniert sowohl mit C als auch C++), der eine LED am Pin PD15 blinken lässt (blaue LED auf dem [http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252419 STM32F4 Discovery Board]). Der Code braucht auf jeden Fall eine &amp;quot;main()&amp;quot;-Funktion, sowie im Falle von C++ eine Funktion namens &amp;quot;__cxa_pure_virtual&amp;quot;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;extern &amp;quot;C&amp;quot; void __cxa_pure_virtual () {&lt;br /&gt;
	// This is an error callback for C++&lt;br /&gt;
	__disable_irq ();&lt;br /&gt;
	while (1) {&lt;br /&gt;
		// Cause debugger breakpoint&lt;br /&gt;
		asm volatile (&amp;quot;bkpt&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die oben verlinkte syscalls.c Datei nicht eingebunden, wird außerdem auch noch eine _exit Funktion benötigt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef __cplusplus&lt;br /&gt;
extern &amp;quot;C&amp;quot;&lt;br /&gt;
void _exit(int) {&lt;br /&gt;
#else&lt;br /&gt;
void _exit (int status) {&lt;br /&gt;
	((void) status);&lt;br /&gt;
#endif&lt;br /&gt;
	// Stop controller in case of fatal error&lt;br /&gt;
	__disable_irq ();&lt;br /&gt;
	while (1) {&lt;br /&gt;
		asm volatile (&amp;quot;bkpt&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	 __builtin_unreachable ();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dies sind Callbacks zur Fehlerbehandlung. Durch Überschreiben durch simples Blockieren des Controllers wird das Einbinden der komplexen Fehlerbehandlung der Standardbibliothek verhindert.&lt;br /&gt;
Danach kann der Code zum ersten Mal kompiliert werden. Dazu das Hammer-Symbol &amp;quot;Build&amp;quot; in der Toolbar benutzen. Fehlermeldungen sollten dem &amp;quot;Console&amp;quot; Fenster entnommen werden, da das &amp;quot;Problems&amp;quot; Fenster nicht immer korrekt funktioniert. Die erzeugten Dateien landen im Unterordner &amp;quot;Debug&amp;quot; bzw. &amp;quot;Release&amp;quot;, je nachdem welche Konfiguration gewählt ist. Die generierte Datei mit der Endung .elf (zB Debug/MeinProjekt.elf) enthält den produzierten Code sowie alle Debug-Informationen. Es wird auch eine .hex Datei angelegt, die das erzeugte Flash-Image enthält.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Debug Configuration anlegen ===&lt;br /&gt;
Um den Code zu flashen und debuggen, wird eine Debug Configuration benötigt. Dazu im Menü auf &amp;quot;Run&amp;quot;-&amp;gt;&amp;quot;Debug Configurations&amp;quot; klicken. Sollen sowohl Debug- als auch Release- Versionen so geflasht/debuggt werden, müssen mehrere Debug Configurations angelegt werden. Dazu ist es am einfachsten, eine anzulegen und mehrfach zu kopieren.&lt;br /&gt;
* Im erscheinenden Fenster in der Liste auf &amp;quot;GDB SEGGER J-Link Debugging&amp;quot; klicken, und oben auf das Symbol &amp;quot;New launch configuration&amp;quot;.&lt;br /&gt;
* Im Reiter &amp;quot;Main&amp;quot;, unter &amp;quot;C/C++ Application&amp;quot; den Pfad zum kompilierten ELF-File angeben, also zB &amp;quot;Debug/ProjektName.elf&amp;quot;.&lt;br /&gt;
* Im Reiter &amp;quot;Startup&amp;quot; sollte &amp;quot;Enable SWO&amp;quot; aktiviert, und daneben die CPU-Frequenz in Hz angegeben werden (zB 168000000 für den STM32F4).&lt;br /&gt;
* Im Reiter &amp;quot;Common&amp;quot; kann in der Liste &amp;quot;Display in favorites menu&amp;quot; ein Haken bei &amp;quot;Debug&amp;quot; gesetzt werden. Dadurch ist diese Debug Configuration schneller über das Käfer-Symbol in der Toolbar im Hauptmenü zugänglich.&lt;br /&gt;
* Über &amp;quot;Apply&amp;quot; und &amp;quot;Close&amp;quot; das Fenster schließen.&lt;br /&gt;
=== Debug Session starten ===&lt;br /&gt;
[[Datei:Eclipse STM32 Debugging.png|right|thumb|Laufende Debug-Session]]* Auf das kleine schwarze Dreieck neben dem Käfer-Symbol (&amp;quot;Debug&amp;quot;) in der Toolbar klicken, und die soeben angelegte Debug-Configuration auswählen. Eclipse wechselt nun in die Debug-Perspektive. Nach Beendigung der Debug-Session kann über den &amp;quot;C/C++&amp;quot;-Knopf oben rechts wieder in die normale Ansicht gewechselt werden.&lt;br /&gt;
* Es ist zu empfehlen die einzelnen Fenster der Ansicht so zu verschieben, dass mehr Code gleichzeitig sichtbar ist.&lt;br /&gt;
* Standardmäßig legt eclipse automatisch einen Breakpoint zu Beginn der &amp;quot;main&amp;quot; Funktion an.&lt;br /&gt;
* Über die Knöpfe &amp;quot;Resume&amp;quot;, &amp;quot;Break&amp;quot;, &amp;quot;Terminate&amp;quot; kann die Ausführung kontrolliert werden. Durch Doppelklick links neben eine Zeile werden Breakpoints gesetzt.&lt;br /&gt;
* Das ARM Plugin ermöglicht das Betrachten von Peripherie-Registern mit Trennung der einzelnen Felder. Dazu im Fenster &amp;quot;Peripherals&amp;quot; die Peripherie-Einheiten, deren Inhalt man betrachten möchte, auswählen. Im &amp;quot;Memory&amp;quot; Fenster werden dann die Register angezeigt. Die Ansicht wird immer nach jedem Ausführungsschritt aktualisiert, nicht immer sofort. Im Zweifelsfall also eine Zeile weiter laufen lassen, um die Ansicht zu aktualisieren.&lt;br /&gt;
* Ausgaben per &amp;quot;printf&amp;quot; erscheinen automatisch unten in der Konsole.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[STM32#Tutorials_f.C3.BCr_diverse_Tool-Kombinationen|Weitere Tutorials für STM32-IDE&#039;s]]&lt;br /&gt;
* [[ARM_GCC|Verwendung des GCC für Bare-Metal ARM]]&lt;br /&gt;
* [http://diller-technologies.de/stm32_wide.html Tutorial zur STM32 Programmierung]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=86547</id>
		<title>Entprellung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=86547"/>
		<updated>2015-01-08T08:05:27Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Problembeschreibung ==&lt;br /&gt;
Mechanische [[Schalter]] wie [[Drehgeber]] neigen beim Ein- und Ausschalten zum sogenannten &#039;&#039;&#039;Prellen&#039;&#039;&#039;, d.h sie schalten schnell mehrfach aus und ein, verursacht durch mechanische Vibrationen des Schaltkontaktes, sofern sie nicht dagegen geschützt sind. Vereinfacht dargestellt, sieht eine von einem Schalter oder Taster geschaltete Spannung beim Schalten wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Entprellen.png]]&lt;br /&gt;
&lt;br /&gt;
Für die Vermeidung bzw. Auswertung dieses unsauberen Signals gibt es verschiedene Ansätze:&lt;br /&gt;
&lt;br /&gt;
== Hardwareentprellung ==&lt;br /&gt;
&lt;br /&gt;
===Prellfreie Schalter===&lt;br /&gt;
&lt;br /&gt;
Für Spezialanwendungen hält die elektromechanische Industrie verschiedene Sonderkonstruktionen bereit, die saubere Schaltzustände nach Aussen generieren, indem sie entweder eine mechanische Dämpfung in Form eines selbsthemmenden Federmechanismus oder eine integrierte elektronische Signalverzögerung benutzen.&lt;br /&gt;
&lt;br /&gt;
Solche Systeme sind jedoch teuer und werden meist nur im Leistungsbereich eingesetzt.&lt;br /&gt;
&lt;br /&gt;
===Wechselschalter===&lt;br /&gt;
&lt;br /&gt;
Für die Entprellung von Wechselschaltern (engl. Double Throw Switch) kann ein klassisches RS-[[Flipflop]] genutzt werden. Bei dieser Variante werden neben zwei NAND-Gattern nur noch zwei Pull-Up Widerstände benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:NAND_debouncer.png|thumb|left|350px|&#039;&#039;&#039;Taster entprellen mit NAND-RS-Flipflop&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der gezeigten Schalterstellung liegt an der Position /S der Pegel 0 an. Damit ist das Flipflop gesetzt und der Ausgang auf dem Pegel 1. Schließt der Schalter zwischen den Kontakten 2 und 3, liegt an der Postion /R der Pegel 0 an. Dies bedeutet, dass der Ausgang des Flipflops auf den Pegel 0 geht. Sobald der Schalter von einem zum anderen Kontakt wechselt, beginnt er in der Regel zu prellen. Während des Prellens wechselt der Schalter zwischen den beiden Zuständen &amp;quot;Schalter berührt Kontakt&amp;quot; und &amp;quot;Schalter ist frei in der Luft&amp;quot;. Der Ausgang des Flipflops bleibt in dieser Prellzeit aber stabil, da der Schalter während des Prellens nie den gegenüberliegenden Kontakt berührt und das RS-Flipflop seinen Zustand allein halten kann. Die Prellzeit ist stark vom Schaltertyp abhängig und liegt zwischen 0,1 und 10ms. Die Dimensionierung der Widerstände ist relativ unkritisch. Als Richtwert können hier 100kOhm verwendet werden.&lt;br /&gt;
&lt;br /&gt;
====Wechselschalter ohne Flip-Flop====&lt;br /&gt;
&lt;br /&gt;
Wenn man mal gerade kein Flip-Flop zur Hand hat, kann man sich auch mit dieser Schaltung behelfen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:WechselEntprellC.PNG|thumb|left|350px|&#039;&#039;&#039;Wechsler entprellen mit Kondensator&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Funktionsweise:&lt;br /&gt;
Beim Umschalten wird der Kondensator immer sofort umgeladen.&lt;br /&gt;
Während der Kontakt prellt, befindet er sich in der Luft und hat keinerlei Verbindung. Während dieser Zeit übernimmt der Kondensator das halten des Pegels.&lt;br /&gt;
&lt;br /&gt;
Dimensionierung:&lt;br /&gt;
Ist der entprellte Taster an ein IC Angeschlossen, ist der &#039;&#039;Input Leakage Current&#039;&#039; der ausschlaggebende Strom. Falls weitere Ströme fließen sind diese mit zu berücksichtigen. Bei einem Mikrocontroller von Atmel sind 1µA typisch.&lt;br /&gt;
Es gilt:&lt;br /&gt;
:&amp;lt;math&amp;gt;\frac{dU}{dt} = \frac{I}{C}&amp;lt;/math&amp;gt;&lt;br /&gt;
Da eine Prellung ca. 10ms dauert und die Spannung in dieser Zeit beispielsweise um maximal 0,5V fallen soll kommt man auf folgende Kapazität:&lt;br /&gt;
:&amp;lt;math&amp;gt; C = \frac{I \cdot dt}{dU} = \frac{1\mu A \cdot 10ms}{0,5V} = 20nF &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um Stromspitzen zu verringern kann ein Widerstand mit eingefügt werden. Eine Zeitkonstante von 1µs bis 1ms scheint sinnvoll. Also 500 Ohm bis 500kOhm sind nutzbar, wobei bei niedrigem Widerstand die Stromspitzen höher sind, und bei 500kOhm der Pinstrom störend wird.&lt;br /&gt;
&lt;br /&gt;
===Einfacher Taster===&lt;br /&gt;
&lt;br /&gt;
Auch wenn das RS-Flipflop sehr effektiv ist, wird diese Variante der Entprellung nur selten angewendet. Grund dafür ist, dass in Schaltungen häufiger einfache Taster eingesetzt werden. Diese sind oft kleiner und preisgünstiger. Um einfache Taster (engl. Single Throw Switch) zu entprellen, kann ein einfacher RC-Tiefpass eingesetzt werden. Hierbei wird ein Kondensator über einen Widerstand je nach Schalterstellung auf- oder entladen. Das RC-Glied bildet einen Tiefpass, sodass die Spannung über den Kondensator nicht von einen Pegel auf den anderen springen kann.&lt;br /&gt;
&lt;br /&gt;
[[Bild:RC_debouncer.png|thumb|left|300px|Taster entprellen mit RC-Entpreller]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Entprellen1a.png|thumb|350px| Entstehender Spannungsverlauf]]&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
Wenn der Schalter geöffnet ist, lädt sich der Kondensator langsam über die beiden Widerstände R&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; und R&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; auf V&amp;lt;sub&amp;gt;cc&amp;lt;/sub&amp;gt; auf. Beim Erreichen der Umschaltschwelle springt der Ausgang auf den Pegel 0. Wird der Schalter geschlossen, entlädt sich der Kondensator langsam über den Widerstand R&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;. Demnach ändert sich der Ausgang des Inverters auf den Pegel 1. Während der Taster prellt, kann sich die Spannung über dem Kondensator nicht sprunghaft ändern, da das Auf- und Entladen eher langsam über die Widerstände erfolgt. Außerdem sind die Schaltschwellen für den Übergang LOW-&amp;gt;HIGH und HIGH-&amp;gt;LOW stark verschieden (Hysterese, siehe Artikel [[Schmitt-Trigger]]). Bei richtiger Dimensionierung der Bauelemente wird somit der Ausgang des Inverters prellfrei.&lt;br /&gt;
&lt;br /&gt;
Zu beachten ist, dass der Inverter &#039;&#039;&#039;unbedingt&#039;&#039;&#039; einer mit [[Schmitt-Trigger]]-Eingängen sein muss, weil bei Standard-Logikeingängen im Bereich von üblicherweise 0,8V - 2,0V der Ausgang nicht definiert ist. Als Inverter kann zum Beispiel der 74HC14 oder der CD40106 (pinkompatibel) eingesetzt werden. Alternativ kann auch ein CD4093 eingesetzt werden. Bei dem CD4093 handelt es sich um NAND-Gatter mit Schmitt-Trigger-Eingängen. Um aus einem NAND-Gatter einen Inverter zu machen, müssen einfach nur die beiden Eingänge verbunden werden oder ein Eingang fest auf HIGH gelegt werden.&lt;br /&gt;
&lt;br /&gt;
Für eine geeignete Dimensionierung muss man etwas mit den Standardformeln für einen Kondensator jonglieren. Die Spannung über den Kondensator beim Entladen berechnet sich nach:&lt;br /&gt;
:&amp;lt;math&amp;gt;U_C(t) = U_0 \cdot e^{\frac{-t}{R_2 C_1}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit der Ausgang des Inverters stabil ist, muss die Spannung über den Kondensator und damit die Spannung am Eingang des Inverters über der Spannung bleiben, bei welcher der Inverter umschaltet. Diese Schwellwertspannung ist genau die zeitabhängige Spannung über den Kondensator.&lt;br /&gt;
:&amp;lt;math&amp;gt;U_C(t)\!\ = U_{th}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch Umstellen der Formel ergibt sich nun:&lt;br /&gt;
:&amp;lt;math&amp;gt;R_2=\frac{-t}{C_1 \cdot ln\left(\frac{U_{th}}{U_0} \right)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Taster prellt üblicherweise etwa 10ms. Zur Sicherheit kann bei der Berechnung des Widerstandes eine Prellzeit von 20ms angenommen werden. U_0 ist die Betriebsspannung also Vcc. Die Schwellwertspannung muss aus dem Datenblatt des eingesetzten Schmitt-Triggers abgelesen werden. Beim 74HC14 beträgt der gesuchte Wert 2,0V. Nimmt man für den Kondensator 1µF und beträgt die  Betriebsspannung 5V, ergibt sich für den Widerstand ein Wert von etwa 22kOhm.&lt;br /&gt;
&lt;br /&gt;
Wird der Schalter geöffnet, lädt sich der Kondensator nach folgender Formel auf:&lt;br /&gt;
:&amp;lt;math&amp;gt;U_C(t) = U_0 \cdot \left( 1-e^{\frac{-t}{(R_1+R_2)\cdot C_1}} \right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit U_th=U_C ergibt das Umstellen nach (R_1+R_2):&lt;br /&gt;
:&amp;lt;math&amp;gt;R_1+R_2 = \frac{-t}{C_1 \cdot ln\left(1-\frac{U_{th}}{U_0} \right)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Schwellspannung lässt sich aus dem Datenblatt ein Wert von 2,3V ablesen. Mit diesem Wert und den Annahmen von oben ergibt sich für R_1+R_2 ein Wert von 32kOhm. Somit ergibt sich für R_1 ein Wert von etwa 10kOhm.&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Beim 74LS14 von Hitachi z.&amp;amp;nbsp;B. sind die oberen und unteren Schaltschwellwerte unterschiedlich. Es muss darauf geachtet werden, dass U_{th} beim Entladen die untere Schwelle und U_{th} beim Laden die obere Schwelle einnimmt.&lt;br /&gt;
&lt;br /&gt;
== Softwareentprellung ==&lt;br /&gt;
&lt;br /&gt;
In den Zeiten der elektronischen Auswertung von Tastern und Schaltern ist das softwaretechnische Entprellen oft billiger, als die Benutzung eines teuren Schalters. Daher werden heute z.B. auch Computertastaturen nicht mehr mit prellarmen Tasten oder Entprellkondensatoren ausgestattet.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung des in den meisten Geräten ohnehin vorhandenen Mikrocontrollers z.B., kann man sich die zusätzliche Hardware sparen, da die Entprellung in Software praktisch genauso gut funktioniert. Dabei ist nur zu beachten, dass zusätzliche Rechenleistung und je nach Umsetzung auch einige Hardwareressourcen (z.B. Timer) benötigt werden.&lt;br /&gt;
&lt;br /&gt;
=== Flankenerkennung ===&lt;br /&gt;
Bei einem Taster gibt es insgesamt 4 theoretische Zustände:&lt;br /&gt;
&lt;br /&gt;
* 1. war nicht gedrückt und ist nicht gedrückt&lt;br /&gt;
* 2. war nicht gedrückt und ist gedrückt (steigende Flanke)&lt;br /&gt;
* 3. war gedrückt und ist immer noch gedrückt&lt;br /&gt;
* 4. war gedrückt und ist nicht mehr gedrückt (fallende Flanke)&lt;br /&gt;
&lt;br /&gt;
Diese einzelnen Zustände lassen sich jetzt bequem abfragen/durchlaufen. Die Entprellung geschieht dabei durch die ganze Laufzeit des Programms. Die Taster werden hierbei als Active-Low angeschlossen, um die internen Pull-Ups zu nutzen.&lt;br /&gt;
&lt;br /&gt;
Diese Routine gibt für den Zustand &amp;quot;steigende Flanke&amp;quot; den Wert &amp;quot;1&amp;quot; zurück, sonst &amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define TASTERPORT PINC&lt;br /&gt;
#define TASTERBIT PINC1&lt;br /&gt;
&lt;br /&gt;
char taster(void)&lt;br /&gt;
{&lt;br /&gt;
    static unsigned char zustand;&lt;br /&gt;
    char rw = 0;&lt;br /&gt;
&lt;br /&gt;
    if(zustand == 0 &amp;amp;&amp;amp; !(TASTERPORT &amp;amp; (1&amp;lt;&amp;lt;TASTERBIT)))   //Taster wird gedrueckt (steigende Flanke)&lt;br /&gt;
    {&lt;br /&gt;
        zustand = 1;&lt;br /&gt;
        rw = 1;&lt;br /&gt;
    }&lt;br /&gt;
    else if (zustand == 1 &amp;amp;&amp;amp; !(TASTERPORT &amp;amp; (1&amp;lt;&amp;lt;TASTERBIT)))   //Taster wird gehalten&lt;br /&gt;
    {&lt;br /&gt;
         zustand = 2;&lt;br /&gt;
         rw = 0;&lt;br /&gt;
    }&lt;br /&gt;
    else if (zustand == 2 &amp;amp;&amp;amp; (TASTERPORT &amp;amp; (1&amp;lt;&amp;lt;TASTERBIT)))   //Taster wird losgelassen (fallende Flanke)&lt;br /&gt;
    {&lt;br /&gt;
        zustand = 3;&lt;br /&gt;
        rw = 0;&lt;br /&gt;
    }&lt;br /&gt;
    else if (zustand == 3 &amp;amp;&amp;amp; (TASTERPORT &amp;amp; (1&amp;lt;&amp;lt;TASTERBIT)))   //Taster losgelassen&lt;br /&gt;
    {&lt;br /&gt;
        zustand = 0;&lt;br /&gt;
        rw = 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return rw;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Erweiterung, damit beliebig lange das Halten einer Taste erkannt wird kann man ganz einfach so implementieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    // zustand kann entweder zum ersten mal als gehalten detektiert werden oder aber jedes weitere mal&lt;br /&gt;
    else if (((zustand == 1) || (zustand == 2)) &amp;amp;&amp;amp; !(TASTERPORT &amp;amp; (1&amp;lt;&amp;lt;TASTERBIT)))   //Taster wird gehalten&lt;br /&gt;
    {&lt;br /&gt;
         zustand = 2;&lt;br /&gt;
         rw = 0;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Warteschleifen-Verfahren ===&lt;br /&gt;
&lt;br /&gt;
Soll nun mit einem Mikrocontroller gezählt werden, wie oft ein Kontakt oder ein Relais geschaltet wird, muss das Prellen des Kontaktes exakt berücksichtigt - und von einem gewollten Mehrfachschalten abgegrenzt werden, da sonst  möglicherweise Fehlimpulse gezählt- oder andererseits echte Schaltvorgänge übersprungen werden. Dies muss beim Schreiben des Programms hinsichtlich des Abtastens des Kontaktes unbedingt Rechnung getragen werden.&lt;br /&gt;
&lt;br /&gt;
Beim folgenden einfachen Beispiel für eine Entprellung ist zu beachten, dass der AVR im Falle eines Tastendrucks 200ms wartet, also brach liegt. Bei zeitkritischen Anwendungen sollte man ein anderes Verfahren nutzen (z.&amp;amp;nbsp;B. Abfrage der Tastenzustände in einer Timer-Interrupt-Service-Routine).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;inttypes.h&amp;gt;&lt;br /&gt;
#ifndef F_CPU&lt;br /&gt;
#warning &amp;quot;F_CPU war noch nicht definiert, wird nun mit 3686400 definiert&amp;quot;&lt;br /&gt;
#define F_CPU 3686400UL     /* Quarz mit 3.6864 Mhz  */&lt;br /&gt;
#endif&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;     /* bei alter avr-libc: #include &amp;lt;avr/delay.h&amp;gt; */      &lt;br /&gt;
&lt;br /&gt;
/* Einfache Funktion zum Entprellen eines Tasters */&lt;br /&gt;
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)&lt;br /&gt;
{&lt;br /&gt;
    if ( !(*port &amp;amp; (1 &amp;lt;&amp;lt; pin)) )&lt;br /&gt;
    {&lt;br /&gt;
        /* Pin wurde auf Masse gezogen, 100ms warten   */&lt;br /&gt;
        _delay_ms(50);   // Maximalwert des Parameters an _delay_ms &lt;br /&gt;
        _delay_ms(50);   // beachten, vgl. Dokumentation der avr-libc&lt;br /&gt;
        if ( *port &amp;amp; (1 &amp;lt;&amp;lt; pin) )&lt;br /&gt;
        {&lt;br /&gt;
            /* Anwender Zeit zum Loslassen des Tasters geben */&lt;br /&gt;
            _delay_ms(50);&lt;br /&gt;
            _delay_ms(50); &lt;br /&gt;
            return 1;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
    DDRB &amp;amp;= ~( 1 &amp;lt;&amp;lt; PB0 );        /* PIN PB0 auf Eingang Taster)  */&lt;br /&gt;
    PORTB |= ( 1 &amp;lt;&amp;lt; PB0 );        /* Pullup-Widerstand aktivieren */&lt;br /&gt;
    ...&lt;br /&gt;
    if (debounce(&amp;amp;PINB, PB0))&lt;br /&gt;
    {&lt;br /&gt;
        /* Falls Taster an PIN PB0 gedrueckt     */&lt;br /&gt;
        /* LED an Port PD7 an- bzw. ausschalten: */&lt;br /&gt;
        PORTD = PORTD ^ ( 1 &amp;lt;&amp;lt; PD7 );&lt;br /&gt;
    }&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die obige Routine hat leider mehrere Nachteile:&lt;br /&gt;
* sie detektiert nur das Loslassen (unergonomisch)&lt;br /&gt;
* sie verzögert die Mainloop immer um 100ms bei gedrückter Taste&lt;br /&gt;
* sie verliert Tastendrücke, je mehr die Mainloop zu tun hat.&lt;br /&gt;
&lt;br /&gt;
Eine ähnlich einfach zu benutzende Routine, aber ohne all diese Nachteile findet sich im Forenthread&lt;br /&gt;
[http://www.mikrocontroller.net/topic/164194#new Entprellung für Anfänger]&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;DEBOUNCE&#039;&#039; Befehl in dem BASIC-Dialekt BASCOM für AVR ist ebenfalls nach dem Warteschleifen-Verfahren programmiert. Die Wartezeit beträgt standardmäßig 25 ms, kann aber vom Anwender überschrieben werden. Vgl.  [http://avrhelp.mcselec.com/bascom-avr.html?DEBOUNCE BASCOM Online-Manual zu DEBOUNCE].&lt;br /&gt;
&lt;br /&gt;
Eine C-Implementierung für eine Tastenabfrage mit Warteschleife ist im Artikel [[AVR-GCC-Tutorial#IO-Register_als_Parameter_und_Variablen|AVR-GCC-Tutorial: IO-Register als Parameter und Variablen]] angeben.&lt;br /&gt;
&lt;br /&gt;
Der Nachteil dieses Verfahrens ist, dass der Controller durch die Warteschleife blockiert wird. Günstiger ist die Implementierung mit einem Timer-Interrupt.&lt;br /&gt;
&lt;br /&gt;
==== Warteschleifenvariante mit Maske und Pointer (nach Christian Riggenbach) ====&lt;br /&gt;
&lt;br /&gt;
Hier eine weitere Funktion, um Taster zu entprellen: Durch den zusätzlichen Code kann eine Entprellzeit von durchschnittlich 1-3ms (mindestens 8*150µs = 1ms) erreicht werden. Grundsätzlich prüft die Funktion den Pegel der Pins auf einem bestimmten Port. Wenn die/der Pegel 8 Mal konstant war, wird die Schleife verlassen. Diese Funktion kann sehr gut eingesetzt werden, um in einer Endlosschleife Taster anzufragen, da sie, wie erwähnt, eine kurze Wartezeit hat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void entprellung( volatile uint8_t *port, uint8_t maske ) {&lt;br /&gt;
  uint8_t   port_puffer;&lt;br /&gt;
  uint8_t   entprellungs_puffer;&lt;br /&gt;
&lt;br /&gt;
  for( entprellungs_puffer=0 ; entprellungs_puffer!=0xff ; ) {&lt;br /&gt;
    entprellungs_puffer&amp;lt;&amp;lt;=1;&lt;br /&gt;
    port_puffer = *port;&lt;br /&gt;
    _delay_us(150);&lt;br /&gt;
    if( (*port &amp;amp; maske) == (port_puffer &amp;amp; maske) )&lt;br /&gt;
      entprellungs_puffer |= 0x01;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion wird wie folgt aufgerufen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  // Bugfix 20100414&lt;br /&gt;
  // http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_port_pass&lt;br /&gt;
  entprellung( &amp;amp;PINB, (1&amp;lt;&amp;lt;PINB2) ); // ggf. Prellen abwarten &lt;br /&gt;
  if( PINB &amp;amp; (1&amp;lt;&amp;lt;PINB2) )           // dann stabilen Wert einlesen&lt;br /&gt;
  {&lt;br /&gt;
    // mach was&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    // mach was anderes&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Als Maske kann ein beliebiger Wert übergeben werden. Sie verhindert, dass nichtverwendete Taster die Entprellzeit negativ beeinflussen.&lt;br /&gt;
&lt;br /&gt;
==== Debounce-Makro von Peter Dannegger ====&lt;br /&gt;
&lt;br /&gt;
Peter Dannegger hat in [http://www.mikrocontroller.net/topic/164194#1566921 &amp;quot;Entprellen für Anfänger&amp;quot;] folgende vereinfachtes Entprellverfahren beschrieben. Das Makro arbeitet in der Originalversion mit &#039;&#039;active low&#039;&#039; geschalteten Tastern, kann aber einfach für  &#039;&#039;active high&#039;&#039; geschaltete Taster angepasst werden ([[Pollin Funk-AVR-Evaluationsboard#Tasty Reloaded|Tasty Reloaded]]). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/************************************************************************/&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/*                      Not so powerful Debouncing Example              */&lt;br /&gt;
/*                      No Interrupt needed                             */&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/*              Author: Peter Dannegger                                 */&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/************************************************************************/&lt;br /&gt;
// Target: ATtiny13&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#define F_CPU 9.6e6&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define debounce( port, pin )                                         \&lt;br /&gt;
({                                                                    \&lt;br /&gt;
  static uint8_t flag = 0;     /* new variable on every macro usage */  \&lt;br /&gt;
  uint8_t i = 0;                                                      \&lt;br /&gt;
                                                                      \&lt;br /&gt;
  if( flag ){                  /* check for key release: */           \&lt;br /&gt;
    for(;;){                   /* loop ... */                         \&lt;br /&gt;
      if( !(port &amp;amp; 1&amp;lt;&amp;lt;pin) ){  /* ... until key pressed or ... */     \&lt;br /&gt;
        i = 0;                 /* 0 = bounce */                       \&lt;br /&gt;
        break;                                                        \&lt;br /&gt;
      }                                                               \&lt;br /&gt;
      _delay_us( 98 );         /* * 256 = 25ms */                     \&lt;br /&gt;
      if( --i == 0 ){          /* ... until key &amp;gt;25ms released */     \&lt;br /&gt;
        flag = 0;              /* clear press flag */                 \&lt;br /&gt;
        i = 0;                 /* 0 = key release debounced */        \&lt;br /&gt;
        break;                                                        \&lt;br /&gt;
      }                                                               \&lt;br /&gt;
    }                                                                 \&lt;br /&gt;
  }else{                       /* else check for key press: */        \&lt;br /&gt;
    for(;;){                   /* loop ... */                         \&lt;br /&gt;
      if( (port &amp;amp; 1&amp;lt;&amp;lt;pin) ){   /* ... until key released or ... */    \&lt;br /&gt;
        i = 0;                 /* 0 = bounce */                       \&lt;br /&gt;
        break;                                                        \&lt;br /&gt;
      }                                                               \&lt;br /&gt;
      _delay_us( 98 );         /* * 256 = 25ms */                     \&lt;br /&gt;
      if( --i == 0 ){          /* ... until key &amp;gt;25ms pressed */      \&lt;br /&gt;
        flag = 1;              /* set press flag */                   \&lt;br /&gt;
        i = 1;                 /* 1 = key press debounced */          \&lt;br /&gt;
        break;                                                        \&lt;br /&gt;
      }                                                               \&lt;br /&gt;
    }                                                                 \&lt;br /&gt;
  }                                                                   \&lt;br /&gt;
  i;                           /* return value of Macro */            \&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
   Testapplication&lt;br /&gt;
 */&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  DDRB  &amp;amp;= ~(1&amp;lt;&amp;lt;PB0);&lt;br /&gt;
  PORTB |=   1&amp;lt;&amp;lt;PB0;&lt;br /&gt;
  DDRB  |=   1&amp;lt;&amp;lt;PB2;&lt;br /&gt;
  DDRB  &amp;amp;= ~(1&amp;lt;&amp;lt;PB1);&lt;br /&gt;
  PORTB |=   1&amp;lt;&amp;lt;PB1;&lt;br /&gt;
  DDRB  |=   1&amp;lt;&amp;lt;PB3;&lt;br /&gt;
  for(;;){&lt;br /&gt;
    if( debounce( PINB, PB1 ) )&lt;br /&gt;
      PORTB ^= 1&amp;lt;&amp;lt;PB2;&lt;br /&gt;
    if( debounce( PINB, PB0 ) )&lt;br /&gt;
      PORTB ^= 1&amp;lt;&amp;lt;PB3;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das Makro für die gleiche Taste (Pin) an mehreren Stellen aufgerufen werden soll, muss eine Funktion angelegt werden, damit beide Aufrufe an die gleiche Zustandsvariable &#039;&#039;flag&#039;&#039; auswerten [http://www.mikrocontroller.net/topic/195914#1918727]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hilfsfunktion&lt;br /&gt;
uint8_t debounce_C1( void )&lt;br /&gt;
{&lt;br /&gt;
  return debounce(PINC, PC1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Beispielanwendung&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  DDRB  |=   1&amp;lt;&amp;lt;PB2;&lt;br /&gt;
  DDRB  |=   1&amp;lt;&amp;lt;PB3;&lt;br /&gt;
  DDRC  &amp;amp;= ~(1&amp;lt;&amp;lt;PC1);&lt;br /&gt;
  PORTC |=   1&amp;lt;&amp;lt;PC1; // Pullup für Taster&lt;br /&gt;
&lt;br /&gt;
  for(;;){&lt;br /&gt;
    if( debounce_C1() )  // nicht: debounce(PINC, PC1)&lt;br /&gt;
      PORTB ^= 1&amp;lt;&amp;lt;PB2;&lt;br /&gt;
    if( debounce_C1() )  // nicht: debounce(PINC, PC1)&lt;br /&gt;
      PORTB ^= 1&amp;lt;&amp;lt;PB3;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Timer-Verfahren (nach Peter Dannegger) ===&lt;br /&gt;
&lt;br /&gt;
==== Grundroutine (AVR Assembler) ====&lt;br /&gt;
&lt;br /&gt;
Siehe dazu: [http://www.mikrocontroller.net/forum/read-4-20435.html#new Forum] &lt;br /&gt;
&lt;br /&gt;
Vorteile&lt;br /&gt;
* besonders kurzer Code&lt;br /&gt;
* schnell&lt;br /&gt;
&lt;br /&gt;
Außerdem können 8 Tasten (aktiv low) gleichzeitig bearbeitet werden, es dürfen also&lt;br /&gt;
alle exakt zur selben Zeit gedrückt werden. Andere Routinen können z.&amp;amp;nbsp;B. nur eine Taste verarbeiten, d.h. die zuerst oder zuletzt gedrückte gewinnt, oder es kommt Unsinn heraus.&lt;br /&gt;
&lt;br /&gt;
Die eigentliche Einlese- und Entprellroutine ist nur 8 Instruktionen&lt;br /&gt;
kurz. Der entprellte Tastenzustand ist im Register &#039;&#039;key_state&#039;&#039;. Mit nur 2 weiteren Instruktionen wird dann der Wechsel von &#039;&#039;Taste offen&#039;&#039; zu&lt;br /&gt;
&#039;&#039;Taste gedrückt&#039;&#039; erkannt und im Register &#039;&#039;key_press&#039;&#039; abgelegt. Im Beispielcode werden dann damit 8 LEDs ein- und ausgeschaltet. Jede Taste entspricht einem Bit in den Registern, d.h. die Verarbeitung erfolgt bitweise mit logischen Operationen. Zum Verständnis empfiehlt es sich daher, die Logikgleichungen mit Gattern für ein Bit = eine Taste aufzumalen. Die Register kann man sich als Flipflops denken, die mit der Entprellzeit als Takt arbeiten. D.h. man kann das auch so z.&amp;amp;nbsp;B. in einem GAL22V10 realisieren.&lt;br /&gt;
&lt;br /&gt;
Als Kommentar sind neben den einzelnen Instruktionen alle 8 möglichen&lt;br /&gt;
Kombinationen der 3 Signale dargestellt.&lt;br /&gt;
&lt;br /&gt;
Beispielcode für AVR (Assembler):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
.nolist&lt;br /&gt;
.include &amp;quot;c:\avr\inc\1200def.inc&amp;quot;&lt;br /&gt;
.list&lt;br /&gt;
.def  save_sreg         = r0&lt;br /&gt;
.def  iwr0              = r1&lt;br /&gt;
.def  iwr1              = r2&lt;br /&gt;
&lt;br /&gt;
.def  key_old           = r3&lt;br /&gt;
.def  key_state         = r4&lt;br /&gt;
.def  key_press         = r5&lt;br /&gt;
&lt;br /&gt;
.def  leds              = r16&lt;br /&gt;
.def  wr0               = r17&lt;br /&gt;
&lt;br /&gt;
.equ  key_port          = pind&lt;br /&gt;
.equ  led_port          = portb&lt;br /&gt;
&lt;br /&gt;
      rjmp   init&lt;br /&gt;
.org OVF0addr		;timer interrupt 24ms&lt;br /&gt;
      in     save_sreg, SREG&lt;br /&gt;
get8key:                               ;/old      state     iwr1      iwr0&lt;br /&gt;
      mov    iwr0, key_old             ;00110011  10101010            00110011&lt;br /&gt;
      in     key_old, key_port         ;11110000&lt;br /&gt;
      eor    iwr0, key_old             ;                              11000011&lt;br /&gt;
      com    key_old                   ;00001111&lt;br /&gt;
      mov    iwr1, key_state           ;                    10101010&lt;br /&gt;
      or     key_state, iwr0           ;          11101011&lt;br /&gt;
      and    iwr0, key_old             ;                              00000011&lt;br /&gt;
      eor    key_state, iwr0           ;          11101000&lt;br /&gt;
      and    iwr1, iwr0                ;                    00000010&lt;br /&gt;
      or     key_press, iwr1           ;store key press detect&lt;br /&gt;
;&lt;br /&gt;
;			insert other timer functions here&lt;br /&gt;
;&lt;br /&gt;
      out    SREG, save_sreg&lt;br /&gt;
      reti&lt;br /&gt;
;-------------------------------------------------------------------------&lt;br /&gt;
init:&lt;br /&gt;
      ldi    wr0, 0xFF&lt;br /&gt;
      out    ddrb, wr0&lt;br /&gt;
      ldi    wr0, 1&amp;lt;&amp;lt;CS02 | 1&amp;lt;&amp;lt;CS00    ;divide by 1024 * 256&lt;br /&gt;
      out    TCCR0, wr0&lt;br /&gt;
      ldi    wr0, 1&amp;lt;&amp;lt;TOIE0             ;enable timer interrupt&lt;br /&gt;
      out    TIMSK, wr0&lt;br /&gt;
&lt;br /&gt;
      clr    key_old&lt;br /&gt;
      clr    key_state&lt;br /&gt;
      clr    key_press&lt;br /&gt;
      ldi    leds, 0xFF&lt;br /&gt;
main: cli&lt;br /&gt;
      eor    leds, key_press           ;toggle LEDs&lt;br /&gt;
      clr    key_press                 ;clear, if key press action done&lt;br /&gt;
      sei&lt;br /&gt;
      out    led_port, leds&lt;br /&gt;
      rjmp   main&lt;br /&gt;
;-------------------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Komfortroutine (C für AVR) ====&lt;br /&gt;
&lt;br /&gt;
Siehe dazu: [http://www.mikrocontroller.net/forum/read-4-310276.html Forum]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung&#039;&#039;&#039; Wenn statt active-low (Ruhezustand High) active-high (Ruhezustand Low) verwendet wird muss eine Zeile geändert werden siehe:&lt;br /&gt;
[http://www.mikrocontroller.net/forum/read-4-310276.html gesamter Beitrag im Forum], &lt;br /&gt;
[http://www.mikrocontroller.net/topic/48465#606555 Stelle 1 im Beitrag], ([http://www.mikrocontroller.net/topic/48465#2306398 Stelle 2 im Beitrag] muss *nicht* geändert werden, da hier die Polarität gar keinen Einfluß hat).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung 2&#039;&#039;&#039; Zur Initialisierung siehe [http://www.mikrocontroller.net/topic/48465#3572793 Forum]&lt;br /&gt;
&lt;br /&gt;
Funktionsprinzip wie oben plus zusätzliche Features:  &lt;br /&gt;
* Kann Tasten sparen durch unterschiedliche Aktionen bei kurzem oder langem Drücken&lt;br /&gt;
* Wiederholfunktion, z.&amp;amp;nbsp;B. für die Eingabe von Werten&lt;br /&gt;
&lt;br /&gt;
Das Programm ist für avr-gcc/avr-libc geschrieben, kann aber mit ein paar Anpassungen auch mit anderen Compilern und Mikrocontrollern verwendet werden. Eine Portierung für den AT91SAM7 findet man [http://www.google.com/codesearch?q=show:ac2viP-2E2Y:pzkOO5QRsoc:RPICuprYy-A&amp;amp;sa=N&amp;amp;cd=1&amp;amp;ct=rc&amp;amp;cs_p=svn://mikrocontroller.net/mp3dec/trunk&amp;amp;cs_f=keys.c#a0 hier] (aus dem Projekt [[ARM MP3/AAC Player]]).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/************************************************************************/&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/*                      Debouncing 8 Keys                               */&lt;br /&gt;
/*                      Sampling 4 Times                                */&lt;br /&gt;
/*                      With Repeat Function                            */&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/*              Author: Peter Dannegger                                 */&lt;br /&gt;
/*                      danni@specs.de                                  */&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/************************************************************************/&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef F_CPU&lt;br /&gt;
#define F_CPU           1000000                   // processor clock frequency&lt;br /&gt;
#warning kein F_CPU definiert&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
#define KEY_DDR         DDRB&lt;br /&gt;
#define KEY_PORT        PORTB&lt;br /&gt;
#define KEY_PIN         PINB&lt;br /&gt;
#define KEY0            0&lt;br /&gt;
#define KEY1            1&lt;br /&gt;
#define KEY2            2&lt;br /&gt;
#define ALL_KEYS        (1&amp;lt;&amp;lt;KEY0 | 1&amp;lt;&amp;lt;KEY1 | 1&amp;lt;&amp;lt;KEY2)&lt;br /&gt;
 &lt;br /&gt;
#define REPEAT_MASK     (1&amp;lt;&amp;lt;KEY1 | 1&amp;lt;&amp;lt;KEY2)       // repeat: key1, key2&lt;br /&gt;
#define REPEAT_START    50                        // after 500ms&lt;br /&gt;
#define REPEAT_NEXT     20                        // every 200ms&lt;br /&gt;
&lt;br /&gt;
#define LED_DDR         DDRA&lt;br /&gt;
#define LED_PORT        PORTA&lt;br /&gt;
#define LED0            0&lt;br /&gt;
#define LED1            1&lt;br /&gt;
#define LED2            2&lt;br /&gt;
 &lt;br /&gt;
volatile uint8_t key_state;                                // debounced and inverted key state:&lt;br /&gt;
                                                  // bit = 1: key pressed&lt;br /&gt;
volatile uint8_t key_press;                                // key press detect&lt;br /&gt;
 &lt;br /&gt;
volatile uint8_t key_rpt;                                  // key long press and repeat&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
ISR( TIMER0_OVF_vect )                            // every 10ms&lt;br /&gt;
{&lt;br /&gt;
  static uint8_t ct0, ct1, rpt;&lt;br /&gt;
  uint8_t i;&lt;br /&gt;
 &lt;br /&gt;
  TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5);  // preload for 10ms&lt;br /&gt;
 &lt;br /&gt;
  i = key_state ^ ~KEY_PIN;                       // key changed ?&lt;br /&gt;
  ct0 = ~( ct0 &amp;amp; i );                             // reset or count ct0&lt;br /&gt;
  ct1 = ct0 ^ (ct1 &amp;amp; i);                          // reset or count ct1&lt;br /&gt;
  i &amp;amp;= ct0 &amp;amp; ct1;                                 // count until roll over ?&lt;br /&gt;
  key_state ^= i;                                 // then toggle debounced state&lt;br /&gt;
  key_press |= key_state &amp;amp; i;                     // 0-&amp;gt;1: key press detect&lt;br /&gt;
 &lt;br /&gt;
  if( (key_state &amp;amp; REPEAT_MASK) == 0 )            // check repeat function&lt;br /&gt;
     rpt = REPEAT_START;                          // start delay&lt;br /&gt;
  if( --rpt == 0 ){&lt;br /&gt;
    rpt = REPEAT_NEXT;                            // repeat delay&lt;br /&gt;
    key_rpt |= key_state &amp;amp; REPEAT_MASK;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
///////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
// check if a key has been pressed. Each pressed key is reported&lt;br /&gt;
// only once&lt;br /&gt;
//&lt;br /&gt;
uint8_t get_key_press( uint8_t key_mask )&lt;br /&gt;
{&lt;br /&gt;
  cli();                                          // read and clear atomic !&lt;br /&gt;
  key_mask &amp;amp;= key_press;                          // read key(s)&lt;br /&gt;
  key_press ^= key_mask;                          // clear key(s)&lt;br /&gt;
  sei();&lt;br /&gt;
  return key_mask;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
///////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
// check if a key has been pressed long enough such that the&lt;br /&gt;
// key repeat functionality kicks in. After a small setup delay&lt;br /&gt;
// the key is reported being pressed in subsequent calls&lt;br /&gt;
// to this function. This simulates the user repeatedly&lt;br /&gt;
// pressing and releasing the key.&lt;br /&gt;
//&lt;br /&gt;
uint8_t get_key_rpt( uint8_t key_mask )&lt;br /&gt;
{&lt;br /&gt;
  cli();                                          // read and clear atomic !&lt;br /&gt;
  key_mask &amp;amp;= key_rpt;                            // read key(s)&lt;br /&gt;
  key_rpt ^= key_mask;                            // clear key(s)&lt;br /&gt;
  sei();&lt;br /&gt;
  return key_mask;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
// check if a key is pressed right now&lt;br /&gt;
//&lt;br /&gt;
uint8_t get_key_state( uint8_t key_mask )&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  key_mask &amp;amp;= key_state;&lt;br /&gt;
  return key_mask;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
uint8_t get_key_short( uint8_t key_mask )&lt;br /&gt;
{&lt;br /&gt;
  cli();                                          // read key state and key press atomic !&lt;br /&gt;
  return get_key_press( ~key_state &amp;amp; key_mask );&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
///////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
uint8_t get_key_long( uint8_t key_mask )&lt;br /&gt;
{&lt;br /&gt;
  return get_key_press( get_key_rpt( key_mask ));&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  LED_PORT = 0xFF;&lt;br /&gt;
  LED_DDR = 0xFF;                     &lt;br /&gt;
&lt;br /&gt;
  // Configure debouncing routines&lt;br /&gt;
  KEY_DDR &amp;amp;= ~ALL_KEYS;                // configure key port for input&lt;br /&gt;
  KEY_PORT |= ALL_KEYS;                // and turn on pull up resistors&lt;br /&gt;
&lt;br /&gt;
  TCCR0 = (1&amp;lt;&amp;lt;CS02)|(1&amp;lt;&amp;lt;CS00);         // divide by 1024&lt;br /&gt;
  TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5);  // preload for 10ms&lt;br /&gt;
  TIMSK |= 1&amp;lt;&amp;lt;TOIE0;                   // enable timer interrupt&lt;br /&gt;
&lt;br /&gt;
  sei();&lt;br /&gt;
&lt;br /&gt;
  while(1){&lt;br /&gt;
    if( get_key_short( 1&amp;lt;&amp;lt;KEY1 ))&lt;br /&gt;
      LED_PORT ^= 1&amp;lt;&amp;lt;LED1;&lt;br /&gt;
 &lt;br /&gt;
    if( get_key_long( 1&amp;lt;&amp;lt;KEY1 ))&lt;br /&gt;
      LED_PORT ^= 1&amp;lt;&amp;lt;LED2;&lt;br /&gt;
 &lt;br /&gt;
    // single press and repeat&lt;br /&gt;
 &lt;br /&gt;
    if( get_key_press( 1&amp;lt;&amp;lt;KEY2 ) || get_key_rpt( 1&amp;lt;&amp;lt;KEY2 )){&lt;br /&gt;
      uint8_t i = LED_PORT;&lt;br /&gt;
 &lt;br /&gt;
      i = (i &amp;amp; 0x07) | ((i &amp;lt;&amp;lt; 1) &amp;amp; 0xF0);&lt;br /&gt;
      if( i &amp;lt; 0xF0 )&lt;br /&gt;
        i |= 0x08;&lt;br /&gt;
      LED_PORT = i;      &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das single-press-und-repeat-Beispiel geht nicht in jeder Beschaltung; folgendes Beispiel sollte universeller sein (einzelne LED an/aus):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// single press and repeat&lt;br /&gt;
if( get_key_press( 1&amp;lt;&amp;lt;KEY2 ) || get_key_rpt( 1&amp;lt;&amp;lt;KEY2 ))&lt;br /&gt;
    LED_PORT ^=0x08;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Funktionsweise =====&lt;br /&gt;
Der Code basiert auf 8 parallelen vertikalen Zählern, die über die Variablen ct0 und ct1 aufgebaut werden&lt;br /&gt;
&lt;br /&gt;
[[Bild:VertCount.png|framed|center|&#039;&#039;&#039;8 vertikale Zähler in 2 8-Bit Variablen&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
wobei jeweils ein Bit in ct0 mit dem gleichwertigen Bit in ct1 zusammengenommen einen 2-Bit-Zähler bildet.&lt;br /&gt;
Der Code der sich um die 8 Zähler kümmert, ist so geschrieben, daß er alle 8 Zähler gemeinsam parallel behandelt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  i = key_state ^ ~KEY_PIN;                       // key changed ?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
i enthält an dieser Stelle für jede Taste, die sich im Vergleich mit dem vorhergehenden entprellten Zustand (keystate) verändert hat, ein 1 Bit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  ct0 = ~( ct0 &amp;amp; i );                             // reset or count ct0&lt;br /&gt;
  ct1 = ct0 ^ (ct1 &amp;amp; i);                          // reset or count ct1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese beiden Anweisungen erniedrigen den 2-Bit Zähler ct0/ct1 für jedes Bit um 1, welches in i gesetzt ist. Liegt an der entsprechenden Stelle in i ein 0 Bit vor (keine Änderung des Zustands), so wird der Zähler ct0/ct1 für dieses Bit auf 1 gesetzt.&lt;br /&gt;
Der Grundzustand des Zählers ist als ct0 == 1 und ct1 == 1 (Wert 3). Der Zähler zählt daher mit jedem ISR Aufruf, bei dem die Taste im Vergleich zu keystate als verändert erkannt wurde&lt;br /&gt;
&lt;br /&gt;
   ct1   ct0&lt;br /&gt;
     1    1   // 3&lt;br /&gt;
     1    0   // 2&lt;br /&gt;
     0    1   // 1&lt;br /&gt;
     0    0   // 0&lt;br /&gt;
     1    1   // 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  i &amp;amp;= ct0 &amp;amp; ct1;                                 // count until roll over ?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in i bleibt nur dort ein 1-Bit erhalten, wo sowohl in ct1 als auch in ct0 ein 1 Bit vorgefunden wird, der betreffende Zähler also bis 3 zählen konnte. Durch die zusätzliche Verundung mit i wird der Fall abgefangen, dass ein konstanter Zählerwert von 3 in i ein 1 Bit hinterlässt. Im Endergebnis bedeutet dass, dass nur ein Zählerwechsel von 0 auf 3 zu einem 1 Bit an der betreffenden Stelle in i führt, aber auch nur dann, wenn in i an dieser Bitposition ebenfalls ein 1 Bit war (welches wiederrum deswegen auf 1 war, weil an diesem Eingabeport eine Veränderung zum letzten bekannten entprellten Zustand festgestellt wurde). Alles zusammengenommen heißt das, dass ein Tastendruck dann erkannt wird, wenn die Taste 4 mal hintereinander in einem anderen Zustand vorgefunden wurde als dem zuletzt bekannten entprellten Tastenzustand.&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle ist i daher ein Vektor von 8 Bits, von denen jedes einzelne der Bits darüber Auskunft gibt, ob die entsprechende Taste mehrmals hintereinander im selben Zustand angetroffen wurde, der nicht mit dem zuletzt bekannten Tastenzustand übereinstimmt. Ist das der Fall, dann wird eine entsprechende Veränderung des Tastenzustands in key_state registriert&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  key_state ^= i;                                 // then toggle debounced state&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
und wenn sich in key_state das entsprechende Bit von 0 auf 1 verändert hat, wird dieses Ereignis als &#039;Taste wurde niedergedrückt&#039; gewertet.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  key_press |= key_state &amp;amp; i;                     // 0-&amp;gt;1: key press detect&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist der Tasteneingang entprellt. Und zwar sowohl beim Drücken einer Taste als auch beim Loslassen (damit Tastenpreller beim Loslassen nicht mit dem Niederdrücken einer Taste verwechselt werden). Der weitere Code beschäftigt sich dann nur noch damit, diesen entprellten Tastenzustand weiter zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Der Codeteil sieht durch die Verwendung der vielen bitweisen Operationen relativ komplex aus. Behält man aber im Hinterkopf, dass einige der bitweisen wie ein &#039;paralles If&#039; gleichzeitig auf allen 8 Bits eingesetzt werden, dann vereinfacht sich vieles. Ein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    key_press |= key_state &amp;amp; i;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
ist nichts anderes als ein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    // teste ob Bit 0 sowohl in key_state als auch in i gesetzt ist&lt;br /&gt;
    // und setze Bit 0 in key_press, wenn das der Fall ist&lt;br /&gt;
    if( ( key_state &amp;amp; ( 1 &amp;lt;&amp;lt; 0 ) ) &amp;amp;&amp;amp;&lt;br /&gt;
        ( i &amp;amp; ( 1 &amp;lt;&amp;lt; 0 ) )&lt;br /&gt;
       key_press |= ( 1 &amp;lt;&amp;lt; 0 );&lt;br /&gt;
&lt;br /&gt;
    // Bit 1&lt;br /&gt;
    if( ( key_state &amp;amp; ( 1 &amp;lt;&amp;lt; 1 ) ) &amp;amp;&amp;amp;&lt;br /&gt;
        ( i &amp;amp; ( 1 &amp;lt;&amp;lt; 1 ) )&lt;br /&gt;
       key_press |= ( 1 &amp;lt;&amp;lt; 1 );&lt;br /&gt;
&lt;br /&gt;
    // Bit 2&lt;br /&gt;
    if( ( key_state &amp;amp; ( 1 &amp;lt;&amp;lt; 2 ) ) &amp;amp;&amp;amp;&lt;br /&gt;
        ( i &amp;amp; ( 1 &amp;lt;&amp;lt; 2 ) )&lt;br /&gt;
       key_press |= ( 1 &amp;lt;&amp;lt; 2 );&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
nur als wesentlich kompaktere Operation ausgeführt und für alle 8 Bits gleichzeitig.&lt;br /&gt;
Die Kürze und Effizienz dieser paar Codezeilen ergibt sich aus dem Umstand, dass jedes Bit in den Variablen für eine Taste steht und alle 8 (maximal möglichen) Tasten gleichzeitig die Operationen durchlaufen.&lt;br /&gt;
&lt;br /&gt;
===== Reduziert auf lediglich 1 Taste =====&lt;br /&gt;
Diskussionen im Forum zeigen immer wieder, dass viele eine Abneigung gegen diesen Code haben, weil er ihnen sehr kompliziert vorkommt.&lt;br /&gt;
&lt;br /&gt;
Der Code ist nicht leicht zu analysieren und er zieht alle Register dessen, was möglich ist, um sowohl Laufzeit als auch Speicherverbrauch einzusparen. Oft hört man auch das Argument: Ich benötige ja nur eine Entprellung für 1 Taste, gibt es da nichts Einfacheres?&lt;br /&gt;
&lt;br /&gt;
Hier ist die &#039;Langform&#039; des Codes, so wie man das für lediglich 1 Taste schreiben würde, wenn man exakt dasselbe Entprellverfahren einsetzen würde. Man sieht: Da ist keine Hexerei dabei: In key_state wird der letzte bekannte entprellte Zustand der Taste gehalten. Der Pin-Eingang wird mit diesem Zustand verglichen und wenn sich die beiden unterscheiden, dann wird ein Zähler heruntergezählt. Produziert dieses herunterzählen einen Unterlauf des Zählers, dann gilt die Taste als entprellt und wenn dann auch noch die Taste gerade gedrückt ist, dann wird dieses in key_press entsprechend vermerkt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
uint8_t key_state;&lt;br /&gt;
uint8_t key_counter;&lt;br /&gt;
volatile uint8_t key_press;&lt;br /&gt;
&lt;br /&gt;
ISR( ... Overflow ... )&lt;br /&gt;
{&lt;br /&gt;
  uint8_t input = KEY_PIN &amp;amp; ( 1 &amp;lt;&amp;lt; KEY0 );&lt;br /&gt;
&lt;br /&gt;
  if( input != key_state ) {&lt;br /&gt;
    key_counter--;&lt;br /&gt;
    if( key_counter == 0xFF ) {&lt;br /&gt;
      key_counter = 3;&lt;br /&gt;
      key_state = input;&lt;br /&gt;
      if( input )&lt;br /&gt;
        key_press = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
    key_counter = 3;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8_t get_key_press()&lt;br /&gt;
{&lt;br /&gt;
  uint8_t result;&lt;br /&gt;
&lt;br /&gt;
  cli();&lt;br /&gt;
  result = key_press;&lt;br /&gt;
  key_press = FALSE;&lt;br /&gt;
  sei();&lt;br /&gt;
&lt;br /&gt;
  return result;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der vollständige Entprellcode, wie weiter oben gelistet, besticht jetzt aber darin, dass er compiliert kleiner ist als diese anschaulichere Variante für lediglich 1 Taste. Und das bei gleichzeitig erhöhter Funktionalität. Denn zb. ein Autorepeat ist in diesem Code noch gar nicht eingebaut. Und spätestens wenn man dann eine 2.te Taste entprellen möchte, dann ist auch der SRAM-Speicherverbrauch dieser Langform höher als der des Originals für 8 Tasten. Daraus folgt: Selbst für lediglich 1 Taste ist die Originalroutine die bessere Wahl.&lt;br /&gt;
&lt;br /&gt;
Und wegen der Komplexität mal eine Frage: Sind Sie selbst in der Lage eine entsprechend effiziente sqrt() Funktion zu schreiben, wie die, die sie in der Standard-C-Bibliothek vorfinden? Nein? Dann dürften Sie eigentlich Ihrer Argumentation nach die Bibliotheksfunktion sqrt() nicht verwenden, sondern müssten sich statt dessen selbst eine Wurzel-Funktion schreiben.&lt;br /&gt;
&lt;br /&gt;
=== Selbstsättigender Filter (nach Jürgen Schuhmacher) ===&lt;br /&gt;
Durch die Nutzung der diskreten Signalanalyse in Software kann die Funktionalität einer einfachen Entprellung mit einem Widerstand, einem Kondensator und einem Schmitttrigger wie in Hardware nachgebildet werden, indem ein abstrakter IIR-Filter benutzt wird, der eine Kondensatorladekurve emuliert. Mit der Vorschrift Y(t) = k Y(t-1) + Input wird ein einfaches Filter erzeugt, dass dem Eingangswert träge folgt. Bei Überschreiten eines bestimmten Wertes erfolgt mit einer einfachen Abfrage das Schalten des Ausgangssignals.&lt;br /&gt;
&lt;br /&gt;
Für Assembler und VHDL bei FPGAs eignet sich aufgrund der leicht zu implementierenden binären Operationen folgende Darstellung mit einer Auflösung des Filterwertspeichers von nur 8 bit: Wert_Neu = Wert_Alt - Wert_Alt/16 + 16*(Taste = True). Der Filterwert bildet dann den gedämpften Verlauf des Eingangs (flankenverschliffen) ab und kann Prellen bis nahe an den Grenzbereich zum schnellen Tasten unterdrücken. Der Ausgangswert ist dann einfach das höchstwertige Bit des Filterwertes.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Entprellung mit IIR-Filter.gif]]&lt;br /&gt;
&lt;br /&gt;
Dazu muss das Signal des Tasters idealerweise um den Faktor 10-20 schneller abgetastet werden, als die höchste gewünschte Tippgeschwindigkeit vorgibt. Noch schneller abzutasten ist möglich, führt aber zu mehr Bedarf an Bits beim Filter. Die Schmittriggerfunktion kann dadurch gebildet werden, dass eine 1 am Ausgang bei z.B. Überschreiten einer 55% Grenze und eine 0 bei Unterschreitung der 45%-Grenze ausgeben wird. Im Zwischenbereich wird der alte Wert gehalten.&lt;br /&gt;
&lt;br /&gt;
=== Einfacher Mittelwertfilter (nach Lothar Miller) ===&lt;br /&gt;
Für digitale Schaltungen oder PLDs empfiehlt sich ein FIR-Filter mit aneinandergereihten FlipFlops. Man schiebt das Eingangssignal in eine FlipFlop-Kette und schaltet oberhalb der Mitte um:&lt;br /&gt;
&lt;br /&gt;
SignalInput -&amp;gt; FF1 -&amp;gt; FF2 -&amp;gt; FF3 -&amp;gt; FF4 -&amp;gt; FF5 -&amp;gt; FF6 -&amp;gt; FF7 -&amp;gt; FF8&lt;br /&gt;
&lt;br /&gt;
Wenn alle FFs = 1 (Summe der FFs=8) dann SignalOutput = 1&amp;lt;br /&amp;gt;&lt;br /&gt;
Wenn alle FFs = 0 (Summe der FFs=0) dann SignalOutput = 0&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren kann sehr einfach in Logik abgebildet werden, weil für die Berechnung des Ausgangs nur ein NOR bz. ein AND Gatter nötig ist.&lt;br /&gt;
&lt;br /&gt;
== Gegenüberstellung der Verfahren ==&lt;br /&gt;
* HW - &amp;quot;entprellte Schalter&amp;quot;: Sehr teuer, grosse Bauform, verschleissbelastet, geringe Haltbarkeit&lt;br /&gt;
* HW - &amp;quot;Umschalter&amp;quot; : benötigt aufwändigeren Schalter, benötigt Elektronik&lt;br /&gt;
* HW - &amp;quot;Umschalter ohne FF&amp;quot; : benötigt aufwändigeren Schalter und kleiner Kondensator&lt;br /&gt;
* HW - &amp;quot;Kondensatorentprellung&amp;quot; : benötigt etwas mehr Platz, kommt mit schlechten Schaltern zurecht&lt;br /&gt;
&lt;br /&gt;
* SW - Flankenverfahren:&lt;br /&gt;
* SW - Warteschleife: Durch die Warteschleifen eine nicht zu vernachlässigende Verzögerung im Code. Speziell wenn mehrere Tasten zu überwachen sind, nicht unproblematisch&lt;br /&gt;
* SW - Timer: Universalfunktionalität, die durch geringen Speicherverbrauch, geringen Rechenzeitverbrauch und gute Funktion besticht. Der &#039;Verbrauch&#039; eines Timers sieht auf den ersten Blick schlimmer aus, als er ist, denn in den meisten Programmen hat man sowieso einen Basistimer für die Zeitsteuerung des Programms im Einsatz, der für die Tastenentprellung mitbenutzt werden kann.&lt;br /&gt;
* SW - Filter: sehr geringer Platzbedarf in FPGAs, relativ gute Wirkung&lt;br /&gt;
* SW - Filter 2: sehr geringer Platzbedarf, gute Wirkung&lt;br /&gt;
&lt;br /&gt;
== Links zum Thema ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.edn.com/design/analog/4324067/Contact-debouncing-algorithm-emulates-Schmitt-trigger Contact-debouncing algorithm (Artikel)],  [http://www.edn.com/file/13370-70705di.pdf als PDF]&lt;br /&gt;
* [[AVR-Tutorial: Tasten]]&lt;br /&gt;
* [[AVR-GCC-Tutorial#.28Tasten-.29Entprellung|AVR-GCC-Tutorial Tastenentprellung]]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-4-20435.html Beitrag im Forum, AVR Assembler]&lt;br /&gt;
* [http://www.ganssle.com/debouncing.pdf A guide to debouncing (engl.), praktische Erläuterungen zum Entprellen in Soft- und Hardware]&lt;br /&gt;
* [http://www.pololu.com/docs/0J16/all Understanding Destructive LC Voltage Spikes]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR]]&lt;br /&gt;
[[Kategorie:Signalverarbeitung]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_USB-FS-Device_Lib&amp;diff=85648</id>
		<title>STM32 USB-FS-Device Lib</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_USB-FS-Device_Lib&amp;diff=85648"/>
		<updated>2014-11-10T13:20:34Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===STM32 USB-FS-Device Lib===&lt;br /&gt;
&lt;br /&gt;
Mit der &#039;&#039;STM32 USB-FS-Device Lib&#039;&#039; stellt ST C-Funktionen zur Benutzung der [[USB]]-Schnittstelle der STM32 µC zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Sie kann zusammen mit Beispielimplementationen verschiedener USB-Geräteklassen hier bei ST kostenlos heruntergeladen werden: &lt;br /&gt;
* [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Attachments/23342/STM32_USB-FS-Device_Lib_V3.3.0.zip STM32_USB-FS-Device_Lib_V3.3.0]&lt;br /&gt;
* [http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1743/PF258157?s_searchtype=keyword# STM32_USB-FS-Device_Lib_V4.0.0]&lt;br /&gt;
&lt;br /&gt;
Eine Beschreibung findet sich [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/CD00158241.pdf hier].&lt;br /&gt;
&lt;br /&gt;
==Virtual COM Port==&lt;br /&gt;
Für die allgemeine Kommunikation mit einem PC wird für die meisten Projekte ein Virtual COMPORT die geeignete Geräteklasse sein.&lt;br /&gt;
Auf PC Seite erscheint dabei nach Einstecken des STM32 in den USB Port ein weiterer COM Port im Gerätemanager, der von Applikationen genauso wie jeder reale COM Port verwendet werden kann. Wie der Zugriff auf µC-Seite aussieht sehen wir uns weiter unten an.&lt;br /&gt;
&lt;br /&gt;
===Die Beispielimplementierung===&lt;br /&gt;
ST liefert eine Beispielimplementierung für den einen Virtual Comport mit der USB-Lib mit. Um diese Nutzen zu können, muss das verwendete Evalboard einmal mit dem USB und einmal mit einem echten RS232 verbunden sein, da man zum Test Daten zwischen zwei Terminalprogrammen hin- und herschicken kann, eines mit dem Virtual COM Port und das andere mit dem &amp;quot;echten&amp;quot; COM Port verbunden.&lt;br /&gt;
&lt;br /&gt;
Da ich derzeit keinen weiteren COM Ports zur Verfügung hatte und ich gerne ein Beispiel wollte, das rein auf den USB-Port konzentriert ist, habe ich das Beispiel etwas modifiziert. In meinem Beispielprogramm sind alle USART Anteile entfernt, ebenso alle #ifdefs die sich auf ein bestimmtes EVAL-Board bzw. auf den STM32 in der Connectivity Line beziehen, welche einen USB-OnTheGo besitzt. Dadurch ist der Code jetzt deutlich leichter zu überschauen. (wenn ihr unbedingt einen STM32 aus der Connectivity Line nehmen wollt, dann quält euch durch das Orginalbeispiel.&lt;br /&gt;
&lt;br /&gt;
In der jetzigen Version schickt der µC jede Zeichenkette die ihm vom PC geschickt wird wieder an den selben COM Port zurück, aber in umgekehrter Zeichenfolge. (Zum Test empfehle ich [http://www.mikrocontroller.net/topic/26477 HTerm] Zumindest die in Crossworks enthaltene Terminal Emulation arbeitet nicht korrekt, daher besser nicht verwenden)&lt;br /&gt;
&lt;br /&gt;
Unter findet Ihr das Projekt zusammen mit einer CrossWorks Projektdatei [[Datei:ARM_USB_Test.zip]]. Voraussetzung zum Kompilieren ist folgende Verzeichnisstruktur&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
Stammverzeichnis&lt;br /&gt;
   |__ ARM_USB_Test&lt;br /&gt;
   | &lt;br /&gt;
   |__ ST_StandardLib    ( Standard Peripheral Libary ab Libraries)&lt;br /&gt;
   |        |&lt;br /&gt;
   |        |__ CMSIS&lt;br /&gt;
   |        |&lt;br /&gt;
   |        |__ STM32F10x_StdPeriph_Driver&lt;br /&gt;
   |         &lt;br /&gt;
   |___ ST_USB_LIB       (STM32_USB-FS-Device_Lib ab Libraries)&lt;br /&gt;
          |&lt;br /&gt;
          |__ inc&lt;br /&gt;
          |&lt;br /&gt;
          |__ src&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows Treiber für den Virtual COM Port ===&lt;br /&gt;
&lt;br /&gt;
Wie im Artikel [[Wieso braucht man überhaupt einen Treiber für einen Virtual Com port?]] diskutiert, läßt die Basiskonfiguration von Windows ziemlich zu wünschen übrig wenn es um Virtual COM Ports geht. Ohne ersichtlichen Grund wird diese Standardgeräteklasse nicht automatisch erkannt und unterstützt, sondern man benötigt einen passenden Treiber oder vielmehr die passen .inf-Datei.&lt;br /&gt;
&lt;br /&gt;
Da die entsprechende kostenlose .inf-Datei auf der ST-Seite nicht so einfach zu finden ist, kann sie hier [[Datei:stmcdc.inf]] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
Die STM32-CDC-Treiber sind WHQL Zertifiziert und über das Windows Update für die Versionen Windows 2000, XP (x86, x64), Vista (x86, x64) und 7 (x86, x64) erhältlich. Ansonsten kann der Treiber [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/DispForm.aspx?ID=18102&amp;amp;RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FUsing%20STM32F10x%20USB%20device%20with%20Windows%20Vista%20or%20Windows%207 hier] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
=== Schaltplan für diese Implementierung ===&lt;br /&gt;
[[Bild:STM32-USB-Schaltplan.png|thumb|Schaltplan]]&lt;br /&gt;
Für alle die die Schaltung nachbauen wollen hier der Schaltplan, der in meinem Lochrasteraufbau problemlos funktioniert. (Die SD-Card rechts hat natürlich nichts damit zu tun ;-)&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Beispielimplementierung==&lt;br /&gt;
&lt;br /&gt;
Um die Implementierung einfacher nachvollziehen zu können, hier ein Archiv [[Bild:CrossWorks_StandardLib_Setup.zip]] mit einer kompletten Arbeitsumgebung für Crossworks.&lt;br /&gt;
&lt;br /&gt;
Hier soll, wie ich Zeit dafür habe gezeigt werden welche der Funktionen und Dateien für uns interessant sind um eigene Funktionalität dort zu integrieren.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Escamoteur|Escamoteur]] 07:39, 27. Apr. 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:STM32]]&lt;br /&gt;
[[Kategorie:USB]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_USB-FS-Device_Lib&amp;diff=85646</id>
		<title>STM32 USB-FS-Device Lib</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_USB-FS-Device_Lib&amp;diff=85646"/>
		<updated>2014-11-10T13:17:59Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===STM32 USB-FS-Device Lib===&lt;br /&gt;
&lt;br /&gt;
Mit der &#039;&#039;STM32 USB-FS-Device Lib&#039;&#039; stellt ST C-Funktionen zur Benutzung der [[USB]]-Schnittstelle der STM32 µC zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Sie kann zusammen mit Beispielimplementationen verschiedener USB-Geräteklassen hier bei ST kostenlos heruntergeladen werden: &lt;br /&gt;
* [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Attachments/23342/STM32_USB-FS-Device_Lib_V3.3.0.zip STM32_USB-FS-Device_Lib_V3.3.0]&lt;br /&gt;
* [http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1743/PF258157?s_searchtype=keyword# STM32_USB-FS-Device_Lib_V4.0.0]&lt;br /&gt;
&lt;br /&gt;
Eine Beschreibung findet sich [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/CD00158241.pdf hier].&lt;br /&gt;
&lt;br /&gt;
==Virtual COM Port==&lt;br /&gt;
Für die allgemeine Kommunikation mit einem PC wird für die meisten Projekte ein Virtual COMPORT die geeignete Geräteklasse sein.&lt;br /&gt;
Auf PC Seite erscheint dabei nach Einstecken des STM32 in den USB Port ein weiterer COM Port im Gerätemanager, der von Applikationen genauso wie jeder reale COM Port verwendet werden kann. Wie der Zugriff auf µC-Seite aussieht sehen wir uns weiter unten an.&lt;br /&gt;
&lt;br /&gt;
===Die Beispielimplementierung===&lt;br /&gt;
ST liefert eine Beispielimplementierung für den einen Virtual Comport mit der USB-Lib mit. Um diese Nutzen zu können, muss das verwendete Evalboard einmal mit dem USB und einmal mit einem echten RS232 verbunden sein, da man zum Test Daten zwischen zwei Terminalprogrammen hin- und herschicken kann, eines mit dem Virtual COM Port und das andere mit dem &amp;quot;echten&amp;quot; COM Port verbunden.&lt;br /&gt;
&lt;br /&gt;
Da ich derzeit keinen weiteren COM Ports zur Verfügung hatte und ich gerne ein Beispiel wollte, das rein auf den USB-Port konzentriert ist, habe ich das Beispiel etwas modifiziert. In meinem Beispielprogramm sind alle USART Anteile entfernt, ebenso alle #ifdefs die sich auf ein bestimmtes EVAL-Board bzw. auf den STM32 in der Connectivity Line beziehen, welche einen USB-OnTheGo besitzt. Dadurch ist der Code jetzt deutlich leichter zu überschauen. (wenn ihr unbedingt einen STM32 aus der Connectivity Line nehmen wollt, dann quält euch durch das Orginalbeispiel.&lt;br /&gt;
&lt;br /&gt;
In der jetzigen Version schickt der µC jede Zeichenkette die ihm vom PC geschickt wird wieder an den selben COM Port zurück, aber in umgekehrter Zeichenfolge. (Zum Test empfehle ich [http://www.mikrocontroller.net/topic/26477 HTerm] Zumindest die in Crossworks enthaltene Terminal Emulation arbeitet nicht korrekt, daher besser nicht verwenden)&lt;br /&gt;
&lt;br /&gt;
Unter findet Ihr das Projekt zusammen mit einer CrossWorks Projektdatei [[Datei:ARM_USB_Test.zip]]. Voraussetzung zum Kompilieren ist folgende Verzeichnisstruktur&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
Stammverzeichnis&lt;br /&gt;
   |__ ARM_USB_Test&lt;br /&gt;
   | &lt;br /&gt;
   |__ ST_StandardLib    ( Standard Peripheral Libary ab Libraries)&lt;br /&gt;
   |        |&lt;br /&gt;
   |        |__ CMSIS&lt;br /&gt;
   |        |&lt;br /&gt;
   |        |__ STM32F10x_StdPeriph_Driver&lt;br /&gt;
   |         &lt;br /&gt;
   |___ ST_USB_LIB       (STM32_USB-FS-Device_Lib ab Libraries)&lt;br /&gt;
          |&lt;br /&gt;
          |__ inc&lt;br /&gt;
          |&lt;br /&gt;
          |__ src&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows Treiber für den Virtual COM Port ===&lt;br /&gt;
&lt;br /&gt;
Wie im Artikel [[Wieso braucht man überhaupt einen Treiber für einen Virtual Com port?]] diskutiert, läßt die Basiskonfiguration von Windows ziemlich zu wünschen übrig wenn es um Virtual COM Ports geht. Ohne ersichtlichen Grund wird diese Standardgeräteklasse nicht automatisch erkannt und unterstützt, sondern man benötigt einen passenden Treiber oder vielmehr die passen .inf-Datei.&lt;br /&gt;
&lt;br /&gt;
Da die entsprechende kostenlose .inf-Datei auf der ST-Seite nicht so einfach zu finden ist, kann sie hier [[Datei:stmcdc.inf]] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
Die STM32-CDC-Treiber sind WHQL Zertifiziert und über das Windows Update für die Versionen Windows 2000, XP (x86, x64), Vista (x86, x64) und 7 (x86, x64) erhältlich. Ansonsten kann der Treiber [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/DispForm.aspx?ID=18102&amp;amp;RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FUsing%20STM32F10x%20USB%20device%20with%20Windows%20Vista%20or%20Windows%207 hier] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
=== Schaltplan für diese Implementierung ===&lt;br /&gt;
[[Bild:STM32-USB-Schaltplan.png|thumb|Schaltplan]]&lt;br /&gt;
Für alle die die Schaltung nachbauen wollen hier der Schaltplan, der in meinem Lochrasteraufbau problemlos funktioniert. (Die SD-Card rechts hat natürlich nichts damit zu tun ;-)&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Beispielimplementierung==&lt;br /&gt;
&lt;br /&gt;
Um die Implementierung einfacher nachvollziehen zu können, hier ein Archiv [[Bild:CrossWorks_StandardLib_Setup.zip]] mit einer kompletten Arbeitsumgebung für Crossworks.&lt;br /&gt;
&lt;br /&gt;
Hier soll, wie ich Zeit dafür habe gezeigt werden welche der Funktionen und Dateien für uns interessant sind um eigene Funktionalität dort zu integrieren.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Escamoteur|Escamoteur]] 07:39, 27. Apr. 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:STM32][Kategorie:USB]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=USB_HID_Host_Treiber&amp;diff=84866</id>
		<title>USB HID Host Treiber</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=USB_HID_Host_Treiber&amp;diff=84866"/>
		<updated>2014-09-16T10:36:33Z</updated>

		<summary type="html">&lt;p&gt;Kichi: /* Alternativen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;USB HID Schnittstellen für Steuerungsaufgaben zu verwenden ist allgemein üblich in der Elektronik. Es gibt unzählige Mikrocontroller mit USB von einer ganzen Menge Hersteller, welche die notwendige Firmware schon mitbringen. Aber auf PC Seite ist es immer noch mit einigem Aufwand verbunden, wenn man den USB nutzen will. Sparen Sie sich die Mühe und verwenden Sie die AHID Bibliothek.&lt;br /&gt;
&lt;br /&gt;
===Funktionen===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AHid_Init():&#039;&#039;&#039; initialisiert den Treiber.&lt;br /&gt;
* &#039;&#039;&#039;AHid_Register():&#039;&#039;&#039; registriert die Schnittstelle.&lt;br /&gt;
* &#039;&#039;&#039;AHid_Write():&#039;&#039;&#039; schreibt Daten.&lt;br /&gt;
* &#039;&#039;&#039;AHid_Read():&#039;&#039;&#039; ließt Daten ein.&lt;br /&gt;
* &#039;&#039;&#039;AHid_Request():&#039;&#039;&#039; fordert einen Feature Report an.&lt;br /&gt;
* &#039;&#039;&#039;AHid_Attached():&#039;&#039;&#039; stellt Anschluß an den USB fest.&lt;br /&gt;
* &#039;&#039;&#039;AHid_Find():&#039;&#039;&#039; sucht die Schnittstelle am Bus.&lt;br /&gt;
* &#039;&#039;&#039;AHid_Flush():&#039;&#039;&#039; löscht die Datenpuffer.&lt;br /&gt;
* &#039;&#039;&#039;AHid_Info():&#039;&#039;&#039; zeigt Treiber-Infos an.&lt;br /&gt;
&lt;br /&gt;
===Konzept===&lt;br /&gt;
&lt;br /&gt;
Die Bibliothek wird durch einmaligen Aufruf der Funktion AHid_Init() zu Beginn initialisiert. Mit AHid_Register() erhält man Zugriff auf das gewünschte USB-Gerät. Die Funktion öffnet eine Schnittstelle für den Datentransfer.&lt;br /&gt;
&lt;br /&gt;
AHid_Write() dient zum Senden von Daten an das USB-Gerät. Hierbei wird ein Interrupt- oder Control-Transfer (Feature Report) verwendet (je nach Festlegung bei der Registrierung). Der Datenempfang erfolgt durch AHid_Read(). Bei Interrupt-Transfers wird hierfür ein eigener Thread gestartet, der fortlaufend die Schnittstelle auf ankommende Daten hin prüft. Sobald Daten vorliegen, wird an die Anwendung eine AHID_DATARECEIVED-Nachricht verschickt. Innerhalb der Nachrichtenschleife kann man dann auf diese Daten mit AHid_Read() zugreifen. Der Empfang von Feature Reports unterscheidet sich etwas von diesem Ablauf. Feature Reports müssen nämlich aktiv angefordert werden, was die Funktion AHid_Request() erledigt. Nach erfolgreichem Erhalt des Feature Reports wird wiederum eine AHID_DATARECEIVED-Nachricht verschickt und AHid_Read() erledigt dann den Rest. Durch dieses Konzept werden alle eingehenden Daten (unabhängig vom Transfertyp) an eine Stelle der Nachrichtenschleife transportiert. Das erleichtert das Erstellen einer Zustandsmaschine.&lt;br /&gt;
&lt;br /&gt;
Die Funktion AHid_Attached() stellt fest, ob das USB-Gerät überhaupt am Bus verfügbar ist und gibt einen entsprechenden Wert zurück. AHid_Find() macht in etwa das Gleiche. Die Funktion sucht das USB-Gerät und gibt über den Rückgabewert den entsprechenden Zustand aus. Mit der Funktion AHid_Flush() werden die internen Datenpuffer gelöscht. Das kann notwendig sein, falls z.B. das USB-Gerät vom Bus abgeklemmt wird, und man noch nicht ausgelesene Daten sicher löschen möchte. AHid_Info() hat im normalen Betrieb keine Funktion. Es zeigt lediglich ein paar Informationen über die AHID Bibliothek an.&lt;br /&gt;
&lt;br /&gt;
Die AHID Library ist eine &#039;&#039;&#039;Dynamic Link Library (DLL)&#039;&#039;&#039; und arbeitet mit verschiedenen Programmiersprachen zusammen. Sie steht als Download auf http://embedded24.net bereit.&lt;br /&gt;
&lt;br /&gt;
Beispiel-Anwendungen:&lt;br /&gt;
&lt;br /&gt;
* AHID Demo C++ (VS 2008)&lt;br /&gt;
* AHID Demo C# (VS 2010)&lt;br /&gt;
* AHID Demo VB (VS 2010)&lt;br /&gt;
* AHID Demo Matlab&lt;br /&gt;
* AHID Demo Scilab&lt;br /&gt;
* AHID Demo LabVIEW&lt;br /&gt;
&lt;br /&gt;
===Download===&lt;br /&gt;
&lt;br /&gt;
http://www.ahidlib.com&lt;br /&gt;
&lt;br /&gt;
===Diskussion===&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/210792&lt;br /&gt;
&lt;br /&gt;
===Kontakt===&lt;br /&gt;
&lt;br /&gt;
info(at)ahidlib.com&lt;br /&gt;
&lt;br /&gt;
===Alternativen===&lt;br /&gt;
Zu obigem Treiber gibt es u.a. folgende Alternativen, deren Sourcen frei zugänglich sind:&lt;br /&gt;
* GenericHID von Jan Axelson ([http://www.janaxelson.com/hidpage.htm#MyExampleCode Link]) -&amp;gt; C++, C#, VB&lt;br /&gt;
* HidLibrary von Mike O&#039;Brien ([https://github.com/mikeobrien/HidLibrary Link]) -&amp;gt; C#&lt;br /&gt;
* HidLibrary von jj-jabb ([https://github.com/jj-jabb/HidLibrary Link]) -&amp;gt; C# (Weiterentwicklung von Mike O&#039;Briens Version)&lt;br /&gt;
* HidLib von jj-jabb ([https://github.com/jj-jabb/HidLib Link]) -&amp;gt; C#&lt;br /&gt;
* HID USB Library von Florian Leitner ([http://www.florian-leitner.de/index.php/2007/08/03/hid-usb-driver-library/#download Link]) -&amp;gt; C#&lt;br /&gt;
* Generic HID USB class-library von Simon Inns ([http://www.waitingforfriday.com/index.php/Open_Source_Framework_for_USB_Generic_HID_devices_based_on_the_PIC18F_and_Windows#Files_for_download Link]) -&amp;gt; C#&lt;br /&gt;
* USB HID Component von wimar ([http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=18099 Link]) -&amp;gt; C#&lt;br /&gt;
* USBwisec von Bryan Batchelder ([http://sourceforge.net/projects/usbwisec/develop Link]) -&amp;gt; C#&lt;br /&gt;
* Raw HID von PJRC.COM ([http://www.pjrc.com/teensy/rawhid.html Link]) -&amp;gt; C&lt;br /&gt;
[[Kategorie:USB]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Schaltungssimulation&amp;diff=84752</id>
		<title>Schaltungssimulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Schaltungssimulation&amp;diff=84752"/>
		<updated>2014-09-04T08:32:57Z</updated>

		<summary type="html">&lt;p&gt;Kichi: Linkkorrektur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Analog==&lt;br /&gt;
Für Analogsimulation und Mixed-Mode (Digital/Analog) ist Spice State-of-the-art. Spice ist inzwischen von vielen Herstellern erhältlich.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://bwrc.eecs.berkeley.edu/classes/icbook/spice/ The Spice Page] des EECS Department of the University of California at Berkeley.&lt;br /&gt;
&lt;br /&gt;
===PSpice===&lt;br /&gt;
&lt;br /&gt;
http://www.orcad.com/products/orcad-ee-designer/overview&lt;br /&gt;
* http://www.flowcad.de/PSpice.htm (deutsche Produktbeschreibung vom Händler)&lt;br /&gt;
* nur für Windows&lt;br /&gt;
* kostenlos mit Größeneinschränkung&lt;br /&gt;
* Version 16.6 ist die aktuelle Version&lt;br /&gt;
* Einführungen&lt;br /&gt;
** http://www.flowcad.de/Schnellstart_PSpice_16_6.pdf&lt;br /&gt;
** http://people.fh-landshut.de/~wlf/Pspice/Einfuehrung/Einfuehrung.pdf&lt;br /&gt;
** http://www.elektronikschule.de/~krausg/ (links im Menü &amp;quot;Einstieg in PSpice leichtgemacht&amp;quot;)&lt;br /&gt;
** [http://www.spicelab.de/index.htm Robert Heinemanns PSPICE-Seiten]&lt;br /&gt;
&lt;br /&gt;
===GeckoCIRCUITS===&lt;br /&gt;
&lt;br /&gt;
http://www.gecko-simulations.com&lt;br /&gt;
&lt;br /&gt;
* Java-Basierter Schaltungssimulator, speziell für Leistungselektronik geeignet&lt;br /&gt;
* Veröffentlicht unter der Gnu Public License (Open-Source)&lt;br /&gt;
* Kostenlos &lt;br /&gt;
* Wahlweise ausführbar als Java-Applet (Online-Simulation) oder als Download&lt;br /&gt;
* Multi-Domain Simulation: Schaltung/Thermische Netzwerke/Regelungstechnik&lt;br /&gt;
* Kopplungsmöglichkeit zu Matlab/Simulink&lt;br /&gt;
* Skriptsteuerung möglich&lt;br /&gt;
* ideale Schalter, Verlustberechnung möglich&lt;br /&gt;
* Sehr einfach zu bedienen und anwenderfreundlich, extrem schnell&lt;br /&gt;
&lt;br /&gt;
===Simplorer===&lt;br /&gt;
&lt;br /&gt;
http://www.ansoft.com/downloads.cfm&lt;br /&gt;
*kostenlose Studentenversion&lt;br /&gt;
*Anmeldung erforderlich&lt;br /&gt;
*Besondere Eignung für Leistungselektronik&lt;br /&gt;
*Möglichkeit den Simulationsablauf durch Zustandsgraphen zu steuern&lt;br /&gt;
*Besonders einfache Möglichkeit Kennlinien zur Parametersteuerung zu verwenden&lt;br /&gt;
*Integration verschiedener physikalischer Domänen möglich (Mechanik, Hydraulik, Elektrik (...) )&lt;br /&gt;
&lt;br /&gt;
Beispiel für die Leistungselektronik und Domänenübergriff: Mit den integrierten Mos-Fet Modellen (Level 1-3) wird eine B6 Brücke aufgebaut. Über die Zustandsgraphen kann eine&lt;br /&gt;
Raumzeigermodulation programmiert werden die über alpha-beta Koordinaten gesteuert&lt;br /&gt;
wird. Die Brücke steuert einen Asynchronmotor (Flussmodell) an diesem ist eine&lt;br /&gt;
Mechanische Last angeschlossen, z.B ein Feder-Dämpfer-System. Nun kann der Einfluss der Feder-Komponente auf die Zwischenkreisspannung analysiert werden.&lt;br /&gt;
&lt;br /&gt;
Simplorer wird überwiegend im Mechatronischen Bereich eingesetzt. Die Studentenversion ist leider Stark eingeschränkt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===LTspice/SwitcherCAD===&lt;br /&gt;
[[Datei:LTspice4-screenshot.png|miniatur|300px|Screenshot von LTspice IV]]&lt;br /&gt;
http://www.linear.com/designtools/software/#LTspice&lt;br /&gt;
&lt;br /&gt;
* Kostenlos und beliebt&lt;br /&gt;
&lt;br /&gt;
* Keinerlei Einschränkungen bezüglich Anzahl der Bauteile oder Knotenzahl&lt;br /&gt;
&lt;br /&gt;
* SPICE-Simulator integriert unter einer graphischen Oberfläche zum Zeichnen von zu simulierenden Schaltungen&lt;br /&gt;
&lt;br /&gt;
* Zum Einstieg empfehlenswert, da sehr übersichtlich. Erfordert allerdings mittelfristig detailliertere SPICE-Kenntnisse, da nicht alle SPICE-Funktionen hinter der graphischen Oberfläche versteckt sind.&lt;br /&gt;
&lt;br /&gt;
* Das Programm heißt inzwischen offiziell LTspice IV. Man findet oft noch die älteren Bezeichnungen LTspice/SwitcherCAD, LTspice/SwitcherCAD III, SwitcherCAD/LTspice, SwCAD oder LTspice in älteren Unterlagen.  &lt;br /&gt;
&lt;br /&gt;
* Windows-Software (98, 2000, XP, Vista, 7), läuft mit WINE unter Linux&lt;br /&gt;
&lt;br /&gt;
* Native Version für Mac OS X 10.7+ seit Ende 2013 erhältlich.&lt;br /&gt;
&lt;br /&gt;
* Von einem Halbleiterhersteller ([http://www.linear.com/ Linear Technology]). Kommt daher mit einer großen Anzahl von Modellen für Linear Technology-Bauelemente und vielen Beispielen für diese. Darüber hinaus erlaubt LT die Verwendung als allgemeines Werkzeug zum Schaltplan-Zeichnen und zur SPICE-Simulation.&lt;br /&gt;
: Andere Halbleiterhersteller liefern normalerweise keine explizit für LTspice vorgesehenen oder getesteten Modelle, da sie logischerweise keinen Mitbewerber (Linear Technologies) unterstützen wollen. LTspice versteht jedoch normale SPICE-Modelle (.SUBCKT, .MODEL, usw.). Da LTspice weitgehend die SPICE-Erweiterungen von PSPICE versteht, können auch PSPICE-Modelle verwendet werden. Allerdings muss man eventuell, wie bei reinen SPICE-Textmodellen, ein eigenes Schaltzeichen-Symbol für das Bauteil erstellen (LTspice versteht diesen Teil von PSPICE nicht).&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Das Einbinden von Fremdmodellen&#039;&#039;&#039; wird im Handbuch / der Programm-Hilfe von LTspice erklärt. Jedoch nicht im Hauptteil, sondern versteckt &#039;&#039;&#039;im Kapitel &#039;&#039;FAQ&#039;&#039;&#039;&#039;&#039;, wo die Erklärungen gerne übersehen werden.&lt;br /&gt;
&lt;br /&gt;
* Handbuch (entspricht der Programm-Hilfe): http://cds.linear.com/docs/ltspice/LTspiceHelp.chm&lt;br /&gt;
&lt;br /&gt;
* Kleine Einführung:&amp;lt;!-- Dieser Link funktioniert offenbar nicht mehr. http://www.lme.fh-muenchen.de/lst/spice/LTSpiceInfo.pdf --&amp;gt; http://www.ee.hm.edu/fk/lab/lst/spice/LTSpiceInfo.pdf&lt;br /&gt;
&lt;br /&gt;
* Längere, empfehlenswerte Einführung und zugehörige Beispielschaltungen: http://highered.mcgraw-hill.com/sites/0073106941/student_view0/lt_spice_instructions_and_support_files.html&lt;br /&gt;
&lt;br /&gt;
* International User Group: http://groups.yahoo.com/group/LTspice/&lt;br /&gt;
: Die User Group erfordert eine Anmeldung bei Yahoo und eine Zulassung zur Gruppe.&lt;br /&gt;
&lt;br /&gt;
: Eine Liste von Bauteilen, die aus verschiedenen Quellen stammen, ist nach Anmeldung in der obigen User Group zu bekommen. Dort gibt es auch die Modelle zum Download. Die erste Anlaufquelle, um häufig eingesetzte Bauteile zu finden.&lt;br /&gt;
&lt;br /&gt;
: Die Diskussion undokumentierter Befehle und Modelle sowie die Untersuchung der internen Funktionsweise wird konsequent unterbunden.&lt;br /&gt;
&lt;br /&gt;
* Eine Menge Modelle und eine gute Einführung http://www.elektronikschule.de/~krausg/&lt;br /&gt;
&lt;br /&gt;
* [http://ltwiki.org/index.php5?title=Main_Page LT Wiki Tipps, Tricks, undokumentierte Befehle] (englisch)&lt;br /&gt;
&lt;br /&gt;
* Regelungstechnik-Modelle http://home.scarlet.be/nap0/ltspice/&lt;br /&gt;
&lt;br /&gt;
===SIMetrix===&lt;br /&gt;
Größeneinschränkung&lt;br /&gt;
ab Win 2000 und teilw. Linux&lt;br /&gt;
http://www.catena.uk.com/site/downloads/SIMetrixIntro.htm&lt;br /&gt;
&lt;br /&gt;
===ngSpice===&lt;br /&gt;
&lt;br /&gt;
http://ngspice.sourceforge.net/&lt;br /&gt;
* Open Source (BSD-Lizenz)&lt;br /&gt;
* Kommandozeilenorientiert, mit graphischer Ausgabe&lt;br /&gt;
* Erweitert Berkeley spice3f5 [http://ngspice.sourceforge.net/extras.html um viele zusätzliche Möglichkeiten]  &lt;br /&gt;
* für Linux, Windows, MacOS&lt;br /&gt;
* integriert XSPICE, daher auch für Mixed-Signal-Simulation geeignet&lt;br /&gt;
* eigene XSPICE code models können erstellt werden&lt;br /&gt;
* integriert TclSpice, eine tcl/tk-Schnittstelle&lt;br /&gt;
* ausführliches Manual mit Einführung, Beipielen und allen aktuellen Features unter http://ngspice.sourceforge.net/docs/ngspice-manual.pdf&lt;br /&gt;
* Anleitung für gEDA und Spice http://www.brorson.com/gEDA/SPICE/t1.html&lt;br /&gt;
* [http://sourceforge.net/projects/gspiceui/ GSpiceUI - A graphic interface for SPICE] (Linux)&lt;br /&gt;
&lt;br /&gt;
===TCLSpice===&lt;br /&gt;
&lt;br /&gt;
http://tclspice.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
* TclSpice ist eine verbesserte Version von Berkeley Spice und benutzt die Tcl/Tk Skript Sprache. &lt;br /&gt;
* open-source (BSD Lizenz) basierend auf NG-Spice Quellcode&lt;br /&gt;
&lt;br /&gt;
===NI MultiSim / Electronics Workbench===&lt;br /&gt;
&lt;br /&gt;
http://www.ni.com/multisim/&lt;br /&gt;
http://www.electronicsworkbench.com/edu/eduhom.html&lt;br /&gt;
&lt;br /&gt;
* Electronics Workbench wurde von National Instruments aufgekauft. In NIs MultiSim aufgegangen.&lt;br /&gt;
* 30-Tage Testversionen erhältlich&lt;br /&gt;
* nur für Windows&lt;br /&gt;
* Ab Wine 1.0 und bis MultiSim 9 auch auf Linux lauffähig&lt;br /&gt;
* [http://www.analog.com/en/content/CU_multisim_SPICE_program_download/fca.html eine freie Version wird von Analog Devices angeboten]&lt;br /&gt;
&lt;br /&gt;
===Tina===&lt;br /&gt;
http://www.tina.com/&lt;br /&gt;
* sehr eingeschränkte Demo-Version (PCB Layout nur mit weniger als 50 Pads erlaubt)&lt;br /&gt;
* [http://focus.ti.com/docs/toolsw/folders/print/tina-ti.html Tina-TI Version von Texas Instrument] ähnlich dem LTSpice von Linear Technology, ebenfalls kostenlos&lt;br /&gt;
&lt;br /&gt;
===Gnucap===&lt;br /&gt;
* http://www.geda.seul.org/tools/gnucap/&lt;br /&gt;
* [http://sourceforge.net/projects/gspiceui/ GSpiceUI - A graphic interface] (Linux)&lt;br /&gt;
&lt;br /&gt;
===qucs===&lt;br /&gt;
http://qucs.sourceforge.net/&lt;br /&gt;
* freie Software&lt;br /&gt;
* für Linux, Windows, OS X&lt;br /&gt;
* viele Modelle aus dem HF-Bereich&lt;br /&gt;
&lt;br /&gt;
=== lcfilter ===&lt;br /&gt;
http://www-users.cs.york.ac.uk/~fisher/lcfilter/&lt;br /&gt;
Online-Filterberechnung L-C-Filter&lt;br /&gt;
&lt;br /&gt;
=== eispice ===&lt;br /&gt;
&lt;br /&gt;
http://www.thedigitalmachine.net/eispice.html&lt;br /&gt;
&lt;br /&gt;
SPICE ähnlicher Schaltungssimulator mit Python Interface&lt;br /&gt;
&lt;br /&gt;
=== Yenka Analogue Electronics ===&lt;br /&gt;
&lt;br /&gt;
[http://www.yenka.com/ Yenka] is a simulator for designing circuits using analogue electronic components. Mac OS X or Windows XP/Vista. You can use all Yenka products free of charge at home.&lt;br /&gt;
&lt;br /&gt;
=== Solve Elec ===&lt;br /&gt;
&lt;br /&gt;
With [http://www.physicsbox.com/indexsolveelec2en.html Solve Elec] you can:&lt;br /&gt;
* draw and analyze electrical circuits functioning in direct or alternating current&lt;br /&gt;
* get literal formulas and values for current intensities and voltages defined in the circuit.&lt;br /&gt;
* verify circuit related equations.&lt;br /&gt;
* draw graphs.&lt;br /&gt;
* get the equivalent circuit of displayed circuit&lt;br /&gt;
* browse an integrated documentation&lt;br /&gt;
* edit, save and print reports made of various elements displayed in main window &lt;br /&gt;
(MacOSX, Windows, Free)&lt;br /&gt;
&lt;br /&gt;
===PLECS===&lt;br /&gt;
&lt;br /&gt;
http://www.plexim.com/de/plecs&lt;br /&gt;
&lt;br /&gt;
* Die Simulationsplattform für leistungselektronische Systeme&lt;br /&gt;
* als MATLAB Toolbox und Standalone erhältlich&lt;br /&gt;
* freie Version je nach Universität erhältlich&lt;br /&gt;
* 30 Tage Testversion erhältnlich&lt;br /&gt;
* Schaltung mit elektrischer, magnetischer, mechanischer und thermischer Domain&lt;br /&gt;
&lt;br /&gt;
==Digital==&lt;br /&gt;
&lt;br /&gt;
===Simulo===&lt;br /&gt;
http://www.codeplex.com/simulo&lt;br /&gt;
* Simple and modern digital simulation program. It&#039;s based upon .NET Framework 3.5 SP1 and WPF.&lt;br /&gt;
&lt;br /&gt;
===DigitalSimulator===&lt;br /&gt;
http://www.draw2d.org/digitalsimulator/&lt;br /&gt;
* Windows und Online Browser Variante verfügbar&lt;br /&gt;
&lt;br /&gt;
=== HADES ===&lt;br /&gt;
http://tams-www.informatik.uni-hamburg.de/applets/hades/html/index.html&lt;br /&gt;
* betriebssystemunabhängig (Java)&lt;br /&gt;
&lt;br /&gt;
=== mkfilter ===&lt;br /&gt;
http://www-users.cs.york.ac.uk/~fisher/mkfilter/&lt;br /&gt;
Online-Digitalfilterberechnung FIR, IIR&lt;br /&gt;
&lt;br /&gt;
=== edef ===&lt;br /&gt;
[http://edef.sourceforge.net/ edef] - A simple discrete event simulation. The edef framework can be used to simulate typical logical circuits, autoregressive processes or digital controller circuits and maybe some more. It is designed to be simple enougth for use in schools or other educational context. It is also truly easy to extend.&lt;br /&gt;
&lt;br /&gt;
=== TkGate ===&lt;br /&gt;
[http://www.tkgate.org/ TkGate] is a event driven digital circuit simulator with a tcl/tk-based graphical editor. (GPL)&lt;br /&gt;
&lt;br /&gt;
=== Atanua ===&lt;br /&gt;
&lt;br /&gt;
[http://atanua.org/ Atanua ] is a real-time logic simulator, designed to help in learning of basic boolean logic and electronics. It uses OpenGL hardware-accelerated rendering and a custom UI designed for a fast workflow and a very low learning curve, letting the students concentrate on learning the subject instead of spending time learning the tool. (Personal non-commercial license: Free. Andere Nutzungen: siehe Webseite)&lt;br /&gt;
&lt;br /&gt;
=== MMLogic ===&lt;br /&gt;
&lt;br /&gt;
[http://www.softronix.com/logic.html MMLogic] is a MultiMedia Logic Design System for Windows (NT/2K/Xp/95/98/ME, now Freeware)&lt;br /&gt;
&lt;br /&gt;
=== WireItUp ===&lt;br /&gt;
&lt;br /&gt;
[http://www.wireitup.de WireItUp] is a Digital Logic Simulator especially made for educational purposes.(Windows 8/7/Vista/XP, Freeware)&lt;br /&gt;
&lt;br /&gt;
=== Yenka Digital Electronics ===&lt;br /&gt;
&lt;br /&gt;
[http://www.yenka.com/ Yenka] is a simulator for designing circuits using digital 4000 and 7400 series electronic components. Mac OS X or Windows XP/Vista. You can use all Yenka products free of charge at home.&lt;br /&gt;
&lt;br /&gt;
=== KSimus ===&lt;br /&gt;
&lt;br /&gt;
[http://ksimus.berlios.de/ KSimus] is a simulator for KDE.&lt;br /&gt;
&lt;br /&gt;
=== Digital Simulator ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mit.edu/~ara/ds.html Digital Simulator] has a toolbar of digital circuit elements, including logic gates, flip-flops, switches, and indicators. Drawing a circuit with Digital Simulator is like using a paint program. You click the element&#039;s icon on the toolbar, then click where you want the element to go. You use a similar procedure to draw wires and indicate connections. It&#039;s that simple. Free for educational institutions or students. (Windows 3.1, 95/NT)&lt;br /&gt;
&lt;br /&gt;
=== KLogic ===&lt;br /&gt;
&lt;br /&gt;
[http://www.a-rostin.de/indexd.html KLogic] ist eine Anwendung zum einfachen Entwurf und zur Simulation von Digitalschaltungen. KLogic ermöglicht einen einfachen Aufbau von Schaltungen aus Standardkomponenten wie UND, ODER, XOR, und Flipflops wie RS und JK. Um komplexere und wiederverwendbare Schaltungen zu entwerfen, können Teilschaltungen gespeichert und wiederverwendet werden.  (Linux, GPL)&lt;br /&gt;
Die letzte Version stammt aus dem Jahr 2006 und läuft leider recht instabil. Es gibt mittlerweile jede Menge grafisch unschöne Stellen und, schlimmer noch, auch diverse Bugs, die einen Crash verursachen.&lt;br /&gt;
&lt;br /&gt;
=== Logic Simulator ===&lt;br /&gt;
&lt;br /&gt;
With [http://www.tetzl.de/java_logic_simulator.html LogicSim] you can design and simulate digital logic circuits with logic gates like AND, OR, FlipFlop, etc.&lt;br /&gt;
&lt;br /&gt;
=== HS-FIR-Compiler ===&lt;br /&gt;
[http://www.steepestascent.com/content/default.asp?page=s2_22 steepestascent.com]&lt;br /&gt;
14 day evaluation license:&lt;br /&gt;
The High Speed FIR Filter Compiler is a standalone utility that automatically generates VHDL code for fast and efficient FIR filters and is ideal for both FPGA and ASIC implementation.&lt;br /&gt;
&lt;br /&gt;
=== Interactive 595 Shift Register Simulator ===&lt;br /&gt;
&lt;br /&gt;
[http://conductiveresistance.com/interactive-595-shift-register-simulator/ Interactive 595 Shift Register Simulator]&lt;br /&gt;
&lt;br /&gt;
=== Logic Circuit ===&lt;br /&gt;
&lt;br /&gt;
[http://www.logiccircuit.org/ Logic Circuit] is free, open source educational software for designing and simulating digital logic circuits. Intuitive graphical user interface, allows you to create unrestricted circuit hierarchy with multi bit buses, debug circuits behavior with oscilloscope, and navigate running circuits hierarchy. (GPLv2, Windows: .NET 4.0 erforderlich)&lt;br /&gt;
&lt;br /&gt;
== Mixed Analog-Digital ==&lt;br /&gt;
&lt;br /&gt;
===SPECTRE===&lt;br /&gt;
&lt;br /&gt;
Der [http://www.cadence.com/products/rf/spectre_circuit/pages/default.aspx Cadence Virtuoso Spectre Circuit Simulator] ist ein Mixed AD-Simulator auf der Basis von Spice. (Kommerziell)&lt;br /&gt;
&lt;br /&gt;
===HSPICE===&lt;br /&gt;
&lt;br /&gt;
[http://www.synopsys.com/Tools/Verification/AMSVerification/CircuitSimulation/HSPICE/Pages/default.aspx HSPICE] ist ein PSpice-ähnlicher Simulator, der sowohl ABM-Modelle, als auch eigens erstellte library-Modelle verarbeiten kann. (Kommerziell)&lt;br /&gt;
&lt;br /&gt;
===XSPICE===&lt;br /&gt;
http://users.ece.gatech.edu/~mrichard/Xspice/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===ngSpice===&lt;br /&gt;
&lt;br /&gt;
http://ngspice.sourceforge.net/&lt;br /&gt;
* Open Source (BSD-Lizenz)&lt;br /&gt;
* Kommandozeilenorientiert, mit graphischer Ausgabe&lt;br /&gt;
* Erweitert Berkeley spice3f5 [http://ngspice.sourceforge.net/extras.html um viele zusätzliche Möglichkeiten]  &lt;br /&gt;
* für Linux, Windows, MacOS&lt;br /&gt;
* integriert XSPICE, daher auch für Mixed-Signal-Simulation geeignet&lt;br /&gt;
* eigene XSPICE code models können erstellt werden&lt;br /&gt;
* ausführliches Manual mit Einführung, Beipielen und allen aktuellen Features unter http://ngspice.sourceforge.net/docs/ngspice-manual.pdf&lt;br /&gt;
&lt;br /&gt;
=== SMASH from DOLPHIN INTEGRATION ===&lt;br /&gt;
http://www.dolphin.fr/index.php/eda_solutions/products/smash/overview&lt;br /&gt;
* SMASH from Dolphin Integration is a mixed-signal, multi-language simulator for IP and IC designs. It uses [[SPICE]] syntax for analog descriptions, [[Verilog]]-HDL and [[VHDL]] for digital, Verilog-A/AMS, VHDL-AMS and ABCD (a combination of SPICE and C) for analog behavioral, and C for [[DSP]] algorithms.&lt;br /&gt;
* Logik, Analog und Mixed-Simulation&lt;br /&gt;
* Für Linux und Windows&lt;br /&gt;
* Engeschränkte Evaluationsversion erhältlich&lt;br /&gt;
&lt;br /&gt;
===Micro-Cap===&lt;br /&gt;
&lt;br /&gt;
http://www.spectrum-soft.com&lt;br /&gt;
* nur für Windows&lt;br /&gt;
* Evaluation Version (mit Einschränkungen) nach Registrierung erhältlich&lt;br /&gt;
&lt;br /&gt;
===GNU-Radio===&lt;br /&gt;
http://gnuradio.org/redmine/wiki/gnuradio&lt;br /&gt;
GNU Radio is a free software development toolkit that provides the signal processing runtime and processing blocks to implement software radios using readily-available, low-cost external RF hardware and commodity processors. It is widely used in hobbyist, academic and commercial environments to support wireless communications research as well as to implement real-world radio systems.&lt;br /&gt;
&lt;br /&gt;
=== Oregano ===&lt;br /&gt;
&lt;br /&gt;
http://oregano.gforge.lug.fi.uba.ar/&lt;br /&gt;
&lt;br /&gt;
Beschreibung von [http://elettrolinux.com/Simulations/oregano-an-electrical-tool.html elettrolinux.com]:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Oregano&#039;&#039;&#039; is a LINUX application for schematic capture and simulation of electronic circuits. Oregano has an user friendly graphic interface that allows to design and describe the circuit to simulate. It provides a wide variety of component libraries, including CMOS, TTL, lineal, operational amplifiers, and a lot more! Oregano lets you simulate the designed circuits. The actual simulation is performed by Berkeley Spice BSIM, GnuCAP or the new generation NGSpice. Oregano is licensed under the terms of the GNU GPL.&lt;br /&gt;
&lt;br /&gt;
=== VirtualBreadboard ===&lt;br /&gt;
&lt;br /&gt;
[http://www.virtualbreadboard.com/ VirtualBreadboard] is an easy to use simulation and modelling tool that can be used in place of a real breadboard for quickly performing experiments and testing out electronic and microcontroller ([[PIC]]) powered &#039;embedded&#039; applications. (Seit Version 3.3.12 11 July 2009 Freeware, Windows)&lt;br /&gt;
&lt;br /&gt;
=== BasicDSP ===&lt;br /&gt;
[http://www.vf.utwente.nl/~ptdeboer/ham/basicdsp/ von Pieter-Tjerk de Boer, PA3FWM, und Niels Moseley, PE1OIT]&lt;br /&gt;
A program for experimenting with simple audio DSP algorithms&lt;br /&gt;
&lt;br /&gt;
===LTspice/SwitcherCAD===&lt;br /&gt;
http://www.linear.com/designtools/software/#LTspice&lt;br /&gt;
&lt;br /&gt;
Hauptsächlich für die Simulation analoger Schaltungen verwendet, enthält LTspice doch einig digitale Grundfunktionen. Diese sind nur zum Teil im Handbuch als A-Schaltungselemente (&#039;&#039;Circuit Elements&#039;&#039; --&amp;gt; &#039;&#039;A. Special Functions&#039;&#039;) beschrieben.&lt;br /&gt;
&lt;br /&gt;
==Hochfrequenztechnik==&lt;br /&gt;
&lt;br /&gt;
=== Linksammlungen ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.circuitsage.com/tline.html Transmission Line Design and Analysis]&lt;br /&gt;
* [http://www.mwrf.com/Articles/Print.cfm?ArticleID=22572 Übersichtsartikel der Microwave &amp;amp; RF] [http://www.mwrf.com/Articles/Print.cfm?ArticleID=22809 und hier]&lt;br /&gt;
&lt;br /&gt;
=== Ansoft ===&lt;br /&gt;
*Maxwell SV: Simulation von elektrischen und magnetischen Feldern (2D) &lt;br /&gt;
*Simplorer SV: Schaltungssimulation&lt;br /&gt;
*PExprt SV: Berechung von Schaltnetzteilen&lt;br /&gt;
&lt;br /&gt;
Wurde 2008 von [http://www.ansys.com/ Ansys] gekauft,&lt;br /&gt;
http://www.ansys.com/Products/Simulation+Technology/Electromagnetics&lt;br /&gt;
&lt;br /&gt;
die kostenlose Studentenversion &amp;quot;Ansoft Designer&amp;quot; gibts nur noch von G.Kraus:&lt;br /&gt;
http://www.gunthard-kraus.de&lt;br /&gt;
[http://www.gunthard-kraus.de/Ansoft%20Designer%20SV/DesignerSV050610.exe Download exe-File]&lt;br /&gt;
=== ARRL Radio Designer ===&lt;br /&gt;
für 169&amp;amp;#8364; bei http://www.ukw-berichte.de erhältlich  http://www.arrl.org&lt;br /&gt;
* Amateurversion der amerikanischen Design-Software Super Compact.&lt;br /&gt;
* Mittlerweile durch Ansoft Designer (ehem. Ansoft Serenade) überholt&lt;br /&gt;
&lt;br /&gt;
=== AADE Filter Design ===&lt;br /&gt;
Homepage: http://www.aade.com/filter.htm&lt;br /&gt;
&lt;br /&gt;
kostenlose Analog-Filterberechnung:&lt;br /&gt;
* Butterworth, Chebyshev, Elliptic (Cauer), Bessel, Legendre and Linear Phase&lt;br /&gt;
* low-pass, high-pass, band-Pass, and band-reject filters.&lt;br /&gt;
* Coupled Resonator band-pass filters&lt;br /&gt;
* Crystal Ladder band-pass filters using identical crystals&lt;br /&gt;
&lt;br /&gt;
=== ActiveFilterDesign ===&lt;br /&gt;
Active Filter Design für Matlab, kostenloser Download: http://academics.vmi.edu/ee_js/Research/Programs/materials/AFD12.zip&lt;br /&gt;
&lt;br /&gt;
Handbuch: http://academics.vmi.edu/ee_js/Research/Programs/materials/Analog%20Filter%20Designer.pdf&lt;br /&gt;
&lt;br /&gt;
* FIR, IIR, analoge Filter, Synthese und Analyse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== atlc - Arbitrary Transmission Line Calculator ===&lt;br /&gt;
&lt;br /&gt;
* freie Software (Gnu General Public License)&lt;br /&gt;
&lt;br /&gt;
Übertragungsleitungen (und eingeschlossen Richtkoppler) können mit der Open Source Software auf ihre Impedanz, aber nicht ihre Dämpfung berechnet werden.&lt;br /&gt;
Dabei ist die Form und Anordnung der Leiter und Dielektrica beliebig, aber die Anzahl der Leiter ist auf maximal Drei beschränkt. Es können keine Hohlleiter berechnet werden. Die üblichen Anordnungen auf Leiterplatten werden aber abgedeckt. Es wird eine Bitmap erstellt, die geometrischen und elektrischen Eigenschaften des Leitungsquerschnits als Farbe codiert enthält. Diese Bitmap wird dann vom Programm bearbeitet. Die Methode, die das Programm benutzt, ist die der [http://de.wikipedia.org/wiki/Finite-Differenzen-Methode finiten Differenzen]. Autor des Programmes ist Dr. David Kirkby alias G8WRB.&lt;br /&gt;
Das Programm ist in den meisten gängigen Linux Distributionen als Package erhältlich. Die Homepage mit Anleitungen, FAQ und Beispielen findet sich hier:&lt;br /&gt;
http://atlc.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
=== AWR ===&lt;br /&gt;
http://web.awrcorp.com/&lt;br /&gt;
&lt;br /&gt;
free trial versions erhältlich für:&lt;br /&gt;
* ANALOG OFFICE   -   High-Frequency Design Software for Analog and RFICs&lt;br /&gt;
* APLAC   -   Harmonic balance simulation engine&lt;br /&gt;
* AXIEM   -   3D Planar Electromagnetic Software for Antennas and Passives&lt;br /&gt;
* MICROWAVE OFFICE   -   RF and Microwave Design Software for MMIC, RF PCB and Modules&lt;br /&gt;
* VISUAL SYSTEM SIMULATOR   -   Wireless Communication System Design Software&lt;br /&gt;
&lt;br /&gt;
* TxLine [http://web.awrcorp.com/Usa/Products/Optional-Products/TX-Line/ free Transmission Line Calculator]&lt;br /&gt;
&lt;br /&gt;
=== CST STUDIO SUITE™ ===&lt;br /&gt;
http://www.cst.com/&lt;br /&gt;
&lt;br /&gt;
...deckt alles ab, 3D-EM Simulation für elektrostatische Probleme bis Hochfrequenz, Zeit- und Frequenzbereich, Fernfelder, EMV, Spice-Ersatzmodelle, PCBs, Partikelsimulation, Co-Simulation mit thermischen und mechanischen Problemen, Raytraycing.&lt;br /&gt;
&lt;br /&gt;
=== Elsie ===&lt;br /&gt;
http://www.tonnesoftware.com/elsie.html&lt;br /&gt;
a Windows electrical filter design and analysis program handling all of the usual options (family, topology, bandwidth, etc.). It has a nice toolbox including real-time tuning modes and optimization. Outputs are presentation quality. Student edition is free. &lt;br /&gt;
&lt;br /&gt;
=== FastHenry ===&lt;br /&gt;
Windowsversion http://www.fastfieldsolvers.com/&lt;br /&gt;
&lt;br /&gt;
* open source&lt;br /&gt;
* Impedanzextraktion (R und L) aus 3D-Geometrieen&lt;br /&gt;
* Erfasst Skin-, Proximity-Effekte, magnetische Kopplungseffekte&lt;br /&gt;
* Erstellung von Spice-Modellen möglich&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== FilterFree ===&lt;br /&gt;
http://www.nuhertz.com/filter/&lt;br /&gt;
&lt;br /&gt;
Filter Free is the free version of Filter Solutions and Filter Light. Functionality is limited 3rd order analog and IIR filters, and 10 tap FIR filters. Filters are synthesized. Frequency, time, and reflection analysis are performed on the ideal, unmodified filters only. Transfer functions are displayed in standard form only.&lt;br /&gt;
&lt;br /&gt;
=== HP AppCAD ===&lt;br /&gt;
http://www.hp.woodshot.com/&lt;br /&gt;
&lt;br /&gt;
RF design software is provided free of charge by Agilent Technologies&lt;br /&gt;
as a service to the RF and microwave design community&lt;br /&gt;
&lt;br /&gt;
Läuft unter Windows ab 95c/NT4&lt;br /&gt;
&lt;br /&gt;
=== Nova.exe ===&lt;br /&gt;
http://www.pcb-pool.com/ppde/service_downloads.html&lt;br /&gt;
&lt;br /&gt;
NOVA is a program that can be used to analyze most linear (AC) circuits. It&lt;br /&gt;
can calculate voltage, phase, and delay at any circuit point (node) at any&lt;br /&gt;
frequencies. Most (AC) circuit analysis programs can only give useful results&lt;br /&gt;
for low frequencies (below 10 Mhz). NOVA can do this but it can also be used&lt;br /&gt;
for RF and microwave circuits. Microwave circuits require the analysis be done&lt;br /&gt;
in terms of S-parameters, rather then AC voltages.  NOVA does AC, time domain,&lt;br /&gt;
and S-parameter analysis.This version of NOVA has circuit tweaking while in the graph mode. You may find it extremely useful. Vary a component and watch the response, return loss, and delay change. &lt;br /&gt;
&lt;br /&gt;
Gutes altes DOS-Programm, AC- oder S-Parameter-Darstellung.&lt;br /&gt;
Ausdruck unter WinXP nur mit Screenshot-Programm möglich, getestet z.&amp;amp;nbsp;B. mit Snarf15: http://www.idcomm.com/personal/lorenblaney/SNARF15.ZIP&lt;br /&gt;
&lt;br /&gt;
=== PUFF - Microwave Design Software ===&lt;br /&gt;
für 22&amp;amp;#8364; bei http://www.ukw-berichte.de/ erhältlich&lt;br /&gt;
* altes DOS-Programm für HF-Simulation und Platinenentwurf&lt;br /&gt;
* Microstrip HF-Berechnungen, Smith-Diagramm&lt;br /&gt;
* in den UKW-Berichten standen schon mehrere Artikel mit Beispielen&lt;br /&gt;
* zur Nutzung einer Kombination aus PUFF und Ansoft SV (=Studentenversion)&lt;br /&gt;
&lt;br /&gt;
Seit Anfang 2010 wird PUFF unter der GPLv3 License geführt. Der Pascal Quelltext mit Linux Package und Handbuch ist frei verfügbar. [http://wwwhome.cs.utwente.nl/~ptdeboer/ham/puff/ PUFF microwave CAD software on Linux]&lt;br /&gt;
&lt;br /&gt;
=== RF-Sim 99 ===&lt;br /&gt;
kostenlos z.&amp;amp;nbsp;B. von: http://www.janson-soft.de/amateurfunk/rfsim99/rfsim99.htm&lt;br /&gt;
&lt;br /&gt;
oder neben anderen PDFs zur HF-Technik: http://home.sandiego.edu/~ekim/e194rfs01/&lt;br /&gt;
* Berechnung aktiver und passiver Filter einschließlich Schaltplaneingabe&lt;br /&gt;
* Ausgabe von Frequenz- und Phasengang, Smith-Diagramm&lt;br /&gt;
&lt;br /&gt;
=== Smith Plot ===&lt;br /&gt;
Neben diversen Mathcad-Beispielen und Skripten aus der HF-Technik eine Smith-Chart-Software:&lt;br /&gt;
http://www.fritz.dellsperger.net/downloads.htm&lt;br /&gt;
&lt;br /&gt;
=== Sonnet Lite ===&lt;br /&gt;
Sonnet Lite provides a full-wave EM solution for 3D planar circuits&lt;br /&gt;
A fully functional and powerful EM analysis software. &lt;br /&gt;
Get started on your EM analysis within the next 30 minutes by downloading SONNET Lite!&lt;br /&gt;
http://www.sonnetsoftware.com/products/lite/&lt;br /&gt;
http://www.sonnetsoftware.com/&lt;br /&gt;
&lt;br /&gt;
===qucs===&lt;br /&gt;
http://qucs.sourceforge.net/&lt;br /&gt;
* freie Software&lt;br /&gt;
* für Linux, Windows, OS X&lt;br /&gt;
* hervorragende technische Dokumentation&lt;br /&gt;
* Impedanzrechenfunktionen für Strip- und Microstripleitungen&lt;br /&gt;
* Filterberechnungstool&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===ADS (Advanced Design System)===&lt;br /&gt;
http://www.home.agilent.com/en/pc-1297113/advanced-design-system-ads?&amp;amp;cc=DE&amp;amp;lc=ger&lt;br /&gt;
&lt;br /&gt;
http://de.wikipedia.org/wiki/Advanced_Design_System&lt;br /&gt;
&lt;br /&gt;
Advanced Design System, kurz ADS, ist eine spezielle Simulationssoftware der Firma Agilent zur Simulation von elektrischen Schaltungen für die Hochfrequenztechnik und stellt in diesem Segment einen Industriestandard dar.&lt;br /&gt;
&lt;br /&gt;
==Antennensimulation==&lt;br /&gt;
&lt;br /&gt;
=== cocoaNEC ===&lt;br /&gt;
Homepage: http://homepage.mac.com/chen/w7ay/cocoaNEC/index.html&lt;br /&gt;
* Design und modulierung von Antennen&lt;br /&gt;
* MacOS X (PowerPC und Intel)&lt;br /&gt;
* Frei erhältlich (mit Quellcode)&lt;br /&gt;
&lt;br /&gt;
=== EZ-NEC ===&lt;br /&gt;
Homepage: http://eznec.com/&lt;br /&gt;
* Antennenberechnung&lt;br /&gt;
demo program allows only 20 segments, which limits the complexity of antenna&lt;br /&gt;
you can analyze. (EZNEC 4.0 allows 500 )&lt;br /&gt;
&lt;br /&gt;
=== MiniNEC ===&lt;br /&gt;
Homepage: http://www.emsci.com/   &#039;&#039;&#039;(2013-05-01 Seite nicht mehr vorhanden)&#039;&#039;&#039;&lt;br /&gt;
* Antennenberechnung mittels &amp;quot;Momentenmethode&amp;quot; (Zerlegung der Antenne in kleine Segmente, Überlagerung der Teilfelder)&lt;br /&gt;
* eingeschränkte Studenten/Amateurversion erhältlich&lt;br /&gt;
* NEC = Numerical Electromagnetics Code&lt;br /&gt;
&lt;br /&gt;
=== SuperNEC ===&lt;br /&gt;
Homepage: http://www.supernec.com/&lt;br /&gt;
* Antennenberechnung mittels &amp;quot;Momentenmethode&amp;quot;&lt;br /&gt;
* 30-Tage-Testversion sowie unbegrenzt lauffähige Studentenversion (gegen Nachweis) erhältlich&lt;br /&gt;
&lt;br /&gt;
=== MMANA ===&lt;br /&gt;
Homepage (deutsche Version) : http://dl2kq.de/mmana/4-7.htm&lt;br /&gt;
&lt;br /&gt;
Kostenlose Antennen-Analysesoftware, auf der mit MININEC Version 3 eingeführten Momentenmethode basierend&lt;br /&gt;
&lt;br /&gt;
=== RadioMobile ===&lt;br /&gt;
Hochfrequenz-Ausbreitungssimulation&lt;br /&gt;
* [http://www.cplus.org/rmw/english1.html Hauptseite]&lt;br /&gt;
* [http://www.cplus.org/rmw/rme.html Beispielbilder]&lt;br /&gt;
* [http://www.cplus.org/rmw/dataen.html dazu erforderliche Kartendaten]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/SRTM-Daten Wikipedia zum SRTM-Kartendatenformat]&lt;br /&gt;
&lt;br /&gt;
== Sonstige ==&lt;br /&gt;
&lt;br /&gt;
=== FEMM ===&lt;br /&gt;
* [http://www.femm.info/wiki/HomePage Finite Element Method Magnetics] (FEMM)&lt;br /&gt;
&lt;br /&gt;
=== GALEMU ===&lt;br /&gt;
&lt;br /&gt;
[http://bu3sch.de/joomla/index.php/galpal-emulator Galemu] is a [[GAL]]/[[PAL]] chip emulator. (GPL)&lt;br /&gt;
&lt;br /&gt;
==Numerische Berechnungswerkzeuge==&lt;br /&gt;
&lt;br /&gt;
===Derive===&lt;br /&gt;
http://education.ti.com&lt;br /&gt;
&lt;br /&gt;
===FreeMat===&lt;br /&gt;
http://freemat.sourceforge.net&lt;br /&gt;
* freier MatLab-Clone&lt;br /&gt;
* für Windows, Linux, Mac OS X&lt;br /&gt;
&lt;br /&gt;
===GAUSS===&lt;br /&gt;
Wissenschaftliche Simulationssoftware zur Berechung 3-dimensionaler Ladungsverteilungen in z.&amp;amp;nbsp;B. Halbleitern. Kann aus Geometrie und Dotierungsprofilen die Halbleitergleichungen ableiten.&lt;br /&gt;
&lt;br /&gt;
===GnuPlot===&lt;br /&gt;
http://www.gnuplot.info/&lt;br /&gt;
* freie Software&lt;br /&gt;
* für Linux, Windows und weitere&lt;br /&gt;
* sehr mächtiges Tool, aber eher im Bereich der Datenauswertung (Diagramme)&lt;br /&gt;
* [http://ttsiodras.googlepages.com/gnuplotStreaming.html Visualize real-time data streams with Gnuplot] (Perl)&lt;br /&gt;
&lt;br /&gt;
===Maple===&lt;br /&gt;
http://www.maplesoft.com/&lt;br /&gt;
* Wissenschaftliche Analyse und Simulationssystem zur Lösung komplexester Aufgaben der Mathematik. Lizenzpflichtig.&lt;br /&gt;
&lt;br /&gt;
===JMathLib===&lt;br /&gt;
http://mathlib.sourceforge.net&lt;br /&gt;
* freier Matlab-Clone in 100% Java&lt;br /&gt;
* für Windows, Linux, ...&lt;br /&gt;
&lt;br /&gt;
===MatLab===&lt;br /&gt;
http://www.mathworks.com/&lt;br /&gt;
&lt;br /&gt;
===MuPad===&lt;br /&gt;
http://www.mupad.de/&lt;br /&gt;
&lt;br /&gt;
===Mathcad===&lt;br /&gt;
http://www.mathsoft.com/ http://www.ptc.com/appserver/mkt/products/home.jsp?k=3901&lt;br /&gt;
* rechnen mit Formeln wie auf dem Papier&lt;br /&gt;
&lt;br /&gt;
===Maxima===&lt;br /&gt;
http://maxima.sourceforge.net/&lt;br /&gt;
* freie Software für Linux, OSX, Windows&lt;br /&gt;
&lt;br /&gt;
===Octave===&lt;br /&gt;
http://www.octave.org/&lt;br /&gt;
* freier MatLab-Clone. Die Syntax ist überwiegend identisch&lt;br /&gt;
* für Linux, Windows, OSX&lt;br /&gt;
&lt;br /&gt;
===GNU R===&lt;br /&gt;
http://www.r-project.org/&lt;br /&gt;
* freier S-Clone. Die Syntax ist überwiegend identisch&lt;br /&gt;
* für Linux, Windows, OSX&lt;br /&gt;
&lt;br /&gt;
===SciLab===&lt;br /&gt;
http://www.scilab.org/&lt;br /&gt;
* freie Software&lt;br /&gt;
* für Linux, Windows, MacOS&lt;br /&gt;
* stellt eine C++ Library bereit, die in eigene DSP-Systeme eingebunden werden kann&lt;br /&gt;
&lt;br /&gt;
===scipy===&lt;br /&gt;
scipy [http://www.scipy.org/] ist eine Erweiterung der Skriptsprache Python [http://www.python.org] mit numerischen Funktionen&lt;br /&gt;
* freie Software&lt;br /&gt;
* für Linux, Windows, OSX&lt;br /&gt;
&lt;br /&gt;
===SMathStudio===&lt;br /&gt;
SMathStudio [http://www.smathstudio.com/] ist ein an MathCad angelehntes numerischer Berechnungs-, Visualisierungs-, und Dokumentationstool. Die Software ist Freeware/Donationware. Sie ist ins deutsche übersetzt, wird derzeit (Stand 26.06.2012) aktiv weiterentwickelt und supported im eigenem Forum&lt;br /&gt;
&lt;br /&gt;
== Online Schaltungssimulatoren ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/79658#664688 Diskussion im Forum]&lt;br /&gt;
* http://www.falstad.com/circuit/&lt;br /&gt;
* [http://www.intersil.com/isim/ Intersil’s iSim]&lt;br /&gt;
* [http://smile.hsu-hh.de/Schaltungen/Index.htm WSPICE] (fixe Schaltungen)&lt;br /&gt;
* [http://micropci1.imtek.uni-freiburg.de/svs/ spicy VOLTsim]&lt;br /&gt;
* [http://www.gecko-simulations.com/geckocircuits.html GeckoCIRCUITS]&lt;br /&gt;
* [https://www.circuitlab.com CircuitLab]&lt;br /&gt;
* [http://www.poweresim.com/ PowerEsim] - Free SMPS Switching Power Supply / Transformer Design Software&lt;br /&gt;
&lt;br /&gt;
== Tutorials ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.elektronikschule.de/~krausg/ Elektronikschule.de von Gunthard Kraus] (ORCAD-PSPICE, LTspice IV)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Entwicklungstools]]&lt;br /&gt;
[[Kategorie:Schaltplaneditoren]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Schaltungssimulation&amp;diff=84751</id>
		<title>Schaltungssimulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Schaltungssimulation&amp;diff=84751"/>
		<updated>2014-09-04T08:32:11Z</updated>

		<summary type="html">&lt;p&gt;Kichi: Links korrigert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Analog==&lt;br /&gt;
Für Analogsimulation und Mixed-Mode (Digital/Analog) ist Spice State-of-the-art. Spice ist inzwischen von vielen Herstellern erhältlich.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://bwrc.eecs.berkeley.edu/classes/icbook/spice/ The Spice Page] des EECS Department of the University of California at Berkeley.&lt;br /&gt;
&lt;br /&gt;
===PSpice===&lt;br /&gt;
&lt;br /&gt;
http://www.orcad.com/products/orcad-ee-designer/overview&lt;br /&gt;
* http://www.flowcad.de/PSpice.htm (deutsche Produktbeschreibung vom Händler)&lt;br /&gt;
* nur für Windows&lt;br /&gt;
* kostenlos mit Größeneinschränkung&lt;br /&gt;
* Version 16.6 ist die aktuelle Version&lt;br /&gt;
* Einführungen&lt;br /&gt;
** http://www.flowcad.de/Schnellstart_PSpice_16_6.pdf&lt;br /&gt;
** http://people.fh-landshut.de/~wlf/Pspice/Einfuehrung/Einfuehrung.pdf&lt;br /&gt;
** http://www.elektronikschule.de/~krausg/ (links im Menü &amp;quot;Einstieg in PSpice leichtgemacht&amp;quot;)&lt;br /&gt;
** [http://www.spicelab.de/index.htm Robert Heinemanns PSPICE-Seiten]&lt;br /&gt;
&lt;br /&gt;
===GeckoCIRCUITS===&lt;br /&gt;
&lt;br /&gt;
http://www.gecko-simulations.com&lt;br /&gt;
&lt;br /&gt;
* Java-Basierter Schaltungssimulator, speziell für Leistungselektronik geeignet&lt;br /&gt;
* Veröffentlicht unter der Gnu Public License (Open-Source)&lt;br /&gt;
* Kostenlos &lt;br /&gt;
* Wahlweise ausführbar als Java-Applet (Online-Simulation) oder als Download&lt;br /&gt;
* Multi-Domain Simulation: Schaltung/Thermische Netzwerke/Regelungstechnik&lt;br /&gt;
* Kopplungsmöglichkeit zu Matlab/Simulink&lt;br /&gt;
* Skriptsteuerung möglich&lt;br /&gt;
* ideale Schalter, Verlustberechnung möglich&lt;br /&gt;
* Sehr einfach zu bedienen und anwenderfreundlich, extrem schnell&lt;br /&gt;
&lt;br /&gt;
===Simplorer===&lt;br /&gt;
&lt;br /&gt;
http://www.ansoft.com/downloads.cfm&lt;br /&gt;
*kostenlose Studentenversion&lt;br /&gt;
*Anmeldung erforderlich&lt;br /&gt;
*Besondere Eignung für Leistungselektronik&lt;br /&gt;
*Möglichkeit den Simulationsablauf durch Zustandsgraphen zu steuern&lt;br /&gt;
*Besonders einfache Möglichkeit Kennlinien zur Parametersteuerung zu verwenden&lt;br /&gt;
*Integration verschiedener physikalischer Domänen möglich (Mechanik, Hydraulik, Elektrik (...) )&lt;br /&gt;
&lt;br /&gt;
Beispiel für die Leistungselektronik und Domänenübergriff: Mit den integrierten Mos-Fet Modellen (Level 1-3) wird eine B6 Brücke aufgebaut. Über die Zustandsgraphen kann eine&lt;br /&gt;
Raumzeigermodulation programmiert werden die über alpha-beta Koordinaten gesteuert&lt;br /&gt;
wird. Die Brücke steuert einen Asynchronmotor (Flussmodell) an diesem ist eine&lt;br /&gt;
Mechanische Last angeschlossen, z.B ein Feder-Dämpfer-System. Nun kann der Einfluss der Feder-Komponente auf die Zwischenkreisspannung analysiert werden.&lt;br /&gt;
&lt;br /&gt;
Simplorer wird überwiegend im Mechatronischen Bereich eingesetzt. Die Studentenversion ist leider Stark eingeschränkt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===LTspice/SwitcherCAD===&lt;br /&gt;
[[Datei:LTspice4-screenshot.png|miniatur|300px|Screenshot von LTspice IV]]&lt;br /&gt;
http://www.linear.com/designtools/software/#LTspice&lt;br /&gt;
&lt;br /&gt;
* Kostenlos und beliebt&lt;br /&gt;
&lt;br /&gt;
* Keinerlei Einschränkungen bezüglich Anzahl der Bauteile oder Knotenzahl&lt;br /&gt;
&lt;br /&gt;
* SPICE-Simulator integriert unter einer graphischen Oberfläche zum Zeichnen von zu simulierenden Schaltungen&lt;br /&gt;
&lt;br /&gt;
* Zum Einstieg empfehlenswert, da sehr übersichtlich. Erfordert allerdings mittelfristig detailliertere SPICE-Kenntnisse, da nicht alle SPICE-Funktionen hinter der graphischen Oberfläche versteckt sind.&lt;br /&gt;
&lt;br /&gt;
* Das Programm heißt inzwischen offiziell LTspice IV. Man findet oft noch die älteren Bezeichnungen LTspice/SwitcherCAD, LTspice/SwitcherCAD III, SwitcherCAD/LTspice, SwCAD oder LTspice in älteren Unterlagen.  &lt;br /&gt;
&lt;br /&gt;
* Windows-Software (98, 2000, XP, Vista, 7), läuft mit WINE unter Linux&lt;br /&gt;
&lt;br /&gt;
* Native Version für Mac OS X 10.7+ seit Ende 2013 erhältlich.&lt;br /&gt;
&lt;br /&gt;
* Von einem Halbleiterhersteller ([http://www.linear.com/ Linear Technology]). Kommt daher mit einer großen Anzahl von Modellen für Linear Technology-Bauelemente und vielen Beispielen für diese. Darüber hinaus erlaubt LT die Verwendung als allgemeines Werkzeug zum Schaltplan-Zeichnen und zur SPICE-Simulation.&lt;br /&gt;
: Andere Halbleiterhersteller liefern normalerweise keine explizit für LTspice vorgesehenen oder getesteten Modelle, da sie logischerweise keinen Mitbewerber (Linear Technologies) unterstützen wollen. LTspice versteht jedoch normale SPICE-Modelle (.SUBCKT, .MODEL, usw.). Da LTspice weitgehend die SPICE-Erweiterungen von PSPICE versteht, können auch PSPICE-Modelle verwendet werden. Allerdings muss man eventuell, wie bei reinen SPICE-Textmodellen, ein eigenes Schaltzeichen-Symbol für das Bauteil erstellen (LTspice versteht diesen Teil von PSPICE nicht).&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Das Einbinden von Fremdmodellen&#039;&#039;&#039; wird im Handbuch / der Programm-Hilfe von LTspice erklärt. Jedoch nicht im Hauptteil, sondern versteckt &#039;&#039;&#039;im Kapitel &#039;&#039;FAQ&#039;&#039;&#039;&#039;&#039;, wo die Erklärungen gerne übersehen werden.&lt;br /&gt;
&lt;br /&gt;
* Handbuch (entspricht der Programm-Hilfe): http://cds.linear.com/docs/ltspice/LTspiceHelp.chm&lt;br /&gt;
&lt;br /&gt;
* Kleine Einführung:&amp;lt;!-- Dieser Link funktioniert offenbar nicht mehr. http://www.lme.fh-muenchen.de/lst/spice/LTSpiceInfo.pdf --&amp;gt; http://www.ee.hm.edu/fk/lab/lst/spice/LTSpiceInfo.pdf&lt;br /&gt;
&lt;br /&gt;
* Längere, empfehlenswerte Einführung und zugehörige Beispielschaltungen: http://highered.mcgraw-hill.com/sites/0073106941/student_view0/lt_spice_instructions_and_support_files.html&lt;br /&gt;
&lt;br /&gt;
* International User Group: http://groups.yahoo.com/group/LTspice/&lt;br /&gt;
: Die User Group erfordert eine Anmeldung bei Yahoo und eine Zulassung zur Gruppe.&lt;br /&gt;
&lt;br /&gt;
: Eine Liste von Bauteilen, die aus verschiedenen Quellen stammen, ist nach Anmeldung in der obigen User Group zu bekommen. Dort gibt es auch die Modelle zum Download. Die erste Anlaufquelle, um häufig eingesetzte Bauteile zu finden.&lt;br /&gt;
&lt;br /&gt;
: Die Diskussion undokumentierter Befehle und Modelle sowie die Untersuchung der internen Funktionsweise wird konsequent unterbunden.&lt;br /&gt;
&lt;br /&gt;
* Eine Menge Modelle und eine gute Einführung http://www.elektronikschule.de/~krausg/&lt;br /&gt;
&lt;br /&gt;
* [http://ltwiki.org/index.php5?title=Main_Page LT Wiki Tipps, Tricks, undokumentierte Befehle] (englisch)&lt;br /&gt;
&lt;br /&gt;
* Regelungstechnik-Modelle http://home.scarlet.be/nap0/ltspice/&lt;br /&gt;
&lt;br /&gt;
===SIMetrix===&lt;br /&gt;
Größeneinschränkung&lt;br /&gt;
ab Win 2000 und teilw. Linux&lt;br /&gt;
http://www.catena.uk.com/site/downloads/SIMetrixIntro.htm&lt;br /&gt;
&lt;br /&gt;
===ngSpice===&lt;br /&gt;
&lt;br /&gt;
http://ngspice.sourceforge.net/&lt;br /&gt;
* Open Source (BSD-Lizenz)&lt;br /&gt;
* Kommandozeilenorientiert, mit graphischer Ausgabe&lt;br /&gt;
* Erweitert Berkeley spice3f5 [http://ngspice.sourceforge.net/extras.html um viele zusätzliche Möglichkeiten]  &lt;br /&gt;
* für Linux, Windows, MacOS&lt;br /&gt;
* integriert XSPICE, daher auch für Mixed-Signal-Simulation geeignet&lt;br /&gt;
* eigene XSPICE code models können erstellt werden&lt;br /&gt;
* integriert TclSpice, eine tcl/tk-Schnittstelle&lt;br /&gt;
* ausführliches Manual mit Einführung, Beipielen und allen aktuellen Features unter http://ngspice.sourceforge.net/docs/ngspice-manual.pdf&lt;br /&gt;
* Anleitung für gEDA und Spice http://www.brorson.com/gEDA/SPICE/t1.html&lt;br /&gt;
* [http://sourceforge.net/projects/gspiceui/ GSpiceUI - A graphic interface for SPICE] (Linux)&lt;br /&gt;
&lt;br /&gt;
===TCLSpice===&lt;br /&gt;
&lt;br /&gt;
http://tclspice.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
* TclSpice ist eine verbesserte Version von Berkeley Spice und benutzt die Tcl/Tk Skript Sprache. &lt;br /&gt;
* open-source (BSD Lizenz) basierend auf NG-Spice Quellcode&lt;br /&gt;
&lt;br /&gt;
===NI MultiSim / Electronics Workbench===&lt;br /&gt;
&lt;br /&gt;
http://www.ni.com/multisim/&lt;br /&gt;
http://www.electronicsworkbench.com/edu/eduhom.html&lt;br /&gt;
&lt;br /&gt;
* Electronics Workbench wurde von National Instruments aufgekauft. In NIs MultiSim aufgegangen.&lt;br /&gt;
* 30-Tage Testversionen erhältlich&lt;br /&gt;
* nur für Windows&lt;br /&gt;
* Ab Wine 1.0 und bis MultiSim 9 auch auf Linux lauffähig&lt;br /&gt;
* [http://www.analog.com/en/content/CU_multisim_SPICE_program_download/fca.html eine freie Version wird von Analog Devices angeboten]&lt;br /&gt;
&lt;br /&gt;
===Tina===&lt;br /&gt;
http://www.tina.com/&lt;br /&gt;
* sehr eingeschränkte Demo-Version (PCB Layout nur mit weniger als 50 Pads erlaubt)&lt;br /&gt;
* [http://focus.ti.com/docs/toolsw/folders/print/tina-ti.html Tina-TI Version von Texas Instrument] ähnlich dem LTSpice von Linear Technology, ebenfalls kostenlos&lt;br /&gt;
&lt;br /&gt;
===Gnucap===&lt;br /&gt;
* http://www.geda.seul.org/tools/gnucap/&lt;br /&gt;
* [http://sourceforge.net/projects/gspiceui/ GSpiceUI - A graphic interface] (Linux)&lt;br /&gt;
&lt;br /&gt;
===qucs===&lt;br /&gt;
http://qucs.sourceforge.net/&lt;br /&gt;
* freie Software&lt;br /&gt;
* für Linux, Windows, OS X&lt;br /&gt;
* viele Modelle aus dem HF-Bereich&lt;br /&gt;
&lt;br /&gt;
=== lcfilter ===&lt;br /&gt;
http://www-users.cs.york.ac.uk/~fisher/lcfilter/&lt;br /&gt;
Online-Filterberechnung L-C-Filter&lt;br /&gt;
&lt;br /&gt;
=== eispice ===&lt;br /&gt;
&lt;br /&gt;
http://www.thedigitalmachine.net/eispice.html&lt;br /&gt;
&lt;br /&gt;
SPICE ähnlicher Schaltungssimulator mit Python Interface&lt;br /&gt;
&lt;br /&gt;
=== Yenka Analogue Electronics ===&lt;br /&gt;
&lt;br /&gt;
[http://www.yenka.com/ Yenka] is a simulator for designing circuits using analogue electronic components. Mac OS X or Windows XP/Vista. You can use all Yenka products free of charge at home.&lt;br /&gt;
&lt;br /&gt;
=== Solve Elec ===&lt;br /&gt;
&lt;br /&gt;
With [http://www.physicsbox.com/indexsolveelec2en.html Solve Elec] you can:&lt;br /&gt;
* draw and analyze electrical circuits functioning in direct or alternating current&lt;br /&gt;
* get literal formulas and values for current intensities and voltages defined in the circuit.&lt;br /&gt;
* verify circuit related equations.&lt;br /&gt;
* draw graphs.&lt;br /&gt;
* get the equivalent circuit of displayed circuit&lt;br /&gt;
* browse an integrated documentation&lt;br /&gt;
* edit, save and print reports made of various elements displayed in main window &lt;br /&gt;
(MacOSX, Windows, Free)&lt;br /&gt;
&lt;br /&gt;
===PLECS===&lt;br /&gt;
&lt;br /&gt;
http://www.plexim.com/de/plecs&lt;br /&gt;
&lt;br /&gt;
* Die Simulationsplattform für leistungselektronische Systeme&lt;br /&gt;
* als MATLAB Toolbox und Standalone erhältlich&lt;br /&gt;
* freie Version je nach Universität erhältlich&lt;br /&gt;
* 30 Tage Testversion erhältnlich&lt;br /&gt;
* Schaltung mit elektrischer, magnetischer, mechanischer und thermischer Domain&lt;br /&gt;
&lt;br /&gt;
==Digital==&lt;br /&gt;
&lt;br /&gt;
===Simulo===&lt;br /&gt;
http://www.codeplex.com/simulo&lt;br /&gt;
* Simple and modern digital simulation program. It&#039;s based upon .NET Framework 3.5 SP1 and WPF.&lt;br /&gt;
&lt;br /&gt;
===DigitalSimulator===&lt;br /&gt;
http://www.draw2d.org/digitalsimulator/&lt;br /&gt;
* Windows und Online Browser Variante verfügbar&lt;br /&gt;
&lt;br /&gt;
=== HADES ===&lt;br /&gt;
http://tams-www.informatik.uni-hamburg.de/applets/hades/html/index.html&lt;br /&gt;
* betriebssystemunabhängig (Java)&lt;br /&gt;
&lt;br /&gt;
=== mkfilter ===&lt;br /&gt;
http://www-users.cs.york.ac.uk/~fisher/mkfilter/&lt;br /&gt;
Online-Digitalfilterberechnung FIR, IIR&lt;br /&gt;
&lt;br /&gt;
=== edef ===&lt;br /&gt;
[http://edef.sourceforge.net/ edef] - A simple discrete event simulation. The edef framework can be used to simulate typical logical circuits, autoregressive processes or digital controller circuits and maybe some more. It is designed to be simple enougth for use in schools or other educational context. It is also truly easy to extend.&lt;br /&gt;
&lt;br /&gt;
=== TkGate ===&lt;br /&gt;
[http://www.tkgate.org/ TkGate] is a event driven digital circuit simulator with a tcl/tk-based graphical editor. (GPL)&lt;br /&gt;
&lt;br /&gt;
=== Atanua ===&lt;br /&gt;
&lt;br /&gt;
[http://atanua.org/ Atanua ] is a real-time logic simulator, designed to help in learning of basic boolean logic and electronics. It uses OpenGL hardware-accelerated rendering and a custom UI designed for a fast workflow and a very low learning curve, letting the students concentrate on learning the subject instead of spending time learning the tool. (Personal non-commercial license: Free. Andere Nutzungen: siehe Webseite)&lt;br /&gt;
&lt;br /&gt;
=== MMLogic ===&lt;br /&gt;
&lt;br /&gt;
[http://www.softronix.com/logic.html MMLogic] is a MultiMedia Logic Design System for Windows (NT/2K/Xp/95/98/ME, now Freeware)&lt;br /&gt;
&lt;br /&gt;
=== WireItUp ===&lt;br /&gt;
&lt;br /&gt;
[http://www.wireitup.de WireItUp] is a Digital Logic Simulator especially made for educational purposes.(Windows 8/7/Vista/XP, Freeware)&lt;br /&gt;
&lt;br /&gt;
=== Yenka Digital Electronics ===&lt;br /&gt;
&lt;br /&gt;
[http://www.yenka.com/ Yenka] is a simulator for designing circuits using digital 4000 and 7400 series electronic components. Mac OS X or Windows XP/Vista. You can use all Yenka products free of charge at home.&lt;br /&gt;
&lt;br /&gt;
=== KSimus ===&lt;br /&gt;
&lt;br /&gt;
[http://ksimus.berlios.de/ KSimus] is a simulator for KDE.&lt;br /&gt;
&lt;br /&gt;
=== Digital Simulator ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mit.edu/~ara/ds.html Digital Simulator] has a toolbar of digital circuit elements, including logic gates, flip-flops, switches, and indicators. Drawing a circuit with Digital Simulator is like using a paint program. You click the element&#039;s icon on the toolbar, then click where you want the element to go. You use a similar procedure to draw wires and indicate connections. It&#039;s that simple. Free for educational institutions or students. (Windows 3.1, 95/NT)&lt;br /&gt;
&lt;br /&gt;
=== KLogic ===&lt;br /&gt;
&lt;br /&gt;
[http://www.a-rostin.de/indexd.html KLogic] ist eine Anwendung zum einfachen Entwurf und zur Simulation von Digitalschaltungen. KLogic ermöglicht einen einfachen Aufbau von Schaltungen aus Standardkomponenten wie UND, ODER, XOR, und Flipflops wie RS und JK. Um komplexere und wiederverwendbare Schaltungen zu entwerfen, können Teilschaltungen gespeichert und wiederverwendet werden.  (Linux, GPL)&lt;br /&gt;
Die letzte Version stammt aus dem Jahr 2006 und läuft leider recht instabil. Es gibt mittlerweile jede Menge grafisch unschöne Stellen und, schlimmer noch, auch diverse Bugs, die einen Crash verursachen.&lt;br /&gt;
&lt;br /&gt;
=== Logic Simulator ===&lt;br /&gt;
&lt;br /&gt;
With [http://www.tetzl.de/java_logic_simulator.html LogicSim] you can design and simulate digital logic circuits with logic gates like AND, OR, FlipFlop, etc.&lt;br /&gt;
&lt;br /&gt;
=== HS-FIR-Compiler ===&lt;br /&gt;
[http://www.steepestascent.com/content/default.asp?page=s2_22 steepestascent.com]&lt;br /&gt;
14 day evaluation license:&lt;br /&gt;
The High Speed FIR Filter Compiler is a standalone utility that automatically generates VHDL code for fast and efficient FIR filters and is ideal for both FPGA and ASIC implementation.&lt;br /&gt;
&lt;br /&gt;
=== Interactive 595 Shift Register Simulator ===&lt;br /&gt;
&lt;br /&gt;
[http://conductiveresistance.com/interactive-595-shift-register-simulator/ Interactive 595 Shift Register Simulator]&lt;br /&gt;
&lt;br /&gt;
=== Logic Circuit ===&lt;br /&gt;
&lt;br /&gt;
[http://www.logiccircuit.org/ Logic Circuit] is free, open source educational software for designing and simulating digital logic circuits. Intuitive graphical user interface, allows you to create unrestricted circuit hierarchy with multi bit buses, debug circuits behavior with oscilloscope, and navigate running circuits hierarchy. (GPLv2, Windows: .NET 4.0 erforderlich)&lt;br /&gt;
&lt;br /&gt;
== Mixed Analog-Digital ==&lt;br /&gt;
&lt;br /&gt;
===SPECTRE===&lt;br /&gt;
&lt;br /&gt;
Der [http://www.cadence.com/products/rf/spectre_circuit/pages/default.aspx Cadence Virtuoso Spectre Circuit Simulator] ist ein Mixed AD-Simulator auf der Basis von Spice. (Kommerziell)&lt;br /&gt;
&lt;br /&gt;
===HSPICE===&lt;br /&gt;
&lt;br /&gt;
[http://www.synopsys.com/Tools/Verification/AMSVerification/CircuitSimulation/HSPICE/Pages/default.aspx HSPICE] ist ein PSpice-ähnlicher Simulator, der sowohl ABM-Modelle, als auch eigens erstellte library-Modelle verarbeiten kann. (Kommerziell)&lt;br /&gt;
&lt;br /&gt;
===XSPICE===&lt;br /&gt;
http://users.ece.gatech.edu/~mrichard/Xspice/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===ngSpice===&lt;br /&gt;
&lt;br /&gt;
http://ngspice.sourceforge.net/&lt;br /&gt;
* Open Source (BSD-Lizenz)&lt;br /&gt;
* Kommandozeilenorientiert, mit graphischer Ausgabe&lt;br /&gt;
* Erweitert Berkeley spice3f5 [http://ngspice.sourceforge.net/extras.html um viele zusätzliche Möglichkeiten]  &lt;br /&gt;
* für Linux, Windows, MacOS&lt;br /&gt;
* integriert XSPICE, daher auch für Mixed-Signal-Simulation geeignet&lt;br /&gt;
* eigene XSPICE code models können erstellt werden&lt;br /&gt;
* ausführliches Manual mit Einführung, Beipielen und allen aktuellen Features unter http://ngspice.sourceforge.net/docs/ngspice-manual.pdf&lt;br /&gt;
&lt;br /&gt;
=== SMASH from DOLPHIN INTEGRATION ===&lt;br /&gt;
http://www.dolphin.fr/index.php/eda_solutions/products/smash/overview&lt;br /&gt;
* SMASH from Dolphin Integration is a mixed-signal, multi-language simulator for IP and IC designs. It uses [[SPICE]] syntax for analog descriptions, [[Verilog]]-HDL and [[VHDL]] for digital, Verilog-A/AMS, VHDL-AMS and ABCD (a combination of SPICE and C) for analog behavioral, and C for [[DSP]] algorithms.&lt;br /&gt;
* Logik, Analog und Mixed-Simulation&lt;br /&gt;
* Für Linux und Windows&lt;br /&gt;
* Engeschränkte Evaluationsversion erhältlich&lt;br /&gt;
&lt;br /&gt;
===Micro-Cap===&lt;br /&gt;
&lt;br /&gt;
http://www.spectrum-soft.com&lt;br /&gt;
* nur für Windows&lt;br /&gt;
* Evaluation Version (mit Einschränkungen) nach Registrierung erhältlich&lt;br /&gt;
&lt;br /&gt;
===GNU-Radio===&lt;br /&gt;
http://gnuradio.org/redmine/wiki/gnuradio&lt;br /&gt;
GNU Radio is a free software development toolkit that provides the signal processing runtime and processing blocks to implement software radios using readily-available, low-cost external RF hardware and commodity processors. It is widely used in hobbyist, academic and commercial environments to support wireless communications research as well as to implement real-world radio systems.&lt;br /&gt;
&lt;br /&gt;
=== Oregano ===&lt;br /&gt;
&lt;br /&gt;
http://oregano.gforge.lug.fi.uba.ar/&lt;br /&gt;
&lt;br /&gt;
Beschreibung von [http://elettrolinux.com/Simulations/oregano-an-electrical-tool.html elettrolinux.com]:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Oregano&#039;&#039;&#039; is a LINUX application for schematic capture and simulation of electronic circuits. Oregano has an user friendly graphic interface that allows to design and describe the circuit to simulate. It provides a wide variety of component libraries, including CMOS, TTL, lineal, operational amplifiers, and a lot more! Oregano lets you simulate the designed circuits. The actual simulation is performed by Berkeley Spice BSIM, GnuCAP or the new generation NGSpice. Oregano is licensed under the terms of the GNU GPL.&lt;br /&gt;
&lt;br /&gt;
=== VirtualBreadboard ===&lt;br /&gt;
&lt;br /&gt;
[http://www.virtualbreadboard.com/ VirtualBreadboard] is an easy to use simulation and modelling tool that can be used in place of a real breadboard for quickly performing experiments and testing out electronic and microcontroller ([[PIC]]) powered &#039;embedded&#039; applications. (Seit Version 3.3.12 11 July 2009 Freeware, Windows)&lt;br /&gt;
&lt;br /&gt;
=== BasicDSP ===&lt;br /&gt;
[http://www.vf.utwente.nl/~ptdeboer/ham/basicdsp/ von Pieter-Tjerk de Boer, PA3FWM, und Niels Moseley, PE1OIT]&lt;br /&gt;
A program for experimenting with simple audio DSP algorithms&lt;br /&gt;
&lt;br /&gt;
===LTspice/SwitcherCAD===&lt;br /&gt;
http://www.linear.com/designtools/software/#LTspice&lt;br /&gt;
&lt;br /&gt;
Hauptsächlich für die Simulation analoger Schaltungen verwendet, enthält LTspice doch einig digitale Grundfunktionen. Diese sind nur zum Teil im Handbuch als A-Schaltungselemente (&#039;&#039;Circuit Elements&#039;&#039; --&amp;gt; &#039;&#039;A. Special Functions&#039;&#039;) beschrieben.&lt;br /&gt;
&lt;br /&gt;
==Hochfrequenztechnik==&lt;br /&gt;
&lt;br /&gt;
=== Linksammlungen ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.circuitsage.com/tline.html Transmission Line Design and Analysis]&lt;br /&gt;
* [http://www.mwrf.com/Articles/Print.cfm?ArticleID=22572 Übersichtsartikel der Microwave &amp;amp; RF] [http://www.mwrf.com/Articles/Print.cfm?ArticleID=22809 und hier]&lt;br /&gt;
&lt;br /&gt;
=== Ansoft ===&lt;br /&gt;
*Maxwell SV: Simulation von elektrischen und magnetischen Feldern (2D) &lt;br /&gt;
*Simplorer SV: Schaltungssimulation&lt;br /&gt;
*PExprt SV: Berechung von Schaltnetzteilen&lt;br /&gt;
&lt;br /&gt;
Wurde 2008 von [http://www.ansys.com/ Ansys] gekauft,&lt;br /&gt;
http://www.ansys.com/Products/Simulation+Technology/Electromagnetics&lt;br /&gt;
&lt;br /&gt;
die kostenlose Studentenversion &amp;quot;Ansoft Designer&amp;quot; gibts nur noch von G.Kraus:&lt;br /&gt;
www.gunthard-kraus.de&lt;br /&gt;
[http://www.gunthard-kraus.de/Ansoft%20Designer%20SV/DesignerSV050610.exe Download exe-File]&lt;br /&gt;
=== ARRL Radio Designer ===&lt;br /&gt;
für 169&amp;amp;#8364; bei http://www.ukw-berichte.de erhältlich  http://www.arrl.org&lt;br /&gt;
* Amateurversion der amerikanischen Design-Software Super Compact.&lt;br /&gt;
* Mittlerweile durch Ansoft Designer (ehem. Ansoft Serenade) überholt&lt;br /&gt;
&lt;br /&gt;
=== AADE Filter Design ===&lt;br /&gt;
Homepage: http://www.aade.com/filter.htm&lt;br /&gt;
&lt;br /&gt;
kostenlose Analog-Filterberechnung:&lt;br /&gt;
* Butterworth, Chebyshev, Elliptic (Cauer), Bessel, Legendre and Linear Phase&lt;br /&gt;
* low-pass, high-pass, band-Pass, and band-reject filters.&lt;br /&gt;
* Coupled Resonator band-pass filters&lt;br /&gt;
* Crystal Ladder band-pass filters using identical crystals&lt;br /&gt;
&lt;br /&gt;
=== ActiveFilterDesign ===&lt;br /&gt;
Active Filter Design für Matlab, kostenloser Download: http://academics.vmi.edu/ee_js/Research/Programs/materials/AFD12.zip&lt;br /&gt;
&lt;br /&gt;
Handbuch: http://academics.vmi.edu/ee_js/Research/Programs/materials/Analog%20Filter%20Designer.pdf&lt;br /&gt;
&lt;br /&gt;
* FIR, IIR, analoge Filter, Synthese und Analyse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== atlc - Arbitrary Transmission Line Calculator ===&lt;br /&gt;
&lt;br /&gt;
* freie Software (Gnu General Public License)&lt;br /&gt;
&lt;br /&gt;
Übertragungsleitungen (und eingeschlossen Richtkoppler) können mit der Open Source Software auf ihre Impedanz, aber nicht ihre Dämpfung berechnet werden.&lt;br /&gt;
Dabei ist die Form und Anordnung der Leiter und Dielektrica beliebig, aber die Anzahl der Leiter ist auf maximal Drei beschränkt. Es können keine Hohlleiter berechnet werden. Die üblichen Anordnungen auf Leiterplatten werden aber abgedeckt. Es wird eine Bitmap erstellt, die geometrischen und elektrischen Eigenschaften des Leitungsquerschnits als Farbe codiert enthält. Diese Bitmap wird dann vom Programm bearbeitet. Die Methode, die das Programm benutzt, ist die der [http://de.wikipedia.org/wiki/Finite-Differenzen-Methode finiten Differenzen]. Autor des Programmes ist Dr. David Kirkby alias G8WRB.&lt;br /&gt;
Das Programm ist in den meisten gängigen Linux Distributionen als Package erhältlich. Die Homepage mit Anleitungen, FAQ und Beispielen findet sich hier:&lt;br /&gt;
http://atlc.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
=== AWR ===&lt;br /&gt;
http://web.awrcorp.com/&lt;br /&gt;
&lt;br /&gt;
free trial versions erhältlich für:&lt;br /&gt;
* ANALOG OFFICE   -   High-Frequency Design Software for Analog and RFICs&lt;br /&gt;
* APLAC   -   Harmonic balance simulation engine&lt;br /&gt;
* AXIEM   -   3D Planar Electromagnetic Software for Antennas and Passives&lt;br /&gt;
* MICROWAVE OFFICE   -   RF and Microwave Design Software for MMIC, RF PCB and Modules&lt;br /&gt;
* VISUAL SYSTEM SIMULATOR   -   Wireless Communication System Design Software&lt;br /&gt;
&lt;br /&gt;
* TxLine [http://web.awrcorp.com/Usa/Products/Optional-Products/TX-Line/ free Transmission Line Calculator]&lt;br /&gt;
&lt;br /&gt;
=== CST STUDIO SUITE™ ===&lt;br /&gt;
http://www.cst.com/&lt;br /&gt;
&lt;br /&gt;
...deckt alles ab, 3D-EM Simulation für elektrostatische Probleme bis Hochfrequenz, Zeit- und Frequenzbereich, Fernfelder, EMV, Spice-Ersatzmodelle, PCBs, Partikelsimulation, Co-Simulation mit thermischen und mechanischen Problemen, Raytraycing.&lt;br /&gt;
&lt;br /&gt;
=== Elsie ===&lt;br /&gt;
http://www.tonnesoftware.com/elsie.html&lt;br /&gt;
a Windows electrical filter design and analysis program handling all of the usual options (family, topology, bandwidth, etc.). It has a nice toolbox including real-time tuning modes and optimization. Outputs are presentation quality. Student edition is free. &lt;br /&gt;
&lt;br /&gt;
=== FastHenry ===&lt;br /&gt;
Windowsversion http://www.fastfieldsolvers.com/&lt;br /&gt;
&lt;br /&gt;
* open source&lt;br /&gt;
* Impedanzextraktion (R und L) aus 3D-Geometrieen&lt;br /&gt;
* Erfasst Skin-, Proximity-Effekte, magnetische Kopplungseffekte&lt;br /&gt;
* Erstellung von Spice-Modellen möglich&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== FilterFree ===&lt;br /&gt;
http://www.nuhertz.com/filter/&lt;br /&gt;
&lt;br /&gt;
Filter Free is the free version of Filter Solutions and Filter Light. Functionality is limited 3rd order analog and IIR filters, and 10 tap FIR filters. Filters are synthesized. Frequency, time, and reflection analysis are performed on the ideal, unmodified filters only. Transfer functions are displayed in standard form only.&lt;br /&gt;
&lt;br /&gt;
=== HP AppCAD ===&lt;br /&gt;
http://www.hp.woodshot.com/&lt;br /&gt;
&lt;br /&gt;
RF design software is provided free of charge by Agilent Technologies&lt;br /&gt;
as a service to the RF and microwave design community&lt;br /&gt;
&lt;br /&gt;
Läuft unter Windows ab 95c/NT4&lt;br /&gt;
&lt;br /&gt;
=== Nova.exe ===&lt;br /&gt;
http://www.pcb-pool.com/ppde/service_downloads.html&lt;br /&gt;
&lt;br /&gt;
NOVA is a program that can be used to analyze most linear (AC) circuits. It&lt;br /&gt;
can calculate voltage, phase, and delay at any circuit point (node) at any&lt;br /&gt;
frequencies. Most (AC) circuit analysis programs can only give useful results&lt;br /&gt;
for low frequencies (below 10 Mhz). NOVA can do this but it can also be used&lt;br /&gt;
for RF and microwave circuits. Microwave circuits require the analysis be done&lt;br /&gt;
in terms of S-parameters, rather then AC voltages.  NOVA does AC, time domain,&lt;br /&gt;
and S-parameter analysis.This version of NOVA has circuit tweaking while in the graph mode. You may find it extremely useful. Vary a component and watch the response, return loss, and delay change. &lt;br /&gt;
&lt;br /&gt;
Gutes altes DOS-Programm, AC- oder S-Parameter-Darstellung.&lt;br /&gt;
Ausdruck unter WinXP nur mit Screenshot-Programm möglich, getestet z.&amp;amp;nbsp;B. mit Snarf15: http://www.idcomm.com/personal/lorenblaney/SNARF15.ZIP&lt;br /&gt;
&lt;br /&gt;
=== PUFF - Microwave Design Software ===&lt;br /&gt;
für 22&amp;amp;#8364; bei http://www.ukw-berichte.de/ erhältlich&lt;br /&gt;
* altes DOS-Programm für HF-Simulation und Platinenentwurf&lt;br /&gt;
* Microstrip HF-Berechnungen, Smith-Diagramm&lt;br /&gt;
* in den UKW-Berichten standen schon mehrere Artikel mit Beispielen&lt;br /&gt;
* zur Nutzung einer Kombination aus PUFF und Ansoft SV (=Studentenversion)&lt;br /&gt;
&lt;br /&gt;
Seit Anfang 2010 wird PUFF unter der GPLv3 License geführt. Der Pascal Quelltext mit Linux Package und Handbuch ist frei verfügbar. [http://wwwhome.cs.utwente.nl/~ptdeboer/ham/puff/ PUFF microwave CAD software on Linux]&lt;br /&gt;
&lt;br /&gt;
=== RF-Sim 99 ===&lt;br /&gt;
kostenlos z.&amp;amp;nbsp;B. von: http://www.janson-soft.de/amateurfunk/rfsim99/rfsim99.htm&lt;br /&gt;
&lt;br /&gt;
oder neben anderen PDFs zur HF-Technik: http://home.sandiego.edu/~ekim/e194rfs01/&lt;br /&gt;
* Berechnung aktiver und passiver Filter einschließlich Schaltplaneingabe&lt;br /&gt;
* Ausgabe von Frequenz- und Phasengang, Smith-Diagramm&lt;br /&gt;
&lt;br /&gt;
=== Smith Plot ===&lt;br /&gt;
Neben diversen Mathcad-Beispielen und Skripten aus der HF-Technik eine Smith-Chart-Software:&lt;br /&gt;
http://www.fritz.dellsperger.net/downloads.htm&lt;br /&gt;
&lt;br /&gt;
=== Sonnet Lite ===&lt;br /&gt;
Sonnet Lite provides a full-wave EM solution for 3D planar circuits&lt;br /&gt;
A fully functional and powerful EM analysis software. &lt;br /&gt;
Get started on your EM analysis within the next 30 minutes by downloading SONNET Lite!&lt;br /&gt;
http://www.sonnetsoftware.com/products/lite/&lt;br /&gt;
http://www.sonnetsoftware.com/&lt;br /&gt;
&lt;br /&gt;
===qucs===&lt;br /&gt;
http://qucs.sourceforge.net/&lt;br /&gt;
* freie Software&lt;br /&gt;
* für Linux, Windows, OS X&lt;br /&gt;
* hervorragende technische Dokumentation&lt;br /&gt;
* Impedanzrechenfunktionen für Strip- und Microstripleitungen&lt;br /&gt;
* Filterberechnungstool&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===ADS (Advanced Design System)===&lt;br /&gt;
http://www.home.agilent.com/en/pc-1297113/advanced-design-system-ads?&amp;amp;cc=DE&amp;amp;lc=ger&lt;br /&gt;
&lt;br /&gt;
http://de.wikipedia.org/wiki/Advanced_Design_System&lt;br /&gt;
&lt;br /&gt;
Advanced Design System, kurz ADS, ist eine spezielle Simulationssoftware der Firma Agilent zur Simulation von elektrischen Schaltungen für die Hochfrequenztechnik und stellt in diesem Segment einen Industriestandard dar.&lt;br /&gt;
&lt;br /&gt;
==Antennensimulation==&lt;br /&gt;
&lt;br /&gt;
=== cocoaNEC ===&lt;br /&gt;
Homepage: http://homepage.mac.com/chen/w7ay/cocoaNEC/index.html&lt;br /&gt;
* Design und modulierung von Antennen&lt;br /&gt;
* MacOS X (PowerPC und Intel)&lt;br /&gt;
* Frei erhältlich (mit Quellcode)&lt;br /&gt;
&lt;br /&gt;
=== EZ-NEC ===&lt;br /&gt;
Homepage: http://eznec.com/&lt;br /&gt;
* Antennenberechnung&lt;br /&gt;
demo program allows only 20 segments, which limits the complexity of antenna&lt;br /&gt;
you can analyze. (EZNEC 4.0 allows 500 )&lt;br /&gt;
&lt;br /&gt;
=== MiniNEC ===&lt;br /&gt;
Homepage: http://www.emsci.com/   &#039;&#039;&#039;(2013-05-01 Seite nicht mehr vorhanden)&#039;&#039;&#039;&lt;br /&gt;
* Antennenberechnung mittels &amp;quot;Momentenmethode&amp;quot; (Zerlegung der Antenne in kleine Segmente, Überlagerung der Teilfelder)&lt;br /&gt;
* eingeschränkte Studenten/Amateurversion erhältlich&lt;br /&gt;
* NEC = Numerical Electromagnetics Code&lt;br /&gt;
&lt;br /&gt;
=== SuperNEC ===&lt;br /&gt;
Homepage: http://www.supernec.com/&lt;br /&gt;
* Antennenberechnung mittels &amp;quot;Momentenmethode&amp;quot;&lt;br /&gt;
* 30-Tage-Testversion sowie unbegrenzt lauffähige Studentenversion (gegen Nachweis) erhältlich&lt;br /&gt;
&lt;br /&gt;
=== MMANA ===&lt;br /&gt;
Homepage (deutsche Version) : http://dl2kq.de/mmana/4-7.htm&lt;br /&gt;
&lt;br /&gt;
Kostenlose Antennen-Analysesoftware, auf der mit MININEC Version 3 eingeführten Momentenmethode basierend&lt;br /&gt;
&lt;br /&gt;
=== RadioMobile ===&lt;br /&gt;
Hochfrequenz-Ausbreitungssimulation&lt;br /&gt;
* [http://www.cplus.org/rmw/english1.html Hauptseite]&lt;br /&gt;
* [http://www.cplus.org/rmw/rme.html Beispielbilder]&lt;br /&gt;
* [http://www.cplus.org/rmw/dataen.html dazu erforderliche Kartendaten]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/SRTM-Daten Wikipedia zum SRTM-Kartendatenformat]&lt;br /&gt;
&lt;br /&gt;
== Sonstige ==&lt;br /&gt;
&lt;br /&gt;
=== FEMM ===&lt;br /&gt;
* [http://www.femm.info/wiki/HomePage Finite Element Method Magnetics] (FEMM)&lt;br /&gt;
&lt;br /&gt;
=== GALEMU ===&lt;br /&gt;
&lt;br /&gt;
[http://bu3sch.de/joomla/index.php/galpal-emulator Galemu] is a [[GAL]]/[[PAL]] chip emulator. (GPL)&lt;br /&gt;
&lt;br /&gt;
==Numerische Berechnungswerkzeuge==&lt;br /&gt;
&lt;br /&gt;
===Derive===&lt;br /&gt;
http://education.ti.com&lt;br /&gt;
&lt;br /&gt;
===FreeMat===&lt;br /&gt;
http://freemat.sourceforge.net&lt;br /&gt;
* freier MatLab-Clone&lt;br /&gt;
* für Windows, Linux, Mac OS X&lt;br /&gt;
&lt;br /&gt;
===GAUSS===&lt;br /&gt;
Wissenschaftliche Simulationssoftware zur Berechung 3-dimensionaler Ladungsverteilungen in z.&amp;amp;nbsp;B. Halbleitern. Kann aus Geometrie und Dotierungsprofilen die Halbleitergleichungen ableiten.&lt;br /&gt;
&lt;br /&gt;
===GnuPlot===&lt;br /&gt;
http://www.gnuplot.info/&lt;br /&gt;
* freie Software&lt;br /&gt;
* für Linux, Windows und weitere&lt;br /&gt;
* sehr mächtiges Tool, aber eher im Bereich der Datenauswertung (Diagramme)&lt;br /&gt;
* [http://ttsiodras.googlepages.com/gnuplotStreaming.html Visualize real-time data streams with Gnuplot] (Perl)&lt;br /&gt;
&lt;br /&gt;
===Maple===&lt;br /&gt;
http://www.maplesoft.com/&lt;br /&gt;
* Wissenschaftliche Analyse und Simulationssystem zur Lösung komplexester Aufgaben der Mathematik. Lizenzpflichtig.&lt;br /&gt;
&lt;br /&gt;
===JMathLib===&lt;br /&gt;
http://mathlib.sourceforge.net&lt;br /&gt;
* freier Matlab-Clone in 100% Java&lt;br /&gt;
* für Windows, Linux, ...&lt;br /&gt;
&lt;br /&gt;
===MatLab===&lt;br /&gt;
http://www.mathworks.com/&lt;br /&gt;
&lt;br /&gt;
===MuPad===&lt;br /&gt;
http://www.mupad.de/&lt;br /&gt;
&lt;br /&gt;
===Mathcad===&lt;br /&gt;
http://www.mathsoft.com/ http://www.ptc.com/appserver/mkt/products/home.jsp?k=3901&lt;br /&gt;
* rechnen mit Formeln wie auf dem Papier&lt;br /&gt;
&lt;br /&gt;
===Maxima===&lt;br /&gt;
http://maxima.sourceforge.net/&lt;br /&gt;
* freie Software für Linux, OSX, Windows&lt;br /&gt;
&lt;br /&gt;
===Octave===&lt;br /&gt;
http://www.octave.org/&lt;br /&gt;
* freier MatLab-Clone. Die Syntax ist überwiegend identisch&lt;br /&gt;
* für Linux, Windows, OSX&lt;br /&gt;
&lt;br /&gt;
===GNU R===&lt;br /&gt;
http://www.r-project.org/&lt;br /&gt;
* freier S-Clone. Die Syntax ist überwiegend identisch&lt;br /&gt;
* für Linux, Windows, OSX&lt;br /&gt;
&lt;br /&gt;
===SciLab===&lt;br /&gt;
http://www.scilab.org/&lt;br /&gt;
* freie Software&lt;br /&gt;
* für Linux, Windows, MacOS&lt;br /&gt;
* stellt eine C++ Library bereit, die in eigene DSP-Systeme eingebunden werden kann&lt;br /&gt;
&lt;br /&gt;
===scipy===&lt;br /&gt;
scipy [http://www.scipy.org/] ist eine Erweiterung der Skriptsprache Python [http://www.python.org] mit numerischen Funktionen&lt;br /&gt;
* freie Software&lt;br /&gt;
* für Linux, Windows, OSX&lt;br /&gt;
&lt;br /&gt;
===SMathStudio===&lt;br /&gt;
SMathStudio [http://www.smathstudio.com/] ist ein an MathCad angelehntes numerischer Berechnungs-, Visualisierungs-, und Dokumentationstool. Die Software ist Freeware/Donationware. Sie ist ins deutsche übersetzt, wird derzeit (Stand 26.06.2012) aktiv weiterentwickelt und supported im eigenem Forum&lt;br /&gt;
&lt;br /&gt;
== Online Schaltungssimulatoren ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/79658#664688 Diskussion im Forum]&lt;br /&gt;
* http://www.falstad.com/circuit/&lt;br /&gt;
* [http://www.intersil.com/isim/ Intersil’s iSim]&lt;br /&gt;
* [http://smile.hsu-hh.de/Schaltungen/Index.htm WSPICE] (fixe Schaltungen)&lt;br /&gt;
* [http://micropci1.imtek.uni-freiburg.de/svs/ spicy VOLTsim]&lt;br /&gt;
* [http://www.gecko-simulations.com/geckocircuits.html GeckoCIRCUITS]&lt;br /&gt;
* [https://www.circuitlab.com CircuitLab]&lt;br /&gt;
* [http://www.poweresim.com/ PowerEsim] - Free SMPS Switching Power Supply / Transformer Design Software&lt;br /&gt;
&lt;br /&gt;
== Tutorials ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.elektronikschule.de/~krausg/ Elektronikschule.de von Gunthard Kraus] (ORCAD-PSPICE, LTspice IV)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Entwicklungstools]]&lt;br /&gt;
[[Kategorie:Schaltplaneditoren]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=200MHz_DDS-Generator&amp;diff=82694</id>
		<title>200MHz DDS-Generator</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=200MHz_DDS-Generator&amp;diff=82694"/>
		<updated>2014-04-17T09:02:17Z</updated>

		<summary type="html">&lt;p&gt;Kichi: /* Spezifikationen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Übersicht ==&lt;br /&gt;
In diesem Projekt soll versucht werden, einen hochwertigen, aber trotzdem kostengünstigen Sinus-Generator mit einer maximalen Ausgangsfrequenz von 180MHz bis 200MHz auf Basis einer [[DDS]] zu bauen. Die Materialkosten sollen 200€ nicht überschreiten.&lt;br /&gt;
&lt;br /&gt;
== Spezifikationen ==&lt;br /&gt;
* 180MHz&lt;br /&gt;
* Option um mit Aliasfilter bis 360MHz und ggf. 620MHz  zu erzeugen - hierbei aber das Phasenrauschen im Auge behalten. Ggf. ist diesbezüglich eine Lösung mit einem Mischer und PLL vernünftiger (aber auch teurer).&lt;br /&gt;
* Sinus Ausgang&lt;br /&gt;
* Optional Rechteck Ausgang via Komparator&lt;br /&gt;
* DC-Offset?&lt;br /&gt;
* Ausgangspegel bis 23dBm, einstellbar&lt;br /&gt;
* Modularer Aufbau, damit Funktionen ergänzt oder weggelassen werden können&lt;br /&gt;
* Option zum Einspeisen eines externen Referenztaktes&lt;br /&gt;
* Option: guter CTXO (z.&amp;amp;nbsp;B. von CMAC) zu verlöten&lt;br /&gt;
* Option: Steuerung via Bluetooth-&amp;gt;Seriell-Wandler&lt;br /&gt;
&lt;br /&gt;
== Pflichtenheft== &lt;br /&gt;
Zweck: &lt;br /&gt;
Hier sollen die exakten Spezifikationen für den DDS-Generator festgehalten und verwaltet werden&lt;br /&gt;
&lt;br /&gt;
Kurze Beschreibung der Baugruppen:&lt;br /&gt;
* Der DDS Generator soll modular aufgebaut werden damit HF Dichtigkeit gewaehrleistet ist. Die Schaltung soll wie folgend in Baugruppen aufgeteilt werden:&lt;br /&gt;
** Netzteil/DC Power Schaltung. Stellt alle Spannungen bereit und elektonische Hybrid/uC Ein/Ausschaltungsteuerung. Spannungen je nach uC, jedenfaflls +12V, 5V. Die DDS Baugruppe soll eingebaute Regler fuer 3.3V/1.8V mit Rauschfilterung haben&lt;br /&gt;
** DDS Hauptmodul mit DDS IC, Filter, Verstärker, Pegel Feineinstellung, AM Modulator&lt;br /&gt;
** Digital gesteuerter HF Abschwächer mit entweder I2C oder Direkter Relaissteuerung.&lt;br /&gt;
** Optionaler DSP FM Modulator zur Nachrüstung um digitale FM Modulation(FM, FSK, PSK, FM-Stereo) zu ermöglichen.&lt;br /&gt;
** uC Hautptplatine. Entweder selbstgefertigt oder kommerzielle Platine&lt;br /&gt;
** USB Interface mit FTDI232RL&lt;br /&gt;
** Optionale CGI Web Server Modul fuer Steuerung der DDS Funktionen mit Web Browser oder LabVIEW oder ähnlich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Abmessungen:&lt;br /&gt;
&lt;br /&gt;
Userinterface - Anzeigen:&lt;br /&gt;
&lt;br /&gt;
Definition Umweltbedingungen:&lt;br /&gt;
* Der Generator soll von -20°C bis 85°C lagerfähig sein. (Lagertemperatur)&lt;br /&gt;
* Die Elektronik soll von 0°C bis 55°C einsatzfähig sein. (Betriebstemperatur)&lt;br /&gt;
* Die Elektonik soll von -20°C bis 85°C versandfähig sein. (Versandtemperatur)&lt;br /&gt;
* Die Schaltung soll von 600 bis 1200 mbar  arbeiten. &lt;br /&gt;
* Die Luftfeuchtigkeit, in der die Schaltung einwandfrei arbeitet soll zwischen 20% und 80% liegen. (Nicht kondensierend)&lt;br /&gt;
&lt;br /&gt;
Wasserdichtigkeit /IP-Klasse:&lt;br /&gt;
IPX0&lt;br /&gt;
&lt;br /&gt;
Netzeingang, Sicherungen, Netzfilter:&lt;br /&gt;
* Es soll eine Sicherung vorgesehen werden.&lt;br /&gt;
* Es soll ein Varistor gegen Surges / Spikes vorgesehen werden.&lt;br /&gt;
&lt;br /&gt;
Normen und Standards:&lt;br /&gt;
&lt;br /&gt;
Sicherheitsfunktionen:&lt;br /&gt;
* Spezielle Sicherheitsfunktionen sollen nicht vorgesehen werden.&lt;br /&gt;
&lt;br /&gt;
Schutzfunktionen:&lt;br /&gt;
&lt;br /&gt;
Sicherungen: &lt;br /&gt;
&lt;br /&gt;
Abschaltungskriterien:&lt;br /&gt;
&lt;br /&gt;
Servicefunktionen:&lt;br /&gt;
* Einige BITE Funktionen sind wuenschenswert. &lt;br /&gt;
* Eingebaute uC Abgleichhilfen sollten nach Moeglichkeit in Betracht gezogen werden.&lt;br /&gt;
Definitionen Betriebsspannungen:&lt;br /&gt;
&lt;br /&gt;
Pegel:&lt;br /&gt;
* Der Ausgangspegel soll den Bereich von mindestens +13dBm bis -136dBm in 0.01dB Schritten überstreichen. &lt;br /&gt;
* Der Abschwächer soll einen Bereich bis 127dB in 1dB Schritten haben. Zwischen 1dB wird der Ausgangspegel des DDS DAC fein eingestellt.&lt;br /&gt;
* System Impedanz soll 50Ω sein.&lt;br /&gt;
Ausgänge:&lt;br /&gt;
* Hauptausgang im Bereich von +13dBm bis -136dBm.&lt;br /&gt;
* Sync Ausgang in TTL/CMOS&lt;br /&gt;
* Sweep X Ausgang 0-10V zur Ansteuerung eines Oszilloskop mit 10bit Aufloesung.&lt;br /&gt;
* TTL Markerausgang mit der DDS Abstimmung gekoppelt so dass genaue Frequenzmessungen mittels der DDS Anzeige und Oszilloskopdarstellung möglich sind. TTL Pegel.&lt;br /&gt;
&lt;br /&gt;
Eingänge:&lt;br /&gt;
* Eingang fuer einen HF Detector mit logarithmischen Ausgang so dass man den DDS Generator fuer Netzwerkmessungen bequem verwenden kann. Die HF Werte sollen über die Schnittstellen ansprechbar sein so dass ein PC zur weiteren Anzeige und Steuerung dienen kann. Der HF Detector kann analog oder digitale Ausgaenge haben(I2C, SPI, UART, USB) mit mindestens 16-bit Aufloesung.&lt;br /&gt;
* Externer Referenzfrequenzeingang zwischen 1-40MHz. Nachführung der DDS Zeitbasis entweder mit schmalbandiger PLL (solange der Oszillator elektronisch abgestimmt werden kann) oder digitale Kompensation mittels Frequenzzähler und uC Korrektur in der DDS Datenaufbereitung.&lt;br /&gt;
&lt;br /&gt;
Aufbau Leiterplatten:&lt;br /&gt;
* Die Leiterplatten sollen aus 1,6mm starken FR4 gefertigt werden.&lt;br /&gt;
* Die Leiterplatten sollen 2-Lagig ausgeführt werden.&lt;br /&gt;
* Die Leiterplatten werden mit Stopplack unten und oben versehen.&lt;br /&gt;
* Es wird kein Bestückdruck vorgesehen.&lt;br /&gt;
&lt;br /&gt;
Design Details:&lt;br /&gt;
* Isolationen sollen, wenn möglich mit 5/3mm Luft und Krichstrecke ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
* Teiler für analoge Signale sollen als Widerstände eingeplant werden.&lt;br /&gt;
* Alle wichtigen Ein- und Ausgänge sollen mit einem PAD zur Prüfen versehen werden.&lt;br /&gt;
* Die minimale Leiterbahnbreite soll 0,2mm betragen.&lt;br /&gt;
* Der minimaler Restring soll 0,2mm betragen.&lt;br /&gt;
* Der minimaler Abstand soll 0,2mm betragen.&lt;br /&gt;
* Beschriftungen sollen ins Kupfer geschrieben werden.&lt;br /&gt;
* Die Leiterplatten soll mit &amp;quot;TOP&amp;quot; und &amp;quot;BOTT&amp;quot; gekennzeichnet werden.&lt;br /&gt;
* Die Leiterplatten soll mit zwei Fiducicals versehen werden. ( 1.5mm Kreis Kupfer, Stopplack 2mm im Quadrat ausgespart.)&lt;br /&gt;
* Die Leiterplatten sollen mit XXX gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Ausführliche Schaltungsbeschreibung:&lt;br /&gt;
* Stromversorgungsbaugruppe:&lt;br /&gt;
* Die Stromversorgungsbaugruppe soll zwei Eingänge besitzen.&lt;br /&gt;
* Beide Eingänge sollen von 8-30V Eingangsspannung ausgelegt sein.&lt;br /&gt;
* An einen Eingang soll ein internes Netzteil angeschlossen werden.&lt;br /&gt;
* An den zweiten Eingang soll ein externes Netzteil angeschlossen werden.&lt;br /&gt;
* Optional soll eine Lademöglichkeit für die nachträgliche Aufrüstung mit Lithium-Ionen-Akkus vorgesehen werden.&lt;br /&gt;
* Die beiden Spannungen sollen miteinander &amp;quot;Ver-Odert&amp;quot; werden. Dazu soll eine Ideale Diode mit MOSFET und Steuerchip von Linear Technology eingesetzt werden.&lt;br /&gt;
* Die 12V sollen mit einem Spannungsregler Typ LTC3780 von Linear Technologie erzeugt werden.&lt;br /&gt;
* Die 5 Volt sollen mit einem Spannungregler Typ LM25575 von National erzeugt werden.&lt;br /&gt;
* GGv. sollen die Spannungen auf 12,5V und 5,5V eingestellt werden, um auf den folgenden Baugruppen eine rausch und ripple-freie Spannung mit einem LDO erzeugen zu können.&lt;br /&gt;
&lt;br /&gt;
Anzeigeeinheit:&lt;br /&gt;
* LCD 4x20 HD44780 kompatibel oder ein Grafik-LCD-Display-Modul.&lt;br /&gt;
* Menüführung über Tasten oder opt. Encoder.&lt;br /&gt;
&lt;br /&gt;
== Blockschaltbild ==&lt;br /&gt;
* Hier ist ein vorläufiges Blockschaltbild von meinem geplanten Konzept mit dem AD9951 als DDS Kern. &lt;br /&gt;
*[[Datei:DDS_Blockdiagram_R2.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Komponenten ==&lt;br /&gt;
=== Steuerteil ===&lt;br /&gt;
Die Steuerung soll ein µC (ATMega) übernehmen. Über eine Tastatur, einen Inkrementalgeber und ein alphanumerisches 2*16 Zeichen Display können die Parameter eingestellt werden.&lt;br /&gt;
Zusätzlich ist die Steuerung und Programmierung über eine isolierte USB Schnittstelle (FT232 Bus Supply o.ä. mit Optokoppler an TX und RX Signal) möglich.&lt;br /&gt;
&lt;br /&gt;
=== DDS ===&lt;br /&gt;
Als DDS Chip könnte der AD9951 dienen ([http://www.analog.com/static/imported-files/Data_Sheets/AD9951.pdf Datenblatt]). Allerdings hat der AD9954 bei fast gleichem Preis einen integrierten Komparator und ein 1024x32 RAM welches das Frequenz sweeping erleichtert:&lt;br /&gt;
[http://www.analog.com/static/imported-files/Data_Sheets/AD9954.pdf Datenblatt]&lt;br /&gt;
Da der Chip einen symetrischen Ausgang hat kann sein Signal über einen Breitbandübertrager geführt werden um Störungen zu reduzieren. Die Möglichkeit, den Chip leicht zu übertakten, muss noch geprüft werden.&lt;br /&gt;
&lt;br /&gt;
Als Alternative bietet sich der 9910 an, der standardmässig bis 400MHz arbeiten kann und eine Reihe weiterer Modulationsfunktionen bietet.&lt;br /&gt;
&lt;br /&gt;
=== Filter ===&lt;br /&gt;
&lt;br /&gt;
=== Verstärker ===&lt;br /&gt;
&lt;br /&gt;
=== Abschwächer ===&lt;br /&gt;
Zur Zeit ist ein binärer Abschwächer mit 127dB Bereich und den G6K-2P Relais im Aufbau zur Erprobung. I2C Schnittstelle mit TPIC2810 und optionales EEPROM für Korrekturtabelle. Frequenzbereich DC-300MHz. Mehr Informationen kommen in den nächsten paar Wochen.&lt;br /&gt;
&lt;br /&gt;
=== Gehäuse ===&lt;br /&gt;
Als Gehäuse ist eventuell ein Aparaturgehäuse wie das CP-15-33 sinvoll: [http://zefiryn.tme.pl/dok/a30/cp-15-33.pdf Datenblatt]. Eine andere hochwertigere und teurere Möglichkeit ist ein Metallgehäuse.&lt;br /&gt;
&lt;br /&gt;
== Ressourcen ==&lt;br /&gt;
=== Ähnliche Projekte ===&lt;br /&gt;
* [http://www.dl1alt.de/ www.dl1alt.de -&amp;gt; NWT-201]&lt;br /&gt;
* [http://www-public.tu-bs.de:8080/~y0023797/DA/Diplomarbeit.pdf Diplomarbeit: DDS-Generator bis 120 MHz] (down)&lt;br /&gt;
* [http://albinotroll.nerx.net/artikel/diplomarbeit_frequenzgenerator.pdf Diplomarbeit: Frequenzgenerator 100 MHz] (down)&lt;br /&gt;
* Funkamateur 3/08 High End DDS VFO mit dem AD9912&lt;br /&gt;
* Funkamateur 3/07 Vektorieller Antennenanalysator mit AD9958&lt;br /&gt;
* Funkamateur 11/06 Netzwerktester mit AD9951&lt;br /&gt;
* Funkamateur 11/05 DDS VFO fuer 2-m Transceiver&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/DDS_basierter_Funktionsgenerator_mit_AD5930 Funktionsgenerator mit AD5930]&lt;br /&gt;
&lt;br /&gt;
=== Nützliche Infos === &lt;br /&gt;
* [http://www.coilcraft.com/ www.coilcraft.com -&amp;gt; Breitbandübertrager]&lt;br /&gt;
* [http://www.minicircuits.com/ www.minicircuits.com -&amp;gt; Verstärker, Abschwächer]&lt;br /&gt;
* [http://www.aade.com/filter32/download.htm www.aade.com/filter32/download.htm -&amp;gt; AADE Filter Designer und Simulator]&lt;br /&gt;
* [http://www.analog.com/static/imported-files/tutorials/450968421DDS_Tutorial_rev12-2-99.pdf A Technical Tutorial on Digital Signal Synthesis]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorschläge sind jederzeit willkommen!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Diskussion zu diesem Projekt: http://www.mikrocontroller.net/topic/166831&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Signalgeneratoren]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=200MHz_DDS-Generator&amp;diff=82693</id>
		<title>200MHz DDS-Generator</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=200MHz_DDS-Generator&amp;diff=82693"/>
		<updated>2014-04-17T09:01:44Z</updated>

		<summary type="html">&lt;p&gt;Kichi: /* Spezifikationen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Übersicht ==&lt;br /&gt;
In diesem Projekt soll versucht werden, einen hochwertigen, aber trotzdem kostengünstigen Sinus-Generator mit einer maximalen Ausgangsfrequenz von 180MHz bis 200MHz auf Basis einer [[DDS]] zu bauen. Die Materialkosten sollen 200€ nicht überschreiten.&lt;br /&gt;
&lt;br /&gt;
== Spezifikationen ==&lt;br /&gt;
* 180MHz&lt;br /&gt;
* Option um mit Aliasfilter bis 360MHz und ggf. 620MHz  zu erzeugen - hierbei aber das Phasenrauschen im Auge behalten. Ggf. ist diesbezüglich eine Lösung mit einem Mischer und PLL vernünftiger (aber auch teurer).&lt;br /&gt;
* Sinus Ausgang&lt;br /&gt;
* Optional Rechteck Ausgang via Komperator&lt;br /&gt;
* DC-Offset?&lt;br /&gt;
* Ausgangspegel bis 23dBm, einstellbar&lt;br /&gt;
* Modularer Aufbau, damit Funktionen ergänzt oder weggelassen werden können&lt;br /&gt;
* Option zum Einspeisen eines externen Referenztaktes&lt;br /&gt;
* Option: guter CTXO (z.&amp;amp;nbsp;B. von CMAC) zu verlöten&lt;br /&gt;
* Option: Steuerung via Bluetooth-&amp;gt;Seriel Wandler&lt;br /&gt;
&lt;br /&gt;
== Pflichtenheft== &lt;br /&gt;
Zweck: &lt;br /&gt;
Hier sollen die exakten Spezifikationen für den DDS-Generator festgehalten und verwaltet werden&lt;br /&gt;
&lt;br /&gt;
Kurze Beschreibung der Baugruppen:&lt;br /&gt;
* Der DDS Generator soll modular aufgebaut werden damit HF Dichtigkeit gewaehrleistet ist. Die Schaltung soll wie folgend in Baugruppen aufgeteilt werden:&lt;br /&gt;
** Netzteil/DC Power Schaltung. Stellt alle Spannungen bereit und elektonische Hybrid/uC Ein/Ausschaltungsteuerung. Spannungen je nach uC, jedenfaflls +12V, 5V. Die DDS Baugruppe soll eingebaute Regler fuer 3.3V/1.8V mit Rauschfilterung haben&lt;br /&gt;
** DDS Hauptmodul mit DDS IC, Filter, Verstärker, Pegel Feineinstellung, AM Modulator&lt;br /&gt;
** Digital gesteuerter HF Abschwächer mit entweder I2C oder Direkter Relaissteuerung.&lt;br /&gt;
** Optionaler DSP FM Modulator zur Nachrüstung um digitale FM Modulation(FM, FSK, PSK, FM-Stereo) zu ermöglichen.&lt;br /&gt;
** uC Hautptplatine. Entweder selbstgefertigt oder kommerzielle Platine&lt;br /&gt;
** USB Interface mit FTDI232RL&lt;br /&gt;
** Optionale CGI Web Server Modul fuer Steuerung der DDS Funktionen mit Web Browser oder LabVIEW oder ähnlich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Abmessungen:&lt;br /&gt;
&lt;br /&gt;
Userinterface - Anzeigen:&lt;br /&gt;
&lt;br /&gt;
Definition Umweltbedingungen:&lt;br /&gt;
* Der Generator soll von -20°C bis 85°C lagerfähig sein. (Lagertemperatur)&lt;br /&gt;
* Die Elektronik soll von 0°C bis 55°C einsatzfähig sein. (Betriebstemperatur)&lt;br /&gt;
* Die Elektonik soll von -20°C bis 85°C versandfähig sein. (Versandtemperatur)&lt;br /&gt;
* Die Schaltung soll von 600 bis 1200 mbar  arbeiten. &lt;br /&gt;
* Die Luftfeuchtigkeit, in der die Schaltung einwandfrei arbeitet soll zwischen 20% und 80% liegen. (Nicht kondensierend)&lt;br /&gt;
&lt;br /&gt;
Wasserdichtigkeit /IP-Klasse:&lt;br /&gt;
IPX0&lt;br /&gt;
&lt;br /&gt;
Netzeingang, Sicherungen, Netzfilter:&lt;br /&gt;
* Es soll eine Sicherung vorgesehen werden.&lt;br /&gt;
* Es soll ein Varistor gegen Surges / Spikes vorgesehen werden.&lt;br /&gt;
&lt;br /&gt;
Normen und Standards:&lt;br /&gt;
&lt;br /&gt;
Sicherheitsfunktionen:&lt;br /&gt;
* Spezielle Sicherheitsfunktionen sollen nicht vorgesehen werden.&lt;br /&gt;
&lt;br /&gt;
Schutzfunktionen:&lt;br /&gt;
&lt;br /&gt;
Sicherungen: &lt;br /&gt;
&lt;br /&gt;
Abschaltungskriterien:&lt;br /&gt;
&lt;br /&gt;
Servicefunktionen:&lt;br /&gt;
* Einige BITE Funktionen sind wuenschenswert. &lt;br /&gt;
* Eingebaute uC Abgleichhilfen sollten nach Moeglichkeit in Betracht gezogen werden.&lt;br /&gt;
Definitionen Betriebsspannungen:&lt;br /&gt;
&lt;br /&gt;
Pegel:&lt;br /&gt;
* Der Ausgangspegel soll den Bereich von mindestens +13dBm bis -136dBm in 0.01dB Schritten überstreichen. &lt;br /&gt;
* Der Abschwächer soll einen Bereich bis 127dB in 1dB Schritten haben. Zwischen 1dB wird der Ausgangspegel des DDS DAC fein eingestellt.&lt;br /&gt;
* System Impedanz soll 50Ω sein.&lt;br /&gt;
Ausgänge:&lt;br /&gt;
* Hauptausgang im Bereich von +13dBm bis -136dBm.&lt;br /&gt;
* Sync Ausgang in TTL/CMOS&lt;br /&gt;
* Sweep X Ausgang 0-10V zur Ansteuerung eines Oszilloskop mit 10bit Aufloesung.&lt;br /&gt;
* TTL Markerausgang mit der DDS Abstimmung gekoppelt so dass genaue Frequenzmessungen mittels der DDS Anzeige und Oszilloskopdarstellung möglich sind. TTL Pegel.&lt;br /&gt;
&lt;br /&gt;
Eingänge:&lt;br /&gt;
* Eingang fuer einen HF Detector mit logarithmischen Ausgang so dass man den DDS Generator fuer Netzwerkmessungen bequem verwenden kann. Die HF Werte sollen über die Schnittstellen ansprechbar sein so dass ein PC zur weiteren Anzeige und Steuerung dienen kann. Der HF Detector kann analog oder digitale Ausgaenge haben(I2C, SPI, UART, USB) mit mindestens 16-bit Aufloesung.&lt;br /&gt;
* Externer Referenzfrequenzeingang zwischen 1-40MHz. Nachführung der DDS Zeitbasis entweder mit schmalbandiger PLL (solange der Oszillator elektronisch abgestimmt werden kann) oder digitale Kompensation mittels Frequenzzähler und uC Korrektur in der DDS Datenaufbereitung.&lt;br /&gt;
&lt;br /&gt;
Aufbau Leiterplatten:&lt;br /&gt;
* Die Leiterplatten sollen aus 1,6mm starken FR4 gefertigt werden.&lt;br /&gt;
* Die Leiterplatten sollen 2-Lagig ausgeführt werden.&lt;br /&gt;
* Die Leiterplatten werden mit Stopplack unten und oben versehen.&lt;br /&gt;
* Es wird kein Bestückdruck vorgesehen.&lt;br /&gt;
&lt;br /&gt;
Design Details:&lt;br /&gt;
* Isolationen sollen, wenn möglich mit 5/3mm Luft und Krichstrecke ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
* Teiler für analoge Signale sollen als Widerstände eingeplant werden.&lt;br /&gt;
* Alle wichtigen Ein- und Ausgänge sollen mit einem PAD zur Prüfen versehen werden.&lt;br /&gt;
* Die minimale Leiterbahnbreite soll 0,2mm betragen.&lt;br /&gt;
* Der minimaler Restring soll 0,2mm betragen.&lt;br /&gt;
* Der minimaler Abstand soll 0,2mm betragen.&lt;br /&gt;
* Beschriftungen sollen ins Kupfer geschrieben werden.&lt;br /&gt;
* Die Leiterplatten soll mit &amp;quot;TOP&amp;quot; und &amp;quot;BOTT&amp;quot; gekennzeichnet werden.&lt;br /&gt;
* Die Leiterplatten soll mit zwei Fiducicals versehen werden. ( 1.5mm Kreis Kupfer, Stopplack 2mm im Quadrat ausgespart.)&lt;br /&gt;
* Die Leiterplatten sollen mit XXX gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Ausführliche Schaltungsbeschreibung:&lt;br /&gt;
* Stromversorgungsbaugruppe:&lt;br /&gt;
* Die Stromversorgungsbaugruppe soll zwei Eingänge besitzen.&lt;br /&gt;
* Beide Eingänge sollen von 8-30V Eingangsspannung ausgelegt sein.&lt;br /&gt;
* An einen Eingang soll ein internes Netzteil angeschlossen werden.&lt;br /&gt;
* An den zweiten Eingang soll ein externes Netzteil angeschlossen werden.&lt;br /&gt;
* Optional soll eine Lademöglichkeit für die nachträgliche Aufrüstung mit Lithium-Ionen-Akkus vorgesehen werden.&lt;br /&gt;
* Die beiden Spannungen sollen miteinander &amp;quot;Ver-Odert&amp;quot; werden. Dazu soll eine Ideale Diode mit MOSFET und Steuerchip von Linear Technology eingesetzt werden.&lt;br /&gt;
* Die 12V sollen mit einem Spannungsregler Typ LTC3780 von Linear Technologie erzeugt werden.&lt;br /&gt;
* Die 5 Volt sollen mit einem Spannungregler Typ LM25575 von National erzeugt werden.&lt;br /&gt;
* GGv. sollen die Spannungen auf 12,5V und 5,5V eingestellt werden, um auf den folgenden Baugruppen eine rausch und ripple-freie Spannung mit einem LDO erzeugen zu können.&lt;br /&gt;
&lt;br /&gt;
Anzeigeeinheit:&lt;br /&gt;
* LCD 4x20 HD44780 kompatibel oder ein Grafik-LCD-Display-Modul.&lt;br /&gt;
* Menüführung über Tasten oder opt. Encoder.&lt;br /&gt;
&lt;br /&gt;
== Blockschaltbild ==&lt;br /&gt;
* Hier ist ein vorläufiges Blockschaltbild von meinem geplanten Konzept mit dem AD9951 als DDS Kern. &lt;br /&gt;
*[[Datei:DDS_Blockdiagram_R2.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Komponenten ==&lt;br /&gt;
=== Steuerteil ===&lt;br /&gt;
Die Steuerung soll ein µC (ATMega) übernehmen. Über eine Tastatur, einen Inkrementalgeber und ein alphanumerisches 2*16 Zeichen Display können die Parameter eingestellt werden.&lt;br /&gt;
Zusätzlich ist die Steuerung und Programmierung über eine isolierte USB Schnittstelle (FT232 Bus Supply o.ä. mit Optokoppler an TX und RX Signal) möglich.&lt;br /&gt;
&lt;br /&gt;
=== DDS ===&lt;br /&gt;
Als DDS Chip könnte der AD9951 dienen ([http://www.analog.com/static/imported-files/Data_Sheets/AD9951.pdf Datenblatt]). Allerdings hat der AD9954 bei fast gleichem Preis einen integrierten Komparator und ein 1024x32 RAM welches das Frequenz sweeping erleichtert:&lt;br /&gt;
[http://www.analog.com/static/imported-files/Data_Sheets/AD9954.pdf Datenblatt]&lt;br /&gt;
Da der Chip einen symetrischen Ausgang hat kann sein Signal über einen Breitbandübertrager geführt werden um Störungen zu reduzieren. Die Möglichkeit, den Chip leicht zu übertakten, muss noch geprüft werden.&lt;br /&gt;
&lt;br /&gt;
Als Alternative bietet sich der 9910 an, der standardmässig bis 400MHz arbeiten kann und eine Reihe weiterer Modulationsfunktionen bietet.&lt;br /&gt;
&lt;br /&gt;
=== Filter ===&lt;br /&gt;
&lt;br /&gt;
=== Verstärker ===&lt;br /&gt;
&lt;br /&gt;
=== Abschwächer ===&lt;br /&gt;
Zur Zeit ist ein binärer Abschwächer mit 127dB Bereich und den G6K-2P Relais im Aufbau zur Erprobung. I2C Schnittstelle mit TPIC2810 und optionales EEPROM für Korrekturtabelle. Frequenzbereich DC-300MHz. Mehr Informationen kommen in den nächsten paar Wochen.&lt;br /&gt;
&lt;br /&gt;
=== Gehäuse ===&lt;br /&gt;
Als Gehäuse ist eventuell ein Aparaturgehäuse wie das CP-15-33 sinvoll: [http://zefiryn.tme.pl/dok/a30/cp-15-33.pdf Datenblatt]. Eine andere hochwertigere und teurere Möglichkeit ist ein Metallgehäuse.&lt;br /&gt;
&lt;br /&gt;
== Ressourcen ==&lt;br /&gt;
=== Ähnliche Projekte ===&lt;br /&gt;
* [http://www.dl1alt.de/ www.dl1alt.de -&amp;gt; NWT-201]&lt;br /&gt;
* [http://www-public.tu-bs.de:8080/~y0023797/DA/Diplomarbeit.pdf Diplomarbeit: DDS-Generator bis 120 MHz] (down)&lt;br /&gt;
* [http://albinotroll.nerx.net/artikel/diplomarbeit_frequenzgenerator.pdf Diplomarbeit: Frequenzgenerator 100 MHz] (down)&lt;br /&gt;
* Funkamateur 3/08 High End DDS VFO mit dem AD9912&lt;br /&gt;
* Funkamateur 3/07 Vektorieller Antennenanalysator mit AD9958&lt;br /&gt;
* Funkamateur 11/06 Netzwerktester mit AD9951&lt;br /&gt;
* Funkamateur 11/05 DDS VFO fuer 2-m Transceiver&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/DDS_basierter_Funktionsgenerator_mit_AD5930 Funktionsgenerator mit AD5930]&lt;br /&gt;
&lt;br /&gt;
=== Nützliche Infos === &lt;br /&gt;
* [http://www.coilcraft.com/ www.coilcraft.com -&amp;gt; Breitbandübertrager]&lt;br /&gt;
* [http://www.minicircuits.com/ www.minicircuits.com -&amp;gt; Verstärker, Abschwächer]&lt;br /&gt;
* [http://www.aade.com/filter32/download.htm www.aade.com/filter32/download.htm -&amp;gt; AADE Filter Designer und Simulator]&lt;br /&gt;
* [http://www.analog.com/static/imported-files/tutorials/450968421DDS_Tutorial_rev12-2-99.pdf A Technical Tutorial on Digital Signal Synthesis]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorschläge sind jederzeit willkommen!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Diskussion zu diesem Projekt: http://www.mikrocontroller.net/topic/166831&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Signalgeneratoren]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_Installation&amp;diff=81130</id>
		<title>STM32 Eclipse Installation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_Installation&amp;diff=81130"/>
		<updated>2014-01-24T08:09:17Z</updated>

		<summary type="html">&lt;p&gt;Kichi: /* MicroXplorer - MCU graphical configuration tool */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel beschreibt, wie man Eclipse unter Windows installiert und für den Prozessor STM32 einrichtet, so dass ein Debuggen möglich ist.&lt;br /&gt;
&lt;br /&gt;
== Installation von Eclipse unter Windows ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Zusammenhänge:&#039;&#039;&#039;&lt;br /&gt;
* Eclipse - der Editor, ist eigentlich nichts weiteres als ein Editor, mit sehr viel Intelligenz&lt;br /&gt;
* Toolchain (make, Compiler, Linker, GDB, Bibliotheken, etc.). Hier gibt es verschiedene Möglichkeiten:&lt;br /&gt;
** YAGARTO GNU ARM toolchain - der Compiler und Debugger für Cortex-M3. Zusätzlich werden die Yagarto-Tools (make und sonstige Programme) benötigt.&lt;br /&gt;
** CodeSourcery - beinhaltet alle benötigten Tools, wie make, GCC, GDB, Newlib usw.&lt;br /&gt;
** GNU Tools for ARM Embedded Processors - benötigt zusätzlich ebenfalls make und rm bspw. aus den Yagarto-Tools&lt;br /&gt;
* CDT - Plugin, das Eclipse erweitert, sodaß C/C++ Programme editiert, kompiliert und gelinkt werden können. CDT steht für &amp;quot;C/C++ Development Tooling&amp;quot;. Man kann Eclipse auch mit schon integrierten CDT auf der Eclipse Homepage bekommen.&lt;br /&gt;
* GDB Hardware Debugging - ein weiteres Eclipse-Plugin, welches notwendig ist, um mittels GDB und weiteren Tools Programme zu debuggen.&lt;br /&gt;
* GDB - der GNU Debugger, mit ihm ist es möglich, entsprechend kompilierte Programme auf C-Sourcelevel (und auch Assembler) zu debuggen. Er kann allerdings nicht direkt mit einem JTAG-Interface sprechen. Er &amp;quot;verbindet&amp;quot; sich dafür mit einem GDB-Server, der dann das JTAG-I/F anspricht.&lt;br /&gt;
* GDB-Server - stellt eine Verbindung mit GDB und dem JTAG-Interface her. Er führt die Kommandos des GDBs aus. Der Server muss vor dem debuggen gestartet werden, da GDB einen laufenden GDB-Server erwartet. Die Verbindung zwischen dem GDB und dem GDB-Server wird über eine TCP/IP Verbindung hergestellt.&lt;br /&gt;
** OpenOCD - ein freier GDB-Server&lt;br /&gt;
** Texane STlink - ebenfalls frei&lt;br /&gt;
* JTAG-Interface, z.B. Olimex ARM-USB-OCD, ST-Link oder diverse andere. Meist über USB an den PC angeschlossen, über ein JTAG-Kabel wird der Adapter mit der Prozessor-Platine verbunden. Der GDB-Server nimmt Kommandos vom GDB entgegen und führt diese über das JTAG-I/F des Prozessors aus.&lt;br /&gt;
* STM32-Prozessor, ja den braucht es auch noch, sonst gibt es nichts zu debuggen.&lt;br /&gt;
&lt;br /&gt;
Es sieht zwar auf den ersten Blick etwas komplex aus, aber es ist dennoch logisch aufgebaut.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Die benötigten Dateien für Eclipse:&lt;br /&gt;
&lt;br /&gt;
* [http://yagarto.de/ Yagarto-Tools http://yagarto.de/]&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/index.html Java JDK] Installation um Eclipse starten zu können.&lt;br /&gt;
* [http://eclipse.org/downloads/ Eclipse], der Download &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot;&lt;br /&gt;
* [http://www.freddiechopin.info/ OpenOCD http://www.freddiechopin.info/] &amp;gt;&amp;gt; Download &amp;gt;&amp;gt; Software &amp;gt;&amp;gt; OpenOCD&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Eclipse Demo-Projekt: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Media: Proj_Demo.zip | Blink-LED, komplettes Eclipse-Workspace von MmVisual]]&lt;br /&gt;
* Eclipse Workspace&lt;br /&gt;
* Mit OpenOCD und Dateien für den Olimex ARM-USB-OCD&lt;br /&gt;
* FW-Lib 3.4.0 von ST&lt;br /&gt;
* Start-Up Code als C-Datei, keine einzige Assembler-Datei&lt;br /&gt;
* Für STM32F103RB (128K Flash) wegen Initialisierung Stack-Pointer&lt;br /&gt;
* Nutzt make Tool, muss aber zu gmake umbenannt werden, ist weiter unten beschrieben&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Installation von Eclipse ===&lt;br /&gt;
Damit Eclipse gestartet werden kann, ist es nötig, dass zunächst Java installiert wird. Dabei muss einfach den Anweisungen des Installers gefolgt werden. Nachdem diese Installation abgeschlossen wurde, kann mit der Eclipse &amp;quot;Installation&amp;quot; fortgefahren werden.&lt;br /&gt;
&lt;br /&gt;
Eclipse befindet sich (sofern im Download ausgewählt) in einem ZIP-Archiv. In diesem Archiv sind alle benötigten Dateien vorhanden, um Eclipse direkt starten zu können. Dieses ZIP-Archiv sollte dann zu C:\eclipse\ entpackt werden. In diesem Beispiel wird davon ausgegangen, dass eclipse zu den o.g. Pfad entpackt wird.&lt;br /&gt;
&lt;br /&gt;
Sobald Eclipse vollständig entpackt wurde, kann eclipse gestartet werden. Während Eclipse startet, muss ein sog. Workspace ausgewählt werden. In diesem Workspace werden später alle Projekte und Sourcecodes abgelegt. Die Nachfolgende Grafik zeigt dieses Dialog-Fenster.&lt;br /&gt;
[[Datei:choose_workspace.png]]&lt;br /&gt;
Nachdem Eclipse erfolgreich gestartet werden kann, ist die Installation natürlich nicht abgeschlossen, da noch ein Compiler usw. für dem ARM-Mikrocontroller fehlt.&lt;br /&gt;
&lt;br /&gt;
Für die Toolchain, sprich Compiler, newlib usw. hat man nun die Qual der Wahl, entweder man nimmt Yagarto-Tools oder Codesourcery. Der Unterschied zwischen den beiden toolchains ist nicht direkt erkennbar und soll an dieser Stelle nicht weiter behandelt werden. Ich verweise an dieser Stelle an den folgenden Foreneintrag:&lt;br /&gt;
[[http://www.mikrocontroller.net/topic/158503#1503836 Unterschied WinARM und Codesourcery]]&lt;br /&gt;
&lt;br /&gt;
Ich persönlich habe mich für Codesourcery entschieden, da Truestuido von Atollic ebenfalls den none-eabi Compiler verwendet und dadurch die Linkerscripts direkt von Truestudio übernommen werden können.&lt;br /&gt;
&lt;br /&gt;
=== Installation der Code-Sourcery Umgebung ===&lt;br /&gt;
Wer sich nun für die Code-Sourcery Umgebung entschieden hat, steht nun schon vor einem kleinerem Problem - Welche Version von Code-Sourcery soll man wählen?&lt;br /&gt;
Zur Auswahl stehen folgende Versionen:&lt;br /&gt;
  * uCLinux&lt;br /&gt;
  * EABI&lt;br /&gt;
  * GNU/Linux&lt;br /&gt;
  * SymbianOS&lt;br /&gt;
Hier ist die Wahl auf EABI beschränkt. Für weitere Hinweise siehe: [[http://www.codesourcery.com/sgpp/lite/arm/portal/doc9876/getting-started.pdf Codesourcery Getting-Started]]&lt;br /&gt;
&lt;br /&gt;
Die Installation von Code-Sourcery ist komplett Menü geführt und entsprechend intuitiv durchzuführen. Dabei werden nachfolgend die wichtigsten Komponenten kurz erläutert:&lt;br /&gt;
&lt;br /&gt;
CodeSourcery Common Startup Code Sequence&lt;br /&gt;
Diese vordefinierten Startup-Codes werden für den Start des Mikrocontrollers benutzt. Dabei wird der Stackpointer, die Interrupt-Handler usw. initialisiert. Die Benutzung dieser Startupcodes wird hier nicht näher Betrachtet, da STM vorgefertigte Startup-Codes kostenlos anbietet.&lt;br /&gt;
&lt;br /&gt;
  * CodeSourcery Debug Sprite for ARM&lt;br /&gt;
Die Debug-Sprite Umgebung ermöglicht das Debuggen eines Mikrocontrollers über JTAG. Debug-Sprite kann dabei über XML-Dateien konfiguriert werden. Jedoch kann Debug-Sprite nicht für das Debuggen von STM32-Mikrocontrollern verwendet werden.&lt;br /&gt;
GNU Binary Utilities (Binutils)&lt;br /&gt;
Die Binutils beinhaltet den GNU-Assembler sowie den für das Übersetzen eines C-Software-Modules benötigen Linker. &lt;br /&gt;
&lt;br /&gt;
  * GNU C Compiler (GCC)&lt;br /&gt;
Der GNU-C Compiler übersetzt den C-Code zu den sog. Object-Codes.&lt;br /&gt;
&lt;br /&gt;
  * GNU C++ Compiler (G++)&lt;br /&gt;
Der G++ Compiler übersetzt ein C++-Software-Modul zu Object-Codes, um damit die Verwendung von C++ auf einem Mikrocontroller zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
  * GNU C++ Runtime Library (Libstdc++)&lt;br /&gt;
Diese Library stellt C++ spezifische Funktionen zu Verfügung.&lt;br /&gt;
&lt;br /&gt;
  * GNU Debugger (GDB)&lt;br /&gt;
Der Debugger ist der GDB-Client, der für das Debuggen eines Software-Moduls genutzt wird. &lt;br /&gt;
&lt;br /&gt;
  * Newlib C Library&lt;br /&gt;
&lt;br /&gt;
Die Newlib stellt die std-Lib für einen Mikrocontroller zu Verfügung. Dabei ist zu beachten, das die Newlib syscalls und stubs nutzt, um so eine Betriebssystemunabhängige Benutzung zu ermöglichen. Dies ermöglicht die Benutzung der Newlib auf einem Bare-Metal-System und auf einem uC-Linux basiertem Software-Modul.&lt;br /&gt;
&lt;br /&gt;
Ich persönlich habe als Installationsverzeichnis C:\WinARM benutzt, damit die entsprechenden Pfade zu bestimmten binaris keine großartigen Sonderzeichen aufweisen.&lt;br /&gt;
&lt;br /&gt;
=== Installation der Yagarto Umgebung ===&lt;br /&gt;
Die Installation sollte so ausgeführt werden, dass alles nach &amp;quot;C:\WinARM\&amp;quot; installiert wird, dazu müssen in den Setup-Paketen während des Setups immer die Pfade &amp;quot;C:\Programme\&amp;quot; angepasst werden. Damit kann man die gesamte Entwicklung und Konfiguration einfach sichern als ZIP Datei und sogar bei einem zweiten Rechner wieder einspielen.&lt;br /&gt;
&lt;br /&gt;
Zu erst werden die Downloads von Yagarto geladen und installiert. Dort ist auch sehr gut beschrieben wie das Einrichten geht.&lt;br /&gt;
Allerdings fehlt auf der Yagarto-Seite der Hinweis auf den Download-Link des eigentlichen Eclipse Programms, daher ist er oben im Artikel aufgeführt.&lt;br /&gt;
&lt;br /&gt;
Wenn man diese [http://yagarto.de/howto/yagarto2/index.html#download Yagarto-Anleitung] abgeschlossen hat kommt die Einrichtung von OpenOCD.&lt;br /&gt;
Eine Debugger-Einrichtung ist bei [http://yagarto.de/howto/yagarto2/index.html#cbug Yagarto] auch beschrieben, allerdings nicht für den STM32 Prozessor.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation von Yagarto-Tools muss eine Datei geändert werden:&lt;br /&gt;
C:\WinARM\yagarto-tools\bin\make.exe muss nach gmake.exe umbenannt werden.&lt;br /&gt;
Grund: Wenn man Delphi installiert hat, dann würde Eclipse das make Tool von Delphi finden und man kann das Eclipse Projekt nicht kompilieren.&lt;br /&gt;
Das Demo-Projekt nutzt auch das &amp;quot;gmake.exe&amp;quot;.&lt;br /&gt;
Alternativ kann auch make.exe kopiert zu gmake.exe werden, wenn man kein Delphi installiert hat.&lt;br /&gt;
&lt;br /&gt;
==== Start mit dem Demo-Projekt ====&lt;br /&gt;
&lt;br /&gt;
Für alle Projekte habe ich das Verzeichnis C:\WinARM\Projekt\ vorgesehen, damit ist immer alles zusammen. Nun entpackt man das Demo-Projekt nach C:\WinARM\Projekt\ somit müsste dort ein neues Unterverzeichnis &amp;quot;Proj_Demo&amp;quot; vorhanden sein samt allen unterordnern.&lt;br /&gt;
&lt;br /&gt;
Nun Eclipse Öffnen. Menü &amp;quot;File&amp;quot; &amp;gt;&amp;gt; &amp;quot;Switch Workspace&amp;quot; &amp;gt;&amp;gt; &amp;quot;Other...&amp;quot;. In der Eingabezeile &amp;quot;Workspace:&amp;quot; wird nun das Verzeichnis &amp;quot;C:\WinARM\Projekt\Proj_Demo&amp;quot; eingegeben. Mit OK wird sich Eclipse beenden und neu starten.&lt;br /&gt;
&lt;br /&gt;
Links im Baum sieht man das Projekt &amp;quot;BlinkLED&amp;quot;:&lt;br /&gt;
* inc:  die eigenen Includes&lt;br /&gt;
* lib:  die FW-Lib von ST&lt;br /&gt;
* out:  die kompilierten Dateien und listings&lt;br /&gt;
* prj:  OpenOCD und LD Linker-Datei&lt;br /&gt;
* src:  die eigenen Quellcodes&lt;br /&gt;
* makefile&lt;br /&gt;
&lt;br /&gt;
Das Projekt wurde geschrieben für den STM32F103RC (256K Flash/48K RAM), läuft aber auch mit einem STM32F103xB da der Stack-Pointer auf 20K initialisiert wird. Details stehen in der Datei &amp;quot;src/stm32f10x_vector.c&amp;quot;, Zeile 29,30:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#define STACK_TOP (0x20005000 - 4)&lt;br /&gt;
//#define STACK_TOP (0x2000C000 - 4)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Damit wird der Stack-Pointer für den RAM im Chip initialisiert.&lt;br /&gt;
&lt;br /&gt;
Zum kompilieren rechten Mausklick auf das Projekt (normalerweise links im Navigator oder Projekt-Explorer) und dann im aufgehenden Kontextmenu auf &amp;quot;Build&amp;quot; klicken.&lt;br /&gt;
Mit Strg+B wird nicht nur das Projekt neu kompiliert sondern ALLE Projekte im aktuellen Workspace gerade offen sind. Wenn man dort nur ein Projekt hat geht auch CTRL-B.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Die Funktionen des Demo-Projekts &#039;&#039;&#039;&lt;br /&gt;
* Blink-LED auf Prot A.0, Port C.7, PortD.3,4,7,13 (STM3210C-EVAL Board)&lt;br /&gt;
* Initialisieren aller Variablen&lt;br /&gt;
* Initialisieren Clock auf HSI, 8MHz&lt;br /&gt;
* Initialisieren IO-Pins der LED&#039;s&lt;br /&gt;
* Initialisieren Timer für Systick&lt;br /&gt;
* Main-Schleife in der die Timer-Variablen gesetzt und die LED&#039;s ausgegeben werden&lt;br /&gt;
* Debug-Helper, siehe &amp;quot;src\DebugHelper.c&amp;quot;&lt;br /&gt;
* Systick-Interrupt&lt;br /&gt;
* komplett in C programmiert, kein Assembler&lt;br /&gt;
* ST FW-Lib V3.4.0 wird für alle Funktionen genutzt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erster Start mit dem Demo-Projekt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mit Eclipse mit der grünen Play-Taste mit dem roten Koffer &amp;quot;Run OpenOCD BlinkLED&amp;quot; &amp;quot;OpenOCD BlinkLED starten. Damit wird der GDB Server OpenOCD mit dem JTAG-Key ARM-USB-OCD gestartet. Wenn man einen anderen JTAG Adapter hat, so kann der mit dem kleinen schwarzen Pfeil im Menü &amp;quot;External Tools Configuration...&amp;quot; eingestellt werden. OpenOCD wird mit Start-Parametern gestartet, z.B. &amp;quot;-f .\prj\arm-usb-ocd.cfg&amp;quot; für das Olimex JTAG Interface. Wenn man nun ein anderes JTAG Interface hat, so muss hier der Dateiname geändert und in das Projekt nach &amp;quot;prj\&amp;quot; muss die CFG-Datei einkopiert werden.&lt;br /&gt;
&lt;br /&gt;
Mit Eclipase mit der grünen Käfertaste (Debug BlinkLED), der kleine Pfeil nach unten, &amp;quot;BlinkLED OpenOCD Reset Load Run&amp;quot; ausführen. Damit wird der GDB Debugger gestartet, das Projekt geladen und gestartet. Der Debugger beendet sich dann automatisch und die CPU läuft.&lt;br /&gt;
&lt;br /&gt;
=== Weitere Plug-Ins für Eclipse ===&lt;br /&gt;
Damit das Arbeiten mit Eclipse einfacher wird, gibt es zahlreiche Plug-Ins. Diese können mittels Eclipse heruntergeladen werden und werden dann automatisch installiert.&lt;br /&gt;
&lt;br /&gt;
Die in meinen Augen wichtigsten Plug-Ins sind folgende:&lt;br /&gt;
  * ARM-Plug-In&lt;br /&gt;
  * Register View&lt;br /&gt;
  * GDB-Plug-In&lt;br /&gt;
&lt;br /&gt;
Das ARM-PlugIn stellt einen Wizzard bereit, in dem projektspezifische Einstellungen über den Compiler, Linkerscript usw. mit Hilfe einer GUI getroffen werden können.&lt;br /&gt;
&lt;br /&gt;
Register View ermöglicht das Einsehen der General-Purpose Registern im Mikrocontroller. Dies kann beim Debuggen Hilfreich sein, da man anhand des Stack-Registers evtl. Stack-Overflows erkennen kann.&lt;br /&gt;
&lt;br /&gt;
GDB-PlugIn mittels dem GDB-PlugIn ist es über Eclipse möglich, sich auf einen GDB-Server zu Connecten. Dabei kann dann aus Eclipse heraus direkt der Code-Debuggt werden.&lt;br /&gt;
&lt;br /&gt;
== Einrichten eines eigenen Projektes ==&lt;br /&gt;
&lt;br /&gt;
== Einrichtung GDB-Server ==&lt;br /&gt;
&lt;br /&gt;
Ein GDB-Server wird immer unter &amp;quot;External Tools Configuration...&amp;quot; eingerichtet.&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalTool.png]]&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe dieser Funktion kann ein beliebiges Programm gestartet werden.&lt;br /&gt;
&lt;br /&gt;
=== OpenOCD mit ARM-USB-OCD von Olimex ===&lt;br /&gt;
&lt;br /&gt;
Der Aufruf, mit Parameter HW-Interface und Prozessor:&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalToolOOCD1.png]]&lt;br /&gt;
&lt;br /&gt;
Der Eintrag im Eclipse-Menü:&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalToolOOCD2.png]]&lt;br /&gt;
&lt;br /&gt;
Die restlichen Reiter sind ohne Änderung.&lt;br /&gt;
&lt;br /&gt;
=== JLink mit Segger GDB-Server einrichten ===&lt;br /&gt;
&lt;br /&gt;
Im Demo-Projekt ist eine Konfiguration für den Segger GDB-Server enthalten. Dabei wird der GDB-Server so gestartet dass SWD als Kommunikation genutzt wird.&lt;br /&gt;
&lt;br /&gt;
Der Aufruf, mit Parameter für SWD (Single Wire Debug):&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalToolJLink.png]]&lt;br /&gt;
&lt;br /&gt;
Der Pfad zum &amp;quot;JLinkGDBServer.exe&amp;quot; muss so angepasst werden je nach dem wohin er installiert wurde.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung ST-Link (SWD Programmer vom Eval Board) ===&lt;br /&gt;
==== Einrichtung unter Windows ====&lt;br /&gt;
==== Einrichtung unter Linux ====&lt;br /&gt;
&lt;br /&gt;
!!! Achtung !!! Das ST-Link projekt für Linux ist mit den neueren 3.0.X Kernel nicht mehr lauffähig und lässt den gesamten Rechner einfrieren !!!&lt;br /&gt;
Sollte sich dort etwas ändern, so werde ich dies hier bekannt geben.&lt;br /&gt;
&lt;br /&gt;
Vielfach wurde genannt, daß es schade sei, daß das Discoveryboard oder das STLink nur unter Windows benutzen zu können. Mittlerweile hat sich dieses geändert, ohne das, dass STLink mit einer neuen Firmware beschrieben werden muss. Es gibt eine kleine Gruppe, die einen STLink GDB-Server für Linux realisiert haben. Mittlerweile befindet sich dieses Projekt noch in der Beta-Phase, jedoch konnten die ersten Tests überzeugen.&lt;br /&gt;
&lt;br /&gt;
Dazu muss der Sourcecode von der Seite [[https://github.com/whitequark/stlink/blob/master/src/stlink-hw.c Projekt-Seite]] mittels git gecloned werden. (GIT Link: https://github.com/whitequark/stlink.git)&lt;br /&gt;
Damit ein Compilieren des Sourcecodes funktioniert, muss mittels apt-get oä. folgendes Paket installiert werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;libsgutils2-dev&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nachdem dieses Paket installiert wurde, muss im Sourcecode noch einige Änderungen durchgeführt werden, da dort &amp;quot;unsauber&amp;quot; gecasted wurde.&lt;br /&gt;
Dieses Bezieht sich auf die Datei: &amp;quot;stlink-hw.c&amp;quot; und dort in den Zeilen: &lt;br /&gt;
1420, 1491, 1514.&lt;br /&gt;
Dort muss ein explizieter Cast zu (unsigned int) durchgeführt werden, so dass in der Zeile 1420 statt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;fprintf(stderr, &amp;quot;run_flash_loader(0x%x) == -1\n&amp;quot;, addr + off);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
nun &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;fprintf(stderr, &amp;quot;run_flash_loader(0x%x) == -1\n&amp;quot;, addr + (unsigned int)off);&amp;lt;/syntaxhighlight&amp;gt; steht. Diese Änderung ist bei den beiden verbleibenden Zeilen durchzuführen.&lt;br /&gt;
Nachdem dies abgeschlossen wurde müssen die Sourcecodes mittels dem Befehl:&lt;br /&gt;
&amp;lt;pre&amp;gt; make -C build &amp;lt;/pre&amp;gt; &lt;br /&gt;
compiliert werden.&lt;br /&gt;
Der Start dieses GDB-Servers wird durch die Kommandozeile initiiert:&lt;br /&gt;
&amp;lt;pre&amp;gt;./build/st-util &amp;lt;&amp;lt;PORT&amp;gt;&amp;gt; /dev/sg&amp;lt;&amp;lt;SG-NUMBER&amp;gt;&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
Mittels des Attributes &amp;lt;&amp;lt;PORT&amp;gt;&amp;gt; wird die Port-Nummer des GDB-Servers angegeben. Die ST-Link &amp;quot;Geräte Datei&amp;quot; wird (zumindest bei mir) nicht immer an dem gleichen Pfaden angegeben.&lt;br /&gt;
&lt;br /&gt;
Nach dem Start sollte folgende Meldung (beim Discoverboard) erscheinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*** stlink_open [/dev/sg4] ***&lt;br /&gt;
Chip ID is 10016420.&lt;br /&gt;
Device connected: Medium-density value line device&lt;br /&gt;
Device parameters: SRAM: 0x2000 bytes, Flash: up to 0x20000 bytes in pages of 0x400 bytes&lt;br /&gt;
Flash size is 128 KiB.&lt;br /&gt;
Listening at *:1234...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun ist der GDB-Server aktiv und kann mittels Eclipse genutzt werden. Für die Einrichtung von Eclipse siehe: Einrichtung unter Windows.&lt;br /&gt;
&lt;br /&gt;
== Tipps, Tricks und Stolpersteine ==&lt;br /&gt;
&lt;br /&gt;
* Die Dateiendung einer C/H Datei muss kleingeschrieben sein, denn sonst meint der GCC Compiler dass es C++ Dateien sind.&lt;br /&gt;
&lt;br /&gt;
* Wird VBox benutzt und einen Filter für den ST-Link bzw. des USB-Devices des Discovery-Boards eingerichtet, so kommt es zu schwerwiegenden Konflikten bei dem nächsten Start von VBox. Das Problem ist die Seriennummer vom ST-Link, welche nicht sichtbare Zeichen enthält. Ein Workaround zu diesem Problem: In dem eingerichtetem Filter muss die Seriennummer entfernt werden.&lt;br /&gt;
&lt;br /&gt;
== MicroXplorer - MCU graphical configuration tool ==&lt;br /&gt;
&lt;br /&gt;
Der [http://www.st.com/web/en/catalog/tools/PF251717 MicroXplorer von ST] ist ein Eclipse Plugin (auch als standalone Version verfügbar) mit dem man sich die Peripheriefunktionen zusammen klicken kann die man beim STM32 Prozessor benötigt. Das Tool zeigt auch Kombinationen die nicht gehen. Somit kann man die Peripherie leichter planen.&lt;br /&gt;
&lt;br /&gt;
Jedoch sollte man bei diesem Tool aufpassen: Wenn man z.B. zu erst CAN1 heraussucht und später FS_USB, so ist FS_USB nicht möglich. Wenn man das anders herum macht, so wird CAN1 auf alternative Pins gelegt und die Zuordnung klappt. Dennoch hilft es die Peripherie einfacher planen zu können.&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities ==&lt;br /&gt;
* Artikel [[STM32]]&lt;br /&gt;
* Artikel [[STM32 CooCox Installation]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/214719 Thread zu diesem Thema]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:STM32| ]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_Installation&amp;diff=81129</id>
		<title>STM32 Eclipse Installation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_Installation&amp;diff=81129"/>
		<updated>2014-01-24T08:05:27Z</updated>

		<summary type="html">&lt;p&gt;Kichi: /* Installation von Eclipse unter Windows */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel beschreibt, wie man Eclipse unter Windows installiert und für den Prozessor STM32 einrichtet, so dass ein Debuggen möglich ist.&lt;br /&gt;
&lt;br /&gt;
== Installation von Eclipse unter Windows ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Zusammenhänge:&#039;&#039;&#039;&lt;br /&gt;
* Eclipse - der Editor, ist eigentlich nichts weiteres als ein Editor, mit sehr viel Intelligenz&lt;br /&gt;
* Toolchain (make, Compiler, Linker, GDB, Bibliotheken, etc.). Hier gibt es verschiedene Möglichkeiten:&lt;br /&gt;
** YAGARTO GNU ARM toolchain - der Compiler und Debugger für Cortex-M3. Zusätzlich werden die Yagarto-Tools (make und sonstige Programme) benötigt.&lt;br /&gt;
** CodeSourcery - beinhaltet alle benötigten Tools, wie make, GCC, GDB, Newlib usw.&lt;br /&gt;
** GNU Tools for ARM Embedded Processors - benötigt zusätzlich ebenfalls make und rm bspw. aus den Yagarto-Tools&lt;br /&gt;
* CDT - Plugin, das Eclipse erweitert, sodaß C/C++ Programme editiert, kompiliert und gelinkt werden können. CDT steht für &amp;quot;C/C++ Development Tooling&amp;quot;. Man kann Eclipse auch mit schon integrierten CDT auf der Eclipse Homepage bekommen.&lt;br /&gt;
* GDB Hardware Debugging - ein weiteres Eclipse-Plugin, welches notwendig ist, um mittels GDB und weiteren Tools Programme zu debuggen.&lt;br /&gt;
* GDB - der GNU Debugger, mit ihm ist es möglich, entsprechend kompilierte Programme auf C-Sourcelevel (und auch Assembler) zu debuggen. Er kann allerdings nicht direkt mit einem JTAG-Interface sprechen. Er &amp;quot;verbindet&amp;quot; sich dafür mit einem GDB-Server, der dann das JTAG-I/F anspricht.&lt;br /&gt;
* GDB-Server - stellt eine Verbindung mit GDB und dem JTAG-Interface her. Er führt die Kommandos des GDBs aus. Der Server muss vor dem debuggen gestartet werden, da GDB einen laufenden GDB-Server erwartet. Die Verbindung zwischen dem GDB und dem GDB-Server wird über eine TCP/IP Verbindung hergestellt.&lt;br /&gt;
** OpenOCD - ein freier GDB-Server&lt;br /&gt;
** Texane STlink - ebenfalls frei&lt;br /&gt;
* JTAG-Interface, z.B. Olimex ARM-USB-OCD, ST-Link oder diverse andere. Meist über USB an den PC angeschlossen, über ein JTAG-Kabel wird der Adapter mit der Prozessor-Platine verbunden. Der GDB-Server nimmt Kommandos vom GDB entgegen und führt diese über das JTAG-I/F des Prozessors aus.&lt;br /&gt;
* STM32-Prozessor, ja den braucht es auch noch, sonst gibt es nichts zu debuggen.&lt;br /&gt;
&lt;br /&gt;
Es sieht zwar auf den ersten Blick etwas komplex aus, aber es ist dennoch logisch aufgebaut.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Die benötigten Dateien für Eclipse:&lt;br /&gt;
&lt;br /&gt;
* [http://yagarto.de/ Yagarto-Tools http://yagarto.de/]&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/index.html Java JDK] Installation um Eclipse starten zu können.&lt;br /&gt;
* [http://eclipse.org/downloads/ Eclipse], der Download &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot;&lt;br /&gt;
* [http://www.freddiechopin.info/ OpenOCD http://www.freddiechopin.info/] &amp;gt;&amp;gt; Download &amp;gt;&amp;gt; Software &amp;gt;&amp;gt; OpenOCD&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Eclipse Demo-Projekt: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Media: Proj_Demo.zip | Blink-LED, komplettes Eclipse-Workspace von MmVisual]]&lt;br /&gt;
* Eclipse Workspace&lt;br /&gt;
* Mit OpenOCD und Dateien für den Olimex ARM-USB-OCD&lt;br /&gt;
* FW-Lib 3.4.0 von ST&lt;br /&gt;
* Start-Up Code als C-Datei, keine einzige Assembler-Datei&lt;br /&gt;
* Für STM32F103RB (128K Flash) wegen Initialisierung Stack-Pointer&lt;br /&gt;
* Nutzt make Tool, muss aber zu gmake umbenannt werden, ist weiter unten beschrieben&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Installation von Eclipse ===&lt;br /&gt;
Damit Eclipse gestartet werden kann, ist es nötig, dass zunächst Java installiert wird. Dabei muss einfach den Anweisungen des Installers gefolgt werden. Nachdem diese Installation abgeschlossen wurde, kann mit der Eclipse &amp;quot;Installation&amp;quot; fortgefahren werden.&lt;br /&gt;
&lt;br /&gt;
Eclipse befindet sich (sofern im Download ausgewählt) in einem ZIP-Archiv. In diesem Archiv sind alle benötigten Dateien vorhanden, um Eclipse direkt starten zu können. Dieses ZIP-Archiv sollte dann zu C:\eclipse\ entpackt werden. In diesem Beispiel wird davon ausgegangen, dass eclipse zu den o.g. Pfad entpackt wird.&lt;br /&gt;
&lt;br /&gt;
Sobald Eclipse vollständig entpackt wurde, kann eclipse gestartet werden. Während Eclipse startet, muss ein sog. Workspace ausgewählt werden. In diesem Workspace werden später alle Projekte und Sourcecodes abgelegt. Die Nachfolgende Grafik zeigt dieses Dialog-Fenster.&lt;br /&gt;
[[Datei:choose_workspace.png]]&lt;br /&gt;
Nachdem Eclipse erfolgreich gestartet werden kann, ist die Installation natürlich nicht abgeschlossen, da noch ein Compiler usw. für dem ARM-Mikrocontroller fehlt.&lt;br /&gt;
&lt;br /&gt;
Für die Toolchain, sprich Compiler, newlib usw. hat man nun die Qual der Wahl, entweder man nimmt Yagarto-Tools oder Codesourcery. Der Unterschied zwischen den beiden toolchains ist nicht direkt erkennbar und soll an dieser Stelle nicht weiter behandelt werden. Ich verweise an dieser Stelle an den folgenden Foreneintrag:&lt;br /&gt;
[[http://www.mikrocontroller.net/topic/158503#1503836 Unterschied WinARM und Codesourcery]]&lt;br /&gt;
&lt;br /&gt;
Ich persönlich habe mich für Codesourcery entschieden, da Truestuido von Atollic ebenfalls den none-eabi Compiler verwendet und dadurch die Linkerscripts direkt von Truestudio übernommen werden können.&lt;br /&gt;
&lt;br /&gt;
=== Installation der Code-Sourcery Umgebung ===&lt;br /&gt;
Wer sich nun für die Code-Sourcery Umgebung entschieden hat, steht nun schon vor einem kleinerem Problem - Welche Version von Code-Sourcery soll man wählen?&lt;br /&gt;
Zur Auswahl stehen folgende Versionen:&lt;br /&gt;
  * uCLinux&lt;br /&gt;
  * EABI&lt;br /&gt;
  * GNU/Linux&lt;br /&gt;
  * SymbianOS&lt;br /&gt;
Hier ist die Wahl auf EABI beschränkt. Für weitere Hinweise siehe: [[http://www.codesourcery.com/sgpp/lite/arm/portal/doc9876/getting-started.pdf Codesourcery Getting-Started]]&lt;br /&gt;
&lt;br /&gt;
Die Installation von Code-Sourcery ist komplett Menü geführt und entsprechend intuitiv durchzuführen. Dabei werden nachfolgend die wichtigsten Komponenten kurz erläutert:&lt;br /&gt;
&lt;br /&gt;
CodeSourcery Common Startup Code Sequence&lt;br /&gt;
Diese vordefinierten Startup-Codes werden für den Start des Mikrocontrollers benutzt. Dabei wird der Stackpointer, die Interrupt-Handler usw. initialisiert. Die Benutzung dieser Startupcodes wird hier nicht näher Betrachtet, da STM vorgefertigte Startup-Codes kostenlos anbietet.&lt;br /&gt;
&lt;br /&gt;
  * CodeSourcery Debug Sprite for ARM&lt;br /&gt;
Die Debug-Sprite Umgebung ermöglicht das Debuggen eines Mikrocontrollers über JTAG. Debug-Sprite kann dabei über XML-Dateien konfiguriert werden. Jedoch kann Debug-Sprite nicht für das Debuggen von STM32-Mikrocontrollern verwendet werden.&lt;br /&gt;
GNU Binary Utilities (Binutils)&lt;br /&gt;
Die Binutils beinhaltet den GNU-Assembler sowie den für das Übersetzen eines C-Software-Modules benötigen Linker. &lt;br /&gt;
&lt;br /&gt;
  * GNU C Compiler (GCC)&lt;br /&gt;
Der GNU-C Compiler übersetzt den C-Code zu den sog. Object-Codes.&lt;br /&gt;
&lt;br /&gt;
  * GNU C++ Compiler (G++)&lt;br /&gt;
Der G++ Compiler übersetzt ein C++-Software-Modul zu Object-Codes, um damit die Verwendung von C++ auf einem Mikrocontroller zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
  * GNU C++ Runtime Library (Libstdc++)&lt;br /&gt;
Diese Library stellt C++ spezifische Funktionen zu Verfügung.&lt;br /&gt;
&lt;br /&gt;
  * GNU Debugger (GDB)&lt;br /&gt;
Der Debugger ist der GDB-Client, der für das Debuggen eines Software-Moduls genutzt wird. &lt;br /&gt;
&lt;br /&gt;
  * Newlib C Library&lt;br /&gt;
&lt;br /&gt;
Die Newlib stellt die std-Lib für einen Mikrocontroller zu Verfügung. Dabei ist zu beachten, das die Newlib syscalls und stubs nutzt, um so eine Betriebssystemunabhängige Benutzung zu ermöglichen. Dies ermöglicht die Benutzung der Newlib auf einem Bare-Metal-System und auf einem uC-Linux basiertem Software-Modul.&lt;br /&gt;
&lt;br /&gt;
Ich persönlich habe als Installationsverzeichnis C:\WinARM benutzt, damit die entsprechenden Pfade zu bestimmten binaris keine großartigen Sonderzeichen aufweisen.&lt;br /&gt;
&lt;br /&gt;
=== Installation der Yagarto Umgebung ===&lt;br /&gt;
Die Installation sollte so ausgeführt werden, dass alles nach &amp;quot;C:\WinARM\&amp;quot; installiert wird, dazu müssen in den Setup-Paketen während des Setups immer die Pfade &amp;quot;C:\Programme\&amp;quot; angepasst werden. Damit kann man die gesamte Entwicklung und Konfiguration einfach sichern als ZIP Datei und sogar bei einem zweiten Rechner wieder einspielen.&lt;br /&gt;
&lt;br /&gt;
Zu erst werden die Downloads von Yagarto geladen und installiert. Dort ist auch sehr gut beschrieben wie das Einrichten geht.&lt;br /&gt;
Allerdings fehlt auf der Yagarto-Seite der Hinweis auf den Download-Link des eigentlichen Eclipse Programms, daher ist er oben im Artikel aufgeführt.&lt;br /&gt;
&lt;br /&gt;
Wenn man diese [http://yagarto.de/howto/yagarto2/index.html#download Yagarto-Anleitung] abgeschlossen hat kommt die Einrichtung von OpenOCD.&lt;br /&gt;
Eine Debugger-Einrichtung ist bei [http://yagarto.de/howto/yagarto2/index.html#cbug Yagarto] auch beschrieben, allerdings nicht für den STM32 Prozessor.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation von Yagarto-Tools muss eine Datei geändert werden:&lt;br /&gt;
C:\WinARM\yagarto-tools\bin\make.exe muss nach gmake.exe umbenannt werden.&lt;br /&gt;
Grund: Wenn man Delphi installiert hat, dann würde Eclipse das make Tool von Delphi finden und man kann das Eclipse Projekt nicht kompilieren.&lt;br /&gt;
Das Demo-Projekt nutzt auch das &amp;quot;gmake.exe&amp;quot;.&lt;br /&gt;
Alternativ kann auch make.exe kopiert zu gmake.exe werden, wenn man kein Delphi installiert hat.&lt;br /&gt;
&lt;br /&gt;
==== Start mit dem Demo-Projekt ====&lt;br /&gt;
&lt;br /&gt;
Für alle Projekte habe ich das Verzeichnis C:\WinARM\Projekt\ vorgesehen, damit ist immer alles zusammen. Nun entpackt man das Demo-Projekt nach C:\WinARM\Projekt\ somit müsste dort ein neues Unterverzeichnis &amp;quot;Proj_Demo&amp;quot; vorhanden sein samt allen unterordnern.&lt;br /&gt;
&lt;br /&gt;
Nun Eclipse Öffnen. Menü &amp;quot;File&amp;quot; &amp;gt;&amp;gt; &amp;quot;Switch Workspace&amp;quot; &amp;gt;&amp;gt; &amp;quot;Other...&amp;quot;. In der Eingabezeile &amp;quot;Workspace:&amp;quot; wird nun das Verzeichnis &amp;quot;C:\WinARM\Projekt\Proj_Demo&amp;quot; eingegeben. Mit OK wird sich Eclipse beenden und neu starten.&lt;br /&gt;
&lt;br /&gt;
Links im Baum sieht man das Projekt &amp;quot;BlinkLED&amp;quot;:&lt;br /&gt;
* inc:  die eigenen Includes&lt;br /&gt;
* lib:  die FW-Lib von ST&lt;br /&gt;
* out:  die kompilierten Dateien und listings&lt;br /&gt;
* prj:  OpenOCD und LD Linker-Datei&lt;br /&gt;
* src:  die eigenen Quellcodes&lt;br /&gt;
* makefile&lt;br /&gt;
&lt;br /&gt;
Das Projekt wurde geschrieben für den STM32F103RC (256K Flash/48K RAM), läuft aber auch mit einem STM32F103xB da der Stack-Pointer auf 20K initialisiert wird. Details stehen in der Datei &amp;quot;src/stm32f10x_vector.c&amp;quot;, Zeile 29,30:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#define STACK_TOP (0x20005000 - 4)&lt;br /&gt;
//#define STACK_TOP (0x2000C000 - 4)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Damit wird der Stack-Pointer für den RAM im Chip initialisiert.&lt;br /&gt;
&lt;br /&gt;
Zum kompilieren rechten Mausklick auf das Projekt (normalerweise links im Navigator oder Projekt-Explorer) und dann im aufgehenden Kontextmenu auf &amp;quot;Build&amp;quot; klicken.&lt;br /&gt;
Mit Strg+B wird nicht nur das Projekt neu kompiliert sondern ALLE Projekte im aktuellen Workspace gerade offen sind. Wenn man dort nur ein Projekt hat geht auch CTRL-B.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Die Funktionen des Demo-Projekts &#039;&#039;&#039;&lt;br /&gt;
* Blink-LED auf Prot A.0, Port C.7, PortD.3,4,7,13 (STM3210C-EVAL Board)&lt;br /&gt;
* Initialisieren aller Variablen&lt;br /&gt;
* Initialisieren Clock auf HSI, 8MHz&lt;br /&gt;
* Initialisieren IO-Pins der LED&#039;s&lt;br /&gt;
* Initialisieren Timer für Systick&lt;br /&gt;
* Main-Schleife in der die Timer-Variablen gesetzt und die LED&#039;s ausgegeben werden&lt;br /&gt;
* Debug-Helper, siehe &amp;quot;src\DebugHelper.c&amp;quot;&lt;br /&gt;
* Systick-Interrupt&lt;br /&gt;
* komplett in C programmiert, kein Assembler&lt;br /&gt;
* ST FW-Lib V3.4.0 wird für alle Funktionen genutzt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erster Start mit dem Demo-Projekt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mit Eclipse mit der grünen Play-Taste mit dem roten Koffer &amp;quot;Run OpenOCD BlinkLED&amp;quot; &amp;quot;OpenOCD BlinkLED starten. Damit wird der GDB Server OpenOCD mit dem JTAG-Key ARM-USB-OCD gestartet. Wenn man einen anderen JTAG Adapter hat, so kann der mit dem kleinen schwarzen Pfeil im Menü &amp;quot;External Tools Configuration...&amp;quot; eingestellt werden. OpenOCD wird mit Start-Parametern gestartet, z.B. &amp;quot;-f .\prj\arm-usb-ocd.cfg&amp;quot; für das Olimex JTAG Interface. Wenn man nun ein anderes JTAG Interface hat, so muss hier der Dateiname geändert und in das Projekt nach &amp;quot;prj\&amp;quot; muss die CFG-Datei einkopiert werden.&lt;br /&gt;
&lt;br /&gt;
Mit Eclipase mit der grünen Käfertaste (Debug BlinkLED), der kleine Pfeil nach unten, &amp;quot;BlinkLED OpenOCD Reset Load Run&amp;quot; ausführen. Damit wird der GDB Debugger gestartet, das Projekt geladen und gestartet. Der Debugger beendet sich dann automatisch und die CPU läuft.&lt;br /&gt;
&lt;br /&gt;
=== Weitere Plug-Ins für Eclipse ===&lt;br /&gt;
Damit das Arbeiten mit Eclipse einfacher wird, gibt es zahlreiche Plug-Ins. Diese können mittels Eclipse heruntergeladen werden und werden dann automatisch installiert.&lt;br /&gt;
&lt;br /&gt;
Die in meinen Augen wichtigsten Plug-Ins sind folgende:&lt;br /&gt;
  * ARM-Plug-In&lt;br /&gt;
  * Register View&lt;br /&gt;
  * GDB-Plug-In&lt;br /&gt;
&lt;br /&gt;
Das ARM-PlugIn stellt einen Wizzard bereit, in dem projektspezifische Einstellungen über den Compiler, Linkerscript usw. mit Hilfe einer GUI getroffen werden können.&lt;br /&gt;
&lt;br /&gt;
Register View ermöglicht das Einsehen der General-Purpose Registern im Mikrocontroller. Dies kann beim Debuggen Hilfreich sein, da man anhand des Stack-Registers evtl. Stack-Overflows erkennen kann.&lt;br /&gt;
&lt;br /&gt;
GDB-PlugIn mittels dem GDB-PlugIn ist es über Eclipse möglich, sich auf einen GDB-Server zu Connecten. Dabei kann dann aus Eclipse heraus direkt der Code-Debuggt werden.&lt;br /&gt;
&lt;br /&gt;
== Einrichten eines eigenen Projektes ==&lt;br /&gt;
&lt;br /&gt;
== Einrichtung GDB-Server ==&lt;br /&gt;
&lt;br /&gt;
Ein GDB-Server wird immer unter &amp;quot;External Tools Configuration...&amp;quot; eingerichtet.&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalTool.png]]&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe dieser Funktion kann ein beliebiges Programm gestartet werden.&lt;br /&gt;
&lt;br /&gt;
=== OpenOCD mit ARM-USB-OCD von Olimex ===&lt;br /&gt;
&lt;br /&gt;
Der Aufruf, mit Parameter HW-Interface und Prozessor:&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalToolOOCD1.png]]&lt;br /&gt;
&lt;br /&gt;
Der Eintrag im Eclipse-Menü:&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalToolOOCD2.png]]&lt;br /&gt;
&lt;br /&gt;
Die restlichen Reiter sind ohne Änderung.&lt;br /&gt;
&lt;br /&gt;
=== JLink mit Segger GDB-Server einrichten ===&lt;br /&gt;
&lt;br /&gt;
Im Demo-Projekt ist eine Konfiguration für den Segger GDB-Server enthalten. Dabei wird der GDB-Server so gestartet dass SWD als Kommunikation genutzt wird.&lt;br /&gt;
&lt;br /&gt;
Der Aufruf, mit Parameter für SWD (Single Wire Debug):&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalToolJLink.png]]&lt;br /&gt;
&lt;br /&gt;
Der Pfad zum &amp;quot;JLinkGDBServer.exe&amp;quot; muss so angepasst werden je nach dem wohin er installiert wurde.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung ST-Link (SWD Programmer vom Eval Board) ===&lt;br /&gt;
==== Einrichtung unter Windows ====&lt;br /&gt;
==== Einrichtung unter Linux ====&lt;br /&gt;
&lt;br /&gt;
!!! Achtung !!! Das ST-Link projekt für Linux ist mit den neueren 3.0.X Kernel nicht mehr lauffähig und lässt den gesamten Rechner einfrieren !!!&lt;br /&gt;
Sollte sich dort etwas ändern, so werde ich dies hier bekannt geben.&lt;br /&gt;
&lt;br /&gt;
Vielfach wurde genannt, daß es schade sei, daß das Discoveryboard oder das STLink nur unter Windows benutzen zu können. Mittlerweile hat sich dieses geändert, ohne das, dass STLink mit einer neuen Firmware beschrieben werden muss. Es gibt eine kleine Gruppe, die einen STLink GDB-Server für Linux realisiert haben. Mittlerweile befindet sich dieses Projekt noch in der Beta-Phase, jedoch konnten die ersten Tests überzeugen.&lt;br /&gt;
&lt;br /&gt;
Dazu muss der Sourcecode von der Seite [[https://github.com/whitequark/stlink/blob/master/src/stlink-hw.c Projekt-Seite]] mittels git gecloned werden. (GIT Link: https://github.com/whitequark/stlink.git)&lt;br /&gt;
Damit ein Compilieren des Sourcecodes funktioniert, muss mittels apt-get oä. folgendes Paket installiert werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;libsgutils2-dev&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nachdem dieses Paket installiert wurde, muss im Sourcecode noch einige Änderungen durchgeführt werden, da dort &amp;quot;unsauber&amp;quot; gecasted wurde.&lt;br /&gt;
Dieses Bezieht sich auf die Datei: &amp;quot;stlink-hw.c&amp;quot; und dort in den Zeilen: &lt;br /&gt;
1420, 1491, 1514.&lt;br /&gt;
Dort muss ein explizieter Cast zu (unsigned int) durchgeführt werden, so dass in der Zeile 1420 statt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;fprintf(stderr, &amp;quot;run_flash_loader(0x%x) == -1\n&amp;quot;, addr + off);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
nun &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;fprintf(stderr, &amp;quot;run_flash_loader(0x%x) == -1\n&amp;quot;, addr + (unsigned int)off);&amp;lt;/syntaxhighlight&amp;gt; steht. Diese Änderung ist bei den beiden verbleibenden Zeilen durchzuführen.&lt;br /&gt;
Nachdem dies abgeschlossen wurde müssen die Sourcecodes mittels dem Befehl:&lt;br /&gt;
&amp;lt;pre&amp;gt; make -C build &amp;lt;/pre&amp;gt; &lt;br /&gt;
compiliert werden.&lt;br /&gt;
Der Start dieses GDB-Servers wird durch die Kommandozeile initiiert:&lt;br /&gt;
&amp;lt;pre&amp;gt;./build/st-util &amp;lt;&amp;lt;PORT&amp;gt;&amp;gt; /dev/sg&amp;lt;&amp;lt;SG-NUMBER&amp;gt;&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
Mittels des Attributes &amp;lt;&amp;lt;PORT&amp;gt;&amp;gt; wird die Port-Nummer des GDB-Servers angegeben. Die ST-Link &amp;quot;Geräte Datei&amp;quot; wird (zumindest bei mir) nicht immer an dem gleichen Pfaden angegeben.&lt;br /&gt;
&lt;br /&gt;
Nach dem Start sollte folgende Meldung (beim Discoverboard) erscheinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*** stlink_open [/dev/sg4] ***&lt;br /&gt;
Chip ID is 10016420.&lt;br /&gt;
Device connected: Medium-density value line device&lt;br /&gt;
Device parameters: SRAM: 0x2000 bytes, Flash: up to 0x20000 bytes in pages of 0x400 bytes&lt;br /&gt;
Flash size is 128 KiB.&lt;br /&gt;
Listening at *:1234...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun ist der GDB-Server aktiv und kann mittels Eclipse genutzt werden. Für die Einrichtung von Eclipse siehe: Einrichtung unter Windows.&lt;br /&gt;
&lt;br /&gt;
== Tipps, Tricks und Stolpersteine ==&lt;br /&gt;
&lt;br /&gt;
* Die Dateiendung einer C/H Datei muss kleingeschrieben sein, denn sonst meint der GCC Compiler dass es C++ Dateien sind.&lt;br /&gt;
&lt;br /&gt;
* Wird VBox benutzt und einen Filter für den ST-Link bzw. des USB-Devices des Discovery-Boards eingerichtet, so kommt es zu schwerwiegenden Konflikten bei dem nächsten Start von VBox. Das Problem ist die Seriennummer vom ST-Link, welche nicht sichtbare Zeichen enthält. Ein Workaround zu diesem Problem: In dem eingerichtetem Filter muss die Seriennummer entfernt werden.&lt;br /&gt;
&lt;br /&gt;
== MicroXplorer - MCU graphical configuration tool ==&lt;br /&gt;
&lt;br /&gt;
Der [http://www.st.com/web/en/catalog/tools/PF251717 MicroXplorer von ST] ist ein Eclipse Plugin mit dem man sich die Peripheriefunktionen zusammen klicken kann die man beim STM32 Prozessor benötigt. Das Tool zeigt auch Kombinationen die nicht gehen. Somit kann man die Peripherie leichter planen.&lt;br /&gt;
&lt;br /&gt;
Jedoch sollte man bei diesem Tool aufpassen: Wenn man z.B. zu erst CAN1 heraussucht und später FS_USB, so ist FS_USB nicht möglich. Wenn man das anders herum macht, so wird CAN1 auf alternative Pins gelegt und die Zuordnung klappt. Dennoch hilft es die Peripherie einfacher planen zu können.&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities ==&lt;br /&gt;
* Artikel [[STM32]]&lt;br /&gt;
* Artikel [[STM32 CooCox Installation]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/214719 Thread zu diesem Thema]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:STM32| ]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_Installation&amp;diff=81128</id>
		<title>STM32 Eclipse Installation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_Installation&amp;diff=81128"/>
		<updated>2014-01-24T08:05:14Z</updated>

		<summary type="html">&lt;p&gt;Kichi: /* Installation von Eclipse unter Windows */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel beschreibt, wie man Eclipse unter Windows installiert und für den Prozessor STM32 einrichtet, so dass ein Debuggen möglich ist.&lt;br /&gt;
&lt;br /&gt;
== Installation von Eclipse unter Windows ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Zusammenhänge:&#039;&#039;&#039;&lt;br /&gt;
* Eclipse - der Editor, ist eigentlich nichts weiteres als ein Editor, mit sehr viel Intelligenz&lt;br /&gt;
* Toolchain (make, Compiler, Linker, GDB, Bibliotheken, etc.). Hier gibt es verschiedene Möglichkeiten:&lt;br /&gt;
** YAGARTO GNU ARM toolchain - der Compiler und Debugger für Cortex-M3. Zusätzlich werden die Yagarto-Tools (make und sonstige Programme) benötigt.&lt;br /&gt;
** CodeSourcery - beinhaltet alle benötigten Tools, wie make, GCC, GDB, Newlib usw.&lt;br /&gt;
** GNU Tools for ARM Embedded Processors - benötigt zusätzlich ebenfalls make und rm bspw. aus den Yagarto-Tools&lt;br /&gt;
* CDT - Plugin, das Eclipse erweitert, sodaß C/C++ Programme editiert, kompiliert und gelinkt werden können. CDT steht für &amp;quot;C/C++ Development Tooling&amp;quot;. Man kann Eclipse auch mit schon integrierten CDT auf der Eclipse Homepage bekommen.&lt;br /&gt;
* GDB Hardware Debugging - ein weiteres Eclipse-Plugin, welches notwendig ist, um mittels GDB und weiteren Tools Programme zu debuggen.&lt;br /&gt;
* GDB - der GNU Debugger, mit ihm ist es möglich, entsprechend kompilierte Programme auf C-Sourcelevel (und auch Assembler) zu debuggen. Er kann allerdings nicht direkt mit einem JTAG-Interface sprechen. Er &amp;quot;verbindet&amp;quot; sich dafür mit einem GDB-Server, der dann das JTAG-I/F anspricht.&lt;br /&gt;
* GDB-Server - stellt Verbindung mit GDB und dem JTAG-Interface her. Er führt die Kommandos des GDBs aus. Der Server muss vor dem debuggen gestartet werden, da GDB einen laufenden GDB-Server erwartet. Die Verbindung zwischen dem GDB und dem GDB-Server wird über eine TCP/IP Verbindung hergestellt.&lt;br /&gt;
** OpenOCD - ein freier GDB-Server&lt;br /&gt;
** Texane STlink - ebenfalls frei&lt;br /&gt;
* JTAG-Interface, z.B. Olimex ARM-USB-OCD, ST-Link oder diverse andere. Meist über USB an den PC angeschlossen, über ein JTAG-Kabel wird der Adapter mit der Prozessor-Platine verbunden. Der GDB-Server nimmt Kommandos vom GDB entgegen und führt diese über das JTAG-I/F des Prozessors aus.&lt;br /&gt;
* STM32-Prozessor, ja den braucht es auch noch, sonst gibt es nichts zu debuggen.&lt;br /&gt;
&lt;br /&gt;
Es sieht zwar auf den ersten Blick etwas komplex aus, aber es ist dennoch logisch aufgebaut.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Die benötigten Dateien für Eclipse:&lt;br /&gt;
&lt;br /&gt;
* [http://yagarto.de/ Yagarto-Tools http://yagarto.de/]&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/index.html Java JDK] Installation um Eclipse starten zu können.&lt;br /&gt;
* [http://eclipse.org/downloads/ Eclipse], der Download &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot;&lt;br /&gt;
* [http://www.freddiechopin.info/ OpenOCD http://www.freddiechopin.info/] &amp;gt;&amp;gt; Download &amp;gt;&amp;gt; Software &amp;gt;&amp;gt; OpenOCD&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Eclipse Demo-Projekt: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Media: Proj_Demo.zip | Blink-LED, komplettes Eclipse-Workspace von MmVisual]]&lt;br /&gt;
* Eclipse Workspace&lt;br /&gt;
* Mit OpenOCD und Dateien für den Olimex ARM-USB-OCD&lt;br /&gt;
* FW-Lib 3.4.0 von ST&lt;br /&gt;
* Start-Up Code als C-Datei, keine einzige Assembler-Datei&lt;br /&gt;
* Für STM32F103RB (128K Flash) wegen Initialisierung Stack-Pointer&lt;br /&gt;
* Nutzt make Tool, muss aber zu gmake umbenannt werden, ist weiter unten beschrieben&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Installation von Eclipse ===&lt;br /&gt;
Damit Eclipse gestartet werden kann, ist es nötig, dass zunächst Java installiert wird. Dabei muss einfach den Anweisungen des Installers gefolgt werden. Nachdem diese Installation abgeschlossen wurde, kann mit der Eclipse &amp;quot;Installation&amp;quot; fortgefahren werden.&lt;br /&gt;
&lt;br /&gt;
Eclipse befindet sich (sofern im Download ausgewählt) in einem ZIP-Archiv. In diesem Archiv sind alle benötigten Dateien vorhanden, um Eclipse direkt starten zu können. Dieses ZIP-Archiv sollte dann zu C:\eclipse\ entpackt werden. In diesem Beispiel wird davon ausgegangen, dass eclipse zu den o.g. Pfad entpackt wird.&lt;br /&gt;
&lt;br /&gt;
Sobald Eclipse vollständig entpackt wurde, kann eclipse gestartet werden. Während Eclipse startet, muss ein sog. Workspace ausgewählt werden. In diesem Workspace werden später alle Projekte und Sourcecodes abgelegt. Die Nachfolgende Grafik zeigt dieses Dialog-Fenster.&lt;br /&gt;
[[Datei:choose_workspace.png]]&lt;br /&gt;
Nachdem Eclipse erfolgreich gestartet werden kann, ist die Installation natürlich nicht abgeschlossen, da noch ein Compiler usw. für dem ARM-Mikrocontroller fehlt.&lt;br /&gt;
&lt;br /&gt;
Für die Toolchain, sprich Compiler, newlib usw. hat man nun die Qual der Wahl, entweder man nimmt Yagarto-Tools oder Codesourcery. Der Unterschied zwischen den beiden toolchains ist nicht direkt erkennbar und soll an dieser Stelle nicht weiter behandelt werden. Ich verweise an dieser Stelle an den folgenden Foreneintrag:&lt;br /&gt;
[[http://www.mikrocontroller.net/topic/158503#1503836 Unterschied WinARM und Codesourcery]]&lt;br /&gt;
&lt;br /&gt;
Ich persönlich habe mich für Codesourcery entschieden, da Truestuido von Atollic ebenfalls den none-eabi Compiler verwendet und dadurch die Linkerscripts direkt von Truestudio übernommen werden können.&lt;br /&gt;
&lt;br /&gt;
=== Installation der Code-Sourcery Umgebung ===&lt;br /&gt;
Wer sich nun für die Code-Sourcery Umgebung entschieden hat, steht nun schon vor einem kleinerem Problem - Welche Version von Code-Sourcery soll man wählen?&lt;br /&gt;
Zur Auswahl stehen folgende Versionen:&lt;br /&gt;
  * uCLinux&lt;br /&gt;
  * EABI&lt;br /&gt;
  * GNU/Linux&lt;br /&gt;
  * SymbianOS&lt;br /&gt;
Hier ist die Wahl auf EABI beschränkt. Für weitere Hinweise siehe: [[http://www.codesourcery.com/sgpp/lite/arm/portal/doc9876/getting-started.pdf Codesourcery Getting-Started]]&lt;br /&gt;
&lt;br /&gt;
Die Installation von Code-Sourcery ist komplett Menü geführt und entsprechend intuitiv durchzuführen. Dabei werden nachfolgend die wichtigsten Komponenten kurz erläutert:&lt;br /&gt;
&lt;br /&gt;
CodeSourcery Common Startup Code Sequence&lt;br /&gt;
Diese vordefinierten Startup-Codes werden für den Start des Mikrocontrollers benutzt. Dabei wird der Stackpointer, die Interrupt-Handler usw. initialisiert. Die Benutzung dieser Startupcodes wird hier nicht näher Betrachtet, da STM vorgefertigte Startup-Codes kostenlos anbietet.&lt;br /&gt;
&lt;br /&gt;
  * CodeSourcery Debug Sprite for ARM&lt;br /&gt;
Die Debug-Sprite Umgebung ermöglicht das Debuggen eines Mikrocontrollers über JTAG. Debug-Sprite kann dabei über XML-Dateien konfiguriert werden. Jedoch kann Debug-Sprite nicht für das Debuggen von STM32-Mikrocontrollern verwendet werden.&lt;br /&gt;
GNU Binary Utilities (Binutils)&lt;br /&gt;
Die Binutils beinhaltet den GNU-Assembler sowie den für das Übersetzen eines C-Software-Modules benötigen Linker. &lt;br /&gt;
&lt;br /&gt;
  * GNU C Compiler (GCC)&lt;br /&gt;
Der GNU-C Compiler übersetzt den C-Code zu den sog. Object-Codes.&lt;br /&gt;
&lt;br /&gt;
  * GNU C++ Compiler (G++)&lt;br /&gt;
Der G++ Compiler übersetzt ein C++-Software-Modul zu Object-Codes, um damit die Verwendung von C++ auf einem Mikrocontroller zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
  * GNU C++ Runtime Library (Libstdc++)&lt;br /&gt;
Diese Library stellt C++ spezifische Funktionen zu Verfügung.&lt;br /&gt;
&lt;br /&gt;
  * GNU Debugger (GDB)&lt;br /&gt;
Der Debugger ist der GDB-Client, der für das Debuggen eines Software-Moduls genutzt wird. &lt;br /&gt;
&lt;br /&gt;
  * Newlib C Library&lt;br /&gt;
&lt;br /&gt;
Die Newlib stellt die std-Lib für einen Mikrocontroller zu Verfügung. Dabei ist zu beachten, das die Newlib syscalls und stubs nutzt, um so eine Betriebssystemunabhängige Benutzung zu ermöglichen. Dies ermöglicht die Benutzung der Newlib auf einem Bare-Metal-System und auf einem uC-Linux basiertem Software-Modul.&lt;br /&gt;
&lt;br /&gt;
Ich persönlich habe als Installationsverzeichnis C:\WinARM benutzt, damit die entsprechenden Pfade zu bestimmten binaris keine großartigen Sonderzeichen aufweisen.&lt;br /&gt;
&lt;br /&gt;
=== Installation der Yagarto Umgebung ===&lt;br /&gt;
Die Installation sollte so ausgeführt werden, dass alles nach &amp;quot;C:\WinARM\&amp;quot; installiert wird, dazu müssen in den Setup-Paketen während des Setups immer die Pfade &amp;quot;C:\Programme\&amp;quot; angepasst werden. Damit kann man die gesamte Entwicklung und Konfiguration einfach sichern als ZIP Datei und sogar bei einem zweiten Rechner wieder einspielen.&lt;br /&gt;
&lt;br /&gt;
Zu erst werden die Downloads von Yagarto geladen und installiert. Dort ist auch sehr gut beschrieben wie das Einrichten geht.&lt;br /&gt;
Allerdings fehlt auf der Yagarto-Seite der Hinweis auf den Download-Link des eigentlichen Eclipse Programms, daher ist er oben im Artikel aufgeführt.&lt;br /&gt;
&lt;br /&gt;
Wenn man diese [http://yagarto.de/howto/yagarto2/index.html#download Yagarto-Anleitung] abgeschlossen hat kommt die Einrichtung von OpenOCD.&lt;br /&gt;
Eine Debugger-Einrichtung ist bei [http://yagarto.de/howto/yagarto2/index.html#cbug Yagarto] auch beschrieben, allerdings nicht für den STM32 Prozessor.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation von Yagarto-Tools muss eine Datei geändert werden:&lt;br /&gt;
C:\WinARM\yagarto-tools\bin\make.exe muss nach gmake.exe umbenannt werden.&lt;br /&gt;
Grund: Wenn man Delphi installiert hat, dann würde Eclipse das make Tool von Delphi finden und man kann das Eclipse Projekt nicht kompilieren.&lt;br /&gt;
Das Demo-Projekt nutzt auch das &amp;quot;gmake.exe&amp;quot;.&lt;br /&gt;
Alternativ kann auch make.exe kopiert zu gmake.exe werden, wenn man kein Delphi installiert hat.&lt;br /&gt;
&lt;br /&gt;
==== Start mit dem Demo-Projekt ====&lt;br /&gt;
&lt;br /&gt;
Für alle Projekte habe ich das Verzeichnis C:\WinARM\Projekt\ vorgesehen, damit ist immer alles zusammen. Nun entpackt man das Demo-Projekt nach C:\WinARM\Projekt\ somit müsste dort ein neues Unterverzeichnis &amp;quot;Proj_Demo&amp;quot; vorhanden sein samt allen unterordnern.&lt;br /&gt;
&lt;br /&gt;
Nun Eclipse Öffnen. Menü &amp;quot;File&amp;quot; &amp;gt;&amp;gt; &amp;quot;Switch Workspace&amp;quot; &amp;gt;&amp;gt; &amp;quot;Other...&amp;quot;. In der Eingabezeile &amp;quot;Workspace:&amp;quot; wird nun das Verzeichnis &amp;quot;C:\WinARM\Projekt\Proj_Demo&amp;quot; eingegeben. Mit OK wird sich Eclipse beenden und neu starten.&lt;br /&gt;
&lt;br /&gt;
Links im Baum sieht man das Projekt &amp;quot;BlinkLED&amp;quot;:&lt;br /&gt;
* inc:  die eigenen Includes&lt;br /&gt;
* lib:  die FW-Lib von ST&lt;br /&gt;
* out:  die kompilierten Dateien und listings&lt;br /&gt;
* prj:  OpenOCD und LD Linker-Datei&lt;br /&gt;
* src:  die eigenen Quellcodes&lt;br /&gt;
* makefile&lt;br /&gt;
&lt;br /&gt;
Das Projekt wurde geschrieben für den STM32F103RC (256K Flash/48K RAM), läuft aber auch mit einem STM32F103xB da der Stack-Pointer auf 20K initialisiert wird. Details stehen in der Datei &amp;quot;src/stm32f10x_vector.c&amp;quot;, Zeile 29,30:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#define STACK_TOP (0x20005000 - 4)&lt;br /&gt;
//#define STACK_TOP (0x2000C000 - 4)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Damit wird der Stack-Pointer für den RAM im Chip initialisiert.&lt;br /&gt;
&lt;br /&gt;
Zum kompilieren rechten Mausklick auf das Projekt (normalerweise links im Navigator oder Projekt-Explorer) und dann im aufgehenden Kontextmenu auf &amp;quot;Build&amp;quot; klicken.&lt;br /&gt;
Mit Strg+B wird nicht nur das Projekt neu kompiliert sondern ALLE Projekte im aktuellen Workspace gerade offen sind. Wenn man dort nur ein Projekt hat geht auch CTRL-B.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Die Funktionen des Demo-Projekts &#039;&#039;&#039;&lt;br /&gt;
* Blink-LED auf Prot A.0, Port C.7, PortD.3,4,7,13 (STM3210C-EVAL Board)&lt;br /&gt;
* Initialisieren aller Variablen&lt;br /&gt;
* Initialisieren Clock auf HSI, 8MHz&lt;br /&gt;
* Initialisieren IO-Pins der LED&#039;s&lt;br /&gt;
* Initialisieren Timer für Systick&lt;br /&gt;
* Main-Schleife in der die Timer-Variablen gesetzt und die LED&#039;s ausgegeben werden&lt;br /&gt;
* Debug-Helper, siehe &amp;quot;src\DebugHelper.c&amp;quot;&lt;br /&gt;
* Systick-Interrupt&lt;br /&gt;
* komplett in C programmiert, kein Assembler&lt;br /&gt;
* ST FW-Lib V3.4.0 wird für alle Funktionen genutzt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erster Start mit dem Demo-Projekt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mit Eclipse mit der grünen Play-Taste mit dem roten Koffer &amp;quot;Run OpenOCD BlinkLED&amp;quot; &amp;quot;OpenOCD BlinkLED starten. Damit wird der GDB Server OpenOCD mit dem JTAG-Key ARM-USB-OCD gestartet. Wenn man einen anderen JTAG Adapter hat, so kann der mit dem kleinen schwarzen Pfeil im Menü &amp;quot;External Tools Configuration...&amp;quot; eingestellt werden. OpenOCD wird mit Start-Parametern gestartet, z.B. &amp;quot;-f .\prj\arm-usb-ocd.cfg&amp;quot; für das Olimex JTAG Interface. Wenn man nun ein anderes JTAG Interface hat, so muss hier der Dateiname geändert und in das Projekt nach &amp;quot;prj\&amp;quot; muss die CFG-Datei einkopiert werden.&lt;br /&gt;
&lt;br /&gt;
Mit Eclipase mit der grünen Käfertaste (Debug BlinkLED), der kleine Pfeil nach unten, &amp;quot;BlinkLED OpenOCD Reset Load Run&amp;quot; ausführen. Damit wird der GDB Debugger gestartet, das Projekt geladen und gestartet. Der Debugger beendet sich dann automatisch und die CPU läuft.&lt;br /&gt;
&lt;br /&gt;
=== Weitere Plug-Ins für Eclipse ===&lt;br /&gt;
Damit das Arbeiten mit Eclipse einfacher wird, gibt es zahlreiche Plug-Ins. Diese können mittels Eclipse heruntergeladen werden und werden dann automatisch installiert.&lt;br /&gt;
&lt;br /&gt;
Die in meinen Augen wichtigsten Plug-Ins sind folgende:&lt;br /&gt;
  * ARM-Plug-In&lt;br /&gt;
  * Register View&lt;br /&gt;
  * GDB-Plug-In&lt;br /&gt;
&lt;br /&gt;
Das ARM-PlugIn stellt einen Wizzard bereit, in dem projektspezifische Einstellungen über den Compiler, Linkerscript usw. mit Hilfe einer GUI getroffen werden können.&lt;br /&gt;
&lt;br /&gt;
Register View ermöglicht das Einsehen der General-Purpose Registern im Mikrocontroller. Dies kann beim Debuggen Hilfreich sein, da man anhand des Stack-Registers evtl. Stack-Overflows erkennen kann.&lt;br /&gt;
&lt;br /&gt;
GDB-PlugIn mittels dem GDB-PlugIn ist es über Eclipse möglich, sich auf einen GDB-Server zu Connecten. Dabei kann dann aus Eclipse heraus direkt der Code-Debuggt werden.&lt;br /&gt;
&lt;br /&gt;
== Einrichten eines eigenen Projektes ==&lt;br /&gt;
&lt;br /&gt;
== Einrichtung GDB-Server ==&lt;br /&gt;
&lt;br /&gt;
Ein GDB-Server wird immer unter &amp;quot;External Tools Configuration...&amp;quot; eingerichtet.&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalTool.png]]&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe dieser Funktion kann ein beliebiges Programm gestartet werden.&lt;br /&gt;
&lt;br /&gt;
=== OpenOCD mit ARM-USB-OCD von Olimex ===&lt;br /&gt;
&lt;br /&gt;
Der Aufruf, mit Parameter HW-Interface und Prozessor:&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalToolOOCD1.png]]&lt;br /&gt;
&lt;br /&gt;
Der Eintrag im Eclipse-Menü:&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalToolOOCD2.png]]&lt;br /&gt;
&lt;br /&gt;
Die restlichen Reiter sind ohne Änderung.&lt;br /&gt;
&lt;br /&gt;
=== JLink mit Segger GDB-Server einrichten ===&lt;br /&gt;
&lt;br /&gt;
Im Demo-Projekt ist eine Konfiguration für den Segger GDB-Server enthalten. Dabei wird der GDB-Server so gestartet dass SWD als Kommunikation genutzt wird.&lt;br /&gt;
&lt;br /&gt;
Der Aufruf, mit Parameter für SWD (Single Wire Debug):&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalToolJLink.png]]&lt;br /&gt;
&lt;br /&gt;
Der Pfad zum &amp;quot;JLinkGDBServer.exe&amp;quot; muss so angepasst werden je nach dem wohin er installiert wurde.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung ST-Link (SWD Programmer vom Eval Board) ===&lt;br /&gt;
==== Einrichtung unter Windows ====&lt;br /&gt;
==== Einrichtung unter Linux ====&lt;br /&gt;
&lt;br /&gt;
!!! Achtung !!! Das ST-Link projekt für Linux ist mit den neueren 3.0.X Kernel nicht mehr lauffähig und lässt den gesamten Rechner einfrieren !!!&lt;br /&gt;
Sollte sich dort etwas ändern, so werde ich dies hier bekannt geben.&lt;br /&gt;
&lt;br /&gt;
Vielfach wurde genannt, daß es schade sei, daß das Discoveryboard oder das STLink nur unter Windows benutzen zu können. Mittlerweile hat sich dieses geändert, ohne das, dass STLink mit einer neuen Firmware beschrieben werden muss. Es gibt eine kleine Gruppe, die einen STLink GDB-Server für Linux realisiert haben. Mittlerweile befindet sich dieses Projekt noch in der Beta-Phase, jedoch konnten die ersten Tests überzeugen.&lt;br /&gt;
&lt;br /&gt;
Dazu muss der Sourcecode von der Seite [[https://github.com/whitequark/stlink/blob/master/src/stlink-hw.c Projekt-Seite]] mittels git gecloned werden. (GIT Link: https://github.com/whitequark/stlink.git)&lt;br /&gt;
Damit ein Compilieren des Sourcecodes funktioniert, muss mittels apt-get oä. folgendes Paket installiert werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;libsgutils2-dev&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nachdem dieses Paket installiert wurde, muss im Sourcecode noch einige Änderungen durchgeführt werden, da dort &amp;quot;unsauber&amp;quot; gecasted wurde.&lt;br /&gt;
Dieses Bezieht sich auf die Datei: &amp;quot;stlink-hw.c&amp;quot; und dort in den Zeilen: &lt;br /&gt;
1420, 1491, 1514.&lt;br /&gt;
Dort muss ein explizieter Cast zu (unsigned int) durchgeführt werden, so dass in der Zeile 1420 statt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;fprintf(stderr, &amp;quot;run_flash_loader(0x%x) == -1\n&amp;quot;, addr + off);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
nun &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;fprintf(stderr, &amp;quot;run_flash_loader(0x%x) == -1\n&amp;quot;, addr + (unsigned int)off);&amp;lt;/syntaxhighlight&amp;gt; steht. Diese Änderung ist bei den beiden verbleibenden Zeilen durchzuführen.&lt;br /&gt;
Nachdem dies abgeschlossen wurde müssen die Sourcecodes mittels dem Befehl:&lt;br /&gt;
&amp;lt;pre&amp;gt; make -C build &amp;lt;/pre&amp;gt; &lt;br /&gt;
compiliert werden.&lt;br /&gt;
Der Start dieses GDB-Servers wird durch die Kommandozeile initiiert:&lt;br /&gt;
&amp;lt;pre&amp;gt;./build/st-util &amp;lt;&amp;lt;PORT&amp;gt;&amp;gt; /dev/sg&amp;lt;&amp;lt;SG-NUMBER&amp;gt;&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
Mittels des Attributes &amp;lt;&amp;lt;PORT&amp;gt;&amp;gt; wird die Port-Nummer des GDB-Servers angegeben. Die ST-Link &amp;quot;Geräte Datei&amp;quot; wird (zumindest bei mir) nicht immer an dem gleichen Pfaden angegeben.&lt;br /&gt;
&lt;br /&gt;
Nach dem Start sollte folgende Meldung (beim Discoverboard) erscheinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*** stlink_open [/dev/sg4] ***&lt;br /&gt;
Chip ID is 10016420.&lt;br /&gt;
Device connected: Medium-density value line device&lt;br /&gt;
Device parameters: SRAM: 0x2000 bytes, Flash: up to 0x20000 bytes in pages of 0x400 bytes&lt;br /&gt;
Flash size is 128 KiB.&lt;br /&gt;
Listening at *:1234...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun ist der GDB-Server aktiv und kann mittels Eclipse genutzt werden. Für die Einrichtung von Eclipse siehe: Einrichtung unter Windows.&lt;br /&gt;
&lt;br /&gt;
== Tipps, Tricks und Stolpersteine ==&lt;br /&gt;
&lt;br /&gt;
* Die Dateiendung einer C/H Datei muss kleingeschrieben sein, denn sonst meint der GCC Compiler dass es C++ Dateien sind.&lt;br /&gt;
&lt;br /&gt;
* Wird VBox benutzt und einen Filter für den ST-Link bzw. des USB-Devices des Discovery-Boards eingerichtet, so kommt es zu schwerwiegenden Konflikten bei dem nächsten Start von VBox. Das Problem ist die Seriennummer vom ST-Link, welche nicht sichtbare Zeichen enthält. Ein Workaround zu diesem Problem: In dem eingerichtetem Filter muss die Seriennummer entfernt werden.&lt;br /&gt;
&lt;br /&gt;
== MicroXplorer - MCU graphical configuration tool ==&lt;br /&gt;
&lt;br /&gt;
Der [http://www.st.com/web/en/catalog/tools/PF251717 MicroXplorer von ST] ist ein Eclipse Plugin mit dem man sich die Peripheriefunktionen zusammen klicken kann die man beim STM32 Prozessor benötigt. Das Tool zeigt auch Kombinationen die nicht gehen. Somit kann man die Peripherie leichter planen.&lt;br /&gt;
&lt;br /&gt;
Jedoch sollte man bei diesem Tool aufpassen: Wenn man z.B. zu erst CAN1 heraussucht und später FS_USB, so ist FS_USB nicht möglich. Wenn man das anders herum macht, so wird CAN1 auf alternative Pins gelegt und die Zuordnung klappt. Dennoch hilft es die Peripherie einfacher planen zu können.&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities ==&lt;br /&gt;
* Artikel [[STM32]]&lt;br /&gt;
* Artikel [[STM32 CooCox Installation]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/214719 Thread zu diesem Thema]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:STM32| ]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_Installation&amp;diff=81127</id>
		<title>STM32 Eclipse Installation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_Installation&amp;diff=81127"/>
		<updated>2014-01-24T08:04:50Z</updated>

		<summary type="html">&lt;p&gt;Kichi: /* Installation von Eclipse unter Windows */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel beschreibt, wie man Eclipse unter Windows installiert und für den Prozessor STM32 einrichtet, so dass ein Debuggen möglich ist.&lt;br /&gt;
&lt;br /&gt;
== Installation von Eclipse unter Windows ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Zusammenhänge:&#039;&#039;&#039;&lt;br /&gt;
* Eclipse - der Editor, ist eigentlich nichts weiteres als ein Editor, mit sehr viel Intelligenz&lt;br /&gt;
* Toolchain (make, Compiler, Linker, GDB, Bibliotheken, etc.). Hier gibt es verschiedene Möglichkeiten:&lt;br /&gt;
** YAGARTO GNU ARM toolchain - der Compiler und Debugger für Cortex-M3. Zusätzlich werden die Yagarto-Tools (make und sonstige Programme) benötigt.&lt;br /&gt;
** CodeSourcery - beinhaltet alle benötigten Tools, wie make, GCC, GDB, Newlib usw.&lt;br /&gt;
** GNU Tools for ARM Embedded Processors - benötigt zusätzlich ebenfalls make und rm bspw. aus den Yagarto-Tools&lt;br /&gt;
* CDT - Plugin, das Eclipse erweitert, sodaß C/C++ Programme editiert, kompiliert und gelinkt werden können. CDT steht für &amp;quot;C/C++ Development Tooling&amp;quot;. Man kann Eclipse auch mit schon integrierten CDT auf der Eclipse Homepage bekommen.&lt;br /&gt;
* GDB Hardware Debugging - ein weiteres Eclipse-Plugin, welches notwendig ist, um mittels GDB und weiteren Tools Programme zu debuggen.&lt;br /&gt;
* GDB - der GNU Debugger, mit ihm ist es möglich, entsprechend kompilierte Programme auf C-Sourcelevel (und auch Assembler) zu debuggen. Er kann allerdings nicht direkt mit einem JTAG-Interface sprechen. Er &amp;quot;verbindet&amp;quot; sich dafür mit einem GDB-Server, der dann das JTAG-I/F anspricht.&lt;br /&gt;
* GDB-Server stellt Verbindung mit GDB und dem JTAG-Interface her. Er führt die Kommandos des GDBs aus. Der Server muss vor dem debuggen gestartet werden, da GDB einen laufenden GDB-Server erwartet. Die Verbindung zwischen dem GDB und dem GDB-Server wird über eine TCP/IP Verbindung hergestellt.&lt;br /&gt;
** OpenOCD - ein freier GDB-Server&lt;br /&gt;
** Texane STlink - ebenfalls frei&lt;br /&gt;
* JTAG-Interface, z.B. Olimex ARM-USB-OCD, ST-Link oder diverse andere. Meist über USB an den PC angeschlossen, über ein JTAG-Kabel wird der Adapter mit der Prozessor-Platine verbunden. Der GDB-Server nimmt Kommandos vom GDB entgegen und führt diese über das JTAG-I/F des Prozessors aus.&lt;br /&gt;
* STM32-Prozessor, ja den braucht es auch noch, sonst gibt es nichts zu debuggen.&lt;br /&gt;
&lt;br /&gt;
Es sieht zwar auf den ersten Blick etwas komplex aus, aber es ist dennoch logisch aufgebaut.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Die benötigten Dateien für Eclipse:&lt;br /&gt;
&lt;br /&gt;
* [http://yagarto.de/ Yagarto-Tools http://yagarto.de/]&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/index.html Java JDK] Installation um Eclipse starten zu können.&lt;br /&gt;
* [http://eclipse.org/downloads/ Eclipse], der Download &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot;&lt;br /&gt;
* [http://www.freddiechopin.info/ OpenOCD http://www.freddiechopin.info/] &amp;gt;&amp;gt; Download &amp;gt;&amp;gt; Software &amp;gt;&amp;gt; OpenOCD&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Eclipse Demo-Projekt: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Media: Proj_Demo.zip | Blink-LED, komplettes Eclipse-Workspace von MmVisual]]&lt;br /&gt;
* Eclipse Workspace&lt;br /&gt;
* Mit OpenOCD und Dateien für den Olimex ARM-USB-OCD&lt;br /&gt;
* FW-Lib 3.4.0 von ST&lt;br /&gt;
* Start-Up Code als C-Datei, keine einzige Assembler-Datei&lt;br /&gt;
* Für STM32F103RB (128K Flash) wegen Initialisierung Stack-Pointer&lt;br /&gt;
* Nutzt make Tool, muss aber zu gmake umbenannt werden, ist weiter unten beschrieben&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Installation von Eclipse ===&lt;br /&gt;
Damit Eclipse gestartet werden kann, ist es nötig, dass zunächst Java installiert wird. Dabei muss einfach den Anweisungen des Installers gefolgt werden. Nachdem diese Installation abgeschlossen wurde, kann mit der Eclipse &amp;quot;Installation&amp;quot; fortgefahren werden.&lt;br /&gt;
&lt;br /&gt;
Eclipse befindet sich (sofern im Download ausgewählt) in einem ZIP-Archiv. In diesem Archiv sind alle benötigten Dateien vorhanden, um Eclipse direkt starten zu können. Dieses ZIP-Archiv sollte dann zu C:\eclipse\ entpackt werden. In diesem Beispiel wird davon ausgegangen, dass eclipse zu den o.g. Pfad entpackt wird.&lt;br /&gt;
&lt;br /&gt;
Sobald Eclipse vollständig entpackt wurde, kann eclipse gestartet werden. Während Eclipse startet, muss ein sog. Workspace ausgewählt werden. In diesem Workspace werden später alle Projekte und Sourcecodes abgelegt. Die Nachfolgende Grafik zeigt dieses Dialog-Fenster.&lt;br /&gt;
[[Datei:choose_workspace.png]]&lt;br /&gt;
Nachdem Eclipse erfolgreich gestartet werden kann, ist die Installation natürlich nicht abgeschlossen, da noch ein Compiler usw. für dem ARM-Mikrocontroller fehlt.&lt;br /&gt;
&lt;br /&gt;
Für die Toolchain, sprich Compiler, newlib usw. hat man nun die Qual der Wahl, entweder man nimmt Yagarto-Tools oder Codesourcery. Der Unterschied zwischen den beiden toolchains ist nicht direkt erkennbar und soll an dieser Stelle nicht weiter behandelt werden. Ich verweise an dieser Stelle an den folgenden Foreneintrag:&lt;br /&gt;
[[http://www.mikrocontroller.net/topic/158503#1503836 Unterschied WinARM und Codesourcery]]&lt;br /&gt;
&lt;br /&gt;
Ich persönlich habe mich für Codesourcery entschieden, da Truestuido von Atollic ebenfalls den none-eabi Compiler verwendet und dadurch die Linkerscripts direkt von Truestudio übernommen werden können.&lt;br /&gt;
&lt;br /&gt;
=== Installation der Code-Sourcery Umgebung ===&lt;br /&gt;
Wer sich nun für die Code-Sourcery Umgebung entschieden hat, steht nun schon vor einem kleinerem Problem - Welche Version von Code-Sourcery soll man wählen?&lt;br /&gt;
Zur Auswahl stehen folgende Versionen:&lt;br /&gt;
  * uCLinux&lt;br /&gt;
  * EABI&lt;br /&gt;
  * GNU/Linux&lt;br /&gt;
  * SymbianOS&lt;br /&gt;
Hier ist die Wahl auf EABI beschränkt. Für weitere Hinweise siehe: [[http://www.codesourcery.com/sgpp/lite/arm/portal/doc9876/getting-started.pdf Codesourcery Getting-Started]]&lt;br /&gt;
&lt;br /&gt;
Die Installation von Code-Sourcery ist komplett Menü geführt und entsprechend intuitiv durchzuführen. Dabei werden nachfolgend die wichtigsten Komponenten kurz erläutert:&lt;br /&gt;
&lt;br /&gt;
CodeSourcery Common Startup Code Sequence&lt;br /&gt;
Diese vordefinierten Startup-Codes werden für den Start des Mikrocontrollers benutzt. Dabei wird der Stackpointer, die Interrupt-Handler usw. initialisiert. Die Benutzung dieser Startupcodes wird hier nicht näher Betrachtet, da STM vorgefertigte Startup-Codes kostenlos anbietet.&lt;br /&gt;
&lt;br /&gt;
  * CodeSourcery Debug Sprite for ARM&lt;br /&gt;
Die Debug-Sprite Umgebung ermöglicht das Debuggen eines Mikrocontrollers über JTAG. Debug-Sprite kann dabei über XML-Dateien konfiguriert werden. Jedoch kann Debug-Sprite nicht für das Debuggen von STM32-Mikrocontrollern verwendet werden.&lt;br /&gt;
GNU Binary Utilities (Binutils)&lt;br /&gt;
Die Binutils beinhaltet den GNU-Assembler sowie den für das Übersetzen eines C-Software-Modules benötigen Linker. &lt;br /&gt;
&lt;br /&gt;
  * GNU C Compiler (GCC)&lt;br /&gt;
Der GNU-C Compiler übersetzt den C-Code zu den sog. Object-Codes.&lt;br /&gt;
&lt;br /&gt;
  * GNU C++ Compiler (G++)&lt;br /&gt;
Der G++ Compiler übersetzt ein C++-Software-Modul zu Object-Codes, um damit die Verwendung von C++ auf einem Mikrocontroller zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
  * GNU C++ Runtime Library (Libstdc++)&lt;br /&gt;
Diese Library stellt C++ spezifische Funktionen zu Verfügung.&lt;br /&gt;
&lt;br /&gt;
  * GNU Debugger (GDB)&lt;br /&gt;
Der Debugger ist der GDB-Client, der für das Debuggen eines Software-Moduls genutzt wird. &lt;br /&gt;
&lt;br /&gt;
  * Newlib C Library&lt;br /&gt;
&lt;br /&gt;
Die Newlib stellt die std-Lib für einen Mikrocontroller zu Verfügung. Dabei ist zu beachten, das die Newlib syscalls und stubs nutzt, um so eine Betriebssystemunabhängige Benutzung zu ermöglichen. Dies ermöglicht die Benutzung der Newlib auf einem Bare-Metal-System und auf einem uC-Linux basiertem Software-Modul.&lt;br /&gt;
&lt;br /&gt;
Ich persönlich habe als Installationsverzeichnis C:\WinARM benutzt, damit die entsprechenden Pfade zu bestimmten binaris keine großartigen Sonderzeichen aufweisen.&lt;br /&gt;
&lt;br /&gt;
=== Installation der Yagarto Umgebung ===&lt;br /&gt;
Die Installation sollte so ausgeführt werden, dass alles nach &amp;quot;C:\WinARM\&amp;quot; installiert wird, dazu müssen in den Setup-Paketen während des Setups immer die Pfade &amp;quot;C:\Programme\&amp;quot; angepasst werden. Damit kann man die gesamte Entwicklung und Konfiguration einfach sichern als ZIP Datei und sogar bei einem zweiten Rechner wieder einspielen.&lt;br /&gt;
&lt;br /&gt;
Zu erst werden die Downloads von Yagarto geladen und installiert. Dort ist auch sehr gut beschrieben wie das Einrichten geht.&lt;br /&gt;
Allerdings fehlt auf der Yagarto-Seite der Hinweis auf den Download-Link des eigentlichen Eclipse Programms, daher ist er oben im Artikel aufgeführt.&lt;br /&gt;
&lt;br /&gt;
Wenn man diese [http://yagarto.de/howto/yagarto2/index.html#download Yagarto-Anleitung] abgeschlossen hat kommt die Einrichtung von OpenOCD.&lt;br /&gt;
Eine Debugger-Einrichtung ist bei [http://yagarto.de/howto/yagarto2/index.html#cbug Yagarto] auch beschrieben, allerdings nicht für den STM32 Prozessor.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation von Yagarto-Tools muss eine Datei geändert werden:&lt;br /&gt;
C:\WinARM\yagarto-tools\bin\make.exe muss nach gmake.exe umbenannt werden.&lt;br /&gt;
Grund: Wenn man Delphi installiert hat, dann würde Eclipse das make Tool von Delphi finden und man kann das Eclipse Projekt nicht kompilieren.&lt;br /&gt;
Das Demo-Projekt nutzt auch das &amp;quot;gmake.exe&amp;quot;.&lt;br /&gt;
Alternativ kann auch make.exe kopiert zu gmake.exe werden, wenn man kein Delphi installiert hat.&lt;br /&gt;
&lt;br /&gt;
==== Start mit dem Demo-Projekt ====&lt;br /&gt;
&lt;br /&gt;
Für alle Projekte habe ich das Verzeichnis C:\WinARM\Projekt\ vorgesehen, damit ist immer alles zusammen. Nun entpackt man das Demo-Projekt nach C:\WinARM\Projekt\ somit müsste dort ein neues Unterverzeichnis &amp;quot;Proj_Demo&amp;quot; vorhanden sein samt allen unterordnern.&lt;br /&gt;
&lt;br /&gt;
Nun Eclipse Öffnen. Menü &amp;quot;File&amp;quot; &amp;gt;&amp;gt; &amp;quot;Switch Workspace&amp;quot; &amp;gt;&amp;gt; &amp;quot;Other...&amp;quot;. In der Eingabezeile &amp;quot;Workspace:&amp;quot; wird nun das Verzeichnis &amp;quot;C:\WinARM\Projekt\Proj_Demo&amp;quot; eingegeben. Mit OK wird sich Eclipse beenden und neu starten.&lt;br /&gt;
&lt;br /&gt;
Links im Baum sieht man das Projekt &amp;quot;BlinkLED&amp;quot;:&lt;br /&gt;
* inc:  die eigenen Includes&lt;br /&gt;
* lib:  die FW-Lib von ST&lt;br /&gt;
* out:  die kompilierten Dateien und listings&lt;br /&gt;
* prj:  OpenOCD und LD Linker-Datei&lt;br /&gt;
* src:  die eigenen Quellcodes&lt;br /&gt;
* makefile&lt;br /&gt;
&lt;br /&gt;
Das Projekt wurde geschrieben für den STM32F103RC (256K Flash/48K RAM), läuft aber auch mit einem STM32F103xB da der Stack-Pointer auf 20K initialisiert wird. Details stehen in der Datei &amp;quot;src/stm32f10x_vector.c&amp;quot;, Zeile 29,30:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#define STACK_TOP (0x20005000 - 4)&lt;br /&gt;
//#define STACK_TOP (0x2000C000 - 4)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Damit wird der Stack-Pointer für den RAM im Chip initialisiert.&lt;br /&gt;
&lt;br /&gt;
Zum kompilieren rechten Mausklick auf das Projekt (normalerweise links im Navigator oder Projekt-Explorer) und dann im aufgehenden Kontextmenu auf &amp;quot;Build&amp;quot; klicken.&lt;br /&gt;
Mit Strg+B wird nicht nur das Projekt neu kompiliert sondern ALLE Projekte im aktuellen Workspace gerade offen sind. Wenn man dort nur ein Projekt hat geht auch CTRL-B.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Die Funktionen des Demo-Projekts &#039;&#039;&#039;&lt;br /&gt;
* Blink-LED auf Prot A.0, Port C.7, PortD.3,4,7,13 (STM3210C-EVAL Board)&lt;br /&gt;
* Initialisieren aller Variablen&lt;br /&gt;
* Initialisieren Clock auf HSI, 8MHz&lt;br /&gt;
* Initialisieren IO-Pins der LED&#039;s&lt;br /&gt;
* Initialisieren Timer für Systick&lt;br /&gt;
* Main-Schleife in der die Timer-Variablen gesetzt und die LED&#039;s ausgegeben werden&lt;br /&gt;
* Debug-Helper, siehe &amp;quot;src\DebugHelper.c&amp;quot;&lt;br /&gt;
* Systick-Interrupt&lt;br /&gt;
* komplett in C programmiert, kein Assembler&lt;br /&gt;
* ST FW-Lib V3.4.0 wird für alle Funktionen genutzt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erster Start mit dem Demo-Projekt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mit Eclipse mit der grünen Play-Taste mit dem roten Koffer &amp;quot;Run OpenOCD BlinkLED&amp;quot; &amp;quot;OpenOCD BlinkLED starten. Damit wird der GDB Server OpenOCD mit dem JTAG-Key ARM-USB-OCD gestartet. Wenn man einen anderen JTAG Adapter hat, so kann der mit dem kleinen schwarzen Pfeil im Menü &amp;quot;External Tools Configuration...&amp;quot; eingestellt werden. OpenOCD wird mit Start-Parametern gestartet, z.B. &amp;quot;-f .\prj\arm-usb-ocd.cfg&amp;quot; für das Olimex JTAG Interface. Wenn man nun ein anderes JTAG Interface hat, so muss hier der Dateiname geändert und in das Projekt nach &amp;quot;prj\&amp;quot; muss die CFG-Datei einkopiert werden.&lt;br /&gt;
&lt;br /&gt;
Mit Eclipase mit der grünen Käfertaste (Debug BlinkLED), der kleine Pfeil nach unten, &amp;quot;BlinkLED OpenOCD Reset Load Run&amp;quot; ausführen. Damit wird der GDB Debugger gestartet, das Projekt geladen und gestartet. Der Debugger beendet sich dann automatisch und die CPU läuft.&lt;br /&gt;
&lt;br /&gt;
=== Weitere Plug-Ins für Eclipse ===&lt;br /&gt;
Damit das Arbeiten mit Eclipse einfacher wird, gibt es zahlreiche Plug-Ins. Diese können mittels Eclipse heruntergeladen werden und werden dann automatisch installiert.&lt;br /&gt;
&lt;br /&gt;
Die in meinen Augen wichtigsten Plug-Ins sind folgende:&lt;br /&gt;
  * ARM-Plug-In&lt;br /&gt;
  * Register View&lt;br /&gt;
  * GDB-Plug-In&lt;br /&gt;
&lt;br /&gt;
Das ARM-PlugIn stellt einen Wizzard bereit, in dem projektspezifische Einstellungen über den Compiler, Linkerscript usw. mit Hilfe einer GUI getroffen werden können.&lt;br /&gt;
&lt;br /&gt;
Register View ermöglicht das Einsehen der General-Purpose Registern im Mikrocontroller. Dies kann beim Debuggen Hilfreich sein, da man anhand des Stack-Registers evtl. Stack-Overflows erkennen kann.&lt;br /&gt;
&lt;br /&gt;
GDB-PlugIn mittels dem GDB-PlugIn ist es über Eclipse möglich, sich auf einen GDB-Server zu Connecten. Dabei kann dann aus Eclipse heraus direkt der Code-Debuggt werden.&lt;br /&gt;
&lt;br /&gt;
== Einrichten eines eigenen Projektes ==&lt;br /&gt;
&lt;br /&gt;
== Einrichtung GDB-Server ==&lt;br /&gt;
&lt;br /&gt;
Ein GDB-Server wird immer unter &amp;quot;External Tools Configuration...&amp;quot; eingerichtet.&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalTool.png]]&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe dieser Funktion kann ein beliebiges Programm gestartet werden.&lt;br /&gt;
&lt;br /&gt;
=== OpenOCD mit ARM-USB-OCD von Olimex ===&lt;br /&gt;
&lt;br /&gt;
Der Aufruf, mit Parameter HW-Interface und Prozessor:&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalToolOOCD1.png]]&lt;br /&gt;
&lt;br /&gt;
Der Eintrag im Eclipse-Menü:&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalToolOOCD2.png]]&lt;br /&gt;
&lt;br /&gt;
Die restlichen Reiter sind ohne Änderung.&lt;br /&gt;
&lt;br /&gt;
=== JLink mit Segger GDB-Server einrichten ===&lt;br /&gt;
&lt;br /&gt;
Im Demo-Projekt ist eine Konfiguration für den Segger GDB-Server enthalten. Dabei wird der GDB-Server so gestartet dass SWD als Kommunikation genutzt wird.&lt;br /&gt;
&lt;br /&gt;
Der Aufruf, mit Parameter für SWD (Single Wire Debug):&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalToolJLink.png]]&lt;br /&gt;
&lt;br /&gt;
Der Pfad zum &amp;quot;JLinkGDBServer.exe&amp;quot; muss so angepasst werden je nach dem wohin er installiert wurde.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung ST-Link (SWD Programmer vom Eval Board) ===&lt;br /&gt;
==== Einrichtung unter Windows ====&lt;br /&gt;
==== Einrichtung unter Linux ====&lt;br /&gt;
&lt;br /&gt;
!!! Achtung !!! Das ST-Link projekt für Linux ist mit den neueren 3.0.X Kernel nicht mehr lauffähig und lässt den gesamten Rechner einfrieren !!!&lt;br /&gt;
Sollte sich dort etwas ändern, so werde ich dies hier bekannt geben.&lt;br /&gt;
&lt;br /&gt;
Vielfach wurde genannt, daß es schade sei, daß das Discoveryboard oder das STLink nur unter Windows benutzen zu können. Mittlerweile hat sich dieses geändert, ohne das, dass STLink mit einer neuen Firmware beschrieben werden muss. Es gibt eine kleine Gruppe, die einen STLink GDB-Server für Linux realisiert haben. Mittlerweile befindet sich dieses Projekt noch in der Beta-Phase, jedoch konnten die ersten Tests überzeugen.&lt;br /&gt;
&lt;br /&gt;
Dazu muss der Sourcecode von der Seite [[https://github.com/whitequark/stlink/blob/master/src/stlink-hw.c Projekt-Seite]] mittels git gecloned werden. (GIT Link: https://github.com/whitequark/stlink.git)&lt;br /&gt;
Damit ein Compilieren des Sourcecodes funktioniert, muss mittels apt-get oä. folgendes Paket installiert werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;libsgutils2-dev&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nachdem dieses Paket installiert wurde, muss im Sourcecode noch einige Änderungen durchgeführt werden, da dort &amp;quot;unsauber&amp;quot; gecasted wurde.&lt;br /&gt;
Dieses Bezieht sich auf die Datei: &amp;quot;stlink-hw.c&amp;quot; und dort in den Zeilen: &lt;br /&gt;
1420, 1491, 1514.&lt;br /&gt;
Dort muss ein explizieter Cast zu (unsigned int) durchgeführt werden, so dass in der Zeile 1420 statt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;fprintf(stderr, &amp;quot;run_flash_loader(0x%x) == -1\n&amp;quot;, addr + off);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
nun &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;fprintf(stderr, &amp;quot;run_flash_loader(0x%x) == -1\n&amp;quot;, addr + (unsigned int)off);&amp;lt;/syntaxhighlight&amp;gt; steht. Diese Änderung ist bei den beiden verbleibenden Zeilen durchzuführen.&lt;br /&gt;
Nachdem dies abgeschlossen wurde müssen die Sourcecodes mittels dem Befehl:&lt;br /&gt;
&amp;lt;pre&amp;gt; make -C build &amp;lt;/pre&amp;gt; &lt;br /&gt;
compiliert werden.&lt;br /&gt;
Der Start dieses GDB-Servers wird durch die Kommandozeile initiiert:&lt;br /&gt;
&amp;lt;pre&amp;gt;./build/st-util &amp;lt;&amp;lt;PORT&amp;gt;&amp;gt; /dev/sg&amp;lt;&amp;lt;SG-NUMBER&amp;gt;&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
Mittels des Attributes &amp;lt;&amp;lt;PORT&amp;gt;&amp;gt; wird die Port-Nummer des GDB-Servers angegeben. Die ST-Link &amp;quot;Geräte Datei&amp;quot; wird (zumindest bei mir) nicht immer an dem gleichen Pfaden angegeben.&lt;br /&gt;
&lt;br /&gt;
Nach dem Start sollte folgende Meldung (beim Discoverboard) erscheinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*** stlink_open [/dev/sg4] ***&lt;br /&gt;
Chip ID is 10016420.&lt;br /&gt;
Device connected: Medium-density value line device&lt;br /&gt;
Device parameters: SRAM: 0x2000 bytes, Flash: up to 0x20000 bytes in pages of 0x400 bytes&lt;br /&gt;
Flash size is 128 KiB.&lt;br /&gt;
Listening at *:1234...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun ist der GDB-Server aktiv und kann mittels Eclipse genutzt werden. Für die Einrichtung von Eclipse siehe: Einrichtung unter Windows.&lt;br /&gt;
&lt;br /&gt;
== Tipps, Tricks und Stolpersteine ==&lt;br /&gt;
&lt;br /&gt;
* Die Dateiendung einer C/H Datei muss kleingeschrieben sein, denn sonst meint der GCC Compiler dass es C++ Dateien sind.&lt;br /&gt;
&lt;br /&gt;
* Wird VBox benutzt und einen Filter für den ST-Link bzw. des USB-Devices des Discovery-Boards eingerichtet, so kommt es zu schwerwiegenden Konflikten bei dem nächsten Start von VBox. Das Problem ist die Seriennummer vom ST-Link, welche nicht sichtbare Zeichen enthält. Ein Workaround zu diesem Problem: In dem eingerichtetem Filter muss die Seriennummer entfernt werden.&lt;br /&gt;
&lt;br /&gt;
== MicroXplorer - MCU graphical configuration tool ==&lt;br /&gt;
&lt;br /&gt;
Der [http://www.st.com/web/en/catalog/tools/PF251717 MicroXplorer von ST] ist ein Eclipse Plugin mit dem man sich die Peripheriefunktionen zusammen klicken kann die man beim STM32 Prozessor benötigt. Das Tool zeigt auch Kombinationen die nicht gehen. Somit kann man die Peripherie leichter planen.&lt;br /&gt;
&lt;br /&gt;
Jedoch sollte man bei diesem Tool aufpassen: Wenn man z.B. zu erst CAN1 heraussucht und später FS_USB, so ist FS_USB nicht möglich. Wenn man das anders herum macht, so wird CAN1 auf alternative Pins gelegt und die Zuordnung klappt. Dennoch hilft es die Peripherie einfacher planen zu können.&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities ==&lt;br /&gt;
* Artikel [[STM32]]&lt;br /&gt;
* Artikel [[STM32 CooCox Installation]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/214719 Thread zu diesem Thema]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:STM32| ]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_Installation&amp;diff=81126</id>
		<title>STM32 Eclipse Installation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_Eclipse_Installation&amp;diff=81126"/>
		<updated>2014-01-24T08:04:19Z</updated>

		<summary type="html">&lt;p&gt;Kichi: /* Installation von Eclipse unter Windows */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel beschreibt, wie man Eclipse unter Windows installiert und für den Prozessor STM32 einrichtet, so dass ein Debuggen möglich ist.&lt;br /&gt;
&lt;br /&gt;
== Installation von Eclipse unter Windows ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Zusammenhänge:&#039;&#039;&#039;&lt;br /&gt;
* Eclipse - der Editor, ist eigentlich nichts weiteres als ein Editor, mit sehr viel Intelligenz&lt;br /&gt;
* Toolchain (make, Compiler, Linker, GDB, Bibliotheken, etc.). Hier gibt es verschiedene Möglichkeiten:&lt;br /&gt;
** YAGARTO GNU ARM toolchain - der Compiler und Debugger für Cortex-M3. Zusätzlich werden die Yagarto-Tools (make und sonstige Programme) benötigt.&lt;br /&gt;
** CodeSourcery beinhaltet alle benötigten Tools, wie make, GCC, GDB, Newlib usw.&lt;br /&gt;
** GNU Tools for ARM Embedded Processors benötigt zusätzlich ebenfalls make und rm bspw. aus den Yagarto-Tools&lt;br /&gt;
* CDT - Plugin, das Eclipse erweitert, sodaß C/C++ Programme editiert, kompiliert und gelinkt werden können. CDT steht für &amp;quot;C/C++ Development Tooling&amp;quot;. Man kann Eclipse auch mit schon integrierten CDT auf der Eclipse Homepage bekommen.&lt;br /&gt;
* GDB Hardware Debugging - ein weiteres Eclipse-Plugin, welches notwendig ist, um mittels GDB und weiteren Tools Programme zu debuggen.&lt;br /&gt;
* GDB - der GNU Debugger, mit ihm ist es möglich, entsprechend kompilierte Programme auf C-Sourcelevel (und auch Assembler) zu debuggen. Er kann allerdings nicht direkt mit einem JTAG-Interface sprechen. Er &amp;quot;verbindet&amp;quot; sich dafür mit einem GDB-Server, der dann das JTAG-I/F anspricht.&lt;br /&gt;
* GDB-Server stellt Verbindung mit GDB und dem JTAG-Interface her. Er führt die Kommandos des GDBs aus. Der Server muss vor dem debuggen gestartet werden, da GDB einen laufenden GDB-Server erwartet. Die Verbindung zwischen dem GDB und dem GDB-Server wird über eine TCP/IP Verbindung hergestellt.&lt;br /&gt;
** OpenOCD - ein freier GDB-Server&lt;br /&gt;
** Texane STlink - ebenfalls frei&lt;br /&gt;
* JTAG-Interface, z.B. Olimex ARM-USB-OCD, ST-Link oder diverse andere. Meist über USB an den PC angeschlossen, über ein JTAG-Kabel wird der Adapter mit der Prozessor-Platine verbunden. Der GDB-Server nimmt Kommandos vom GDB entgegen und führt diese über das JTAG-I/F des Prozessors aus.&lt;br /&gt;
* STM32-Prozessor, ja den braucht es auch noch, sonst gibt es nichts zu debuggen.&lt;br /&gt;
&lt;br /&gt;
Es sieht zwar auf den ersten Blick etwas komplex aus, aber es ist dennoch logisch aufgebaut.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Die benötigten Dateien für Eclipse:&lt;br /&gt;
&lt;br /&gt;
* [http://yagarto.de/ Yagarto-Tools http://yagarto.de/]&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/index.html Java JDK] Installation um Eclipse starten zu können.&lt;br /&gt;
* [http://eclipse.org/downloads/ Eclipse], der Download &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot;&lt;br /&gt;
* [http://www.freddiechopin.info/ OpenOCD http://www.freddiechopin.info/] &amp;gt;&amp;gt; Download &amp;gt;&amp;gt; Software &amp;gt;&amp;gt; OpenOCD&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Eclipse Demo-Projekt: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Media: Proj_Demo.zip | Blink-LED, komplettes Eclipse-Workspace von MmVisual]]&lt;br /&gt;
* Eclipse Workspace&lt;br /&gt;
* Mit OpenOCD und Dateien für den Olimex ARM-USB-OCD&lt;br /&gt;
* FW-Lib 3.4.0 von ST&lt;br /&gt;
* Start-Up Code als C-Datei, keine einzige Assembler-Datei&lt;br /&gt;
* Für STM32F103RB (128K Flash) wegen Initialisierung Stack-Pointer&lt;br /&gt;
* Nutzt make Tool, muss aber zu gmake umbenannt werden, ist weiter unten beschrieben&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Installation von Eclipse ===&lt;br /&gt;
Damit Eclipse gestartet werden kann, ist es nötig, dass zunächst Java installiert wird. Dabei muss einfach den Anweisungen des Installers gefolgt werden. Nachdem diese Installation abgeschlossen wurde, kann mit der Eclipse &amp;quot;Installation&amp;quot; fortgefahren werden.&lt;br /&gt;
&lt;br /&gt;
Eclipse befindet sich (sofern im Download ausgewählt) in einem ZIP-Archiv. In diesem Archiv sind alle benötigten Dateien vorhanden, um Eclipse direkt starten zu können. Dieses ZIP-Archiv sollte dann zu C:\eclipse\ entpackt werden. In diesem Beispiel wird davon ausgegangen, dass eclipse zu den o.g. Pfad entpackt wird.&lt;br /&gt;
&lt;br /&gt;
Sobald Eclipse vollständig entpackt wurde, kann eclipse gestartet werden. Während Eclipse startet, muss ein sog. Workspace ausgewählt werden. In diesem Workspace werden später alle Projekte und Sourcecodes abgelegt. Die Nachfolgende Grafik zeigt dieses Dialog-Fenster.&lt;br /&gt;
[[Datei:choose_workspace.png]]&lt;br /&gt;
Nachdem Eclipse erfolgreich gestartet werden kann, ist die Installation natürlich nicht abgeschlossen, da noch ein Compiler usw. für dem ARM-Mikrocontroller fehlt.&lt;br /&gt;
&lt;br /&gt;
Für die Toolchain, sprich Compiler, newlib usw. hat man nun die Qual der Wahl, entweder man nimmt Yagarto-Tools oder Codesourcery. Der Unterschied zwischen den beiden toolchains ist nicht direkt erkennbar und soll an dieser Stelle nicht weiter behandelt werden. Ich verweise an dieser Stelle an den folgenden Foreneintrag:&lt;br /&gt;
[[http://www.mikrocontroller.net/topic/158503#1503836 Unterschied WinARM und Codesourcery]]&lt;br /&gt;
&lt;br /&gt;
Ich persönlich habe mich für Codesourcery entschieden, da Truestuido von Atollic ebenfalls den none-eabi Compiler verwendet und dadurch die Linkerscripts direkt von Truestudio übernommen werden können.&lt;br /&gt;
&lt;br /&gt;
=== Installation der Code-Sourcery Umgebung ===&lt;br /&gt;
Wer sich nun für die Code-Sourcery Umgebung entschieden hat, steht nun schon vor einem kleinerem Problem - Welche Version von Code-Sourcery soll man wählen?&lt;br /&gt;
Zur Auswahl stehen folgende Versionen:&lt;br /&gt;
  * uCLinux&lt;br /&gt;
  * EABI&lt;br /&gt;
  * GNU/Linux&lt;br /&gt;
  * SymbianOS&lt;br /&gt;
Hier ist die Wahl auf EABI beschränkt. Für weitere Hinweise siehe: [[http://www.codesourcery.com/sgpp/lite/arm/portal/doc9876/getting-started.pdf Codesourcery Getting-Started]]&lt;br /&gt;
&lt;br /&gt;
Die Installation von Code-Sourcery ist komplett Menü geführt und entsprechend intuitiv durchzuführen. Dabei werden nachfolgend die wichtigsten Komponenten kurz erläutert:&lt;br /&gt;
&lt;br /&gt;
CodeSourcery Common Startup Code Sequence&lt;br /&gt;
Diese vordefinierten Startup-Codes werden für den Start des Mikrocontrollers benutzt. Dabei wird der Stackpointer, die Interrupt-Handler usw. initialisiert. Die Benutzung dieser Startupcodes wird hier nicht näher Betrachtet, da STM vorgefertigte Startup-Codes kostenlos anbietet.&lt;br /&gt;
&lt;br /&gt;
  * CodeSourcery Debug Sprite for ARM&lt;br /&gt;
Die Debug-Sprite Umgebung ermöglicht das Debuggen eines Mikrocontrollers über JTAG. Debug-Sprite kann dabei über XML-Dateien konfiguriert werden. Jedoch kann Debug-Sprite nicht für das Debuggen von STM32-Mikrocontrollern verwendet werden.&lt;br /&gt;
GNU Binary Utilities (Binutils)&lt;br /&gt;
Die Binutils beinhaltet den GNU-Assembler sowie den für das Übersetzen eines C-Software-Modules benötigen Linker. &lt;br /&gt;
&lt;br /&gt;
  * GNU C Compiler (GCC)&lt;br /&gt;
Der GNU-C Compiler übersetzt den C-Code zu den sog. Object-Codes.&lt;br /&gt;
&lt;br /&gt;
  * GNU C++ Compiler (G++)&lt;br /&gt;
Der G++ Compiler übersetzt ein C++-Software-Modul zu Object-Codes, um damit die Verwendung von C++ auf einem Mikrocontroller zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
  * GNU C++ Runtime Library (Libstdc++)&lt;br /&gt;
Diese Library stellt C++ spezifische Funktionen zu Verfügung.&lt;br /&gt;
&lt;br /&gt;
  * GNU Debugger (GDB)&lt;br /&gt;
Der Debugger ist der GDB-Client, der für das Debuggen eines Software-Moduls genutzt wird. &lt;br /&gt;
&lt;br /&gt;
  * Newlib C Library&lt;br /&gt;
&lt;br /&gt;
Die Newlib stellt die std-Lib für einen Mikrocontroller zu Verfügung. Dabei ist zu beachten, das die Newlib syscalls und stubs nutzt, um so eine Betriebssystemunabhängige Benutzung zu ermöglichen. Dies ermöglicht die Benutzung der Newlib auf einem Bare-Metal-System und auf einem uC-Linux basiertem Software-Modul.&lt;br /&gt;
&lt;br /&gt;
Ich persönlich habe als Installationsverzeichnis C:\WinARM benutzt, damit die entsprechenden Pfade zu bestimmten binaris keine großartigen Sonderzeichen aufweisen.&lt;br /&gt;
&lt;br /&gt;
=== Installation der Yagarto Umgebung ===&lt;br /&gt;
Die Installation sollte so ausgeführt werden, dass alles nach &amp;quot;C:\WinARM\&amp;quot; installiert wird, dazu müssen in den Setup-Paketen während des Setups immer die Pfade &amp;quot;C:\Programme\&amp;quot; angepasst werden. Damit kann man die gesamte Entwicklung und Konfiguration einfach sichern als ZIP Datei und sogar bei einem zweiten Rechner wieder einspielen.&lt;br /&gt;
&lt;br /&gt;
Zu erst werden die Downloads von Yagarto geladen und installiert. Dort ist auch sehr gut beschrieben wie das Einrichten geht.&lt;br /&gt;
Allerdings fehlt auf der Yagarto-Seite der Hinweis auf den Download-Link des eigentlichen Eclipse Programms, daher ist er oben im Artikel aufgeführt.&lt;br /&gt;
&lt;br /&gt;
Wenn man diese [http://yagarto.de/howto/yagarto2/index.html#download Yagarto-Anleitung] abgeschlossen hat kommt die Einrichtung von OpenOCD.&lt;br /&gt;
Eine Debugger-Einrichtung ist bei [http://yagarto.de/howto/yagarto2/index.html#cbug Yagarto] auch beschrieben, allerdings nicht für den STM32 Prozessor.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation von Yagarto-Tools muss eine Datei geändert werden:&lt;br /&gt;
C:\WinARM\yagarto-tools\bin\make.exe muss nach gmake.exe umbenannt werden.&lt;br /&gt;
Grund: Wenn man Delphi installiert hat, dann würde Eclipse das make Tool von Delphi finden und man kann das Eclipse Projekt nicht kompilieren.&lt;br /&gt;
Das Demo-Projekt nutzt auch das &amp;quot;gmake.exe&amp;quot;.&lt;br /&gt;
Alternativ kann auch make.exe kopiert zu gmake.exe werden, wenn man kein Delphi installiert hat.&lt;br /&gt;
&lt;br /&gt;
==== Start mit dem Demo-Projekt ====&lt;br /&gt;
&lt;br /&gt;
Für alle Projekte habe ich das Verzeichnis C:\WinARM\Projekt\ vorgesehen, damit ist immer alles zusammen. Nun entpackt man das Demo-Projekt nach C:\WinARM\Projekt\ somit müsste dort ein neues Unterverzeichnis &amp;quot;Proj_Demo&amp;quot; vorhanden sein samt allen unterordnern.&lt;br /&gt;
&lt;br /&gt;
Nun Eclipse Öffnen. Menü &amp;quot;File&amp;quot; &amp;gt;&amp;gt; &amp;quot;Switch Workspace&amp;quot; &amp;gt;&amp;gt; &amp;quot;Other...&amp;quot;. In der Eingabezeile &amp;quot;Workspace:&amp;quot; wird nun das Verzeichnis &amp;quot;C:\WinARM\Projekt\Proj_Demo&amp;quot; eingegeben. Mit OK wird sich Eclipse beenden und neu starten.&lt;br /&gt;
&lt;br /&gt;
Links im Baum sieht man das Projekt &amp;quot;BlinkLED&amp;quot;:&lt;br /&gt;
* inc:  die eigenen Includes&lt;br /&gt;
* lib:  die FW-Lib von ST&lt;br /&gt;
* out:  die kompilierten Dateien und listings&lt;br /&gt;
* prj:  OpenOCD und LD Linker-Datei&lt;br /&gt;
* src:  die eigenen Quellcodes&lt;br /&gt;
* makefile&lt;br /&gt;
&lt;br /&gt;
Das Projekt wurde geschrieben für den STM32F103RC (256K Flash/48K RAM), läuft aber auch mit einem STM32F103xB da der Stack-Pointer auf 20K initialisiert wird. Details stehen in der Datei &amp;quot;src/stm32f10x_vector.c&amp;quot;, Zeile 29,30:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#define STACK_TOP (0x20005000 - 4)&lt;br /&gt;
//#define STACK_TOP (0x2000C000 - 4)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Damit wird der Stack-Pointer für den RAM im Chip initialisiert.&lt;br /&gt;
&lt;br /&gt;
Zum kompilieren rechten Mausklick auf das Projekt (normalerweise links im Navigator oder Projekt-Explorer) und dann im aufgehenden Kontextmenu auf &amp;quot;Build&amp;quot; klicken.&lt;br /&gt;
Mit Strg+B wird nicht nur das Projekt neu kompiliert sondern ALLE Projekte im aktuellen Workspace gerade offen sind. Wenn man dort nur ein Projekt hat geht auch CTRL-B.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Die Funktionen des Demo-Projekts &#039;&#039;&#039;&lt;br /&gt;
* Blink-LED auf Prot A.0, Port C.7, PortD.3,4,7,13 (STM3210C-EVAL Board)&lt;br /&gt;
* Initialisieren aller Variablen&lt;br /&gt;
* Initialisieren Clock auf HSI, 8MHz&lt;br /&gt;
* Initialisieren IO-Pins der LED&#039;s&lt;br /&gt;
* Initialisieren Timer für Systick&lt;br /&gt;
* Main-Schleife in der die Timer-Variablen gesetzt und die LED&#039;s ausgegeben werden&lt;br /&gt;
* Debug-Helper, siehe &amp;quot;src\DebugHelper.c&amp;quot;&lt;br /&gt;
* Systick-Interrupt&lt;br /&gt;
* komplett in C programmiert, kein Assembler&lt;br /&gt;
* ST FW-Lib V3.4.0 wird für alle Funktionen genutzt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erster Start mit dem Demo-Projekt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mit Eclipse mit der grünen Play-Taste mit dem roten Koffer &amp;quot;Run OpenOCD BlinkLED&amp;quot; &amp;quot;OpenOCD BlinkLED starten. Damit wird der GDB Server OpenOCD mit dem JTAG-Key ARM-USB-OCD gestartet. Wenn man einen anderen JTAG Adapter hat, so kann der mit dem kleinen schwarzen Pfeil im Menü &amp;quot;External Tools Configuration...&amp;quot; eingestellt werden. OpenOCD wird mit Start-Parametern gestartet, z.B. &amp;quot;-f .\prj\arm-usb-ocd.cfg&amp;quot; für das Olimex JTAG Interface. Wenn man nun ein anderes JTAG Interface hat, so muss hier der Dateiname geändert und in das Projekt nach &amp;quot;prj\&amp;quot; muss die CFG-Datei einkopiert werden.&lt;br /&gt;
&lt;br /&gt;
Mit Eclipase mit der grünen Käfertaste (Debug BlinkLED), der kleine Pfeil nach unten, &amp;quot;BlinkLED OpenOCD Reset Load Run&amp;quot; ausführen. Damit wird der GDB Debugger gestartet, das Projekt geladen und gestartet. Der Debugger beendet sich dann automatisch und die CPU läuft.&lt;br /&gt;
&lt;br /&gt;
=== Weitere Plug-Ins für Eclipse ===&lt;br /&gt;
Damit das Arbeiten mit Eclipse einfacher wird, gibt es zahlreiche Plug-Ins. Diese können mittels Eclipse heruntergeladen werden und werden dann automatisch installiert.&lt;br /&gt;
&lt;br /&gt;
Die in meinen Augen wichtigsten Plug-Ins sind folgende:&lt;br /&gt;
  * ARM-Plug-In&lt;br /&gt;
  * Register View&lt;br /&gt;
  * GDB-Plug-In&lt;br /&gt;
&lt;br /&gt;
Das ARM-PlugIn stellt einen Wizzard bereit, in dem projektspezifische Einstellungen über den Compiler, Linkerscript usw. mit Hilfe einer GUI getroffen werden können.&lt;br /&gt;
&lt;br /&gt;
Register View ermöglicht das Einsehen der General-Purpose Registern im Mikrocontroller. Dies kann beim Debuggen Hilfreich sein, da man anhand des Stack-Registers evtl. Stack-Overflows erkennen kann.&lt;br /&gt;
&lt;br /&gt;
GDB-PlugIn mittels dem GDB-PlugIn ist es über Eclipse möglich, sich auf einen GDB-Server zu Connecten. Dabei kann dann aus Eclipse heraus direkt der Code-Debuggt werden.&lt;br /&gt;
&lt;br /&gt;
== Einrichten eines eigenen Projektes ==&lt;br /&gt;
&lt;br /&gt;
== Einrichtung GDB-Server ==&lt;br /&gt;
&lt;br /&gt;
Ein GDB-Server wird immer unter &amp;quot;External Tools Configuration...&amp;quot; eingerichtet.&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalTool.png]]&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe dieser Funktion kann ein beliebiges Programm gestartet werden.&lt;br /&gt;
&lt;br /&gt;
=== OpenOCD mit ARM-USB-OCD von Olimex ===&lt;br /&gt;
&lt;br /&gt;
Der Aufruf, mit Parameter HW-Interface und Prozessor:&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalToolOOCD1.png]]&lt;br /&gt;
&lt;br /&gt;
Der Eintrag im Eclipse-Menü:&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalToolOOCD2.png]]&lt;br /&gt;
&lt;br /&gt;
Die restlichen Reiter sind ohne Änderung.&lt;br /&gt;
&lt;br /&gt;
=== JLink mit Segger GDB-Server einrichten ===&lt;br /&gt;
&lt;br /&gt;
Im Demo-Projekt ist eine Konfiguration für den Segger GDB-Server enthalten. Dabei wird der GDB-Server so gestartet dass SWD als Kommunikation genutzt wird.&lt;br /&gt;
&lt;br /&gt;
Der Aufruf, mit Parameter für SWD (Single Wire Debug):&lt;br /&gt;
&lt;br /&gt;
[[bild:MenuExternalToolJLink.png]]&lt;br /&gt;
&lt;br /&gt;
Der Pfad zum &amp;quot;JLinkGDBServer.exe&amp;quot; muss so angepasst werden je nach dem wohin er installiert wurde.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung ST-Link (SWD Programmer vom Eval Board) ===&lt;br /&gt;
==== Einrichtung unter Windows ====&lt;br /&gt;
==== Einrichtung unter Linux ====&lt;br /&gt;
&lt;br /&gt;
!!! Achtung !!! Das ST-Link projekt für Linux ist mit den neueren 3.0.X Kernel nicht mehr lauffähig und lässt den gesamten Rechner einfrieren !!!&lt;br /&gt;
Sollte sich dort etwas ändern, so werde ich dies hier bekannt geben.&lt;br /&gt;
&lt;br /&gt;
Vielfach wurde genannt, daß es schade sei, daß das Discoveryboard oder das STLink nur unter Windows benutzen zu können. Mittlerweile hat sich dieses geändert, ohne das, dass STLink mit einer neuen Firmware beschrieben werden muss. Es gibt eine kleine Gruppe, die einen STLink GDB-Server für Linux realisiert haben. Mittlerweile befindet sich dieses Projekt noch in der Beta-Phase, jedoch konnten die ersten Tests überzeugen.&lt;br /&gt;
&lt;br /&gt;
Dazu muss der Sourcecode von der Seite [[https://github.com/whitequark/stlink/blob/master/src/stlink-hw.c Projekt-Seite]] mittels git gecloned werden. (GIT Link: https://github.com/whitequark/stlink.git)&lt;br /&gt;
Damit ein Compilieren des Sourcecodes funktioniert, muss mittels apt-get oä. folgendes Paket installiert werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;libsgutils2-dev&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nachdem dieses Paket installiert wurde, muss im Sourcecode noch einige Änderungen durchgeführt werden, da dort &amp;quot;unsauber&amp;quot; gecasted wurde.&lt;br /&gt;
Dieses Bezieht sich auf die Datei: &amp;quot;stlink-hw.c&amp;quot; und dort in den Zeilen: &lt;br /&gt;
1420, 1491, 1514.&lt;br /&gt;
Dort muss ein explizieter Cast zu (unsigned int) durchgeführt werden, so dass in der Zeile 1420 statt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;fprintf(stderr, &amp;quot;run_flash_loader(0x%x) == -1\n&amp;quot;, addr + off);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
nun &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;fprintf(stderr, &amp;quot;run_flash_loader(0x%x) == -1\n&amp;quot;, addr + (unsigned int)off);&amp;lt;/syntaxhighlight&amp;gt; steht. Diese Änderung ist bei den beiden verbleibenden Zeilen durchzuführen.&lt;br /&gt;
Nachdem dies abgeschlossen wurde müssen die Sourcecodes mittels dem Befehl:&lt;br /&gt;
&amp;lt;pre&amp;gt; make -C build &amp;lt;/pre&amp;gt; &lt;br /&gt;
compiliert werden.&lt;br /&gt;
Der Start dieses GDB-Servers wird durch die Kommandozeile initiiert:&lt;br /&gt;
&amp;lt;pre&amp;gt;./build/st-util &amp;lt;&amp;lt;PORT&amp;gt;&amp;gt; /dev/sg&amp;lt;&amp;lt;SG-NUMBER&amp;gt;&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
Mittels des Attributes &amp;lt;&amp;lt;PORT&amp;gt;&amp;gt; wird die Port-Nummer des GDB-Servers angegeben. Die ST-Link &amp;quot;Geräte Datei&amp;quot; wird (zumindest bei mir) nicht immer an dem gleichen Pfaden angegeben.&lt;br /&gt;
&lt;br /&gt;
Nach dem Start sollte folgende Meldung (beim Discoverboard) erscheinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*** stlink_open [/dev/sg4] ***&lt;br /&gt;
Chip ID is 10016420.&lt;br /&gt;
Device connected: Medium-density value line device&lt;br /&gt;
Device parameters: SRAM: 0x2000 bytes, Flash: up to 0x20000 bytes in pages of 0x400 bytes&lt;br /&gt;
Flash size is 128 KiB.&lt;br /&gt;
Listening at *:1234...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun ist der GDB-Server aktiv und kann mittels Eclipse genutzt werden. Für die Einrichtung von Eclipse siehe: Einrichtung unter Windows.&lt;br /&gt;
&lt;br /&gt;
== Tipps, Tricks und Stolpersteine ==&lt;br /&gt;
&lt;br /&gt;
* Die Dateiendung einer C/H Datei muss kleingeschrieben sein, denn sonst meint der GCC Compiler dass es C++ Dateien sind.&lt;br /&gt;
&lt;br /&gt;
* Wird VBox benutzt und einen Filter für den ST-Link bzw. des USB-Devices des Discovery-Boards eingerichtet, so kommt es zu schwerwiegenden Konflikten bei dem nächsten Start von VBox. Das Problem ist die Seriennummer vom ST-Link, welche nicht sichtbare Zeichen enthält. Ein Workaround zu diesem Problem: In dem eingerichtetem Filter muss die Seriennummer entfernt werden.&lt;br /&gt;
&lt;br /&gt;
== MicroXplorer - MCU graphical configuration tool ==&lt;br /&gt;
&lt;br /&gt;
Der [http://www.st.com/web/en/catalog/tools/PF251717 MicroXplorer von ST] ist ein Eclipse Plugin mit dem man sich die Peripheriefunktionen zusammen klicken kann die man beim STM32 Prozessor benötigt. Das Tool zeigt auch Kombinationen die nicht gehen. Somit kann man die Peripherie leichter planen.&lt;br /&gt;
&lt;br /&gt;
Jedoch sollte man bei diesem Tool aufpassen: Wenn man z.B. zu erst CAN1 heraussucht und später FS_USB, so ist FS_USB nicht möglich. Wenn man das anders herum macht, so wird CAN1 auf alternative Pins gelegt und die Zuordnung klappt. Dennoch hilft es die Peripherie einfacher planen zu können.&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities ==&lt;br /&gt;
* Artikel [[STM32]]&lt;br /&gt;
* Artikel [[STM32 CooCox Installation]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/214719 Thread zu diesem Thema]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:STM32| ]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=USB_HID_Host_Treiber&amp;diff=56722</id>
		<title>USB HID Host Treiber</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=USB_HID_Host_Treiber&amp;diff=56722"/>
		<updated>2011-04-22T08:05:50Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;USB HID Schnittstellen für Steuerungsaufgaben zu verwenden ist allgemein üblich in der Elektronik. Es gibt unzählige Mikrocontroller mit USB von einer ganzen Menge Hersteller, welche die notwendige Firmware schon mitbringen. Aber auf PC Seite ist es immer noch mit einigem Aufwand verbunden, wenn man den USB nutzen will. Sparen Sie sich die Mühe und verwenden Sie die AHID Bibliothek.&lt;br /&gt;
&lt;br /&gt;
===Funktionen===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AHid_Init():&#039;&#039;&#039; initialisiert den Treiber.&lt;br /&gt;
* &#039;&#039;&#039;AHid_Register():&#039;&#039;&#039; registriert die Schnittstelle.&lt;br /&gt;
* &#039;&#039;&#039;AHid_Write():&#039;&#039;&#039; schreibt Daten.&lt;br /&gt;
* &#039;&#039;&#039;AHid_Read():&#039;&#039;&#039; ließt Daten ein.&lt;br /&gt;
* &#039;&#039;&#039;AHid_Request():&#039;&#039;&#039; fordert einen Feature Report an.&lt;br /&gt;
* &#039;&#039;&#039;AHid_Attached():&#039;&#039;&#039; stellt Anschluß an den USB fest.&lt;br /&gt;
* &#039;&#039;&#039;AHid_Find():&#039;&#039;&#039; sucht die Schnittstelle am Bus.&lt;br /&gt;
* &#039;&#039;&#039;AHid_Flush():&#039;&#039;&#039; löscht die Datenpuffer.&lt;br /&gt;
* &#039;&#039;&#039;AHid_Info():&#039;&#039;&#039; zeigt Treiber-Infos an.&lt;br /&gt;
&lt;br /&gt;
===Konzept===&lt;br /&gt;
&lt;br /&gt;
Die Bibliothek wird durch einmaligen Aufruf der Funktion AHid_Init() zu Beginn initialisiert. Mit AHid_Register() erhält man Zugriff auf das gewünschte USB-Gerät. Die Funktion öffnet eine Schnittstelle für den Datentransfer.&lt;br /&gt;
&lt;br /&gt;
AHid_Write() dient zum Senden von Daten an das USB-Gerät. Hierbei wird ein Interrupt- oder Control-Transfer (Feature Report) verwendet (je nach Festlegung bei der Registrierung). Der Datenempfang erfolgt durch AHid_Read(). Bei Interrupt-Transfers wird hierfür ein eigener Thread gestartet, der fortlaufend die Schnittstelle auf ankommende Daten hin prüft. Sobald Daten vorliegen, wird an die Anwendung eine AHID_DATARECEIVED-Nachricht verschickt. Innerhalb der Nachrichtenschleife kann man dann auf diese Daten mit AHid_Read() zugreifen. Der Empfang von Feature Reports unterscheidet sich etwas von diesem Ablauf. Feature Reports müssen nämlich aktiv angefordert werden, was die Funktion AHid_Request() erledigt. Nach erfolgreichem Erhalt des Feature Reports wird wiederum eine AHID_DATARECEIVED-Nachricht verschickt und AHid_Read() erledigt dann den Rest. Durch dieses Konzept werden alle eingehenden Daten (unabhängig vom Transfertyp) an eine Stelle der Nachrichtenschleife transportiert. Das erleichtert das Erstellen einer Zustandsmaschine.&lt;br /&gt;
&lt;br /&gt;
Die Funktion AHid_Attached() stellt fest, ob das USB-Gerät überhaupt am Bus verfügbar ist und gibt einen entsprechenden Wert zurück. AHid_Find() macht in etwa das Gleiche. Die Funktion sucht das USB-Gerät und gibt über den Rückgabewert den entsprechenden Zustand aus. Mit der Funktion AHid_Flush() werden die internen Datenpuffer gelöscht. Das kann notwendig sein, falls z.B. das USB-Gerät vom Bus abgeklemmt wird, und man noch nicht ausgelesene Daten sicher löschen möchte. AHid_Info() hat im normalen Betrieb keine Funktion. Es zeigt lediglich ein paar Informationen über die AHID Bibliothek an.&lt;br /&gt;
&lt;br /&gt;
Die AHID Library ist eine &#039;&#039;&#039;Dynamic Link Library (DLL)&#039;&#039;&#039; und arbeitet mit verschiedenen Programmiersprachen zusammen. &lt;br /&gt;
Sie steht zusammen mit den folgenden &#039;&#039;&#039;Demo-Anwendungen&#039;&#039;&#039; als Download auf http://embedded24.net bereit:&lt;br /&gt;
&lt;br /&gt;
* AHID Demo C++ (Visual Studio C++ 2010)&lt;br /&gt;
* AHID Demo C# (Visual Studio C# 2010)&lt;br /&gt;
* AHID Demo VB (Visual Studio VB 2010)&lt;br /&gt;
&lt;br /&gt;
===Download===&lt;br /&gt;
&lt;br /&gt;
http://www.embedded24.net&lt;br /&gt;
&lt;br /&gt;
===Diskussion===&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/210792&lt;br /&gt;
&lt;br /&gt;
===Kontakt===&lt;br /&gt;
&lt;br /&gt;
e24(at)basic.io&lt;br /&gt;
&lt;br /&gt;
===Alternativen===&lt;br /&gt;
Zu obigem Treiber gibt es u.a. folgende Alternativen (hauptsächlich für C#), deren Sourcen frei zugänglich sind:&lt;br /&gt;
* GenericHID von Jan Axelson ([http://www.lvr.com/hidpage.htm#MyExampleCode Link])&lt;br /&gt;
* HidLibrary von Mike O&#039;Brien ([https://github.com/mikeobrien/HidLibrary Link])&lt;br /&gt;
* HID USB Library von Florian Leitner ([http://www.florian-leitner.de/index.php/2007/08/03/hid-usb-driver-library/#download Link])&lt;br /&gt;
* Generic HID USB class-library vom Simon Inns ([http://www.waitingforfriday.com/index.php/Open_Source_Framework_for_USB_Generic_HID_devices_based_on_the_PIC18F_and_Windows#Files_for_download Link])&lt;br /&gt;
* USB HID Component von wimar ([http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=18099 Link])&lt;br /&gt;
* USBwisec von Bryan Batchelder ([http://sourceforge.net/projects/usbwisec/develop Link])&lt;br /&gt;
[[Kategorie:USB]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Programme_miniLA_with_xc3sprog_bat.zip&amp;diff=36523</id>
		<title>Datei:Programme miniLA with xc3sprog bat.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Programme_miniLA_with_xc3sprog_bat.zip&amp;diff=36523"/>
		<updated>2009-06-10T23:18:45Z</updated>

		<summary type="html">&lt;p&gt;Kichi: hat eine neue Version von „Bild:Programme miniLA with xc3sprog bat.zip“ hochgeladen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=36522</id>
		<title>MiniLA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=36522"/>
		<updated>2009-06-10T23:17:28Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Minila_best_top.jpg|thumb|300px|right|miniLA Bestückseite]]&lt;br /&gt;
[[Image:Minila_best_bot.jpg|thumb|300px|right|miniLA Lötseite]]&lt;br /&gt;
&#039;&#039;von Michael K.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Diese Seite soll eine Art Informationssammlung zum Open-Source-Logic-Analyzer &amp;quot;miniLA&amp;quot; werden um potentielle &amp;quot;Nachbauer&amp;quot; zu unterstützen. Die zugehörigen Threads im Forum sind inzwischen sehr umfangreich und dadurch leider auch etwas unübersichtlich geworden.&lt;br /&gt;
&lt;br /&gt;
Die Features das Gerätes sind auf der [http://minila.sourceforge.net Projekt-Homepage] zu finden.&lt;br /&gt;
&lt;br /&gt;
Es gab hier im Forum bereits drei Sammelbestellungen zur Platine und den nötigen Bauteilen. Die erste fand Anfang 2008, die zweite im Herbst 2008 und die dritte im Frühling 2009 statt. Details zu den Bestellungen und teils auch zur Hardware finden sich [http://www.mikrocontroller.net/topic/86889 in diesem Thread].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Bei den Sammelbestellungen wurde jeweils die Version von [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb] bestellt, bei der der USB-Anschluss direkt integriert ist. Wird dieser nicht benötigt, so werden die entsprechenden Teile einfach nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
Es wurden einige Veränderungen und Korrekturen am Layout durchgeführt, die jedoch teils rein optischer Natur sind. Die Daten zu dieser überarbeiteten Version sind [[Media:Minila%26usb-v1.zip|hier]] zu finden. Details zu den Änderungen können in der enthaltenen &amp;quot;README2_v1.txt&amp;quot; nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan wurde mit [http://www.mikrocontroller.net/articles/Schaltplaneditoren#TinyCAD TinyCAD] und das Layout mit [http://www.freepcb.com FreePCB] erstellt.&lt;br /&gt;
&lt;br /&gt;
=== Bauteile ===&lt;br /&gt;
==== Mainboard ====&lt;br /&gt;
Leider ist es nicht ganz einfach an einige der Bauteile zu kommen.&lt;br /&gt;
&lt;br /&gt;
Bei den ersten beiden Sammelbestellungen wurden die Bauteile aus folgenden Quellen bezogen:&lt;br /&gt;
* Hühnerfutter für o.g. Version inkl. LPT (ohne USB): [http://www.reichelt.de/?ACTION=20;AWKID=44322;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* Hühnerfutter inkl. LPT &amp;amp; USB: [http://www.reichelt.de/?ACTION=20;AWKID=45435;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* SRAM (Samsung K7B803625B-PI65): http://www.ebv.com (Gewerbe nötig)&lt;br /&gt;
* Restliche Teile: [[Media:Minila-parts.zip|Link-Liste]] oder Suche über http://www.digikey.de&lt;br /&gt;
&lt;br /&gt;
Die beiden Reichelt-Warenkörbe sind unter Umständen nicht mehr ganz aktuell und sollten deswegen unbedingt mit der Stückliste abgeglichen werden. Bitte ggf. hier auf Fehler bei den Warenkörben hinweisen oder [http://www.mikrocontroller.net/user/show/kichi Michael K.] diesbezüglich benachrichtigen!&lt;br /&gt;
&lt;br /&gt;
Bei der Bauteil-Auswahl gibt es nicht sehr viel zu beachten, lediglich CPLD, SRAM und der Multiplexer sind etwas kritischer. Beim CPLD muss es sich um einen Typ mit Speed-Grade 6 handeln (XC95288XL-6..., TQFP144), zur Auswahl von SRAM und HC4053 gibt es ein paar Anmerkungen in der &amp;quot;mlaUSBbom_v1.txt&amp;quot; und in der &amp;quot;README2_v1.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bzgl. SRAM wurde seinerzeit nach passenden Alternativen zum ursprünglich verwendeten Alliance AS7C33128PFS32A gesucht und die Ergebnisse in eine [http://www.mikrocontroller.net/attachment/30530/sram3.xls Excel-Liste] eingetragen. Auf Vollständigkeit, Richtigkeit und Aktualität kann es jedoch leider keine Garantie geben.&lt;br /&gt;
&lt;br /&gt;
Folgende SRAMs wurden bereits erfolgreich eingesetzt:&lt;br /&gt;
*K7B803625B-PI65&lt;br /&gt;
*CY7C1361B-133AC&lt;br /&gt;
*IS64LF12832A-7 (lt. miniLA-Entwickler)&lt;br /&gt;
&lt;br /&gt;
[[Image:Ram_bigger_than_128k.jpg|thumb|150px|right|Brücke bei Verwendung von K7B803625B-PI65 (siehe Text)]]&lt;br /&gt;
Die wichtigen Kriterien beim SRAM sind:&lt;br /&gt;
*Pin-Kompatibilität&lt;br /&gt;
*Größe &amp;gt;= 128k&lt;br /&gt;
*Datenbreite &amp;gt;= 32bits&lt;br /&gt;
*Flow-Through-Modus&lt;br /&gt;
*cycle time &amp;lt; 10ns&lt;br /&gt;
*data setup time &amp;lt;= 2ns&lt;br /&gt;
*data hold time &amp;lt;= 2ns&lt;br /&gt;
&lt;br /&gt;
Falls ein SRAM verwendet wird, das größer ist als 128k, müssen evtl. ein paar Brücken eingelötet werden. Dies hängt von der Pinbelegung des SRAMs ab - meistens müssen nur Adressleitungen beschaltet werden, die sonst in der Luft hängen würden. Beim K7B803625B-PI65 aus den Sammelbestellungen wäre das bei Pin 43 (= A17) der Fall. Im nebenstehenden Bild ist Pin 43 mit GND verbunden. Es wäre aber ebenfalls möglich den Pin mit einem anderen Adresspin zu verbinden (z.B. Pin 44) oder mit Vcc, je nachdem was am einfachsten ist.&lt;br /&gt;
&lt;br /&gt;
==== Tastköpfe ====&lt;br /&gt;
[[Image:Probe_best_top.JPG|thumb|150px|right|Tastkopf Bestückseite (inkl. Flachbandkabel zum miniLA)]]&lt;br /&gt;
Als Schutz für den CPLD wurde eine Art Tastkopf entwickelt, der zwischen das zu messende Signal und den miniLA geschaltet wird. Dieser Tastkopf ist sehr einfach gehalten und besteht aus nur wenigen Bauteilen. Ein Tastkopf dient für 8 Kanäle, d.h. für alle 32 Kanäle werden 4 Stück benötigt. Die Schaltung wurde mittels TinyCAD und FreePCB entwickelt und die Daten dazu finden sich [[Media:Probe_244dil.zip|hier]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Hinweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
* R9 bis R16 dienen zur Terminierung und können überbrückt werden, da sich auf der Hauptplatine ebenfalls Serienwiderstände finden.&lt;br /&gt;
* R17 bis R24 dienen als Platzhalter falls eine Hysterese gewünscht sein sollte. Auf jeden Fall sollen hier &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; 47Ohm-Widerstände bestückt werden, sondern welche im 10k- bis 100k-Bereich.&lt;br /&gt;
&lt;br /&gt;
==== Trigger ====&lt;br /&gt;
Die obigen Platinen passen leider nur für die 32 Kanäle (K2-K5), nicht jedoch für die Trigger-Ein- und Clock-Ausgänge. Deswegen wurde im Zuge der dritten Sammelbestellung zusätzlich zu den Tastköpfen noch eine Triggerplatine entwickelt. Um Verwechslungen mit den Tastköpfen zu vermeiden ist auf dieser Platine eine 10polige Kontaktierung vorgesehen, die mit K1 des miniLA verbunden wird. Pin 7 (X8) davon ist im Moment noch nicht belegt und kann für eventuelle spätere Erweiterungen verwendet werden. Die beiden Jumper auf der Unterseite sind vorgesehen um die Richtung (Ein-/Ausgang) entsprechend wählen zu können. Schaltplan, Stückliste und Bestückpläne sind [[Media:MiniLA-Trigger.zip|hier]] zu finden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Hinweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
* Der 74AC244N dient nur als Platzhalter. Hier soll stattdessen (wie bei den Tastköpfen auch) ein 74LVC244 bestückt werden.&lt;br /&gt;
* R6 bis R10 dienen zur Terminierung und können überbrückt werden, da sich auf der Hauptplatine ebenfalls Serienwiderstände finden.&lt;br /&gt;
* R11 bis R15 dienen als Platzhalter falls eine Hysterese gewünscht sein sollte. Auf jeden Fall sollen hier &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; 47Ohm-Widerstände bestückt werden, sondern welche im 10k- bis 100k-Bereich.&lt;br /&gt;
&lt;br /&gt;
==== Sonstiges ====&lt;br /&gt;
Zum Betreiben des miniLA wird zusätzlich zu den, in der Stückliste aufgeführten Bauteilen&lt;br /&gt;
* ein USB-Kabel (A- auf B-Stecker, wie bei Druckern) oder ein LPT-Kabel&lt;br /&gt;
* ein Netzteil (~5V / ~700mA)&lt;br /&gt;
benötigt.&lt;br /&gt;
&lt;br /&gt;
== Firmware / Software ==&lt;br /&gt;
Als Firmware und Software kommen die Original-Versionen der Projekt-Seite zum Einsatz. Desweiteren gibt es bzgl. der PC-Software einen [http://www.mikrocontroller.net/topic/93848 Beitrag in der Codesammlung].&lt;br /&gt;
&lt;br /&gt;
=== CPLD-Programmierung ===&lt;br /&gt;
Für die [http://www.mikrocontroller.net/articles/Programmierbare_Logik#Konfiguration_.28Download.29_Xilinx Programmierung] des [http://www.mikrocontroller.net/articles/CPLD CPLD]s gibt es zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
==== via LPT ====&lt;br /&gt;
Dazu wird ein Xilinx-JTAG-Programmer benötigt, welcher sehr einfach nachgebaut werden kann. Die Original-Version von Xilinx, auf die von der miniLA-Seite aus verwiesen wird, ist allerdings nur eingeschränkt zu empfehlen, da einige Nutzer Probleme damit haben/hatten. [http://www.geocities.com/jacquesmartini/digital/schematic/Parallel_Cable_III.png Martiniman&#039;s Version] sollte besser und zuverlässiger sein. Schaltplan und Layout dieser Version für Eagle können [[Media:Xilinx_programmer.zip|hier]] heruntergeladen werden. Eine Beschreibung der Vorgehensweise findet sich auf der miniLA-Projektseite.&lt;br /&gt;
&lt;br /&gt;
==== via USB ====&lt;br /&gt;
Dank eines [http://www.mikrocontroller.net/topic/60340#1261817 Beitrags von Uwe Bonnes] bin ich auf das Programm &amp;quot;[http://sourceforge.net/projects/xc3sprog xc3sprog]&amp;quot; gestossen, mit dem der CPLD mittels FT2232 programmiert werden kann. Da bei der miniLA-Version von Bob Grieb bereits ein FT2232 auf dem Board bestückt ist, wird keine weitere Hardware (außer ein paar Litzen) benötigt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Vorgehensweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;xc3sprog herunterladen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Inhalt des Ordners &amp;quot;build-win32&amp;quot; entpacken&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Zu programmierende Firmware (*.jed) in diesen Ordner kopieren&lt;br /&gt;
&amp;lt;li&amp;gt;[http://libusb-win32.sourceforge.net libusb] installieren (sofern nicht schon geschehen)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FT2232 und CPLD folgendermaßen verbinden&amp;lt;/li&amp;gt;&lt;br /&gt;
* K10.1 / ADBUS0 / USBD0  &amp;lt;-&amp;gt;  E3 / E7 / TCK&lt;br /&gt;
* K10.2 / ADBUS1 / USBD1  &amp;lt;-&amp;gt;  E2 / E6 / TDI&lt;br /&gt;
* K10.3 / ADBUS2 / USBD2  &amp;lt;-&amp;gt;  E1 / E5 / TDO&lt;br /&gt;
* K10.4 / ADBUS3 / USBD3  &amp;lt;-&amp;gt;  E4 / E8 / TMS&lt;br /&gt;
&amp;lt;li&amp;gt;FT2232 und den Rest der Schaltung einschalten (mit USB bzw. Betriebsspannung verbinden)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Eingabeaufforderung öffnen und in das Verzeichnis &amp;quot;build-win32&amp;quot; wechseln&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;xc3sprog -c ftdi -v firmware.jed&amp;quot; (ohne &amp;quot;&amp;quot;) eingeben und bestätigen, wobei firmware.jed für die Datei steht, die unter Punkt 3 kopiert wurde&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Die obige Anweisung gilt für Windows unter Benutzung des FT2232 auf dem miniLA-Mainboard. Es gibt aber auch eine Linux-Version von xc3sprog und es kann eine andere Platine mit FT2232 genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir zwecks einfacherer Handhabung ein kleines [[Media:Programme_miniLA_with_xc3sprog_bat.zip‎|Batch-Script]] zum Programmieren geschrieben. Zusätzlich zu den enthaltenen Dateien, muss der Inhalt des Ordners &amp;quot;build-win32&amp;quot; und die *.jed-Files in das Verzeichnis kopiert und entsprechend benannt werden (&amp;quot;miniLA_state2.2.jed&amp;quot;, &amp;quot;miniLA_time1.7_20mhz.jed&amp;quot;, &amp;quot;miniLA_time1.7_40mhz.jed&amp;quot;, &amp;quot;miniLA_time1.7_80mhz.jed&amp;quot; und &amp;quot;miniLA_time1.7_100mhz.jed&amp;quot;). Anschließend &amp;quot;programme_miniLA.bat&amp;quot; aufrufen und den Anweisungen folgen.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
Nachfolgend eine Zusammenfassung relevanter bzw. interessanter Links und Daten:&lt;br /&gt;
* [http://minila.sourceforge.net miniLA Projekt-Seite]&lt;br /&gt;
* [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb&#039;s Version (Basis der Sammelbestellungen)]&lt;br /&gt;
* [[Media:Minila%26usb-v1.zip|Überarbeitete Version davon (inkl. Stückliste)]]&lt;br /&gt;
* [[Media:Xilinx_programmer.zip|Eagle-Projekt für martiniman&#039;s Programmer]]&lt;br /&gt;
* [[Media:Probe_244dil.zip|Daten der Tastköpfe (inkl. Stückliste)]]&lt;br /&gt;
* [[Media:MiniLA-Trigger.zip|Daten der Triggerplatinen (inkl. Stückliste)]]&lt;br /&gt;
* [http://sourceforge.net/projects/xc3sprog xc3sprog Projekt-Seite]&lt;br /&gt;
* [http://libusb.wiki.sourceforge.net libusb für Linux]&lt;br /&gt;
* [http://libusb-win32.sourceforge.net libusb für Windows]&lt;br /&gt;
Diskussionen und Artikel auf www.mikrocontroller.net:&lt;br /&gt;
* Artikel: [[Logic Analyzer]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/86889 Diskussion zu den Sammelbestellungen]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/93848 Diskussion zur PC-Software]&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]] [[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=36521</id>
		<title>MiniLA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=36521"/>
		<updated>2009-06-10T23:12:08Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Minila_best_top.jpg|thumb|300px|right|miniLA Bestückseite]]&lt;br /&gt;
[[Image:Minila_best_bot.jpg|thumb|300px|right|miniLA Lötseite]]&lt;br /&gt;
&#039;&#039;von Michael K.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Diese Seite soll eine Art Informationssammlung zum Open-Source-Logic-Analyzer &amp;quot;miniLA&amp;quot; werden um potentielle &amp;quot;Nachbauer&amp;quot; zu unterstützen. Die zugehörigen Threads im Forum sind inzwischen sehr umfangreich und dadurch leider auch etwas unübersichtlich geworden.&lt;br /&gt;
&lt;br /&gt;
Die Features das Gerätes sind auf der [http://minila.sourceforge.net Projekt-Homepage] zu finden.&lt;br /&gt;
&lt;br /&gt;
Es gab hier im Forum bereits drei Sammelbestellungen zur Platine und den nötigen Bauteilen. Die erste fand Anfang 2008, die zweite im Herbst 2008 und die dritte im Frühling 2009 statt. Details zu den Bestellungen und teils auch zur Hardware finden sich [http://www.mikrocontroller.net/topic/86889 in diesem Thread].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Bei den Sammelbestellungen wurde jeweils die Version von [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb] bestellt, bei der der USB-Anschluss direkt integriert ist. Wird dieser nicht benötigt, so werden die entsprechenden Teile einfach nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
Es wurden einige Veränderungen und Korrekturen am Layout durchgeführt, die jedoch teils rein optischer Natur sind. Die Daten zu dieser überarbeiteten Version sind [[Media:Minila%26usb-v1.zip|hier]] zu finden. Details zu den Änderungen können in der enthaltenen &amp;quot;README2_v1.txt&amp;quot; nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan wurde mit [http://www.mikrocontroller.net/articles/Schaltplaneditoren#TinyCAD TinyCAD] und das Layout mit [http://www.freepcb.com FreePCB] erstellt.&lt;br /&gt;
&lt;br /&gt;
=== Bauteile ===&lt;br /&gt;
==== Mainboard ====&lt;br /&gt;
Leider ist es nicht ganz einfach an einige der Bauteile zu kommen.&lt;br /&gt;
&lt;br /&gt;
Bei den ersten beiden Sammelbestellungen wurden die Bauteile aus folgenden Quellen bezogen:&lt;br /&gt;
* Hühnerfutter für o.g. Version inkl. LPT (ohne USB): [http://www.reichelt.de/?ACTION=20;AWKID=44322;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* Hühnerfutter inkl. LPT &amp;amp; USB: [http://www.reichelt.de/?ACTION=20;AWKID=45435;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* SRAM (Samsung K7B803625B-PI65): http://www.ebv.com (Gewerbe nötig)&lt;br /&gt;
* Restliche Teile: [[Media:Minila-parts.zip|Link-Liste]] oder Suche über http://www.digikey.de&lt;br /&gt;
&lt;br /&gt;
Die beiden Reichelt-Warenkörbe sind unter Umständen nicht mehr ganz aktuell und sollten deswegen unbedingt mit der Stückliste abgeglichen werden. Bitte ggf. hier auf Fehler bei den Warenkörben hinweisen oder [http://www.mikrocontroller.net/user/show/kichi Michael K.] diesbezüglich benachrichtigen!&lt;br /&gt;
&lt;br /&gt;
Bei der Bauteil-Auswahl gibt es nicht sehr viel zu beachten, lediglich CPLD, SRAM und der Multiplexer sind etwas kritischer. Beim CPLD muss es sich um einen Typ mit Speed-Grade 6 handeln (XC95288XL-6..., TQFP144), zur Auswahl von SRAM und HC4053 gibt es ein paar Anmerkungen in der &amp;quot;mlaUSBbom_v1.txt&amp;quot; und in der &amp;quot;README2_v1.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bzgl. SRAM wurde seinerzeit nach passenden Alternativen zum ursprünglich verwendeten Alliance AS7C33128PFS32A gesucht und die Ergebnisse in eine [http://www.mikrocontroller.net/attachment/30530/sram3.xls Excel-Liste] eingetragen. Auf Vollständigkeit, Richtigkeit und Aktualität kann es jedoch leider keine Garantie geben.&lt;br /&gt;
&lt;br /&gt;
Folgende SRAMs wurden bereits erfolgreich eingesetzt:&lt;br /&gt;
*K7B803625B-PI65&lt;br /&gt;
*CY7C1361B-133AC&lt;br /&gt;
*IS64LF12832A-7 (lt. miniLA-Entwickler)&lt;br /&gt;
&lt;br /&gt;
[[Image:Ram_bigger_than_128k.jpg|thumb|150px|right|Brücke bei Verwendung von K7B803625B-PI65 (siehe Text)]]&lt;br /&gt;
Die wichtigen Kriterien beim SRAM sind:&lt;br /&gt;
*Pin-Kompatibilität&lt;br /&gt;
*Größe &amp;gt;= 128k&lt;br /&gt;
*Datenbreite &amp;gt;= 32bits&lt;br /&gt;
*Flow-Through-Modus&lt;br /&gt;
*cycle time &amp;lt; 10ns&lt;br /&gt;
*data setup time &amp;lt;= 2ns&lt;br /&gt;
*data hold time &amp;lt;= 2ns&lt;br /&gt;
&lt;br /&gt;
Falls ein SRAM verwendet wird, das größer ist als 128k, müssen evtl. ein paar Brücken eingelötet werden. Dies hängt von der Pinbelegung des SRAMs ab - meistens müssen nur Adressleitungen beschaltet werden, die sonst in der Luft hängen würden. Beim K7B803625B-PI65 aus den Sammelbestellungen wäre das bei Pin 43 (= A17) der Fall. Im nebenstehenden Bild ist Pin 43 mit GND verbunden. Es wäre aber ebenfalls möglich den Pin mit einem anderen Adresspin zu verbinden (z.B. Pin 44) oder mit Vcc, je nachdem was am einfachsten ist.&lt;br /&gt;
&lt;br /&gt;
==== Tastköpfe ====&lt;br /&gt;
[[Image:Probe_best_top.JPG|thumb|150px|right|Tastkopf Bestückseite (inkl. Flachbandkabel zum miniLA)]]&lt;br /&gt;
Als Schutz für den CPLD wurde eine Art Tastkopf entwickelt, der zwischen das zu messende Signal und den miniLA geschaltet wird. Dieser Tastkopf ist sehr einfach gehalten und besteht aus nur wenigen Bauteilen. Ein Tastkopf dient für 8 Kanäle, d.h. für alle 32 Kanäle werden 4 Stück benötigt. Die Schaltung wurde mittels TinyCAD und FreePCB entwickelt und die Daten dazu finden sich [[Media:Probe_244dil.zip|hier]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Hinweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
* R9 bis R16 dienen zur Terminierung und können überbrückt werden, da sich auf der Hauptplatine ebenfalls Serienwiderstände finden.&lt;br /&gt;
* R17 bis R24 dienen als Platzhalter falls eine Hysterese gewünscht sein sollte. Auf jeden Fall sollen hier &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; 47Ohm-Widerstände bestückt werden, sondern welche im 10k- bis 100k-Bereich.&lt;br /&gt;
&lt;br /&gt;
==== Trigger ====&lt;br /&gt;
Die obigen Platinen passen leider nur für die 32 Kanäle (K2-K5), nicht jedoch für die Trigger-Ein- und Clock-Ausgänge. Deswegen wurde im Zuge der dritten Sammelbestellung zusätzlich zu den Tastköpfen noch eine Triggerplatine entwickelt. Um Verwechslungen mit den Tastköpfen zu vermeiden ist auf dieser Platine eine 10polige Kontaktierung vorgesehen, die mit K1 des miniLA verbunden wird. Pin 7 (X8) davon ist im Moment noch nicht belegt und kann für eventuelle spätere Erweiterungen verwendet werden. Die beiden Jumper auf der Unterseite sind vorgesehen um die Richtung (Ein-/Ausgang) entsprechend wählen zu können. Schaltplan, Stückliste und Bestückpläne sind [[Media:MiniLA-Trigger.zip|hier]] zu finden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Hinweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
* Der 74AC244N dient nur als Platzhalter. Hier soll stattdessen (wie bei den Tastköpfen auch) ein 74LVC244 bestückt werden.&lt;br /&gt;
* R6 bis R10 dienen zur Terminierung und können überbrückt werden, da sich auf der Hauptplatine ebenfalls Serienwiderstände finden.&lt;br /&gt;
* R11 bis R15 dienen als Platzhalter falls eine Hysterese gewünscht sein sollte. Auf jeden Fall sollen hier &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; 47Ohm-Widerstände bestückt werden, sondern welche im 10k- bis 100k-Bereich.&lt;br /&gt;
&lt;br /&gt;
==== Sonstiges ====&lt;br /&gt;
Zum Betreiben des miniLA wird zusätzlich zu den, in der Stückliste aufgeführten Bauteilen&lt;br /&gt;
* ein USB-Kabel (A- auf B-Stecker, wie bei Druckern) oder ein LPT-Kabel&lt;br /&gt;
* ein Netzteil (~5V / ~700mA)&lt;br /&gt;
benötigt.&lt;br /&gt;
&lt;br /&gt;
== Firmware / Software ==&lt;br /&gt;
Als Firmware und Software kommen die Original-Versionen der Projekt-Seite zum Einsatz. Desweiteren gibt es bzgl. der PC-Software einen [http://www.mikrocontroller.net/topic/93848 Beitrag in der Codesammlung].&lt;br /&gt;
&lt;br /&gt;
=== CPLD-Programmierung ===&lt;br /&gt;
Für die [http://www.mikrocontroller.net/articles/Programmierbare_Logik#Konfiguration_.28Download.29_Xilinx Programmierung] des [http://www.mikrocontroller.net/articles/CPLD CPLD]s gibt es zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
==== via LPT ====&lt;br /&gt;
Dazu wird ein Xilinx-JTAG-Programmer benötigt, welcher sehr einfach nachgebaut werden kann. Die Original-Version von Xilinx, auf die von der miniLA-Seite aus verwiesen wird, ist allerdings nur eingeschränkt zu empfehlen, da einige Nutzer Probleme damit haben/hatten. [http://www.geocities.com/jacquesmartini/digital/schematic/Parallel_Cable_III.png Martiniman&#039;s Version] sollte besser und zuverlässiger sein. Schaltplan und Layout dieser Version für Eagle können [[Media:Xilinx_programmer.zip|hier]] heruntergeladen werden. Eine Beschreibung der Vorgehensweise findet sich auf der miniLA-Projektseite.&lt;br /&gt;
&lt;br /&gt;
==== via USB ====&lt;br /&gt;
Dank eines [http://www.mikrocontroller.net/topic/60340#1261817 Beitrags von Uwe Bonnes] bin ich auf das Programm &amp;quot;[http://sourceforge.net/projects/xc3sprog xc3sprog]&amp;quot; gestossen, mit dem der CPLD mittels FT2232 programmiert werden kann. Da bei der miniLA-Version von Bob Grieb bereits ein FT2232 auf dem Board bestückt ist, wird keine weitere Hardware (außer ein paar Litzen) benötigt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Vorgehensweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;xc3sprog herunterladen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Inhalt des Ordners &amp;quot;build-win32&amp;quot; entpacken&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Zu programmierende Firmware (*.jed) in diesen Ordner kopieren&lt;br /&gt;
&amp;lt;li&amp;gt;[http://libusb-win32.sourceforge.net libusb] installieren (sofern nicht schon geschehen)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FT2232 und CPLD folgendermaßen verbinden&amp;lt;/li&amp;gt;&lt;br /&gt;
* K10.1 / ADBUS0 / USBD0  &amp;lt;-&amp;gt;  E3 / E7 / TCK&lt;br /&gt;
* K10.2 / ADBUS1 / USBD1  &amp;lt;-&amp;gt;  E2 / E6 / TDI&lt;br /&gt;
* K10.3 / ADBUS2 / USBD2  &amp;lt;-&amp;gt;  E1 / E5 / TDO&lt;br /&gt;
* K10.4 / ADBUS3 / USBD3  &amp;lt;-&amp;gt;  E4 / E8 / TMS&lt;br /&gt;
&amp;lt;li&amp;gt;FT2232 und den Rest der Schaltung einschalten (mit USB bzw. Betriebsspannung verbinden)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Eingabeaufforderung öffnen und in das Verzeichnis &amp;quot;build-win32&amp;quot; wechseln&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;xc3sprog -c ftdi -v firmware.jed&amp;quot; (ohne &amp;quot;&amp;quot;) eingeben und bestätigen, wobei firmware.jed für die Datei steht, die unter Punkt 3 kopiert wurde&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Die obige Anweisung gilt für Windows unter Benutzung des FT2232 auf dem miniLA-Mainboard. Es gibt aber auch eine Linux-Version von xc3sprog und es kann eine andere Platine mit FT2232 genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir zwecks einfacherer Handhabung ein kleines [[Media:Programme_miniLA_with_xc3sprog_bat.zip‎|Batch-Script]] zum Programmieren geschrieben. Zusätzlich zu den beiden enthaltenen Dateien, muss der Inhalt des Ordners &amp;quot;build-win32&amp;quot; und die *.jed-Files in das Verzeichnis kopiert und entsprechend benannt werden (&amp;quot;miniLA_state2.2.jed&amp;quot;, &amp;quot;miniLA_time1.7_20mhz.jed&amp;quot;, &amp;quot;miniLA_time1.7_40mhz.jed&amp;quot;, &amp;quot;miniLA_time1.7_80mhz.jed&amp;quot; und &amp;quot;miniLA_time1.7_100mhz.jed&amp;quot;). Anschließend &amp;quot;programme_miniLA.bat&amp;quot; aufrufen und den Anweisungen folgen.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
Nachfolgend eine Zusammenfassung relevanter bzw. interessanter Links und Daten:&lt;br /&gt;
* [http://minila.sourceforge.net miniLA Projekt-Seite]&lt;br /&gt;
* [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb&#039;s Version (Basis der Sammelbestellungen)]&lt;br /&gt;
* [[Media:Minila%26usb-v1.zip|Überarbeitete Version davon (inkl. Stückliste)]]&lt;br /&gt;
* [[Media:Xilinx_programmer.zip|Eagle-Projekt für martiniman&#039;s Programmer]]&lt;br /&gt;
* [[Media:Probe_244dil.zip|Daten der Tastköpfe (inkl. Stückliste)]]&lt;br /&gt;
* [[Media:MiniLA-Trigger.zip|Daten der Triggerplatinen (inkl. Stückliste)]]&lt;br /&gt;
* [http://sourceforge.net/projects/xc3sprog xc3sprog Projekt-Seite]&lt;br /&gt;
* [http://libusb.wiki.sourceforge.net libusb für Linux]&lt;br /&gt;
* [http://libusb-win32.sourceforge.net libusb für Windows]&lt;br /&gt;
Diskussionen und Artikel auf www.mikrocontroller.net:&lt;br /&gt;
* Artikel: [[Logic Analyzer]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/86889 Diskussion zu den Sammelbestellungen]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/93848 Diskussion zur PC-Software]&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]] [[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Programme_miniLA_with_xc3sprog_bat.zip&amp;diff=36520</id>
		<title>Datei:Programme miniLA with xc3sprog bat.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Programme_miniLA_with_xc3sprog_bat.zip&amp;diff=36520"/>
		<updated>2009-06-10T23:04:31Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=36519</id>
		<title>MiniLA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=36519"/>
		<updated>2009-06-10T22:57:01Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Minila_best_top.jpg|thumb|300px|right|miniLA Bestückseite]]&lt;br /&gt;
[[Image:Minila_best_bot.jpg|thumb|300px|right|miniLA Lötseite]]&lt;br /&gt;
&#039;&#039;von Michael K.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Diese Seite soll eine Art Informationssammlung zum Open-Source-Logic-Analyzer &amp;quot;miniLA&amp;quot; werden um potentielle &amp;quot;Nachbauer&amp;quot; zu unterstützen. Die zugehörigen Threads im Forum sind inzwischen sehr umfangreich und dadurch leider auch etwas unübersichtlich geworden.&lt;br /&gt;
&lt;br /&gt;
Die Features das Gerätes sind auf der [http://minila.sourceforge.net Projekt-Homepage] zu finden.&lt;br /&gt;
&lt;br /&gt;
Es gab hier im Forum bereits drei Sammelbestellungen zur Platine und den nötigen Bauteilen. Die erste fand Anfang 2008, die zweite im Herbst 2008 und die dritte im Frühling 2009 statt. Details zu den Bestellungen und teils auch zur Hardware finden sich [http://www.mikrocontroller.net/topic/86889 in diesem Thread].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Bei den Sammelbestellungen wurde jeweils die Version von [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb] bestellt, bei der der USB-Anschluss direkt integriert ist. Wird dieser nicht benötigt, so werden die entsprechenden Teile einfach nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
Es wurden einige Veränderungen und Korrekturen am Layout durchgeführt, die jedoch teils rein optischer Natur sind. Die Daten zu dieser überarbeiteten Version sind [[Media:Minila%26usb-v1.zip|hier]] zu finden. Details zu den Änderungen können in der enthaltenen &amp;quot;README2_v1.txt&amp;quot; nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan wurde mit [http://www.mikrocontroller.net/articles/Schaltplaneditoren#TinyCAD TinyCAD] und das Layout mit [http://www.freepcb.com FreePCB] erstellt.&lt;br /&gt;
&lt;br /&gt;
=== Bauteile ===&lt;br /&gt;
==== Mainboard ====&lt;br /&gt;
Leider ist es nicht ganz einfach an einige der Bauteile zu kommen.&lt;br /&gt;
&lt;br /&gt;
Bei den ersten beiden Sammelbestellungen wurden die Bauteile aus folgenden Quellen bezogen:&lt;br /&gt;
* Hühnerfutter für o.g. Version inkl. LPT (ohne USB): [http://www.reichelt.de/?ACTION=20;AWKID=44322;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* Hühnerfutter inkl. LPT &amp;amp; USB: [http://www.reichelt.de/?ACTION=20;AWKID=45435;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* SRAM (Samsung K7B803625B-PI65): http://www.ebv.com (Gewerbe nötig)&lt;br /&gt;
* Restliche Teile: [[Media:Minila-parts.zip|Link-Liste]] oder Suche über http://www.digikey.de&lt;br /&gt;
&lt;br /&gt;
Die beiden Reichelt-Warenkörbe sind unter Umständen nicht mehr ganz aktuell und sollten deswegen unbedingt mit der Stückliste abgeglichen werden. Bitte ggf. hier auf Fehler bei den Warenkörben hinweisen oder [http://www.mikrocontroller.net/user/show/kichi Michael K.] diesbezüglich benachrichtigen!&lt;br /&gt;
&lt;br /&gt;
Bei der Bauteil-Auswahl gibt es nicht sehr viel zu beachten, lediglich CPLD, SRAM und der Multiplexer sind etwas kritischer. Beim CPLD muss es sich um einen Typ mit Speed-Grade 6 handeln (XC95288XL-6..., TQFP144), zur Auswahl von SRAM und HC4053 gibt es ein paar Anmerkungen in der &amp;quot;mlaUSBbom_v1.txt&amp;quot; und in der &amp;quot;README2_v1.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bzgl. SRAM wurde seinerzeit nach passenden Alternativen zum ursprünglich verwendeten Alliance AS7C33128PFS32A gesucht und die Ergebnisse in eine [http://www.mikrocontroller.net/attachment/30530/sram3.xls Excel-Liste] eingetragen. Auf Vollständigkeit, Richtigkeit und Aktualität kann es jedoch leider keine Garantie geben.&lt;br /&gt;
&lt;br /&gt;
Folgende SRAMs wurden bereits erfolgreich eingesetzt:&lt;br /&gt;
*K7B803625B-PI65&lt;br /&gt;
*CY7C1361B-133AC&lt;br /&gt;
*IS64LF12832A-7 (lt. miniLA-Entwickler)&lt;br /&gt;
&lt;br /&gt;
[[Image:Ram_bigger_than_128k.jpg|thumb|150px|right|Brücke bei Verwendung von K7B803625B-PI65 (siehe Text)]]&lt;br /&gt;
Die wichtigen Kriterien beim SRAM sind:&lt;br /&gt;
*Pin-Kompatibilität&lt;br /&gt;
*Größe &amp;gt;= 128k&lt;br /&gt;
*Datenbreite &amp;gt;= 32bits&lt;br /&gt;
*Flow-Through-Modus&lt;br /&gt;
*cycle time &amp;lt; 10ns&lt;br /&gt;
*data setup time &amp;lt;= 2ns&lt;br /&gt;
*data hold time &amp;lt;= 2ns&lt;br /&gt;
&lt;br /&gt;
Falls ein SRAM verwendet wird, das größer ist als 128k, müssen evtl. ein paar Brücken eingelötet werden. Dies hängt von der Pinbelegung des SRAMs ab - meistens müssen nur Adressleitungen beschaltet werden, die sonst in der Luft hängen würden. Beim K7B803625B-PI65 aus den Sammelbestellungen wäre das bei Pin 43 (= A17) der Fall. Im nebenstehenden Bild ist Pin 43 mit GND verbunden. Es wäre aber ebenfalls möglich den Pin mit einem anderen Adresspin zu verbinden (z.B. Pin 44) oder mit Vcc, je nachdem was am einfachsten ist.&lt;br /&gt;
&lt;br /&gt;
==== Tastköpfe ====&lt;br /&gt;
[[Image:Probe_best_top.JPG|thumb|150px|right|Tastkopf Bestückseite (inkl. Flachbandkabel zum miniLA)]]&lt;br /&gt;
Als Schutz für den CPLD wurde eine Art Tastkopf entwickelt, der zwischen das zu messende Signal und den miniLA geschaltet wird. Dieser Tastkopf ist sehr einfach gehalten und besteht aus nur wenigen Bauteilen. Ein Tastkopf dient für 8 Kanäle, d.h. für alle 32 Kanäle werden 4 Stück benötigt. Die Schaltung wurde mittels TinyCAD und FreePCB entwickelt und die Daten dazu finden sich [[Media:Probe_244dil.zip|hier]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Hinweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
* R9 bis R16 dienen zur Terminierung und können überbrückt werden, da sich auf der Hauptplatine ebenfalls Serienwiderstände finden.&lt;br /&gt;
* R17 bis R24 dienen als Platzhalter falls eine Hysterese gewünscht sein sollte. Auf jeden Fall sollen hier &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; 47Ohm-Widerstände bestückt werden, sondern welche im 10k- bis 100k-Bereich.&lt;br /&gt;
&lt;br /&gt;
==== Trigger ====&lt;br /&gt;
Die obigen Platinen passen leider nur für die 32 Kanäle (K2-K5), nicht jedoch für die Trigger-Ein- und Clock-Ausgänge. Deswegen wurde im Zuge der dritten Sammelbestellung zusätzlich zu den Tastköpfen noch eine Triggerplatine entwickelt. Um Verwechslungen mit den Tastköpfen zu vermeiden ist auf dieser Platine eine 10polige Kontaktierung vorgesehen, die mit K1 des miniLA verbunden wird. Pin 7 (X8) davon ist im Moment noch nicht belegt und kann für eventuelle spätere Erweiterungen verwendet werden. Die beiden Jumper auf der Unterseite sind vorgesehen um die Richtung (Ein-/Ausgang) entsprechend wählen zu können. Schaltplan, Stückliste und Bestückpläne sind [[Media:MiniLA-Trigger.zip|hier]] zu finden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Hinweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
* Der 74AC244N dient nur als Platzhalter. Hier soll stattdessen (wie bei den Tastköpfen auch) ein 74LVC244 bestückt werden.&lt;br /&gt;
* R6 bis R10 dienen zur Terminierung und können überbrückt werden, da sich auf der Hauptplatine ebenfalls Serienwiderstände finden.&lt;br /&gt;
* R11 bis R15 dienen als Platzhalter falls eine Hysterese gewünscht sein sollte. Auf jeden Fall sollen hier &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; 47Ohm-Widerstände bestückt werden, sondern welche im 10k- bis 100k-Bereich.&lt;br /&gt;
&lt;br /&gt;
==== Sonstiges ====&lt;br /&gt;
Zum Betreiben des miniLA wird zusätzlich zu den, in der Stückliste aufgeführten Bauteilen&lt;br /&gt;
* ein USB-Kabel (A- auf B-Stecker, wie bei Druckern) oder ein LPT-Kabel&lt;br /&gt;
* ein Netzteil (~5V / ~700mA)&lt;br /&gt;
benötigt.&lt;br /&gt;
&lt;br /&gt;
== Firmware / Software ==&lt;br /&gt;
Als Firmware und Software kommen die Original-Versionen der Projekt-Seite zum Einsatz. Desweiteren gibt es bzgl. der PC-Software einen [http://www.mikrocontroller.net/topic/93848 Beitrag in der Codesammlung].&lt;br /&gt;
&lt;br /&gt;
=== CPLD-Programmierung ===&lt;br /&gt;
Für die [http://www.mikrocontroller.net/articles/Programmierbare_Logik#Konfiguration_.28Download.29_Xilinx Programmierung] des [http://www.mikrocontroller.net/articles/CPLD CPLD]s gibt es zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
==== via LPT ====&lt;br /&gt;
Dazu wird ein Xilinx-JTAG-Programmer benötigt, welcher sehr einfach nachgebaut werden kann. Die Original-Version von Xilinx, auf die von der miniLA-Seite aus verwiesen wird, ist allerdings nur eingeschränkt zu empfehlen, da einige Nutzer Probleme damit haben/hatten. [http://www.geocities.com/jacquesmartini/digital/schematic/Parallel_Cable_III.png Martiniman&#039;s Version] sollte besser und zuverlässiger sein. Schaltplan und Layout dieser Version für Eagle können [[Media:Xilinx_programmer.zip|hier]] heruntergeladen werden. Eine Beschreibung der Vorgehensweise findet sich auf der miniLA-Projektseite.&lt;br /&gt;
&lt;br /&gt;
==== via USB ====&lt;br /&gt;
Dank eines [http://www.mikrocontroller.net/topic/60340#1261817 Beitrags von Uwe Bonnes] bin ich auf das Programm &amp;quot;[http://sourceforge.net/projects/xc3sprog xc3sprog]&amp;quot; gestossen, mit dem der CPLD mittels FT2232 programmiert werden kann. Da bei der miniLA-Version von Bob Grieb bereits ein FT2232 auf dem Board bestückt ist, wird keine weitere Hardware (außer ein paar Litzen) benötigt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Vorgehensweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;xc3sprog herunterladen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Inhalt des Ordners &amp;quot;build-win32&amp;quot; entpacken&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Zu programmierende Firmware (*.jed) in diesen Ordner kopieren&lt;br /&gt;
&amp;lt;li&amp;gt;[http://libusb-win32.sourceforge.net libusb] installieren (sofern nicht schon geschehen)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FT2232 und CPLD folgendermaßen verbinden&amp;lt;/li&amp;gt;&lt;br /&gt;
* K10.1 / ADBUS0 / USBD0  &amp;lt;-&amp;gt;  E3 / E7 / TCK&lt;br /&gt;
* K10.2 / ADBUS1 / USBD1  &amp;lt;-&amp;gt;  E2 / E6 / TDI&lt;br /&gt;
* K10.3 / ADBUS2 / USBD2  &amp;lt;-&amp;gt;  E1 / E5 / TDO&lt;br /&gt;
* K10.4 / ADBUS3 / USBD3  &amp;lt;-&amp;gt;  E4 / E8 / TMS&lt;br /&gt;
&amp;lt;li&amp;gt;FT2232 und den Rest der Schaltung einschalten (mit USB bzw. Betriebsspannung verbinden)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Eingabeaufforderung öffnen und in das Verzeichnis &amp;quot;build-win32&amp;quot; wechseln&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;xc3sprog -c ftdi -v firmware.jed&amp;quot; (ohne &amp;quot;&amp;quot;) eingeben und bestätigen, wobei firmware.jed für die Datei steht, die unter Punkt 3 kopiert wurde&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Die obige Anweisung gilt für Windows unter Benutzung des FT2232 auf dem miniLA-Mainboard. Es gibt aber auch eine Linux-Version von xc3sprog und es kann eine andere Platine mit FT2232 genutzt werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
Nachfolgend eine Zusammenfassung relevanter bzw. interessanter Links und Daten:&lt;br /&gt;
* [http://minila.sourceforge.net miniLA Projekt-Seite]&lt;br /&gt;
* [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb&#039;s Version (Basis der Sammelbestellungen)]&lt;br /&gt;
* [[Media:Minila%26usb-v1.zip|Überarbeitete Version davon (inkl. Stückliste)]]&lt;br /&gt;
* [[Media:Xilinx_programmer.zip|Eagle-Projekt für martiniman&#039;s Programmer]]&lt;br /&gt;
* [[Media:Probe_244dil.zip|Daten der Tastköpfe (inkl. Stückliste)]]&lt;br /&gt;
* [[Media:MiniLA-Trigger.zip|Daten der Triggerplatinen (inkl. Stückliste)]]&lt;br /&gt;
* [http://sourceforge.net/projects/xc3sprog xc3sprog Projekt-Seite]&lt;br /&gt;
* [http://libusb.wiki.sourceforge.net libusb für Linux]&lt;br /&gt;
* [http://libusb-win32.sourceforge.net libusb für Windows]&lt;br /&gt;
Diskussionen und Artikel auf www.mikrocontroller.net:&lt;br /&gt;
* Artikel: [[Logic Analyzer]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/86889 Diskussion zu den Sammelbestellungen]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/93848 Diskussion zur PC-Software]&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]] [[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=36051</id>
		<title>MiniLA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=36051"/>
		<updated>2009-05-08T21:48:14Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Minila_best_top.jpg|thumb|300px|right|miniLA Bestückseite]]&lt;br /&gt;
[[Image:Minila_best_bot.jpg|thumb|300px|right|miniLA Lötseite]]&lt;br /&gt;
&#039;&#039;von Michael K.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Diese Seite soll eine Art Informationssammlung zum Open-Source-Logic-Analyzer &amp;quot;miniLA&amp;quot; werden um potentielle &amp;quot;Nachbauer&amp;quot; zu unterstützen. Die zugehörigen Threads im Forum sind inzwischen sehr umfangreich und dadurch leider auch etwas unübersichtlich geworden.&lt;br /&gt;
&lt;br /&gt;
Die Features das Gerätes sind auf der [http://minila.sourceforge.net Projekt-Homepage] zu finden.&lt;br /&gt;
&lt;br /&gt;
Es gab hier im Forum bereits drei Sammelbestellungen zur Platine und den nötigen Bauteilen. Die erste fand Anfang 2008, die zweite im Herbst 2008 und die dritte im Frühling 2009 statt. Details zu den Bestellungen und teils auch zur Hardware finden sich [http://www.mikrocontroller.net/topic/86889 in diesem Thread].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Bei den Sammelbestellungen wurde jeweils die Version von [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb] bestellt, bei der der USB-Anschluss direkt integriert ist. Wird dieser nicht benötigt, so werden die entsprechenden Teile einfach nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
Es wurden einige Veränderungen und Korrekturen am Layout durchgeführt, die jedoch teils rein optischer Natur sind. Die Daten zu dieser überarbeiteten Version sind [[Media:Minila%26usb-v1.zip|hier]] zu finden. Details zu den Änderungen können in der enthaltenen &amp;quot;README2_v1.txt&amp;quot; nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan wurde mit [http://www.mikrocontroller.net/articles/Schaltplaneditoren#TinyCAD TinyCAD] und das Layout mit [http://www.freepcb.com FreePCB] erstellt.&lt;br /&gt;
&lt;br /&gt;
=== Bauteile ===&lt;br /&gt;
Leider ist es nicht ganz einfach an einige der Bauteile zu kommen.&lt;br /&gt;
&lt;br /&gt;
Bei den ersten beiden Sammelbestellungen wurden die Bauteile aus folgenden Quellen bezogen:&lt;br /&gt;
* Hühnerfutter für o.g. Version inkl. LPT (ohne USB): [http://www.reichelt.de/?ACTION=20;AWKID=44322;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* Hühnerfutter inkl. LPT &amp;amp; USB: [http://www.reichelt.de/?ACTION=20;AWKID=45435;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* SRAM (Samsung K7B803625B-PI65): http://www.ebv.com (Gewerbe nötig)&lt;br /&gt;
* Restliche Teile: [[Media:Minila-parts.zip|Link-Liste]] oder Suche über http://www.digikey.de&lt;br /&gt;
&lt;br /&gt;
Die beiden Reichelt-Warenkörbe sind unter Umständen nicht mehr ganz aktuell und sollten deswegen unbedingt mit der Stückliste abgeglichen werden. Bitte ggf. hier auf Fehler bei den Warenkörben hinweisen oder [http://www.mikrocontroller.net/user/show/kichi Michael K.] diesbezüglich benachrichtigen!&lt;br /&gt;
&lt;br /&gt;
Bei der Bauteil-Auswahl gibt es nicht sehr viel zu beachten, lediglich CPLD, SRAM und der Multiplexer sind etwas kritischer. Beim CPLD muss es sich um einen Typ mit Speed-Grade 6 handeln (XC95288XL-6..., TQFP144), zur Auswahl von SRAM und HC4053 gibt es ein paar Anmerkungen in der &amp;quot;mlaUSBbom_v1.txt&amp;quot; und in der &amp;quot;README2_v1.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bzgl. SRAM wurde seinerzeit nach passenden Alternativen zum ursprünglich verwendeten Alliance AS7C33128PFS32A gesucht und die Ergebnisse in eine [http://www.mikrocontroller.net/attachment/30530/sram3.xls Excel-Liste] eingetragen. Auf Vollständigkeit, Richtigkeit und Aktualität kann es jedoch leider keine Garantie geben.&lt;br /&gt;
&lt;br /&gt;
Folgende SRAMs wurden bereits erfolgreich eingesetzt:&lt;br /&gt;
*K7B803625B-PI65&lt;br /&gt;
*CY7C1361B-133AC&lt;br /&gt;
*IS64LF12832A-7 (lt. miniLA-Entwickler)&lt;br /&gt;
&lt;br /&gt;
[[Image:Ram_bigger_than_128k.jpg|thumb|150px|right|Brücke bei Verwendung von K7B803625B-PI65 (siehe Text)]]&lt;br /&gt;
Die wichtigen Kriterien beim SRAM sind:&lt;br /&gt;
*Pin-Kompatibilität&lt;br /&gt;
*Größe &amp;gt;= 128k&lt;br /&gt;
*Datenbreite &amp;gt;= 32bits&lt;br /&gt;
*Flow-Through-Modus&lt;br /&gt;
*cycle time &amp;lt; 10ns&lt;br /&gt;
*data setup time &amp;lt;= 2ns&lt;br /&gt;
*data hold time &amp;lt;= 2ns&lt;br /&gt;
&lt;br /&gt;
Falls ein SRAM verwendet wird, das größer ist als 128k, müssen evtl. ein paar Brücken eingelötet werden. Dies hängt von der Pinbelegung des SRAMs ab - meistens müssen nur Adressleitungen beschaltet werden, die sonst in der Luft hängen würden. Beim K7B803625B-PI65 aus den Sammelbestellungen wäre das bei Pin 43 (= A17) der Fall. Im nebenstehenden Bild ist Pin 43 mit GND verbunden. Es wäre aber ebenfalls möglich den Pin mit einem anderen Adresspin zu verbinden (z.B. Pin 44) oder mit Vcc, je nachdem was am einfachsten ist.&lt;br /&gt;
&lt;br /&gt;
=== Tastköpfe ===&lt;br /&gt;
[[Image:Probe_best_top.JPG|thumb|150px|right|Tastkopf Bestückseite (inkl. Flachbandkabel zum miniLA)]]&lt;br /&gt;
Als Schutz für den CPLD wurde eine Art Tastkopf entwickelt, der zwischen das zu messende Signal und den miniLA geschaltet wird. Dieser Tastkopf ist sehr einfach gehalten und besteht aus nur wenigen Bauteilen. Ein Tastkopf dient für 8 Kanäle, d.h. für alle 32 Kanäle werden 4 Stück benötigt. Die Schaltung wurde mittels TinyCAD und FreePCB entwickelt und die Daten dazu finden sich [[Media:Probe_244dil.zip|hier]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Hinweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
* R9 bis R16 dienen zur Terminierung und können überbrückt werden, da sich auf der Hauptplatine ebenfalls Serienwiderstände finden.&lt;br /&gt;
* R17 bis R24 dienen als Platzhalter falls eine Hysterese gewünscht sein sollte. Auf jeden Fall sollen hier &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; 47Ohm-Widerstände bestückt werden, sondern welche im 10k- bis 100k-Bereich.&lt;br /&gt;
&lt;br /&gt;
=== Trigger ===&lt;br /&gt;
Die obigen Platinen passen leider nur für die 32 Kanäle (K2-K5), nicht jedoch für die Trigger-Ein- und Clock-Ausgänge. Deswegen wurde im Zuge der dritten Sammelbestellung zusätzlich zu den Tastköpfen noch eine Triggerplatine entwickelt. Um Verwechslungen mit den Tastköpfen zu vermeiden ist auf dieser Platine eine 10polige Kontaktierung vorgesehen, die mit K1 des miniLA verbunden wird. Pin 7 (X8) davon ist im Moment noch nicht belegt und kann für eventuelle spätere Erweiterungen verwendet werden. Die beiden Jumper auf der Unterseite sind vorgesehen um die Richtung (Ein-/Ausgang) entsprechend wählen zu können. Schaltplan, Stückliste und Bestückpläne sind [[Media:MiniLA-Trigger.zip|hier]] zu finden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Hinweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
* Der 74AC244N dient nur als Platzhalter. Hier soll stattdessen (wie bei den Tastköpfen auch) ein 74LVC244 bestückt werden.&lt;br /&gt;
* R6 bis R10 dienen zur Terminierung und können überbrückt werden, da sich auf der Hauptplatine ebenfalls Serienwiderstände finden.&lt;br /&gt;
* R11 bis R15 dienen als Platzhalter falls eine Hysterese gewünscht sein sollte. Auf jeden Fall sollen hier &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; 47Ohm-Widerstände bestückt werden, sondern welche im 10k- bis 100k-Bereich.&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
Zum Betreiben des miniLA wird zusätzlich zu den, in der Stückliste aufgeführten Bauteilen&lt;br /&gt;
* ein USB-Kabel (A- auf B-Stecker, wie bei Druckern) oder ein LPT-Kabel&lt;br /&gt;
* ein Netzteil (~5V / ~700mA)&lt;br /&gt;
benötigt.&lt;br /&gt;
&lt;br /&gt;
== Firmware / Software ==&lt;br /&gt;
Als Firmware und Software kommen die Original-Versionen der Projekt-Seite zum Einsatz. Desweiteren gibt es bzgl. der PC-Software einen Beitrag [http://www.mikrocontroller.net/topic/93848 in der Codesammlung].&lt;br /&gt;
&lt;br /&gt;
Zur [http://www.mikrocontroller.net/articles/Programmierbare_Logik#Konfiguration_.28Download.29_Xilinx Programmierung] des [http://www.mikrocontroller.net/articles/CPLD CPLD] wird ein Xilinx-JTAG-Programmer benötigt, welcher sehr einfach nachgebaut werden kann - leider nur für den Parallel-Port. Die Original-Version von Xilinx, auf die von der miniLA-Seite aus verwiesen wird, ist allerdings nur eingeschränkt zu empfehlen, da einige Nutzer Probleme damit haben/hatten. [http://www.geocities.com/jacquesmartini/digital/schematic/Parallel_Cable_III.png Martiniman&#039;s Version] sollte besser und zuverlässiger sein. Schaltplan und Layout dieser Version für Eagle können [[Media:Xilinx_programmer.zip|hier]] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
Nachfolgend eine Zusammenfassung der relevanten Links und Daten:&lt;br /&gt;
* [http://minila.sourceforge.net Projekt-Seite]&lt;br /&gt;
* [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb&#039;s Version (Basis der Sammelbestellungen)]&lt;br /&gt;
* [[Media:Minila%26usb-v1.zip|Überarbeitete Version davon (inkl. Stückliste)]]&lt;br /&gt;
* [[Media:Xilinx_programmer.zip|Eagle-Projekt für martiniman&#039;s Programmer]]&lt;br /&gt;
* [[Media:Probe_244dil.zip|Daten der Tastköpfe (inkl. Stückliste)]]&lt;br /&gt;
* [[Media:MiniLA-Trigger.zip|Daten der Triggerplatinen (inkl. Stückliste)]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/86889 Diskussion zu den Sammelbestellungen]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/93848 Diskussion zur PC-Software]&lt;br /&gt;
Und noch ein paar allgemeine Links zum Thema Logic Analyzer:&lt;br /&gt;
* Artikel: [[Logic Analyzer]]&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
* Ggf. eine kleine Anleitung zum Programmieren des CPLDs schreiben&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]] [[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=36006</id>
		<title>MiniLA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=36006"/>
		<updated>2009-05-06T20:34:12Z</updated>

		<summary type="html">&lt;p&gt;Kichi: /* Trigger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Minila_best_top.jpg|thumb|300px|right|miniLA Bestückseite]]&lt;br /&gt;
[[Image:Minila_best_bot.jpg|thumb|300px|right|miniLA Lötseite]]&lt;br /&gt;
&#039;&#039;von Michael K.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Diese Seite soll eine Art Informationssammlung zum Open-Source-Logic-Analyzer &amp;quot;miniLA&amp;quot; werden um potentielle &amp;quot;Nachbauer&amp;quot; zu unterstützen. Die zugehörigen Threads im Forum sind inzwischen sehr umfangreich und dadurch leider auch etwas unübersichtlich geworden.&lt;br /&gt;
&lt;br /&gt;
Die Features das Gerätes sind auf der [http://minila.sourceforge.net Projekt-Homepage] zu finden.&lt;br /&gt;
&lt;br /&gt;
Es gab hier im Forum bereits drei Sammelbestellungen zur Platine und den nötigen Bauteilen. Die erste fand Anfang 2008, die zweite im Herbst 2008 und die dritte im Frühling 2009 statt. Details zu den Bestellungen und teils auch zur Hardware finden sich [http://www.mikrocontroller.net/topic/86889 in diesem Thread].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Bei den Sammelbestellungen wurde jeweils die Version von [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb] bestellt, bei der der USB-Anschluss direkt integriert ist. Wird dieser nicht benötigt, so werden die entsprechenden Teile einfach nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
Es wurden einige Veränderungen und Korrekturen am Layout durchgeführt, die jedoch teils rein optischer Natur sind. Die Daten zu dieser überarbeiteten Version sind [[Media:Minila%26usb-v1.zip|hier]] zu finden. Details zu den Änderungen können in der enthaltenen &amp;quot;README2_v1.txt&amp;quot; nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan wurde mit [http://www.mikrocontroller.net/articles/Schaltplaneditoren#TinyCAD TinyCAD] und das Layout mit [http://www.freepcb.com FreePCB] erstellt.&lt;br /&gt;
&lt;br /&gt;
=== Bauteile ===&lt;br /&gt;
Leider ist es nicht ganz einfach an einige der Bauteile zu kommen.&lt;br /&gt;
&lt;br /&gt;
Bei den ersten beiden Sammelbestellungen wurden die Bauteile aus folgenden Quellen bezogen:&lt;br /&gt;
* Hühnerfutter für o.g. Version inkl. LPT (ohne USB): [http://www.reichelt.de/?ACTION=20;AWKID=44322;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* Hühnerfutter inkl. LPT &amp;amp; USB: [http://www.reichelt.de/?ACTION=20;AWKID=45435;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* SRAM (Samsung K7B803625B-PI65): http://www.ebv.com (Gewerbe nötig)&lt;br /&gt;
* Restliche Teile: [[Media:Minila-parts.zip|Link-Liste]] oder Suche über http://www.digikey.de&lt;br /&gt;
&lt;br /&gt;
Die beiden Reichelt-Warenkörbe sind unter Umständen nicht mehr ganz aktuell und sollten deswegen unbedingt mit der Stückliste abgeglichen werden. Bitte ggf. hier auf Fehler bei den Warenkörben hinweisen oder [http://www.mikrocontroller.net/user/show/kichi Michael K.] diesbezüglich benachrichtigen!&lt;br /&gt;
&lt;br /&gt;
Bei der Bauteil-Auswahl gibt es nicht sehr viel zu beachten, lediglich CPLD, SRAM und der Multiplexer sind etwas kritischer. Beim CPLD muss es sich um einen Typ mit Speed-Grade 6 handeln (XC95288XL-6..., TQFP144), zur Auswahl von SRAM und HC4053 gibt es ein paar Anmerkungen in der &amp;quot;mlaUSBbom_v1.txt&amp;quot; und in der &amp;quot;README2_v1.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bzgl. SRAM wurde seinerzeit nach passenden Alternativen zum ursprünglich verwendeten Alliance AS7C33128PFS32A gesucht und die Ergebnisse in eine [http://www.mikrocontroller.net/attachment/30530/sram3.xls Excel-Liste] eingetragen. Auf Vollständigkeit, Richtigkeit und Aktualität kann es jedoch leider keine Garantie geben.&lt;br /&gt;
&lt;br /&gt;
Folgende SRAMs wurden bereits erfolgreich eingesetzt:&lt;br /&gt;
*K7B803625B-PI65&lt;br /&gt;
*CY7C1361B-133AC&lt;br /&gt;
*IS64LF12832A-7 (lt. miniLA-Entwickler)&lt;br /&gt;
&lt;br /&gt;
[[Image:Ram_bigger_than_128k.jpg|thumb|150px|right|Brücke bei Verwendung von K7B803625B-PI65 (siehe Text)]]&lt;br /&gt;
Die wichtigen Kriterien beim SRAM sind:&lt;br /&gt;
*Pin-Kompatibilität&lt;br /&gt;
*Größe &amp;gt;= 128k&lt;br /&gt;
*Datenbreite &amp;gt;= 32bits&lt;br /&gt;
*Flow-Through-Modus&lt;br /&gt;
*cycle time &amp;lt; 10ns&lt;br /&gt;
*data setup time &amp;lt;= 2ns&lt;br /&gt;
*data hold time &amp;lt;= 2ns&lt;br /&gt;
&lt;br /&gt;
Falls ein SRAM verwendet wird, das größer ist als 128k, müssen evtl. ein paar Brücken eingelötet werden. Dies hängt von der Pinbelegung des SRAMs ab - meistens müssen nur Adressleitungen beschaltet werden, die sonst in der Luft hängen würden. Beim K7B803625B-PI65 aus den Sammelbestellungen wäre das bei Pin 43 (= A17) der Fall. Im nebenstehenden Bild ist Pin 43 mit GND verbunden. Es wäre aber ebenfalls möglich den Pin mit einem anderen Adresspin zu verbinden (z.B. Pin 44) oder mit Vcc, je nachdem was am einfachsten ist.&lt;br /&gt;
&lt;br /&gt;
=== Tastköpfe ===&lt;br /&gt;
[[Image:Probe_best_top.JPG|thumb|150px|right|Tastkopf Bestückseite (inkl. Flachbandkabel zum miniLA)]]&lt;br /&gt;
Als Schutz für den CPLD wurde eine Art Tastkopf entwickelt, der zwischen das zu messende Signal und den miniLA geschaltet wird. Dieser Tastkopf ist sehr einfach gehalten und besteht aus nur wenigen Bauteilen. Ein Tastkopf dient für 8 Kanäle, d.h. für alle 32 Kanäle werden 4 Stück benötigt. Die Schaltung wurde mittels TinyCAD und FreePCB entwickelt und die Daten dazu finden sich [[Media:Probe_244dil.zip|hier]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Hinweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
* R9 bis R16 dienen zur Terminierung und können überbrückt werden, da sich auf der Hauptplatine ebenfalls Serienwiderstände finden.&lt;br /&gt;
* R17 bis R24 dienen als Platzhalter falls eine Hysterese gewünscht sein sollte. Auf jeden Fall sollen hier &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; 47Ohm-Widerstände bestückt werden, sondern welche im 10k- bis 100k-Bereich.&lt;br /&gt;
&lt;br /&gt;
=== Trigger ===&lt;br /&gt;
Die obigen Platinen passen leider nur für die 32 Kanäle (K2-K5), nicht jedoch für die Trigger-Ein- und Clock-Ausgänge. Deswegen wurde im Zuge der dritten Sammelbestellung zusätzlich zu den Tastköpfen noch eine Triggerplatine entwickelt. Um Verwechslungen mit den Tastköpfen zu vermeiden ist auf dieser Platine eine 10polige Kontaktierung vorgesehen, die mit K1 des miniLA verbunden wird. Pin 7 (X8) davon ist im Moment noch nicht belegt und kann für eventuelle spätere Erweiterungen verwendet werden. Die beiden Jumper auf der Unterseite sind vorgesehen um die Richtung (Ein-/Ausgang) entsprechend wählen zu können. Schaltplan, Stückliste und Bestückpläne sind [[Media:MiniLA-Trigger.zip|hier]] zu finden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Hinweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
* Der 74AC244N dient nur als Platzhalter. Hier soll stattdessen (wie bei den Tastköpfen auch) ein 74LVC244 bestückt werden.&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
Zum Betreiben des miniLA wird zusätzlich zu den, in der Stückliste aufgeführten Bauteilen&lt;br /&gt;
* ein USB-Kabel (A- auf B-Stecker, wie bei Druckern) oder ein LPT-Kabel&lt;br /&gt;
* ein Netzteil (~5V / ~700mA)&lt;br /&gt;
benötigt.&lt;br /&gt;
&lt;br /&gt;
== Firmware / Software ==&lt;br /&gt;
Als Firmware und Software kommen die Original-Versionen der Projekt-Seite zum Einsatz. Desweiteren gibt es bzgl. der PC-Software einen Beitrag [http://www.mikrocontroller.net/topic/93848 in der Codesammlung].&lt;br /&gt;
&lt;br /&gt;
Zur [http://www.mikrocontroller.net/articles/Programmierbare_Logik#Konfiguration_.28Download.29_Xilinx Programmierung] des [http://www.mikrocontroller.net/articles/CPLD CPLD] wird ein Xilinx-JTAG-Programmer benötigt, welcher sehr einfach nachgebaut werden kann - leider nur für den Parallel-Port. Die Original-Version von Xilinx, auf die von der miniLA-Seite aus verwiesen wird, ist allerdings nur eingeschränkt zu empfehlen, da einige Nutzer Probleme damit haben/hatten. [http://www.geocities.com/jacquesmartini/digital/schematic/Parallel_Cable_III.png Martiniman&#039;s Version] sollte besser und zuverlässiger sein. Schaltplan und Layout dieser Version für Eagle können [[Media:Xilinx_programmer.zip|hier]] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
Nachfolgend eine Zusammenfassung der relevanten Links und Daten:&lt;br /&gt;
* [http://minila.sourceforge.net Projekt-Seite]&lt;br /&gt;
* [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb&#039;s Version (Basis der Sammelbestellungen)]&lt;br /&gt;
* [[Media:Minila%26usb-v1.zip|Überarbeitete Version davon (inkl. Stückliste)]]&lt;br /&gt;
* [[Media:Xilinx_programmer.zip|Eagle-Projekt für martiniman&#039;s Programmer]]&lt;br /&gt;
* [[Media:Probe_244dil.zip|Daten der Tastköpfe (inkl. Stückliste)]]&lt;br /&gt;
* [[Media:MiniLA-Trigger.zip|Daten der Triggerplatinen (inkl. Stückliste)]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/86889 Diskussion zu den Sammelbestellungen]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/93848 Diskussion zur PC-Software]&lt;br /&gt;
Und noch ein paar allgemeine Links zum Thema Logic Analyzer:&lt;br /&gt;
* Artikel: [[Logic Analyzer]]&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
* Ggf. eine kleine Anleitung zum Programmieren des CPLDs schreiben&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]] [[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=36005</id>
		<title>MiniLA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=36005"/>
		<updated>2009-05-06T20:33:39Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Minila_best_top.jpg|thumb|300px|right|miniLA Bestückseite]]&lt;br /&gt;
[[Image:Minila_best_bot.jpg|thumb|300px|right|miniLA Lötseite]]&lt;br /&gt;
&#039;&#039;von Michael K.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Diese Seite soll eine Art Informationssammlung zum Open-Source-Logic-Analyzer &amp;quot;miniLA&amp;quot; werden um potentielle &amp;quot;Nachbauer&amp;quot; zu unterstützen. Die zugehörigen Threads im Forum sind inzwischen sehr umfangreich und dadurch leider auch etwas unübersichtlich geworden.&lt;br /&gt;
&lt;br /&gt;
Die Features das Gerätes sind auf der [http://minila.sourceforge.net Projekt-Homepage] zu finden.&lt;br /&gt;
&lt;br /&gt;
Es gab hier im Forum bereits drei Sammelbestellungen zur Platine und den nötigen Bauteilen. Die erste fand Anfang 2008, die zweite im Herbst 2008 und die dritte im Frühling 2009 statt. Details zu den Bestellungen und teils auch zur Hardware finden sich [http://www.mikrocontroller.net/topic/86889 in diesem Thread].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Bei den Sammelbestellungen wurde jeweils die Version von [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb] bestellt, bei der der USB-Anschluss direkt integriert ist. Wird dieser nicht benötigt, so werden die entsprechenden Teile einfach nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
Es wurden einige Veränderungen und Korrekturen am Layout durchgeführt, die jedoch teils rein optischer Natur sind. Die Daten zu dieser überarbeiteten Version sind [[Media:Minila%26usb-v1.zip|hier]] zu finden. Details zu den Änderungen können in der enthaltenen &amp;quot;README2_v1.txt&amp;quot; nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan wurde mit [http://www.mikrocontroller.net/articles/Schaltplaneditoren#TinyCAD TinyCAD] und das Layout mit [http://www.freepcb.com FreePCB] erstellt.&lt;br /&gt;
&lt;br /&gt;
=== Bauteile ===&lt;br /&gt;
Leider ist es nicht ganz einfach an einige der Bauteile zu kommen.&lt;br /&gt;
&lt;br /&gt;
Bei den ersten beiden Sammelbestellungen wurden die Bauteile aus folgenden Quellen bezogen:&lt;br /&gt;
* Hühnerfutter für o.g. Version inkl. LPT (ohne USB): [http://www.reichelt.de/?ACTION=20;AWKID=44322;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* Hühnerfutter inkl. LPT &amp;amp; USB: [http://www.reichelt.de/?ACTION=20;AWKID=45435;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* SRAM (Samsung K7B803625B-PI65): http://www.ebv.com (Gewerbe nötig)&lt;br /&gt;
* Restliche Teile: [[Media:Minila-parts.zip|Link-Liste]] oder Suche über http://www.digikey.de&lt;br /&gt;
&lt;br /&gt;
Die beiden Reichelt-Warenkörbe sind unter Umständen nicht mehr ganz aktuell und sollten deswegen unbedingt mit der Stückliste abgeglichen werden. Bitte ggf. hier auf Fehler bei den Warenkörben hinweisen oder [http://www.mikrocontroller.net/user/show/kichi Michael K.] diesbezüglich benachrichtigen!&lt;br /&gt;
&lt;br /&gt;
Bei der Bauteil-Auswahl gibt es nicht sehr viel zu beachten, lediglich CPLD, SRAM und der Multiplexer sind etwas kritischer. Beim CPLD muss es sich um einen Typ mit Speed-Grade 6 handeln (XC95288XL-6..., TQFP144), zur Auswahl von SRAM und HC4053 gibt es ein paar Anmerkungen in der &amp;quot;mlaUSBbom_v1.txt&amp;quot; und in der &amp;quot;README2_v1.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bzgl. SRAM wurde seinerzeit nach passenden Alternativen zum ursprünglich verwendeten Alliance AS7C33128PFS32A gesucht und die Ergebnisse in eine [http://www.mikrocontroller.net/attachment/30530/sram3.xls Excel-Liste] eingetragen. Auf Vollständigkeit, Richtigkeit und Aktualität kann es jedoch leider keine Garantie geben.&lt;br /&gt;
&lt;br /&gt;
Folgende SRAMs wurden bereits erfolgreich eingesetzt:&lt;br /&gt;
*K7B803625B-PI65&lt;br /&gt;
*CY7C1361B-133AC&lt;br /&gt;
*IS64LF12832A-7 (lt. miniLA-Entwickler)&lt;br /&gt;
&lt;br /&gt;
[[Image:Ram_bigger_than_128k.jpg|thumb|150px|right|Brücke bei Verwendung von K7B803625B-PI65 (siehe Text)]]&lt;br /&gt;
Die wichtigen Kriterien beim SRAM sind:&lt;br /&gt;
*Pin-Kompatibilität&lt;br /&gt;
*Größe &amp;gt;= 128k&lt;br /&gt;
*Datenbreite &amp;gt;= 32bits&lt;br /&gt;
*Flow-Through-Modus&lt;br /&gt;
*cycle time &amp;lt; 10ns&lt;br /&gt;
*data setup time &amp;lt;= 2ns&lt;br /&gt;
*data hold time &amp;lt;= 2ns&lt;br /&gt;
&lt;br /&gt;
Falls ein SRAM verwendet wird, das größer ist als 128k, müssen evtl. ein paar Brücken eingelötet werden. Dies hängt von der Pinbelegung des SRAMs ab - meistens müssen nur Adressleitungen beschaltet werden, die sonst in der Luft hängen würden. Beim K7B803625B-PI65 aus den Sammelbestellungen wäre das bei Pin 43 (= A17) der Fall. Im nebenstehenden Bild ist Pin 43 mit GND verbunden. Es wäre aber ebenfalls möglich den Pin mit einem anderen Adresspin zu verbinden (z.B. Pin 44) oder mit Vcc, je nachdem was am einfachsten ist.&lt;br /&gt;
&lt;br /&gt;
=== Tastköpfe ===&lt;br /&gt;
[[Image:Probe_best_top.JPG|thumb|150px|right|Tastkopf Bestückseite (inkl. Flachbandkabel zum miniLA)]]&lt;br /&gt;
Als Schutz für den CPLD wurde eine Art Tastkopf entwickelt, der zwischen das zu messende Signal und den miniLA geschaltet wird. Dieser Tastkopf ist sehr einfach gehalten und besteht aus nur wenigen Bauteilen. Ein Tastkopf dient für 8 Kanäle, d.h. für alle 32 Kanäle werden 4 Stück benötigt. Die Schaltung wurde mittels TinyCAD und FreePCB entwickelt und die Daten dazu finden sich [[Media:Probe_244dil.zip|hier]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Hinweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
* R9 bis R16 dienen zur Terminierung und können überbrückt werden, da sich auf der Hauptplatine ebenfalls Serienwiderstände finden.&lt;br /&gt;
* R17 bis R24 dienen als Platzhalter falls eine Hysterese gewünscht sein sollte. Auf jeden Fall sollen hier &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; 47Ohm-Widerstände bestückt werden, sondern welche im 10k- bis 100k-Bereich.&lt;br /&gt;
&lt;br /&gt;
=== Trigger ===&lt;br /&gt;
Die obigen Platinen passen leider nur für die 32 Kanäle (K2-K5), nicht jedoch für die Trigger-Ein- und Clock-Ausgänge. Deswegen wurde im Zuge der dritten Sammelbestellung zusätzlich zu den Tastköpfen noch eine Triggerplatine entwickelt. Um Verwechslungen mit den Tastköpfen zu vermeiden ist auf dieser Platine eine 10polige Kontaktierung vorgesehen, die mit K1 des miniLA verbunden wird. Pin 7 (X8) davon ist im Moment noch nicht belegt und kann für eventuelle spätere Erweiterungen verwendet werden. Die beiden Jumper auf der Unterseite sind vorgesehen um die Richtung (Ein-/Ausgang) entsprechend wählen zu können. Schaltplan, Stückliste und Bestückpläne sind [[Media:MiniLA-Trigger.zip|hier]] zu finden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Hinweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
* Der 74AC244N dient nur als Platzhalter. Hier soll (wie bei den Tastköpfen auch) ein 74LVC244 bestückt werden.&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
Zum Betreiben des miniLA wird zusätzlich zu den, in der Stückliste aufgeführten Bauteilen&lt;br /&gt;
* ein USB-Kabel (A- auf B-Stecker, wie bei Druckern) oder ein LPT-Kabel&lt;br /&gt;
* ein Netzteil (~5V / ~700mA)&lt;br /&gt;
benötigt.&lt;br /&gt;
&lt;br /&gt;
== Firmware / Software ==&lt;br /&gt;
Als Firmware und Software kommen die Original-Versionen der Projekt-Seite zum Einsatz. Desweiteren gibt es bzgl. der PC-Software einen Beitrag [http://www.mikrocontroller.net/topic/93848 in der Codesammlung].&lt;br /&gt;
&lt;br /&gt;
Zur [http://www.mikrocontroller.net/articles/Programmierbare_Logik#Konfiguration_.28Download.29_Xilinx Programmierung] des [http://www.mikrocontroller.net/articles/CPLD CPLD] wird ein Xilinx-JTAG-Programmer benötigt, welcher sehr einfach nachgebaut werden kann - leider nur für den Parallel-Port. Die Original-Version von Xilinx, auf die von der miniLA-Seite aus verwiesen wird, ist allerdings nur eingeschränkt zu empfehlen, da einige Nutzer Probleme damit haben/hatten. [http://www.geocities.com/jacquesmartini/digital/schematic/Parallel_Cable_III.png Martiniman&#039;s Version] sollte besser und zuverlässiger sein. Schaltplan und Layout dieser Version für Eagle können [[Media:Xilinx_programmer.zip|hier]] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
Nachfolgend eine Zusammenfassung der relevanten Links und Daten:&lt;br /&gt;
* [http://minila.sourceforge.net Projekt-Seite]&lt;br /&gt;
* [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb&#039;s Version (Basis der Sammelbestellungen)]&lt;br /&gt;
* [[Media:Minila%26usb-v1.zip|Überarbeitete Version davon (inkl. Stückliste)]]&lt;br /&gt;
* [[Media:Xilinx_programmer.zip|Eagle-Projekt für martiniman&#039;s Programmer]]&lt;br /&gt;
* [[Media:Probe_244dil.zip|Daten der Tastköpfe (inkl. Stückliste)]]&lt;br /&gt;
* [[Media:MiniLA-Trigger.zip|Daten der Triggerplatinen (inkl. Stückliste)]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/86889 Diskussion zu den Sammelbestellungen]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/93848 Diskussion zur PC-Software]&lt;br /&gt;
Und noch ein paar allgemeine Links zum Thema Logic Analyzer:&lt;br /&gt;
* Artikel: [[Logic Analyzer]]&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
* Ggf. eine kleine Anleitung zum Programmieren des CPLDs schreiben&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]] [[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=35994</id>
		<title>MiniLA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=35994"/>
		<updated>2009-05-05T19:58:24Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Minila_best_top.jpg|thumb|300px|right|miniLA Bestückseite]]&lt;br /&gt;
[[Image:Minila_best_bot.jpg|thumb|300px|right|miniLA Lötseite]]&lt;br /&gt;
&#039;&#039;von Michael K.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Diese Seite soll eine Art Informationssammlung zum Open-Source-Logic-Analyzer &amp;quot;miniLA&amp;quot; werden um potentielle &amp;quot;Nachbauer&amp;quot; zu unterstützen. Die zugehörigen Threads im Forum sind inzwischen sehr umfangreich und dadurch leider auch etwas unübersichtlich geworden.&lt;br /&gt;
&lt;br /&gt;
Die Features das Gerätes sind auf der [http://minila.sourceforge.net Projekt-Homepage] zu finden.&lt;br /&gt;
&lt;br /&gt;
Es gab hier im Forum bereits drei Sammelbestellungen zur Platine und den nötigen Bauteilen. Die erste fand Anfang 2008, die zweite im Herbst 2008 und die dritte im Frühling 2009 statt. Details zu den Bestellungen und teils auch zur Hardware finden sich [http://www.mikrocontroller.net/topic/86889 in diesem Thread].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Bei den Sammelbestellungen wurde jeweils die Version von [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb] bestellt, bei der der USB-Anschluss direkt integriert ist. Wird dieser nicht benötigt, so werden die entsprechenden Teile einfach nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
Es wurden einige Veränderungen und Korrekturen am Layout durchgeführt, die jedoch teils rein optischer Natur sind. Die Daten zu dieser überarbeiteten Version sind [[Media:Minila%26usb-v1.zip|hier]] zu finden. Details zu den Änderungen können in der enthaltenen &amp;quot;README2_v1.txt&amp;quot; nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan wurde mit [http://www.mikrocontroller.net/articles/Schaltplaneditoren#TinyCAD TinyCAD] und das Layout mit [http://www.freepcb.com FreePCB] erstellt.&lt;br /&gt;
&lt;br /&gt;
=== Bauteile ===&lt;br /&gt;
Leider ist es nicht ganz einfach an einige der Bauteile zu kommen.&lt;br /&gt;
&lt;br /&gt;
Bei den ersten beiden Sammelbestellungen wurden die Bauteile aus folgenden Quellen bezogen:&lt;br /&gt;
* Hühnerfutter für o.g. Version inkl. LPT (ohne USB): [http://www.reichelt.de/?ACTION=20;AWKID=44322;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* Hühnerfutter inkl. LPT &amp;amp; USB: [http://www.reichelt.de/?ACTION=20;AWKID=45435;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* SRAM (Samsung K7B803625B-PI65): http://www.ebv.com (Gewerbe nötig)&lt;br /&gt;
* Restliche Teile: [[Media:Minila-parts.zip|Link-Liste]] oder Suche über http://www.digikey.de&lt;br /&gt;
&lt;br /&gt;
Die beiden Reichelt-Warenkörbe sind unter Umständen nicht mehr ganz aktuell und sollten deswegen unbedingt mit der Stückliste abgeglichen werden. Bitte ggf. hier auf Fehler bei den Warenkörben hinweisen oder [http://www.mikrocontroller.net/user/show/kichi Michael K.] diesbezüglich benachrichtigen!&lt;br /&gt;
&lt;br /&gt;
Bei der Bauteil-Auswahl gibt es nicht sehr viel zu beachten, lediglich CPLD, SRAM und der Multiplexer sind etwas kritischer. Beim CPLD muss es sich um einen Typ mit Speed-Grade 6 handeln (XC95288XL-6..., TQFP144), zur Auswahl von SRAM und HC4053 gibt es ein paar Anmerkungen in der &amp;quot;mlaUSBbom_v1.txt&amp;quot; und in der &amp;quot;README2_v1.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bzgl. SRAM wurde seinerzeit nach passenden Alternativen zum ursprünglich verwendeten Alliance AS7C33128PFS32A gesucht und die Ergebnisse in eine [http://www.mikrocontroller.net/attachment/30530/sram3.xls Excel-Liste] eingetragen. Auf Vollständigkeit, Richtigkeit und Aktualität kann es jedoch leider keine Garantie geben.&lt;br /&gt;
&lt;br /&gt;
Folgende SRAMs wurden bereits erfolgreich eingesetzt:&lt;br /&gt;
*K7B803625B-PI65&lt;br /&gt;
*CY7C1361B-133AC&lt;br /&gt;
*IS64LF12832A-7 (lt. miniLA-Entwickler)&lt;br /&gt;
&lt;br /&gt;
[[Image:Ram_bigger_than_128k.jpg|thumb|150px|right|Brücke bei Verwendung von K7B803625B-PI65 (siehe Text)]]&lt;br /&gt;
Die wichtigen Kriterien beim SRAM sind:&lt;br /&gt;
*Pin-Kompatibilität&lt;br /&gt;
*Größe &amp;gt;= 128k&lt;br /&gt;
*Datenbreite &amp;gt;= 32bits&lt;br /&gt;
*Flow-Through-Modus&lt;br /&gt;
*cycle time &amp;lt; 10ns&lt;br /&gt;
*data setup time &amp;lt;= 2ns&lt;br /&gt;
*data hold time &amp;lt;= 2ns&lt;br /&gt;
&lt;br /&gt;
Falls ein SRAM verwendet wird, das größer ist als 128k, müssen evtl. ein paar Brücken eingelötet werden. Dies hängt von der Pinbelegung des SRAMs ab - meistens müssen nur Adressleitungen beschaltet werden, die sonst in der Luft hängen würden. Beim K7B803625B-PI65 aus den Sammelbestellungen wäre das bei Pin 43 (= A17) der Fall. Im nebenstehenden Bild ist Pin 43 mit GND verbunden. Es wäre aber ebenfalls möglich den Pin mit einem anderen Adresspin zu verbinden (z.B. Pin 44) oder mit Vcc, je nachdem was am einfachsten ist.&lt;br /&gt;
&lt;br /&gt;
=== Tastköpfe ===&lt;br /&gt;
[[Image:Probe_best_top.JPG|thumb|150px|right|Tastkopf Bestückseite (inkl. Flachbandkabel zum miniLA)]]&lt;br /&gt;
Als Schutz für den CPLD wurde eine Art Tastkopf entwickelt, der zwischen das zu messende Signal und den miniLA geschaltet wird. Dieser Tastkopf ist sehr einfach gehalten und besteht aus nur wenigen Bauteilen. Ein Tastkopf dient für 8 Kanäle, d.h. für alle 32 Kanäle werden 4 Stück benötigt. Die Schaltung wurde mittels TinyCAD und FreePCB entwickelt und die Daten dazu finden sich [[Media:Probe_244dil.zip|hier]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Hinweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
* R9 bis R16 dienen zur Terminierung und können überbrückt werden, da sich auf der Hauptplatine ebenfalls Serienwiderstände finden.&lt;br /&gt;
* R17 bis R24 dienen als Platzhalter falls eine Hysterese gewünscht sein sollte. Auf jeden Fall sollen hier &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; 47Ohm-Widerstände bestückt werden, sondern welche im 10k- bis 100k-Bereich.&lt;br /&gt;
&lt;br /&gt;
=== Trigger ===&lt;br /&gt;
Die obigen Platinen passen leider nur für die 32 Kanäle (K2-K5), nicht jedoch für die Trigger-Ein- und Clock-Ausgänge. Deswegen wurde im Zuge der dritten Sammelbestellung zusätzlich zu den Tastköpfen noch eine Triggerplatine entwickelt. Um Verwechslungen mit den Tastköpfen zu vermeiden ist auf dieser Platine eine 10polige Kontaktierung vorgesehen, die mit K1 des miniLA verbunden wird. Pin 7 (X8) davon ist im Moment noch nicht belegt und kann für eventuelle spätere Erweiterungen verwendet werden. Die beiden Jumper auf der Unterseite sind vorgesehen um die Richtung (Ein-/Ausgang) entsprechend wählen zu können. Schaltplan, Stückliste und Bestückpläne sind [[Media:MiniLA-Trigger.zip|hier]] zu finden.&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
Zum Betreiben des miniLA wird zusätzlich zu den, in der Stückliste aufgeführten Bauteilen&lt;br /&gt;
* ein USB-Kabel (A- auf B-Stecker, wie bei Druckern) oder ein LPT-Kabel&lt;br /&gt;
* ein Netzteil (~5V / ~700mA)&lt;br /&gt;
benötigt.&lt;br /&gt;
&lt;br /&gt;
== Firmware / Software ==&lt;br /&gt;
Als Firmware und Software kommen die Original-Versionen der Projekt-Seite zum Einsatz. Desweiteren gibt es bzgl. der PC-Software einen Beitrag [http://www.mikrocontroller.net/topic/93848 in der Codesammlung].&lt;br /&gt;
&lt;br /&gt;
Zur [http://www.mikrocontroller.net/articles/Programmierbare_Logik#Konfiguration_.28Download.29_Xilinx Programmierung] des [http://www.mikrocontroller.net/articles/CPLD CPLD] wird ein Xilinx-JTAG-Programmer benötigt, welcher sehr einfach nachgebaut werden kann - leider nur für den Parallel-Port. Die Original-Version von Xilinx, auf die von der miniLA-Seite aus verwiesen wird, ist allerdings nur eingeschränkt zu empfehlen, da einige Nutzer Probleme damit haben/hatten. [http://www.geocities.com/jacquesmartini/digital/schematic/Parallel_Cable_III.png Martiniman&#039;s Version] sollte besser und zuverlässiger sein. Schaltplan und Layout dieser Version für Eagle können [[Media:Xilinx_programmer.zip|hier]] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
Nachfolgend eine Zusammenfassung der relevanten Links und Daten:&lt;br /&gt;
* [http://minila.sourceforge.net Projekt-Seite]&lt;br /&gt;
* [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb&#039;s Version (Basis der Sammelbestellungen)]&lt;br /&gt;
* [[Media:Minila%26usb-v1.zip|Überarbeitete Version davon (inkl. Stückliste)]]&lt;br /&gt;
* [[Media:Xilinx_programmer.zip|Eagle-Projekt für martiniman&#039;s Programmer]]&lt;br /&gt;
* [[Media:Probe_244dil.zip|Daten der Tastköpfe (inkl. Stückliste)]]&lt;br /&gt;
* [[Media:MiniLA-Trigger.zip|Daten der Triggerplatinen (inkl. Stückliste)]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/86889 Diskussion zu den Sammelbestellungen]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/93848 Diskussion zur PC-Software]&lt;br /&gt;
Und noch ein paar allgemeine Links zum Thema Logic Analyzer:&lt;br /&gt;
* Artikel: [[Logic Analyzer]]&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
* Ggf. eine kleine Anleitung zum Programmieren des CPLDs schreiben&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]] [[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:MiniLA-Trigger.zip&amp;diff=35993</id>
		<title>Datei:MiniLA-Trigger.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:MiniLA-Trigger.zip&amp;diff=35993"/>
		<updated>2009-05-05T19:57:08Z</updated>

		<summary type="html">&lt;p&gt;Kichi: hat eine neue Version von „Bild:MiniLA-Trigger.zip“ hochgeladen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:MiniLA-Trigger.zip&amp;diff=35992</id>
		<title>Datei:MiniLA-Trigger.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:MiniLA-Trigger.zip&amp;diff=35992"/>
		<updated>2009-05-05T19:53:00Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=35797</id>
		<title>MiniLA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=35797"/>
		<updated>2009-04-24T19:26:27Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Minila_best_top.jpg|thumb|300px|right|miniLA Bestückseite]]&lt;br /&gt;
[[Image:Minila_best_bot.jpg|thumb|300px|right|miniLA Lötseite]]&lt;br /&gt;
&#039;&#039;von Michael K.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Diese Seite soll eine Art Informationssammlung zum Open-Source-Logic-Analyzer &amp;quot;miniLA&amp;quot; werden um potentielle &amp;quot;Nachbauer&amp;quot; zu unterstützen. Die zugehörigen Threads im Forum sind inzwischen sehr umfangreich und dadurch leider auch etwas unübersichtlich geworden.&lt;br /&gt;
&lt;br /&gt;
Die Features das Gerätes sind auf der [http://minila.sourceforge.net Projekt-Homepage] zu finden.&lt;br /&gt;
&lt;br /&gt;
Es gab hier im Forum zwei Sammelbestellungen zur Platine und den nötigen Bauteilen. Die erste fand Anfang 2008, die andere im Herbst 2008 statt. Zur Zeit (19.02.09) ist eine dritte Sammelbestellung in Vorbereitung. Details zu den Bestellungen und teils auch zur Hardware finden sich [http://www.mikrocontroller.net/topic/86889 in diesem Thread].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Bei den Sammelbestellungen wurde jeweils die Version von [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb] bestellt, bei der der USB-Anschluss direkt integriert ist. Wird dieser nicht benötigt, so werden die entsprechenden Teile einfach nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
Es wurden einige Veränderungen und Korrekturen am Layout durchgeführt, die jedoch teils rein optischer Natur sind. Die Daten zu dieser überarbeiteten Version sind [[Media:Minila%26usb-v1.zip|hier]] zu finden. Details zu den Änderungen können in der enthaltenen &amp;quot;README2_v1.txt&amp;quot; nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan wurde mit [http://www.mikrocontroller.net/articles/Schaltplaneditoren#TinyCAD TinyCAD] und das Layout mit [http://www.freepcb.com FreePCB] erstellt.&lt;br /&gt;
&lt;br /&gt;
=== Bauteile ===&lt;br /&gt;
Leider ist es nicht ganz einfach an einige der Bauteile zu kommen.&lt;br /&gt;
&lt;br /&gt;
Bei den ersten beiden Sammelbestellungen wurden die Bauteile aus folgenden Quellen bezogen:&lt;br /&gt;
* Hühnerfutter für o.g. Version inkl. LPT (ohne USB): [http://www.reichelt.de/?ACTION=20;AWKID=44322;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* Hühnerfutter inkl. LPT &amp;amp; USB: [http://www.reichelt.de/?ACTION=20;AWKID=45435;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* SRAM (Samsung K7B803625B-PI65): http://www.ebv.com (Gewerbe nötig)&lt;br /&gt;
* Restliche Teile: [[Media:Minila-parts.zip|Link-Liste]] oder Suche über http://www.digikey.de&lt;br /&gt;
&lt;br /&gt;
Die beiden Reichelt-Warenkörbe sind unter Umständen nicht mehr ganz aktuell und sollten deswegen unbedingt mit der Stückliste abgeglichen werden. Bitte ggf. hier auf Fehler bei den Warenkörben hinweisen oder [http://www.mikrocontroller.net/user/show/kichi Michael K.] diesbezüglich benachrichtigen!&lt;br /&gt;
&lt;br /&gt;
Bei der Bauteil-Auswahl gibt es nicht sehr viel zu beachten, lediglich CPLD, SRAM und der Multiplexer sind etwas kritischer. Beim CPLD muss es sich um einen Typ mit Speed-Grade 6 handeln (XC95288XL-6..., TQFP144), zur Auswahl von SRAM und HC4053 gibt es ein paar Anmerkungen in der &amp;quot;mlaUSBbom_v1.txt&amp;quot; und in der &amp;quot;README2_v1.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bzgl. SRAM wurde seinerzeit nach passenden Alternativen zum ursprünglich verwendeten Alliance AS7C33128PFS32A gesucht und die Ergebnisse in eine [http://www.mikrocontroller.net/attachment/30530/sram3.xls Excel-Liste] eingetragen. Auf Vollständigkeit, Richtigkeit und Aktualität kann es jedoch leider keine Garantie geben.&lt;br /&gt;
&lt;br /&gt;
Folgende SRAMs wurden bereits erfolgreich eingesetzt:&lt;br /&gt;
*K7B803625B-PI65&lt;br /&gt;
*CY7C1361B-133AC&lt;br /&gt;
*IS64LF12832A-7 (lt. miniLA-Entwickler)&lt;br /&gt;
&lt;br /&gt;
[[Image:Ram_bigger_than_128k.jpg|thumb|150px|right|Brücke bei Verwendung von K7B803625B-PI65 (siehe Text)]]&lt;br /&gt;
Die wichtigen Kriterien beim SRAM sind:&lt;br /&gt;
*Pin-Kompatibilität&lt;br /&gt;
*Größe &amp;gt;= 128k&lt;br /&gt;
*Datenbreite &amp;gt;= 32bits&lt;br /&gt;
*Flow-Through-Modus&lt;br /&gt;
*cycle time &amp;lt; 10ns&lt;br /&gt;
*data setup time &amp;lt;= 2ns&lt;br /&gt;
*data hold time &amp;lt;= 2ns&lt;br /&gt;
&lt;br /&gt;
Falls ein SRAM verwendet wird, das größer ist als 128k, müssen evtl. ein paar Brücken eingelötet werden. Dies hängt von der Pinbelegung des SRAMs ab - meistens müssen nur Adressleitungen beschaltet werden, die sonst in der Luft hängen würden. Beim K7B803625B-PI65 aus den Sammelbestellungen wäre das bei Pin 43 (= A17) der Fall. Im nebenstehenden Bild ist Pin 43 mit GND verbunden. Es wäre aber ebenfalls möglich den Pin mit einem anderen Adresspin zu verbinden (z.B. Pin 44) oder mit Vcc, je nachdem was am einfachsten ist.&lt;br /&gt;
&lt;br /&gt;
=== Tastköpfe ===&lt;br /&gt;
[[Image:Probe_best_top.JPG|thumb|150px|right|Tastkopf Bestückseite (inkl. Flachbandkabel zum miniLA)]]&lt;br /&gt;
Als Schutz für den CPLD wurde eine Art Tastkopf entwickelt, der zwischen das zu messende Signal und den miniLA geschaltet wird. Dieser Tastkopf ist sehr einfach gehalten und besteht aus nur wenigen Bauteilen. Ein Tastkopf dient für 8 Kanäle, d.h. für alle 32 Kanäle werden 4 Stück benötigt. Die Schaltung wurde mittels TinyCAD und FreePCB entwickelt und die Daten dazu finden sich [[Media:Probe_244dil.zip|hier]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Hinweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
* R9 bis R16 dienen zur Terminierung und können überbrückt werden, da sich auf der Hauptplatine ebenfalls Serienwiderstände finden.&lt;br /&gt;
* R17 bis R24 dienen als Platzhalter falls eine Hysterese gewünscht sein sollte. Auf jeden Fall sollen hier &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; 47Ohm-Widerstände bestückt werden, sondern welche im 10k- bis 100k-Bereich.&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
Zum Betreiben des miniLA wird zusätzlich zu den, in der Stückliste aufgeführten Bauteilen&lt;br /&gt;
* ein USB-Kabel (A- auf B-Stecker, wie bei Druckern) oder ein LPT-Kabel&lt;br /&gt;
* ein Netzteil (~5V / ~700mA)&lt;br /&gt;
benötigt.&lt;br /&gt;
&lt;br /&gt;
== Firmware / Software ==&lt;br /&gt;
Als Firmware und Software kommen die Original-Versionen der Projekt-Seite zum Einsatz. Desweiteren gibt es bzgl. der PC-Software einen Beitrag [http://www.mikrocontroller.net/topic/93848 in der Codesammlung].&lt;br /&gt;
&lt;br /&gt;
Zur [http://www.mikrocontroller.net/articles/Programmierbare_Logik#Konfiguration_.28Download.29_Xilinx Programmierung] des [http://www.mikrocontroller.net/articles/CPLD CPLD] wird ein Xilinx-JTAG-Programmer benötigt, welcher sehr einfach nachgebaut werden kann - leider nur für den Parallel-Port. Die Original-Version von Xilinx, auf die von der miniLA-Seite aus verwiesen wird, ist allerdings nur eingeschränkt zu empfehlen, da einige Nutzer Probleme damit haben/hatten. [http://www.geocities.com/jacquesmartini/digital/schematic/Parallel_Cable_III.png Martiniman&#039;s Version] sollte besser und zuverlässiger sein. Schaltplan und Layout dieser Version für Eagle können [[Media:Xilinx_programmer.zip|hier]] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
Nachfolgend eine Zusammenfassung der relevanten Links und Daten:&lt;br /&gt;
* [http://minila.sourceforge.net Projekt-Seite]&lt;br /&gt;
* [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb&#039;s Version (Basis der Sammelbestellungen)]&lt;br /&gt;
* [[Media:Minila%26usb-v1.zip|Überarbeitete Version davon (inkl. Stückliste)]]&lt;br /&gt;
* [[Media:Xilinx_programmer.zip|Eagle-Projekt für martiniman&#039;s Programmer]]&lt;br /&gt;
* [[Media:Probe_244dil.zip|Daten der Tastköpfe (inkl. Stückliste)]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/86889 Diskussion zu den Sammelbestellungen]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/93848 Diskussion zur PC-Software]&lt;br /&gt;
Und noch ein paar allgemeine Links zum Thema Logic Analyzer:&lt;br /&gt;
* Artikel: [[Logic Analyzer]]&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
* Ggf. eine kleine Anleitung zum Programmieren des CPLDs schreiben&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]] [[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=35796</id>
		<title>MiniLA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=35796"/>
		<updated>2009-04-24T19:20:49Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Minila_best_top.jpg|thumb|300px|right|miniLA Bestückseite]]&lt;br /&gt;
[[Image:Minila_best_bot.jpg|thumb|300px|right|miniLA Lötseite]]&lt;br /&gt;
&#039;&#039;von Michael K.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Diese Seite soll eine Art Informationssammlung zum Open-Source-Logic-Analyzer &amp;quot;miniLA&amp;quot; werden um potentielle &amp;quot;Nachbauer&amp;quot; zu unterstützen. Die zugehörigen Threads im Forum sind inzwischen sehr umfangreich und dadurch leider auch etwas unübersichtlich geworden.&lt;br /&gt;
&lt;br /&gt;
Die Features das Gerätes sind auf der [http://minila.sourceforge.net Projekt-Homepage] zu finden.&lt;br /&gt;
&lt;br /&gt;
Es gab hier im Forum zwei Sammelbestellungen zur Platine und den nötigen Bauteilen. Die erste fand Anfang 2008, die andere im Herbst 2008 statt. Zur Zeit (19.02.09) ist eine dritte Sammelbestellung in Vorbereitung. Details zu den Bestellungen und teils auch zur Hardware finden sich [http://www.mikrocontroller.net/topic/86889 in diesem Thread].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Bei den Sammelbestellungen wurde jeweils die Version von [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb] bestellt, bei der der USB-Anschluss direkt integriert ist. Wird dieser nicht benötigt, so werden die entsprechenden Teile einfach nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
Es wurden einige Veränderungen und Korrekturen am Layout durchgeführt, die jedoch teils rein optischer Natur sind. Die Daten zu dieser überarbeiteten Version sind [[Media:Minila%26usb-v1.zip|hier]] zu finden. Details zu den Änderungen können in der enthaltenen &amp;quot;README2_v1.txt&amp;quot; nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan wurde mit [http://www.mikrocontroller.net/articles/Schaltplaneditoren#TinyCAD TinyCAD] und das Layout mit [http://www.freepcb.com FreePCB] erstellt.&lt;br /&gt;
&lt;br /&gt;
=== Bauteile ===&lt;br /&gt;
Leider ist es nicht ganz einfach an einige der Bauteile zu kommen.&lt;br /&gt;
&lt;br /&gt;
Bei den ersten beiden Sammelbestellungen wurden die Bauteile aus folgenden Quellen bezogen:&lt;br /&gt;
* Hühnerfutter für o.g. Version inkl. LPT (ohne USB): [http://www.reichelt.de/?ACTION=20;AWKID=44322;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* Hühnerfutter inkl. LPT &amp;amp; USB: [http://www.reichelt.de/?ACTION=20;AWKID=45435;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* SRAM (Samsung K7B803625B-PI65): http://www.ebv.com (Gewerbe nötig)&lt;br /&gt;
* Restliche Teile: [[Media:Minila-parts.zip|Link-Liste]] oder Suche über http://www.digikey.de&lt;br /&gt;
&lt;br /&gt;
Die beiden Reichelt-Warenkörbe sind unter Umständen nicht mehr ganz aktuell und sollten deswegen unbedingt mit der Stückliste abgeglichen werden. Bitte ggf. hier auf Fehler bei den Warenkörben hinweisen oder [http://www.mikrocontroller.net/user/show/kichi Michael K.] diesbezüglich benachrichtigen!&lt;br /&gt;
&lt;br /&gt;
Bei der Bauteil-Auswahl gibt es nicht sehr viel zu beachten, lediglich CPLD, SRAM und der Multiplexer sind etwas kritischer. Beim CPLD muss es sich um einen Typ mit Speed-Grade 6 handeln (XC95288XL-6..., TQFP144), zur Auswahl von SRAM und HC4053 gibt es ein paar Anmerkungen in der &amp;quot;mlaUSBbom_v1.txt&amp;quot; und in der &amp;quot;README2_v1.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bzgl. SRAM wurde seinerzeit nach passenden Alternativen zum ursprünglich verwendeten Alliance AS7C33128PFS32A gesucht und die Ergebnisse in eine [http://www.mikrocontroller.net/attachment/30530/sram3.xls Excel-Liste] eingetragen. Auf Vollständigkeit, Richtigkeit und Aktualität kann es jedoch leider keine Garantie geben.&lt;br /&gt;
&lt;br /&gt;
Folgende SRAMs wurden bereits erfolgreich eingesetzt:&lt;br /&gt;
*K7B803625B-PI65&lt;br /&gt;
*CY7C1361B-133AC&lt;br /&gt;
*IS64LF12832A-7 (lt. miniLA-Entwickler)&lt;br /&gt;
&lt;br /&gt;
[[Image:Ram_bigger_than_128k.jpg|thumb|150px|right|Brücke bei Verwendung von K7B803625B-PI65 (siehe Text)]]&lt;br /&gt;
Die wichtigen Kriterien beim SRAM sind:&lt;br /&gt;
*Pin-Kompatibilität&lt;br /&gt;
*Größe &amp;gt;= 128k&lt;br /&gt;
*Datenbreite &amp;gt;= 32bits&lt;br /&gt;
*Flow-Through-Modus&lt;br /&gt;
*cycle time &amp;lt; 10ns&lt;br /&gt;
*data setup time &amp;lt;= 2ns&lt;br /&gt;
*data hold time &amp;lt;= 2ns&lt;br /&gt;
&lt;br /&gt;
Falls ein SRAM verwendet wird, das größer ist als 128k, müssen evtl. ein paar Brücken eingelötet werden. Dies hängt von der Pinbelegung des SRAMs ab - meistens müssen nur Adressleitungen beschaltet werden, die sonst in der Luft hängen würden. Beim K7B803625B-PI65 aus den Sammelbestellungen wäre das bei Pin 43 der Fall (siehe Bild).&lt;br /&gt;
&lt;br /&gt;
=== Tastköpfe ===&lt;br /&gt;
[[Image:Probe_best_top.JPG|thumb|150px|right|Tastkopf Bestückseite (inkl. Flachbandkabel zum miniLA)]]&lt;br /&gt;
Als Schutz für den CPLD wurde eine Art Tastkopf entwickelt, der zwischen das zu messende Signal und den miniLA geschaltet wird. Dieser Tastkopf ist sehr einfach gehalten und besteht aus nur wenigen Bauteilen. Ein Tastkopf dient für 8 Kanäle, d.h. für alle 32 Kanäle werden 4 Stück benötigt. Die Schaltung wurde mittels TinyCAD und FreePCB entwickelt und die Daten dazu finden sich [[Media:Probe_244dil.zip|hier]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Hinweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
* R9 bis R16 dienen zur Terminierung und können überbrückt werden, da sich auf der Hauptplatine ebenfalls Serienwiderstände finden.&lt;br /&gt;
* R17 bis R24 dienen als Platzhalter falls eine Hysterese gewünscht sein sollte. Auf jeden Fall sollen hier &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; 47Ohm-Widerstände bestückt werden, sondern welche im 10k- bis 100k-Bereich.&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
Zum Betreiben des miniLA wird zusätzlich zu den, in der Stückliste aufgeführten Bauteilen&lt;br /&gt;
* ein USB-Kabel (A- auf B-Stecker, wie bei Druckern) oder ein LPT-Kabel&lt;br /&gt;
* ein Netzteil (~5V / ~700mA)&lt;br /&gt;
benötigt.&lt;br /&gt;
&lt;br /&gt;
== Firmware / Software ==&lt;br /&gt;
Als Firmware und Software kommen die Original-Versionen der Projekt-Seite zum Einsatz. Desweiteren gibt es bzgl. der PC-Software einen Beitrag [http://www.mikrocontroller.net/topic/93848 in der Codesammlung].&lt;br /&gt;
&lt;br /&gt;
Zur [http://www.mikrocontroller.net/articles/Programmierbare_Logik#Konfiguration_.28Download.29_Xilinx Programmierung] des [http://www.mikrocontroller.net/articles/CPLD CPLD] wird ein Xilinx-JTAG-Programmer benötigt, welcher sehr einfach nachgebaut werden kann - leider nur für den Parallel-Port. Die Original-Version von Xilinx, auf die von der miniLA-Seite aus verwiesen wird, ist allerdings nur eingeschränkt zu empfehlen, da einige Nutzer Probleme damit haben/hatten. [http://www.geocities.com/jacquesmartini/digital/schematic/Parallel_Cable_III.png Martiniman&#039;s Version] sollte besser und zuverlässiger sein. Schaltplan und Layout dieser Version für Eagle können [[Media:Xilinx_programmer.zip|hier]] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
Nachfolgend eine Zusammenfassung der relevanten Links und Daten:&lt;br /&gt;
* [http://minila.sourceforge.net Projekt-Seite]&lt;br /&gt;
* [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb&#039;s Version (Basis der Sammelbestellungen)]&lt;br /&gt;
* [[Media:Minila%26usb-v1.zip|Überarbeitete Version davon (inkl. Stückliste)]]&lt;br /&gt;
* [[Media:Xilinx_programmer.zip|Eagle-Projekt für martiniman&#039;s Programmer]]&lt;br /&gt;
* [[Media:Probe_244dil.zip|Daten der Tastköpfe (inkl. Stückliste)]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/86889 Diskussion zu den Sammelbestellungen]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/93848 Diskussion zur PC-Software]&lt;br /&gt;
Und noch ein paar allgemeine Links zum Thema Logic Analyzer:&lt;br /&gt;
* Artikel: [[Logic Analyzer]]&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
* Ggf. eine kleine Anleitung zum Programmieren des CPLDs schreiben&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]] [[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Ram_bigger_than_128k.jpg&amp;diff=35795</id>
		<title>Datei:Ram bigger than 128k.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Ram_bigger_than_128k.jpg&amp;diff=35795"/>
		<updated>2009-04-24T19:12:53Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=34844</id>
		<title>MiniLA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=34844"/>
		<updated>2009-03-08T12:37:52Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Minila_best_top.jpg|thumb|300px|right|miniLA Bestückseite]]&lt;br /&gt;
[[Image:Minila_best_bot.jpg|thumb|300px|right|miniLA Lötseite]]&lt;br /&gt;
&#039;&#039;von Michael K.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Diese Seite soll eine Art Informationssammlung zum Open-Source-Logic-Analyzer &amp;quot;miniLA&amp;quot; werden um potentielle &amp;quot;Nachbauer&amp;quot; zu unterstützen. Die zugehörigen Threads im Forum sind inzwischen sehr umfangreich und dadurch leider auch etwas unübersichtlich geworden.&lt;br /&gt;
&lt;br /&gt;
Die Features das Gerätes sind auf der [http://minila.sourceforge.net Projekt-Homepage] zu finden.&lt;br /&gt;
&lt;br /&gt;
Es gab hier im Forum zwei Sammelbestellungen zur Platine und den nötigen Bauteilen. Die erste fand Anfang 2008, die andere im Herbst 2008 statt. Zur Zeit (19.02.09) ist eine dritte Sammelbestellung in Vorbereitung. Details zu den Bestellungen und teils auch zur Hardware finden sich [http://www.mikrocontroller.net/topic/86889 in diesem Thread].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Bei den Sammelbestellungen wurde jeweils die Version von [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb] bestellt, bei der der USB-Anschluss direkt integriert ist. Wird dieser nicht benötigt, so werden die entsprechenden Teile einfach nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
Es wurden einige Veränderungen und Korrekturen am Layout durchgeführt, die jedoch teils rein optischer Natur sind. Diese überarbeitete Version ist [http://www.mikrocontroller.net/wikifiles/a/ac/Minila%26usb-v1.zip hier] zu finden. Details zu den Änderungen können in der enthaltenen &amp;quot;README2_v1.txt&amp;quot; nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan wurde mit [http://www.mikrocontroller.net/articles/Schaltplaneditoren#TinyCAD TinyCAD] und das Layout mit [http://www.freepcb.com FreePCB] erstellt.&lt;br /&gt;
&lt;br /&gt;
=== Bauteile ===&lt;br /&gt;
Leider ist es nicht ganz einfach an einige der Bauteile zu kommen.&lt;br /&gt;
&lt;br /&gt;
Bei den ersten beiden Sammelbestellungen wurden die Bauteile aus folgenden Quellen bezogen:&lt;br /&gt;
* Hühnerfutter für o.g. Version inkl. LPT (ohne USB): [http://www.reichelt.de/?ACTION=20;AWKID=44322;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* Hühnerfutter inkl. LPT &amp;amp; USB: [http://www.reichelt.de/?ACTION=20;AWKID=45435;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* SRAM (Samsung K7B803625B-PI65): http://www.ebv.com (Gewerbe nötig)&lt;br /&gt;
* Restliche Teile: [http://www.mikrocontroller.net/wikifiles/5/58/Minila-parts.zip Link-Liste] oder Suche über http://www.digikey.de&lt;br /&gt;
&lt;br /&gt;
Die beiden Reichelt-Warenkörbe sind unter Umständen nicht mehr ganz aktuell und sollten deswegen unbedingt mit der Stückliste abgeglichen werden. Bitte ggf. hier auf Fehler bei den Warenkörben hinweisen oder [http://www.mikrocontroller.net/user/show/kichi Michael K.] diesbezüglich benachrichtigen!&lt;br /&gt;
&lt;br /&gt;
Bei der Bauteil-Auswahl gibt es nicht sehr viel zu beachten, lediglich CPLD, SRAM und der Multiplexer sind etwas kritischer. Beim CPLD muss es sich um einen Typ mit Speed-Grade 6 handeln (XC95288XL-6..., TQFP144), zur Auswahl von SRAM und HC4053 gibt es ein paar Anmerkungen in der &amp;quot;mlaUSBbom_v1.txt&amp;quot; und in der &amp;quot;README2_v1.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bzgl. SRAM wurde seinerzeit nach passenden Alternativen zum ursprünglich verwendeten Alliance AS7C33128PFS32A gesucht und die Ergebnisse in eine [http://www.mikrocontroller.net/attachment/30530/sram3.xls Excel-Liste] eingetragen. Auf Vollständigkeit, Richtigkeit und Aktualität kann es jedoch leider keine Garantie geben.&lt;br /&gt;
&lt;br /&gt;
Folgende SRAMs wurden bereits erfolgreich eingesetzt:&lt;br /&gt;
*K7B803625B-PI65&lt;br /&gt;
*CY7C1361B-133AC&lt;br /&gt;
*IS64LF12832A-7 (lt. miniLA-Entwickler)&lt;br /&gt;
&lt;br /&gt;
Die wichtigen Kriterien beim SRAM sind:&lt;br /&gt;
*Pin-Kompatibilität&lt;br /&gt;
*Größe &amp;gt;= 128k&lt;br /&gt;
*Datenbreite &amp;gt;= 32bits&lt;br /&gt;
*Flow-Through-Modus&lt;br /&gt;
*cycle time &amp;lt; 10ns&lt;br /&gt;
*data setup time &amp;lt;= 2ns&lt;br /&gt;
*data hold time &amp;lt;= 2ns&lt;br /&gt;
&lt;br /&gt;
=== Tastköpfe ===&lt;br /&gt;
[[Image:Probe_best_top.JPG|thumb|150px|right|Tastkopf Bestückseite (inkl. Flachbandkabel zum miniLA)]]&lt;br /&gt;
Als Schutz für den CPLD wurde eine Art Tastkopf entwickelt, der zwischen das zu messende Signal und den miniLA geschaltet wird. Dieser Tastkopf ist sehr einfach gehalten und besteht aus nur wenigen Bauteilen. Ein Tastkopf dient für 8 Kanäle, d.h. für alle 32 Kanäle werden 4 Stück benötigt. Die Schaltung wurde mittels TinyCAD und FreePCB entwickelt und die Daten dazu finden sich [http://www.mikrocontroller.net/wikifiles/3/34/Probe_244dil.zip hier].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Hinweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
* R9 bis R16 dienen zur Terminierung und können überbrückt werden, da sich auf der Hauptplatine ebenfalls Serienwiderstände finden.&lt;br /&gt;
* R17 bis R24 dienen als Platzhalter falls eine Hysterese gewünscht sein sollte. Auf jeden Fall sollen hier &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; 47Ohm-Widerstände bestückt werden, sondern welche im 10k- bis 100k-Bereich.&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
Zum Betreiben des miniLA wird zusätzlich zu den, in der Stückliste aufgeführten Bauteilen&lt;br /&gt;
* ein USB-Kabel (A- auf B-Stecker, wie bei Druckern) oder ein LPT-Kabel&lt;br /&gt;
* ein Netzteil (~5V / ~700mA)&lt;br /&gt;
benötigt.&lt;br /&gt;
&lt;br /&gt;
== Firmware / Software ==&lt;br /&gt;
Als Firmware und Software kommen die Original-Versionen der Projekt-Seite zum Einsatz. Desweiteren gibt es bzgl. der PC-Software einen Beitrag [http://www.mikrocontroller.net/topic/93848 in der Codesammlung].&lt;br /&gt;
&lt;br /&gt;
Zur [http://www.mikrocontroller.net/articles/Programmierbare_Logik#Konfiguration_.28Download.29_Xilinx Programmierung] des [http://www.mikrocontroller.net/articles/CPLD CPLD] wird ein Xilinx-JTAG-Programmer benötigt, welcher sehr einfach nachgebaut werden kann - leider nur für den Parallel-Port. Die Original-Version von Xilinx, auf die von der miniLA-Seite aus verwiesen wird, ist allerdings nur eingeschränkt zu empfehlen, da einige Nutzer Probleme damit haben/hatten. [http://www.geocities.com/jacquesmartini/digital/schematic/Parallel_Cable_III.png Martiniman&#039;s Version] sollte besser und zuverlässiger sein. Schaltplan und Layout dieser Version für Eagle können [http://www.mikrocontroller.net/wikifiles/8/88/Xilinx_programmer.zip hier] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
Nachfolgend eine Zusammenfassung der relevanten Links und Daten:&lt;br /&gt;
* [http://minila.sourceforge.net Projekt-Seite]&lt;br /&gt;
* [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb&#039;s Version (Basis der Sammelbestellungen)]&lt;br /&gt;
* [http://www.mikrocontroller.net/wikifiles/a/ac/Minila%26usb-v1.zip Überarbeitete Version davon (inkl. Stückliste)]&lt;br /&gt;
* [http://www.mikrocontroller.net/wikifiles/8/88/Xilinx_programmer.zip Eagle-Projekt für martiniman&#039;s Programmer]&lt;br /&gt;
* [http://www.mikrocontroller.net/wikifiles/3/34/Probe_244dil.zip Daten der Tastköpfe (inkl. Stückliste)]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/86889 Diskussion zu den Sammelbestellungen]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/93848 Diskussion zur PC-Software]&lt;br /&gt;
Und noch ein paar allgemeine Links zum Thema Logic Analyzer:&lt;br /&gt;
* Artikel: [http://www.mikrocontroller.net/articles/Logic_Analyzer Logic Analyzer]&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
* Ggf. eine kleine Anleitung zum Programmieren des CPLDs schreiben&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]] [[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=34841</id>
		<title>MiniLA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=34841"/>
		<updated>2009-03-08T10:25:45Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Minila_best_top.jpg|thumb|300px|right]]&lt;br /&gt;
[[Image:Minila_best_bot.jpg|thumb|300px|right]]&lt;br /&gt;
&#039;&#039;von Michael K.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Diese Seite soll eine Art Informationssammlung zum Open-Source-Logic-Analyzer &amp;quot;miniLA&amp;quot; werden um potentielle &amp;quot;Nachbauer&amp;quot; zu unterstützen. Die zugehörigen Threads im Forum sind inzwischen sehr umfangreich und dadurch leider auch etwas unübersichtlich geworden.&lt;br /&gt;
&lt;br /&gt;
Die Features das Gerätes sind auf der [http://minila.sourceforge.net Projekt-Homepage] zu finden.&lt;br /&gt;
&lt;br /&gt;
Es gab hier im Forum zwei Sammelbestellungen zur Platine und den nötigen Bauteilen. Die erste fand Anfang 2008, die andere im Herbst 2008 statt. Zur Zeit (19.02.09) ist eine dritte Sammelbestellung in Vorbereitung. Details zu den Bestellungen und teils auch zur Hardware finden sich [http://www.mikrocontroller.net/topic/86889 in diesem Thread].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Bei den Sammelbestellungen wurde jeweils die Version von [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb] bestellt, bei der der USB-Anschluss direkt integriert ist. Wird dieser nicht benötigt, so werden die entsprechenden Teile einfach nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
Es wurden einige Veränderungen und Korrekturen am Layout durchgeführt, die jedoch teils rein optischer Natur sind. Diese überarbeitete Version ist [http://www.mikrocontroller.net/wikifiles/a/ac/Minila%26usb-v1.zip hier] zu finden. Details zu den Änderungen können in der enthaltenen &amp;quot;README2_v1.txt&amp;quot; nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan wurde mit [http://www.mikrocontroller.net/articles/Schaltplaneditoren#TinyCAD TinyCAD] und das Layout mit [http://www.freepcb.com FreePCB] erstellt.&lt;br /&gt;
&lt;br /&gt;
=== Bauteile ===&lt;br /&gt;
Leider ist es nicht ganz einfach an einige der Bauteile zu kommen.&lt;br /&gt;
&lt;br /&gt;
Bei den ersten beiden Sammelbestellungen wurden die Bauteile aus folgenden Quellen bezogen:&lt;br /&gt;
* Hühnerfutter für o.g. Version inkl. LPT (ohne USB): [http://www.reichelt.de/?ACTION=20;AWKID=44322;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* Hühnerfutter inkl. LPT &amp;amp; USB: [http://www.reichelt.de/?ACTION=20;AWKID=45435;PROVID=2084 Reichelt-Warenkorb]&lt;br /&gt;
* SRAM (Samsung K7B803625B-PI65): http://www.ebv.com (Gewerbe nötig)&lt;br /&gt;
* Restliche Teile: [http://www.mikrocontroller.net/wikifiles/5/58/Minila-parts.zip Link-Liste] oder Suche über http://www.digikey.de&lt;br /&gt;
&lt;br /&gt;
Die beiden Reichelt-Warenkörbe sind unter Umständen nicht mehr ganz aktuell und sollten deswegen unbedingt mit der Stückliste abgeglichen werden. Bitte ggf. hier auf Fehler bei den Warenkörben hinweisen oder [http://www.mikrocontroller.net/user/show/kichi Michael K.] diesbezüglich benachrichtigen!&lt;br /&gt;
&lt;br /&gt;
Bei der Bauteil-Auswahl gibt es nicht sehr viel zu beachten, lediglich CPLD, SRAM und der Multiplexer sind etwas kritischer. Beim CPLD muss es sich um einen Typ mit Speed-Grade 6 handeln (XC95288XL-6..., TQFP144), zur Auswahl von SRAM und HC4053 gibt es ein paar Anmerkungen in der &amp;quot;mlaUSBbom_v1.txt&amp;quot; und in der &amp;quot;README2_v1.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bzgl. SRAM wurde seinerzeit nach passenden Alternativen zum ursprünglich verwendeten Alliance AS7C33128PFS32A gesucht und die Ergebnisse in eine [http://www.mikrocontroller.net/attachment/30530/sram3.xls Excel-Liste] eingetragen. Auf Vollständigkeit, Richtigkeit und Aktualität kann es jedoch leider keine Garantie geben.&lt;br /&gt;
&lt;br /&gt;
Folgende SRAMs wurden bereits erfolgreich eingesetzt:&lt;br /&gt;
*K7B803625B-PI65&lt;br /&gt;
*CY7C1361B-133AC&lt;br /&gt;
*IS64LF12832A-7 (lt. miniLA-Entwickler)&lt;br /&gt;
&lt;br /&gt;
Die wichtigen Kriterien beim SRAM sind:&lt;br /&gt;
*Pin-Kompatibilität&lt;br /&gt;
*Größe &amp;gt;= 128k&lt;br /&gt;
*Datenbreite &amp;gt;= 32bits&lt;br /&gt;
*Flow-Through-Modus&lt;br /&gt;
*cycle time &amp;lt; 10ns&lt;br /&gt;
*data setup time &amp;lt;= 2ns&lt;br /&gt;
*data hold time &amp;lt;= 2ns&lt;br /&gt;
&lt;br /&gt;
=== Tastköpfe ===&lt;br /&gt;
[[Image:Probe_best_top.JPG|thumb|150px|right]]&lt;br /&gt;
Als Schutz für den CPLD wurde eine Art Tastkopf entwickelt, der zwischen das zu messende Signal und den miniLA geschaltet wird. Dieser Tastkopf ist sehr einfach gehalten und besteht aus nur wenigen Bauteilen. Ein Tastkopf dient für 8 Kanäle, d.h. für alle 32 Kanäle werden 4 Stück benötigt. Die Schaltung wurde mittels TinyCAD und FreePCB entwickelt und die Daten dazu finden sich [http://www.mikrocontroller.net/wikifiles/3/34/Probe_244dil.zip hier].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Hinweise:&amp;lt;/u&amp;gt;&lt;br /&gt;
* R9 bis R16 dienen zur Terminierung und können überbrückt werden, da sich auf der Hauptplatine ebenfalls Serienwiderstände finden.&lt;br /&gt;
* R17 bis R24 dienen als Platzhalter falls eine Hysterese gewünscht sein sollte. Auf jeden Fall sollen hier &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; 47Ohm-Widerstände bestückt werden, sondern welche im 10k- bis 100k-Bereich.&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
Zum Betreiben des miniLA wird zusätzlich zu den, in der Stückliste aufgeführten Bauteilen&lt;br /&gt;
* ein USB-Kabel (A- auf B-Stecker, wie bei Druckern) oder ein LPT-Kabel&lt;br /&gt;
* ein Netzteil (~5V / ~700mA)&lt;br /&gt;
benötigt.&lt;br /&gt;
&lt;br /&gt;
== Firmware / Software ==&lt;br /&gt;
Als Firmware und Software kommen die Original-Versionen der Projekt-Seite zum Einsatz. Desweiteren gibt es bzgl. der PC-Software einen Beitrag [http://www.mikrocontroller.net/topic/93848 in der Codesammlung].&lt;br /&gt;
&lt;br /&gt;
Zur [http://www.mikrocontroller.net/articles/Programmierbare_Logik#Konfiguration_.28Download.29_Xilinx Programmierung] des [http://www.mikrocontroller.net/articles/CPLD CPLD] wird ein Xilinx-JTAG-Programmer benötigt, welcher sehr einfach nachgebaut werden kann - leider nur für den Parallel-Port. Die Original-Version von Xilinx, auf die von der miniLA-Seite aus verwiesen wird, ist allerdings nur eingeschränkt zu empfehlen, da einige Nutzer Probleme damit haben/hatten. [http://www.geocities.com/jacquesmartini/digital/schematic/Parallel_Cable_III.png Martiniman&#039;s Version] sollte besser und zuverlässiger sein. Schaltplan und Layout dieser Version für Eagle können [http://www.mikrocontroller.net/wikifiles/8/88/Xilinx_programmer.zip hier] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
Nachfolgend eine Zusammenfassung der relevanten Links und Daten:&lt;br /&gt;
* [http://minila.sourceforge.net Projekt-Seite]&lt;br /&gt;
* [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb&#039;s Version (Basis der Sammelbestellungen)]&lt;br /&gt;
* [http://www.mikrocontroller.net/wikifiles/a/ac/Minila%26usb-v1.zip Überarbeitete Version davon (inkl. Stückliste)]&lt;br /&gt;
* [http://www.mikrocontroller.net/wikifiles/8/88/Xilinx_programmer.zip Eagle-Projekt für martiniman&#039;s Programmer]&lt;br /&gt;
* [http://www.mikrocontroller.net/wikifiles/3/34/Probe_244dil.zip Daten der Tastköpfe (inkl. Stückliste)]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/86889 Diskussion zu den Sammelbestellungen]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/93848 Diskussion zur PC-Software]&lt;br /&gt;
Und noch ein paar allgemeine Links zum Thema Logic Analyzer:&lt;br /&gt;
* Artikel: [http://www.mikrocontroller.net/articles/Logic_Analyzer Logic Analyzer]&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
* Ggf. eine kleine Anleitung zum Programmieren des CPLDs schreiben&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]] [[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Minila-parts.zip&amp;diff=34840</id>
		<title>Datei:Minila-parts.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Minila-parts.zip&amp;diff=34840"/>
		<updated>2009-03-08T10:17:56Z</updated>

		<summary type="html">&lt;p&gt;Kichi: Linklist to miniLA-parts at Digikey&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Linklist to miniLA-parts at Digikey&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Probe_best_top.JPG&amp;diff=34839</id>
		<title>Datei:Probe best top.JPG</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Probe_best_top.JPG&amp;diff=34839"/>
		<updated>2009-03-08T10:12:41Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Probe_244dil.zip&amp;diff=34838</id>
		<title>Datei:Probe 244dil.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Probe_244dil.zip&amp;diff=34838"/>
		<updated>2009-03-08T09:50:05Z</updated>

		<summary type="html">&lt;p&gt;Kichi: probe for miniLA&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;probe for miniLA&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=34509</id>
		<title>MiniLA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=34509"/>
		<updated>2009-02-19T16:38:59Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Minila_best_top.jpg|thumb|300px|right]]&lt;br /&gt;
[[Image:Minila_best_bot.jpg|thumb|300px|right]]&lt;br /&gt;
&#039;&#039;von Michael K.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Diese Seite soll eine Art Informationssammlung zum Open-Source-Logic-Analyzer &amp;quot;miniLA&amp;quot; werden um potentielle &amp;quot;Nachbauer&amp;quot; zu unterstützen. Die zugehörigen Threads im Forum sind inzwischen sehr umfangreich und dadurch leider auch etwas unübersichtlich geworden.&lt;br /&gt;
&lt;br /&gt;
Die Features das Gerätes sind auf der [http://minila.sourceforge.net Projekt-Homepage] zu finden.&lt;br /&gt;
&lt;br /&gt;
Es gab hier im Forum zwei Sammelbestellungen zur Platine und den nötigen Bauteilen. Die erste fand Anfang 2008, die andere im Herbst 2008 statt. Zur Zeit (19.02.09) ist eine dritte Sammelbestellung in Vorbereitung. Details zu den Bestellungen und teils auch zur Hardware finden sich [http://www.mikrocontroller.net/topic/86889 in diesem Thread].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Bei den Sammelbestellungen wurde jeweils die Version von [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb] bestellt, bei der der USB-Anschluss direkt integriert ist. Wird dieser nicht benötigt, so werden die entsprechenden Teile einfach nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
Es wurden einige Veränderungen und Korrekturen am Layout durchgeführt, die jedoch teils rein optischer Natur sind. Diese überarbeitete Version ist [http://www.mikrocontroller.net/wikifiles/a/ac/Minila%26usb-v1.zip hier] zu finden. Details zu den Änderungen können in der enthaltenen &amp;quot;README2_v1.txt&amp;quot; nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan wurde mit [http://www.mikrocontroller.net/articles/Schaltplaneditoren#TinyCAD TinyCAD] und das Layout mit [http://www.freepcb.com FreePCB] erstellt.&lt;br /&gt;
&lt;br /&gt;
=== Bauteile ===&lt;br /&gt;
Leider ist es nicht ganz einfach an einige der Bauteile zu kommen.&lt;br /&gt;
&lt;br /&gt;
Bei den ersten beiden Sammelbestellungen wurden die Bauteile aus folgenden Quellen bezogen:&lt;br /&gt;
* Hühnerfutter für o.g. Version inkl. LPT: http://www.reichelt.de/?ACTION=20;AWKID=44322;PROVID=2084&lt;br /&gt;
* Hühnerfutter inkl. LPT &amp;amp; USB: http://www.reichelt.de/?ACTION=20;AWKID=45435;PROVID=2084&lt;br /&gt;
* SRAM (Samsung K7B803625B-PI65): http://www.ebv.com (Gewerbe nötig)&lt;br /&gt;
* Restliche Teile: http://www.digikey.de&lt;br /&gt;
&lt;br /&gt;
Die beiden Reichelt-Warenkörbe sind unter Umständen nicht mehr ganz aktuell und sollten deswegen unbedingt mit der Stückliste abgeglichen werden. Bitte ggf. hier auf Fehler bei den Warenkörben hinweisen oder [http://www.mikrocontroller.net/user/show/kichi Michael K.] diesbezüglich benachrichtigen!&lt;br /&gt;
&lt;br /&gt;
Bei der Bauteil-Auswahl gibt es nicht sehr viel zu beachten, lediglich CPLD, SRAM und der Multiplexer sind etwas kritischer. Beim CPLD muss es sich um einen Typ mit Speed-Grade 6 handeln (XC95288XL-6..., TQFP144), zur Auswahl von SRAM und HC4053 gibt es ein paar Anmerkungen in der &amp;quot;mlaUSBbom_v1.txt&amp;quot; und in der &amp;quot;README2_v1.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bzgl. SRAM wurde seinerzeit nach passenden Alternativen zum ursprünglich verwendeten Alliance AS7C33128PFS32A gesucht und die Ergebnisse in eine [http://www.mikrocontroller.net/attachment/30530/sram3.xls Excel-Liste] eingetragen. Auf Vollständigkeit, Richtigkeit und Aktualität kann es jedoch leider keine Garantie geben.&lt;br /&gt;
&lt;br /&gt;
Folgende SRAMs wurden bereits erfolgreich eingesetzt:&lt;br /&gt;
*K7B803625B-PI65&lt;br /&gt;
*CY7C1361B-133AC&lt;br /&gt;
*IS64LF12832A-7 (lt. miniLA-Entwickler)&lt;br /&gt;
&lt;br /&gt;
Die wichtigen Kriterien beim SRAM sind:&lt;br /&gt;
*Pin-Kompatibilität&lt;br /&gt;
*Größe (&amp;gt;= 128k)&lt;br /&gt;
*Datenbreite (&amp;gt;= 32bits)&lt;br /&gt;
*Flow-Through-Modus&lt;br /&gt;
*cycle time &amp;lt; 10ns&lt;br /&gt;
*data setup time &amp;lt;= 2ns&lt;br /&gt;
*data hold time &amp;lt;= 2ns&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
Zum Betreiben des miniLA wird zusätzlich zu den, in der Stückliste aufgeführten Bauteilen&lt;br /&gt;
* ein USB-Kabel (A- auf B-Stecker, wie bei Druckern) oder ein LPT-Kabel&lt;br /&gt;
* ein Netzteil (~5V / ~700mA)&lt;br /&gt;
benötigt.&lt;br /&gt;
&lt;br /&gt;
== Firmware / Software ==&lt;br /&gt;
Als Firmware und Software kommen die Original-Versionen der Projekt-Seite zum Einsatz. Desweiteren gibt es bzgl. der PC-Software einen Beitrag [http://www.mikrocontroller.net/topic/93848 in der Codesammlung].&lt;br /&gt;
&lt;br /&gt;
Zur [http://www.mikrocontroller.net/articles/Programmierbare_Logik#Konfiguration_.28Download.29_Xilinx Programmierung] des [http://www.mikrocontroller.net/articles/CPLD CPLD] wird ein Xilinx-JTAG-Programmer benötigt, welcher sehr einfach nachgebaut werden kann - leider nur für den Parallel-Port. Die Original-Version von Xilinx, auf die von der miniLA-Seite aus verwiesen wird, ist allerdings nur eingeschränkt zu empfehlen, da einige Nutzer Probleme damit haben/hatten. [http://www.geocities.com/jacquesmartini/digital/schematic/Parallel_Cable_III.png Martiniman&#039;s Version] sollte besser und zuverlässiger sein. Schaltplan und Layout dieser Version für Eagle können [http://www.mikrocontroller.net/wikifiles/8/88/Xilinx_programmer.zip hier] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
Nachfolgend eine Zusammenfassung der relevanten Links und Daten:&lt;br /&gt;
* [http://minila.sourceforge.net Projekt-Seite]&lt;br /&gt;
* [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb&#039;s Version (Basis der Sammelbestellungen)]&lt;br /&gt;
* [http://www.mikrocontroller.net/wikifiles/a/ac/Minila%26usb-v1.zip Überarbeitete Version davon (inkl. Stückliste)]&lt;br /&gt;
* [http://www.mikrocontroller.net/wikifiles/8/88/Xilinx_programmer.zip Eagle-Projekt für martiniman&#039;s Programmer]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/86889 Diskussion zu den Sammelbestellungen]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/93848 Diskussion zur PC-Software]&lt;br /&gt;
Und noch ein paar allgemeine Links zum Thema Logic Analyzer:&lt;br /&gt;
* Artikel: [http://www.mikrocontroller.net/articles/Logic_Analyzer Logic Analyzer]&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
* Informationen zu den &amp;quot;Tastköpfen&amp;quot; fehlen&lt;br /&gt;
* Ggf. eine kleine Anleitung zum Programmieren des CPLDs schreiben&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]] [[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=34488</id>
		<title>MiniLA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=34488"/>
		<updated>2009-02-18T19:08:05Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Minila_best_top.jpg|thumb|300px|right]]&lt;br /&gt;
[[Image:Minila_best_bot.jpg|thumb|300px|right]]&lt;br /&gt;
&#039;&#039;von Michael K.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Diese Seite soll eine Art Informationssammlung zum Open-Source-Logic-Analyzer &amp;quot;miniLA&amp;quot; werden um potentielle &amp;quot;Nachbauer&amp;quot; zu unterstützen. Die zugehörigen Threads im Forum sind inzwischen sehr umfangreich und dadurch leider auch etwas unübersichtlich geworden.&lt;br /&gt;
&lt;br /&gt;
Die Features das Gerätes sind auf der [http://minila.sourceforge.net Projekt-Homepage] zu finden.&lt;br /&gt;
&lt;br /&gt;
Es gab hier im Forum zwei Sammelbestellungen zur Platine und den nötigen Bauteilen. Die erste fand Anfang 2008, die andere im Herbst 2008 statt. Insgesamt sind dabei etwa 40 Teilesätze und 20 einzelne Platinen in Umlauf gelangt. Details zu den Bestellungen und teils auch zur Hardware finden sich im [http://www.mikrocontroller.net/topic/86889 Forum].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&#039;&#039;&#039;Allgemein&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei den Sammelbestellungen wurde jeweils die Version von [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb] bestellt, bei der der USB-Anschluss direkt integriert ist. Wird dieser nicht benötigt, so werden die entsprechenden Teile einfach nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
Es wurden einige Veränderungen und Korrekturen am Layout durchgeführt, die jedoch teils nur optischer Natur sind. Diese überarbeitete Version ist [http://www.mikrocontroller.net/wikifiles/a/ac/Minila%26usb-v1.zip hier] zu finden. Details zu den Änderungen können in der enthaltenen &amp;quot;README2_v1.txt&amp;quot; nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan wurde mit [http://www.mikrocontroller.net/articles/Schaltplaneditoren#TinyCAD TinyCAD] und das Layout mit [http://www.freepcb.com FreePCB] erstellt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Leider ist es nicht ganz einfach an die Bauteile zu kommen. Bei den Sammelbestellungen wurde das &amp;quot;Hühnerfutter&amp;quot; bei Reichelt, das SRAM bei EBV und die restlichen Teile bei Digikey bestellt.&lt;br /&gt;
&lt;br /&gt;
Bzgl. SRAM wurde seinerzeit nach passenden Typen gesucht und die Ergebnisse in eine [http://www.mikrocontroller.net/attachment/30530/sram3.xls Excel-Liste] eingetragen. Auf Vollständigkeit, Richtigkeit und Aktualität kann es jedoch leider keine Garantie geben.&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen für die Teile:&lt;br /&gt;
* Hühnerfutter für o.g. Version inkl. LPT: http://www.reichelt.de/?ACTION=20;AWKID=44322;PROVID=2084&lt;br /&gt;
* Hühnerfutter inkl. LPT &amp;amp; USB: http://www.reichelt.de/?ACTION=20;AWKID=45435;PROVID=2084&lt;br /&gt;
* SRAM (Samsung K7B803625B-PI65): http://www.ebv.com (Gewerbe nötig)&lt;br /&gt;
* Restliche Teile: http://www.digikey.de&lt;br /&gt;
&lt;br /&gt;
Die beiden Reichelt-Warenkörbe sind unter Umständen nicht mehr ganz aktuell und sollten deswegen unbedingt mit der Stückliste abgeglichen werden. Bitte ggf. hier auf Fehler bei den Warenkörben hinweisen oder [http://www.mikrocontroller.net/user/show/kichi Michael K.] diesbezüglich benachrichtigen!&lt;br /&gt;
&lt;br /&gt;
Bei der Bauteil-Auswahl gibt es nicht sehr viel zu beachten, lediglich CPLD, SRAM und der Multiplexer sind etwas kritischer. Beim CPLD muss es sich um einen Typ mit Speed-Grade 6 handeln (XC95288XL-6..., TQFP144). Zur Auswahl von SRAM und HC4053 gibt es ein paar Anmerkungen in der &amp;quot;mlaUSBbom_v1.txt&amp;quot; und in der &amp;quot;README2_v1.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bereits erfolgreich eingesetzte SRAMs:&lt;br /&gt;
*K7B803625B-PI65&lt;br /&gt;
*CY7C1361B-133AC&lt;br /&gt;
*IS64LF12832A-7 (lt. miniLA-Entwickler)&lt;br /&gt;
&lt;br /&gt;
Die wichtigen Kriterien beim SRAM sind:&lt;br /&gt;
*Pin-Kompatibilität&lt;br /&gt;
*Größe (&amp;gt;= 128k)&lt;br /&gt;
*Datenbreite (&amp;gt;= 32bits)&lt;br /&gt;
*Flow-Through-Modus&lt;br /&gt;
*cycle time &amp;lt; 10ns&lt;br /&gt;
*data setup time &amp;lt;= 2ns&lt;br /&gt;
*data hold time &amp;lt;= 2ns&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sonstiges&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zum Betreiben des miniLA wird zusätzlich zu den eigentlichen Bauteilen&lt;br /&gt;
* ein USB-Kabel (A- auf B-Stecker, wie bei Druckern) oder ein LPT-Kabel&lt;br /&gt;
* ein Netzteil (~5V / ~700mA)&lt;br /&gt;
benötigt.&lt;br /&gt;
&lt;br /&gt;
== Firmware / Software ==&lt;br /&gt;
Als Firmware und Software kommen die Original-Versionen der Projekt-Seite zum Einsatz. Desweiteren gibt es bzgl. der PC-Software einen Beitrag in der [http://www.mikrocontroller.net/topic/93848 Codesammlung].&lt;br /&gt;
&lt;br /&gt;
Zur [http://www.mikrocontroller.net/articles/Programmierbare_Logik#Konfiguration_.28Download.29_Xilinx Programmierung] des [http://www.mikrocontroller.net/articles/CPLD CPLD] wird ein Xilinx-JTAG-Programmer benötigt, welcher sehr einfach nachgebaut werden kann - leider nur für den Parallel-Port. Die Original-Version von Xilinx, auf die von der miniLA-Seite aus verwiesen wird, ist allerdings nur eingeschränkt zu empfehlen, da einige Nutzer Probleme damit haben/hatten. [http://www.geocities.com/jacquesmartini/digital/schematic/Parallel_Cable_III.png Martiniman&#039;s Version] sollte besser und zuverlässiger sein. Schaltplan und Layout dieser Version für Eagle können [http://www.mikrocontroller.net/wikifiles/8/88/Xilinx_programmer.zip hier] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
Nachfolgend eine Zusammenfassung der relevanten Links und Daten:&lt;br /&gt;
* Projekt-Seite: http://minila.sourceforge.net&lt;br /&gt;
* Bob Grieb&#039;s Version (Basis der Sammelbestellungen): http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw&lt;br /&gt;
* Überarbeitete Version davon (inkl. Stückliste): http://www.mikrocontroller.net/wikifiles/a/ac/Minila%26usb-v1.zip&lt;br /&gt;
* Eagle-Projekt für martiniman&#039;s Programmer: http://www.mikrocontroller.net/wikifiles/8/88/Xilinx_programmer.zip&lt;br /&gt;
* Diskussion zur Sammelbestellung: http://www.mikrocontroller.net/topic/86889&lt;br /&gt;
* Diskussion zur PC-Software: http://www.mikrocontroller.net/topic/93848&lt;br /&gt;
Und noch ein paar allgemeine Links zum Thema Logic Analyzer:&lt;br /&gt;
* Artikel: [http://www.mikrocontroller.net/articles/Logic_Analyzer Logic Analyzer]&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
* Informationen zu den &amp;quot;Tastköpfen&amp;quot; fehlen&lt;br /&gt;
* Ggf. eine kleine Anleitung zum Programmieren des CPLDs schreiben&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]] [[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=34443</id>
		<title>MiniLA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=34443"/>
		<updated>2009-02-16T22:15:21Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Minila_best_top.jpg|thumb|300px|right]]&lt;br /&gt;
[[Image:Minila_best_bot.jpg|thumb|300px|right]]&lt;br /&gt;
&#039;&#039;von Michael K.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Diese Seite soll eine Art Informationssammlung zum Open-Source-Logic-Analyzer &amp;quot;miniLA&amp;quot; werden um potentielle &amp;quot;Nachbauer&amp;quot; zu unterstützen. Die zugehörigen Threads im Forum sind inzwischen sehr umfangreich und dadurch leider auch etwas unübersichtlich geworden.&lt;br /&gt;
&lt;br /&gt;
Die Features das Gerätes sind auf der [http://minila.sourceforge.net Projekt-Homepage] zu finden.&lt;br /&gt;
&lt;br /&gt;
Es gab hier im Forum zwei Sammelbestellungen zur Platine und den nötigen Bauteilen. Die erste fand Anfang 2008, die andere im Herbst 2008 statt. Insgesamt sind dabei etwa 40 Teilesätze und 20 einzelne Platinen in Umlauf gelangt. Details zu den Bestellungen und teils auch zur Hardware finden sich im [http://www.mikrocontroller.net/topic/86889 Forum].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&#039;&#039;&#039;Allgemein&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei den Sammelbestellungen wurde jeweils die Version von [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb] bestellt, bei der der USB-Anschluss direkt integriert ist. Wird dieser nicht benötigt, so werden die entsprechenden Teile einfach nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
Es wurden einige Veränderungen und Korrekturen am Layout durchgeführt, die jedoch teils nur optischer Natur sind. Diese überarbeitete Version ist [http://www.mikrocontroller.net/wikifiles/a/ac/Minila%26usb-v1.zip hier] zu finden. Details zu den Änderungen können in der enthaltenen &amp;quot;README2_v1.txt&amp;quot; nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan wurde mit [http://www.mikrocontroller.net/articles/Schaltplaneditoren#TinyCAD TinyCAD] und das Layout mit [http://www.freepcb.com FreePCB] erstellt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Leider ist es nicht ganz einfach an die Bauteile zu kommen. Bei den Sammelbestellungen wurde das &amp;quot;Hühnerfutter&amp;quot; bei Reichelt, das SRAM bei EBV und die restlichen Teile bei Digikey bestellt.&lt;br /&gt;
&lt;br /&gt;
Bzgl. SRAM wurde seinerzeit nach passenden Typen gesucht und die Ergebnisse in eine [http://www.mikrocontroller.net/attachment/30530/sram3.xls Excel-Liste] eingetragen. Auf Vollständigkeit, Richtigkeit und Aktualität kann es jedoch leider keine Garantie geben.&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen für die Teile:&lt;br /&gt;
* Hühnerfutter für o.g. Version inkl. LPT: http://www.reichelt.de/?ACTION=20;AWKID=44322;PROVID=2084&lt;br /&gt;
* Hühnerfutter inkl. LPT &amp;amp; USB: http://www.reichelt.de/?ACTION=20;AWKID=45435;PROVID=2084&lt;br /&gt;
* SRAM (Samsung K7B803625B-PI65): http://www.ebv.com (Gewerbe nötig)&lt;br /&gt;
* Restliche Teile: http://www.digikey.de&lt;br /&gt;
&lt;br /&gt;
Die beiden Reichelt-Warenkörbe sind unter Umständen nicht mehr ganz aktuell und sollten deswegen unbedingt mit der Stückliste abgeglichen werden. Bitte ggf. hier auf Fehler bei den Warenkörben hinweisen oder [http://www.mikrocontroller.net/user/show/kichi Michael K.] diesbezüglich benachrichtigen!&lt;br /&gt;
&lt;br /&gt;
Bei der Bauteil-Auswahl gibt es nicht sehr viel zu beachten, lediglich CPLD, SRAM und der Multiplexer sind etwas kritischer. Beim CPLD muss es sich um einen Typ mit Speed-Grade 6 handeln (XC95288XL-6..., TQFP144). Zur Auswahl von SRAM und HC4053 gibt es ein paar Anmerkungen in der &amp;quot;mlaUSBbom_v1.txt&amp;quot; und in der &amp;quot;README2_v1.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bereits erfolgreich eingesetzte SRAMs:&lt;br /&gt;
*K7B803625B-PI65&lt;br /&gt;
*CY7C1361B-133AC&lt;br /&gt;
*IS64LF12832A-7 (lt. miniLA-Entwickler)&lt;br /&gt;
&lt;br /&gt;
Die wichtigen Kriterien beim SRAM sind:&lt;br /&gt;
*Pin-Kompatibilität&lt;br /&gt;
*Größe (&amp;gt;= 128k)&lt;br /&gt;
*Datenbreite (&amp;gt;= 32bits)&lt;br /&gt;
*Flow-Through-Modus&lt;br /&gt;
*cycle time &amp;lt; 10ns&lt;br /&gt;
*data setup time &amp;lt;= 2ns&lt;br /&gt;
*data hold time &amp;lt;= 2ns&lt;br /&gt;
&lt;br /&gt;
== Firmware / Software ==&lt;br /&gt;
Als Firmware und Software kommen die Original-Versionen der Projekt-Seite zum Einsatz. Desweiteren gibt es bzgl. der PC-Software einen Beitrag in der [http://www.mikrocontroller.net/topic/93848 Codesammlung].&lt;br /&gt;
&lt;br /&gt;
Zur [http://www.mikrocontroller.net/articles/Programmierbare_Logik#Konfiguration_.28Download.29_Xilinx Programmierung] des [http://www.mikrocontroller.net/articles/CPLD CPLD] wird ein Xilinx-JTAG-Programmer benötigt, welcher sehr einfach nachgebaut werden kann - leider nur für den Parallel-Port. Die Original-Version von Xilinx, auf die von der miniLA-Seite aus verwiesen wird, ist allerdings nur eingeschränkt zu empfehlen, da einige Nutzer Probleme damit haben/hatten. [http://www.geocities.com/jacquesmartini/digital/schematic/Parallel_Cable_III.png Martiniman&#039;s Version] sollte besser und zuverlässiger sein. Schaltplan und Layout dieser Version für Eagle können [http://www.mikrocontroller.net/wikifiles/8/88/Xilinx_programmer.zip hier] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
Nachfolgend eine Zusammenfassung der relevanten Links und Daten:&lt;br /&gt;
* Projekt-Seite: http://minila.sourceforge.net&lt;br /&gt;
* Bob Grieb&#039;s Version (Basis der Sammelbestellungen): http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw&lt;br /&gt;
* Überarbeitete Version davon (inkl. Stückliste): http://www.mikrocontroller.net/wikifiles/a/ac/Minila%26usb-v1.zip&lt;br /&gt;
* Eagle-Projekt für martiniman&#039;s Programmer: http://www.mikrocontroller.net/wikifiles/8/88/Xilinx_programmer.zip&lt;br /&gt;
* Diskussion zur Sammelbestellung: http://www.mikrocontroller.net/topic/86889&lt;br /&gt;
* Diskussion zur PC-Software: http://www.mikrocontroller.net/topic/93848&lt;br /&gt;
Und noch ein paar allgemeine Links zum Thema Logic Analyzer:&lt;br /&gt;
* Artikel: [http://www.mikrocontroller.net/articles/Logic_Analyzer Logic Analyzer]&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
* Informationen zu den &amp;quot;Tastköpfen&amp;quot; fehlen&lt;br /&gt;
* Ggf. eine kleine Anleitung zum Programmieren des CPLDs schreiben&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]] [[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=34390</id>
		<title>MiniLA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MiniLA&amp;diff=34390"/>
		<updated>2009-02-13T21:03:50Z</updated>

		<summary type="html">&lt;p&gt;Kichi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Minila_best_top.jpg|thumb|300px|right]]&lt;br /&gt;
[[Image:Minila_best_bot.jpg|thumb|300px|right]]&lt;br /&gt;
&#039;&#039;von Michael K.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Diese Seite soll eine Art Informationssammlung zum Open-Source-Logic-Analyzer &amp;quot;miniLA&amp;quot; werden um potentielle &amp;quot;Nachbauer&amp;quot; zu unterstützen. Die zugehörigen Threads im Forum sind inzwischen sehr umfangreich und dadurch leider auch etwas unübersichtlich geworden.&lt;br /&gt;
&lt;br /&gt;
Die Features das Gerätes sind auf der [http://minila.sourceforge.net Projekt-Homepage] zu finden.&lt;br /&gt;
&lt;br /&gt;
Es gab hier im Forum zwei Sammelbestellungen zur Platine und den nötigen Bauteilen. Die erste fand Anfang 2008, die andere im Herbst 2008 statt. Insgesamt sind dabei etwa 40 Teilesätze und 20 einzelne Platinen in Umlauf gelangt. Details zu den Bestellungen und teils auch zur Hardware finden sich im [http://www.mikrocontroller.net/topic/86889 Forum].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&#039;&#039;&#039;Allgemein&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei den Sammelbestellungen wurde jeweils die Version von [http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw Bob Grieb] bestellt, bei der der USB-Anschluss direkt integriert ist. Wird dieser nicht benötigt, so werden die entsprechenden Teile einfach nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
Es wurden einige Veränderungen und Korrekturen am Layout durchgeführt, die jedoch teils nur optischer Natur sind. Diese überarbeitete Version ist [http://www.mikrocontroller.net/wikifiles/a/ac/Minila%26usb-v1.zip hier] zu finden. Details zu den Änderungen können in der enthaltenen &amp;quot;README2_v1.txt&amp;quot; nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan wurde mit [http://www.mikrocontroller.net/articles/Schaltplaneditoren#TinyCAD TinyCAD] und das Layout mit [http://www.freepcb.com FreePCB] erstellt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Leider ist es nicht ganz einfach an die Bauteile zu kommen. Bei den Sammelbestellungen wurde das &amp;quot;Hühnerfutter&amp;quot; bei Reichelt, das SRAM bei EBV und die restlichen Teile bei Digikey bestellt.&lt;br /&gt;
&lt;br /&gt;
Bzgl. SRAM habe wurde seinerzeit nach passenden Typen gesucht und die Ergebnisse in eine [http://www.mikrocontroller.net/attachment/30530/sram3.xls Excel-Liste] eingetragen. Auf Vollständigkeit, Richtigkeit und Aktualität kann es jedoch leider keine Garantie geben.&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen für die Teile:&lt;br /&gt;
* Hühnerfutter für o.g. Version inkl. LPT: http://www.reichelt.de/?ACTION=20;AWKID=44322;PROVID=2084&lt;br /&gt;
* Hühnerfutter inkl. LPT &amp;amp; USB: http://www.reichelt.de/?ACTION=20;AWKID=44322;PROVID=2084&lt;br /&gt;
* SRAM (Samsung K7B803625B-PI65): http://www.ebv.com (Gewerbe nötig)&lt;br /&gt;
* Restliche Teile: http://www.digikey.de&lt;br /&gt;
&lt;br /&gt;
Die beiden Reichelt-Warenkörbe sind unter Umständen nicht mehr ganz aktuell und sollten deswegen unbedingt mit der Stückliste (siehe ZIP-File oben bzw. unten) abgeglichen werden. Bitte ggf. hier auf Fehler bei den Warenkörben hinweisen oder [http://www.mikrocontroller.net/user/show/kichi Michael K.] diesbezüglich benachrichtigen!&lt;br /&gt;
&lt;br /&gt;
Bei der Bauteil-Auswahl gibt es nicht sehr viel zu beachten, lediglich CPLD, SRAM und der Multiplexer sind etwas kritischer. Beim CPLD muss es sich um einen Typ mit Speed-Grade 6 handeln (XC95288XL-6..., TQFP144). Zur Auswahl von SRAM und HC4053 gibt es ein paar Anmerkungen in der &amp;quot;mlaUSBbom_v1.txt&amp;quot; und in der &amp;quot;README2_v1.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bereits erfolgreich eingesetzte SRAMs:&lt;br /&gt;
*K7B803625B-PI65&lt;br /&gt;
*CY7C1361B-133AC&lt;br /&gt;
*IS64LF12832A-7 (lt. miniLA-Entwickler)&lt;br /&gt;
&lt;br /&gt;
Die wichtigen Kriterien beim SRAM sind:&lt;br /&gt;
*Pin-Kompatibilität, Größe (Kapazität), Datenbreite (&amp;gt;=32 bits)&lt;br /&gt;
*Flow-Through-Modus&lt;br /&gt;
*cycle time &amp;lt; 10ns&lt;br /&gt;
*data setup time &amp;lt;= 2ns&lt;br /&gt;
*data hold time &amp;lt;= 2ns&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Firmware / Software ==&lt;br /&gt;
Als Firmware und Software kommen die Original-Versionen der Projekt-Seite zum Einsatz. Desweiteren gibt es bzgl. der PC-Software einen Beitrag in der [http://www.mikrocontroller.net/topic/93848 Codesammlung].&lt;br /&gt;
&lt;br /&gt;
Zur [http://www.mikrocontroller.net/articles/Programmierbare_Logik#Konfiguration_.28Download.29_Xilinx Programmierung] des [http://www.mikrocontroller.net/articles/CPLD CPLD] wird ein Xilinx-JTAG-Programmer benötigt, welcher sehr einfach nachgebaut werden kann - leider nur für den Parallel-Port. Die Original-Version von Xilinx, auf die von der miniLA-Seite aus verwiesen wird, ist allerdings nur eingeschränkt zu empfehlen, da einige Nutzer Probleme damit haben/hatten. [http://www.geocities.com/jacquesmartini/digital/schematic/Parallel_Cable_III.png Martiniman&#039;s Version] sollte besser und zuverlässiger sein. Schaltplan und Layout dieser Version für Eagle können [http://www.mikrocontroller.net/wikifiles/8/88/Xilinx_programmer.zip hier] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
Nachfolgend eine Zusammenfassung der relevanten Links und Daten:&lt;br /&gt;
* Projekt-Seite: http://minila.sourceforge.net&lt;br /&gt;
* Bob Grieb&#039;s Version (Basis der Sammelbestellungen): http://minila.sourceforge.net/hw/other/bg/bg.php?id=hw&lt;br /&gt;
* Überarbeitete Version davon: http://www.mikrocontroller.net/wikifiles/a/ac/Minila%26usb-v1.zip&lt;br /&gt;
* Eagle-Projekt für martiniman&#039;s Programmer: http://www.mikrocontroller.net/wikifiles/8/88/Xilinx_programmer.zip&lt;br /&gt;
* Diskussion zur Sammelbestellung: http://www.mikrocontroller.net/topic/86889&lt;br /&gt;
* Diskussion zur PC-Software: http://www.mikrocontroller.net/topic/93848&lt;br /&gt;
Und noch ein paar allgemeine Links zum Thema Logic Analyzer:&lt;br /&gt;
* Artikel: [http://www.mikrocontroller.net/articles/Logic_Analyzer Logic Analyzer]&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
* Informationen zu den &amp;quot;Tastköpfen&amp;quot; fehlen&lt;br /&gt;
* Ggf. eine kleine Anleitung zum Programmieren des CPLDs schreiben&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]] [[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Kichi</name></author>
	</entry>
</feed>