<?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=Oliver+s</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=Oliver+s"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Oliver_s"/>
	<updated>2026-04-10T13:49:30Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=HD44780&amp;diff=96882</id>
		<title>HD44780</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=HD44780&amp;diff=96882"/>
		<updated>2017-07-29T06:45:23Z</updated>

		<summary type="html">&lt;p&gt;Oliver s: Link nicht mehr exsistent&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der HD44780 ist ein Steuer-IC für Textdisplays (siehe [[LCD]]). Praktisch alle Textdisplays werden mit diesem oder einem kompatiblen Controller (z.&amp;amp;nbsp;B. KS0066) angesteuert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Ansteuerung ==&lt;br /&gt;
&lt;br /&gt;
=== Pinbelegung ===&lt;br /&gt;
&lt;br /&gt;
Die Pinbelegung des ICs selber ist für den Anwender praktisch uninteressant. Hier ist die häufigste Anschluss-Belegung der damit ausgestatteten LCD-Module angegeben. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;ACHTUNG: Es gibt Displays mit abweichender Anschluss-Belegung, falscher Anschluss kann zur Zerstörung führen! Daher immer das zugehörige Datenblatt zu Rate ziehen.&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;width:5%&amp;quot; | Pin || style=&amp;quot;width:10%&amp;quot; | Funktion || Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|1 || | Vss || Versorgungsspannung    0 Volt&lt;br /&gt;
|-&lt;br /&gt;
|2 || | Vcc || Versorgungsspannung  + 5 Volt &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|3 || | V0 ||Kontrastspannung, zwischen VEE und VCC, kann auf VSS gelegt oder via Poti angeschlossen werden.&amp;lt;BR&amp;gt;Bei großflächigen LCDs oder LCDs für den erweiterten Temperaturbereich kann auch eine negative Kontrastspannung nötig sein. &lt;br /&gt;
|-&lt;br /&gt;
|4 || | RS || Registerauswahl&amp;lt;BR&amp;gt;0 = Befehlsregister, 1 = Datenregister &lt;br /&gt;
|-&lt;br /&gt;
|5 || | R/W || Lese- oder Schreibzugriff; kann fest auf GND gelegt werden, wenn Busy-Auswertung durch Timing ersetzt wird&amp;lt;BR&amp;gt;0 = Schreiben, 1 = Lesen &lt;br /&gt;
|-&lt;br /&gt;
|6 || | E || Taktleitung (Achtung! Diese Leitung hat im Gegensatz zu den anderen bei einigen Displays keinen internen Pullup, man muss also einen externen vorsehen, falls man mit Open-Drain-Ausgängen arbeitet.)&lt;br /&gt;
|-&lt;br /&gt;
|7 || | DB0 || Datenleitung (bleibt im 4-Bit-Modus offen)&lt;br /&gt;
|-&lt;br /&gt;
|8 || |DB1 || Datenleitung (bleibt im 4-Bit-Modus offen)&lt;br /&gt;
|-&lt;br /&gt;
|9 || |DB2 || Datenleitung (bleibt im 4-Bit-Modus offen)&lt;br /&gt;
|-&lt;br /&gt;
|10 || |DB3 || Datenleitung (bleibt im 4-Bit-Modus offen)&lt;br /&gt;
|-&lt;br /&gt;
|11 || |DB4 || Datenleitung&lt;br /&gt;
|-&lt;br /&gt;
|12 || |DB5 || Datenleitung&lt;br /&gt;
|-&lt;br /&gt;
|13 || |DB6 || Datenleitung&lt;br /&gt;
|-&lt;br /&gt;
|14 || |DB7 || Datenleitung&lt;br /&gt;
|-&lt;br /&gt;
|15 || A || Anode der LED-Hintergrundbeleuchtung (fakultativ)&lt;br /&gt;
|-&lt;br /&gt;
|16 || K || Kathode der LED-Hintergrundbeleuchtung (fakultativ)&lt;br /&gt;
|-&lt;br /&gt;
|   ||   || Es gibt auch Displays ohne die Datenleitungen DB0-3 (werden nur im 4-Bit-Modus angesteuert), dann rutschen die Bezeichnungen dann entsprechend nach unten&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Speicher===&lt;br /&gt;
&lt;br /&gt;
Ein HD44780 besitzt mehrere Speicher. In ihnen wird der Inhalt des Displays sowie das Aussehen von Sonderzeichen gespeichert.&lt;br /&gt;
&lt;br /&gt;
==== CGROM  ====&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;&#039;C&#039;&#039;&#039;haracter &#039;&#039;&#039;G&#039;&#039;&#039;enerator &#039;&#039;&#039;ROM&#039;&#039;&#039; enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. Er kann nicht geändert werden, ausser man sendet einen EEPROM zu Hitachi für eine Massenproduktion. Es sind viele verschiedene ROMs (Zeichensätze, engl. Fonts) verfügbar. Er ist für den Anwender nicht zugänglich.&lt;br /&gt;
&lt;br /&gt;
==== CGRAM ====&lt;br /&gt;
&lt;br /&gt;
Im &#039;&#039;&#039;C&#039;&#039;&#039;haracter &#039;&#039;&#039;G&#039;&#039;&#039;enerator &#039;&#039;&#039;RAM&#039;&#039;&#039; können acht 5x8 Pixel oder vier 5x10 Pixel große benutzerdefinierte Zeichen abgelegt werden. Braucht man keine benutzerdefinierten Zeichen, kann man diesen Bereich als Auslagerungsspeicher für den ansteuernden Mikrocontroller benutzen. Dazu muss aber die &#039;&#039;&#039;R/W&#039;&#039;&#039; Leitung angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
==== DDRAM ====&lt;br /&gt;
&lt;br /&gt;
Im &#039;&#039;&#039;D&#039;&#039;&#039;isplay &#039;&#039;&#039;D&#039;&#039;&#039;ata &#039;&#039;&#039;RAM&#039;&#039;&#039; ist der Inhalt des LCDs gespeichert. Die Kodierung orientiert sich weitestgehend am ASCII Zeichensatz.&lt;br /&gt;
&lt;br /&gt;
Das DDRAM hat üblicherweise mehr Speicherstellen als das Display gleichzeitig anzeigt. Durch Anwenden der Display-Shift-Befehle können die nicht sichtbaren Zeichen zur Anzeige gebracht werden.  &lt;br /&gt;
&lt;br /&gt;
Benachbarte Zeichen haben im DDRAM nicht zwangsweise auch aufeinanderfolgende Adressen. So ist etwa bei 1x16-Displays (1 Zeile, 16 Zeichen) oft in der Mitte des Displays ein Adresssprung von 0x07 auf 0x40; bei 2x16-Displays ist der Sprung auf 0x40 normalerweise (programmiererfreundlich) zwischen Ende der ersten und Beginn der zweiten Zeile. Näheres ist dem Datenblatt zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
=== Kommandos ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;HD44780 Befehlssatz&#039;&#039;&#039;&lt;br /&gt;
!style=&amp;quot;width:30%&amp;quot; | Befehl&lt;br /&gt;
!RS&lt;br /&gt;
!RW&lt;br /&gt;
!D7&lt;br /&gt;
!D6&lt;br /&gt;
!D5&lt;br /&gt;
!D4&lt;br /&gt;
!D3&lt;br /&gt;
!D2&lt;br /&gt;
!D1&lt;br /&gt;
!D0&lt;br /&gt;
|-&lt;br /&gt;
|Bildschirminhalt löschen&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|Cursor auf Startpos&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|X&lt;br /&gt;
|-&lt;br /&gt;
|Modus festlegen&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|-&lt;br /&gt;
|Display/Cursor &lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|-&lt;br /&gt;
|Cursor/Display schieben&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|X&lt;br /&gt;
|X&lt;br /&gt;
|-&lt;br /&gt;
|Funktionen&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|X&lt;br /&gt;
|X&lt;br /&gt;
|-&lt;br /&gt;
|CGRAM Adresse setzen&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan =&amp;quot;6&amp;quot; align=&amp;quot;center&amp;quot;|CGRAM-Adresse&lt;br /&gt;
|-&lt;br /&gt;
|DDRAM Adresse setzen&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=&amp;quot;7&amp;quot; align=&amp;quot;center&amp;quot;|DDRAM-Adresse&lt;br /&gt;
|-&lt;br /&gt;
|Adresse/Status lesen&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=&amp;quot;7&amp;quot; align=&amp;quot;center&amp;quot;|CG-/DDRAM-Adresse&lt;br /&gt;
|-&lt;br /&gt;
|Daten in DDRAM/CGRAM schreiben&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot;|Daten&lt;br /&gt;
|-&lt;br /&gt;
|Daten aus DDRAM/CGRAM lesen&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot;|Daten&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Kodierung der Steuerbits&#039;&#039;&#039;&lt;br /&gt;
!Bit&lt;br /&gt;
!0&lt;br /&gt;
!1&lt;br /&gt;
|-&lt;br /&gt;
|I/D  &lt;br /&gt;
|Cursorposition dekrementieren &lt;br /&gt;
|Cursorposition inkrementieren  &lt;br /&gt;
|-&lt;br /&gt;
|S&lt;br /&gt;
|Displayinhalt fest&lt;br /&gt;
|Displayinhalt weiterschieben&lt;br /&gt;
|-&lt;br /&gt;
|D&lt;br /&gt;
|Display aus&lt;br /&gt;
|Display an&lt;br /&gt;
|-&lt;br /&gt;
|C&lt;br /&gt;
|Cursor aus&lt;br /&gt;
|Cursor an&lt;br /&gt;
|-&lt;br /&gt;
|B&lt;br /&gt;
|Cursor blinkt nicht&lt;br /&gt;
|Cursor blinkt&lt;br /&gt;
|-&lt;br /&gt;
|S/C&lt;br /&gt;
|Cursor bewegen&lt;br /&gt;
|Displayinhalt schieben&lt;br /&gt;
|-&lt;br /&gt;
|R/L&lt;br /&gt;
|Nach links schieben&lt;br /&gt;
|Nach rechts schieben&lt;br /&gt;
|-&lt;br /&gt;
|DL&lt;br /&gt;
|4-Bit Interface&lt;br /&gt;
|8-Bit Interface&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|1-zeiliges Display&lt;br /&gt;
|2/4-zeiliges Display&lt;br /&gt;
|-&lt;br /&gt;
|F&lt;br /&gt;
|5&amp;amp;times;7-Font&lt;br /&gt;
|5&amp;amp;times;10-Font&lt;br /&gt;
|-&lt;br /&gt;
|BF&lt;br /&gt;
|Kann Kommandos annehmen&lt;br /&gt;
|Ist beschäftigt &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ansteuerung per Microcontroller ==&lt;br /&gt;
&lt;br /&gt;
Die Ansteuerung eines HD44780-basierten Displays gestaltet sich sowohl in Bezug auf den Hardware- als auch den Softwareaufwand recht einfach. Sie eignet sich somit sehr gut als Übungsprojekt für Anfänger.&lt;br /&gt;
&lt;br /&gt;
Das HD44780-Interface besteht aus acht Datenleitungen (D0-D7) sowie den drei Steuerleitungen RS (&#039;&#039;&#039;R&#039;&#039;&#039;egister &#039;&#039;&#039;S&#039;&#039;&#039;elect), R/W (&#039;&#039;&#039;R&#039;&#039;&#039;ead/&#039;&#039;&#039;W&#039;&#039;&#039;rite) und E (&#039;&#039;&#039;E&#039;&#039;&#039;nable). Die Displays werden mit 5V Betriebsspannung versorgt, die Kontrastspannung V0 bekommt man, indem man ein 10k&amp;amp;Omega;-[[Potentiometer]] zwischen VCC und GND anschließt und den mittleren Anschluss als Kontrastspannung verwendet. Bei ca. 0,5 Volt werden dann die Pixel sichtbar. Optional haben viele Displays noch eine LED-Beleuchtung eingebaut, diese kann manchmal direkt an 5V angeschlossen werden, da der Vorwiderstand auf der LCD-Platine integriert ist. Oft ist aber auch ein externer Vorwiderstand nötig! Darum vorher besser im Datenblatt nachschauen. &lt;br /&gt;
&lt;br /&gt;
Möchte man IO-Pins am Mikrocontroller sparen, kann das Display im 4-Bit-Modus betrieben werden, die Dateneingänge D0 bis D3 bleiben dann offen. Durch zusätzliche Bauteile ([[AVR-Tutorial:_Schieberegister]]) kann die Zahl der benötigten Port-Pins noch weiter reduziert werden.&lt;br /&gt;
&lt;br /&gt;
Beispielprogramme zur Ansteuerung findet man zuhauf im Internet, u.a. auch hier: [[AVR-Tutorial: LCD]] und [[AVR-GCC-Tutorial/LCD-Ansteuerung|AVR-GCC-Tutorial: LCD-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
=== Fertige Projekte oder Bibliotheken ===&lt;br /&gt;
&lt;br /&gt;
* Peter Fleurys [http://homepage.hispeed.ch/peterfleury/avr-software.html LCD library for HD44780 based LCDs]&lt;br /&gt;
* avr-libc [http://www.nongnu.org/avr-libc/user-manual/group__stdiodemo.html Demo-Projekt für stdio]&lt;br /&gt;
* [http://www.ipd.uka.de/~buchmann/microcontroller/lcd.htm Grundlagen und Code für 8051] von Erik Buchmann&lt;br /&gt;
* [http://www.ekenrooi.net/lcd/lcd.shtml &#039;&#039;How to control a HD44780-based Character-LCD&#039;&#039;] von Peter Ouwehand. Beispiele für 8051, PIC16C54, AT90S2313&lt;br /&gt;
* Firma wickenhäuser [http://www.wickenhaeuser.de 8051 Compiler und Treiber für LCDs ]&lt;br /&gt;
&lt;br /&gt;
== Sonderzeichen ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| \40  ! || \41  &amp;quot; || \42  # || \43  $ || \44  % || \45  &amp;amp; || \50  ( || \51  ) || \52  * || \53  Plus-Zeichen  &lt;br /&gt;
|-&lt;br /&gt;
| \54  Komma || \55  Minus-Zeichen || \56  Punkt || \57  Schrägstrich || \72  Doppelpunkt || \73  Semikolon || \74  &amp;lt; || \75  Gleichheitszeichen || \76  &amp;gt; || \77  ? &lt;br /&gt;
|-&lt;br /&gt;
| \100  @ || \134  eckige Klammer links || \136  eckige Klammer rechts || \137  accent circonflexe || \138  Unterstrich || \140  accent grave || \173  geschweifte Klammer links || \174  senkrechter Strich || \175  geschweifte Klammer rechts || \176  Pfeil nach rechts&lt;br /&gt;
|-&lt;br /&gt;
| \177  Pfeil nach links || \260  Minuszeichen || \333  Kastenrahmen || \337  hochgestellter Kastenrahmen(wie Potenz) || \340  gr. alpha || \341  ä || \342  ß || \343  klein epsilon || \344  µ || \350  Wurzelzeichen  &lt;br /&gt;
|-&lt;br /&gt;
| \351  hoch minus 1 || \353  hoch x || \356  n mit Oberstrich ( spanisch ) || \357  ö || \363  Zeichen unendlich || \364  Ohm || \365  ü || \366  gr.Summe || \367  pi ( klein ) || \371  u mit strich rechts unten&lt;br /&gt;
|-&lt;br /&gt;
| \375  geteilt durch || \377  alle Leuchtpunkte eingeschaltet || || || || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
=== Benutzerdefinierte Sonderzeichen  ===&lt;br /&gt;
* Benutzerspezifische Zeichen für den HD44780 mit dem [http://www.mugui.de/bin/menu.php?link=hd44780_demo&amp;amp;lang=de Font and Bitmap Generator] erstellen&lt;br /&gt;
* http://www.parallax.com/ProductInfo/Microcontrollers/BASICStampSoftware/LCDCharacterCreator/tabid/482/Default.aspx&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[AVR-GCC-Tutorial/LCD-Ansteuerung]]&lt;br /&gt;
* [[Erweiterte LCD-Ansteuerung]]&lt;br /&gt;
* [[Pseudo-Graphische LCD-Ansteuerung]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/316826#3431235 Forumsbeitrag]: Ermittlung der Startadresse der einzelnen Zeilen&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/387596?goto=4438017#4438017 Forumsbeitrag]: HD44780 Extender, transparente Serialisierung der Ansteuerung im 4 oder 8 Bit Modus&lt;br /&gt;
* [https://omerk.github.io/lcdchargen/ Custom Character Generator for HD44780 LCD Modules]&lt;br /&gt;
* [http://blog.riyas.org/2013/12/online-led-matrix-font-generator-with.html Online led matrix font generator with binary and hex codes for Arduino ]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.sprut.de/electronic/lcd/ Ausführliche Beschreibung des HD44780]&lt;br /&gt;
* [http://homepage.hispeed.ch/peterfleury/avr-software.html#libs Lib zur HD44780 Ansteuerung (AVR)]&lt;br /&gt;
* [http://pic-projekte.de/wordpress/?p=908 Ansteuern des HD44780 mit den XC8/C18-Libraries - PIC]&lt;br /&gt;
* [http://www.fonts2u.com/hd44780-regular.font TTF Matrix Pixel Font]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;br /&gt;
[[Category:Displays und Anzeigen]]&lt;br /&gt;
[[Category:LCD]]&lt;/div&gt;</summary>
		<author><name>Oliver s</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Versorgung_aus_einer_Zelle&amp;diff=94434</id>
		<title>Versorgung aus einer Zelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Versorgung_aus_einer_Zelle&amp;diff=94434"/>
		<updated>2016-11-25T19:56:45Z</updated>

		<summary type="html">&lt;p&gt;Oliver s: Link aktualisiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bei batteriebetriebenen Anwendungen stellt sich oft das Problem der Spannungsversorgung. Darauf soll hier näher eingegangen werden.&lt;br /&gt;
&lt;br /&gt;
== Erste Ideen ==&lt;br /&gt;
&lt;br /&gt;
=== 9V-Block mit Linearregler ===&lt;br /&gt;
&lt;br /&gt;
Die erste Idee ist, einen 9V-Block mit dahintergehängtem Linearregler à la 7805 zu verwenden. Dieser Ansatz ist einfach, er hat aber einen sehr schlechten Wirkungsgrad. Bei Abwärtsregelung auf 5V verbrät der Regler immerhin 45% =&amp;gt; 55% Wirkungsgrad, bei 3,3V verbrät er 64% =&amp;gt; nur noch 36% Wirkungsgrad), und auch der Platzbedarf auf der Leiterplatte ist erheblich. Angesichts dessen kann man schon fast vernachlässigen, dass der klassische 7805 ca. 5mA für sich selber braucht. Das ist meist mehr als ein Mikrocontroller! Diesbezüglich besser sind Low Power Linearregler wie z.&amp;amp;nbsp;B. der [http://www.national.com/mpf/LP/LP2950.html LP2950] (ca. 75&amp;amp;mu;A Eigenverbrauch) oder gar ein [http://focus.ti.com/docs/prod/folders/print/tps71501.html TPS715xx] von [http://www.ti.com Texas Instuments], der mit unglaublich geringen 3,2 &amp;amp;mu;A auskommt.&lt;br /&gt;
Statt des Linearreglers könnte man natürlich auch einen Step-Down-Schaltregler benutzen, dann hätte man zumindest einen besseren Wirkungsgrad von 80-90%. Last but not least ist die Energiedichte von 9V-Blocks im Verhältnis zu Mignonzellen eher gering.&lt;br /&gt;
&lt;br /&gt;
http://data.energizer.com/ (Auf Technical Info oben rechts klicken, dann die Batteriefamilie links auswählen, z.&amp;amp;nbsp;B. Alkaline)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;18%&amp;quot; | Batterietyp &lt;br /&gt;
! Volumen&amp;lt;BR&amp;gt;[cm³] &lt;br /&gt;
! Kapazität&amp;lt;BR&amp;gt;[mAh] &lt;br /&gt;
! mittlere&amp;lt;BR&amp;gt;Ausgangs-&amp;lt;BR&amp;gt;spannung [V] &lt;br /&gt;
! Energiegehalt&amp;lt;BR&amp;gt;[mWh] &lt;br /&gt;
! Energiedichte&amp;lt;BR&amp;gt;[mWh/cm³] &lt;br /&gt;
! Masse&amp;lt;BR&amp;gt;[g]&lt;br /&gt;
|-&lt;br /&gt;
|9V Alkaline&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 21,1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 625&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 7&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4375&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 207&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 45,6&lt;br /&gt;
|-&lt;br /&gt;
|Mono Alkaline [D]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 56&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20500&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1,3&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 26650&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 475&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 148&lt;br /&gt;
|-&lt;br /&gt;
|Baby Alkaline [C]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 26,9&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8350&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1,3&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10855&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 404&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 26,2&lt;br /&gt;
|-&lt;br /&gt;
|Mignon Alkaline [AA]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8,1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2850&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1,3&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3705&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 457&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 23&lt;br /&gt;
|-&lt;br /&gt;
|Micro Alkaline [AAA]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3,8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1250&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1,3&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1625&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 428&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 11,5&lt;br /&gt;
|-&lt;br /&gt;
|Lithiumzelle, 2032&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 240&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2,9&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 496&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 653&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
|-&lt;br /&gt;
|Lithium-Thionylchlorid [C]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 26.9&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8500&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3.6&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 28000&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1040&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 50&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vier Mignonzellen mit LowDrop-Linearregler ===&lt;br /&gt;
&lt;br /&gt;
Als weitere Möglichkeit wären vier Mignonzellen (leer 3,6V, voll 6V) mit nachgeschaltetem LowDrop-Linearregler zu verwenden. Wenn die Schaltung mit 3,3V auskommt, dann ist man mit dieser Möglichkeit bestens bedient. Die Batterien können bis zum Ende ausgenutzt werden und der Wirkungsgrad liegt bei ca. 75%.&lt;br /&gt;
Allerdings bleibt ein Nachteil, wenn man 5V braucht: Die Batterien werden nicht einmal annähernd geleert, weil sie bereits bei 1,25V pro Zelle zusammen gerade noch 5V ergeben, der Regler aber auch gern noch seinen Teil abhaben will (Dropout Voltage). Zu bedenken sind hierbei die Entladekennlinien von Batterien oder noch schlimmer, die von Akkus.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; id=&amp;quot;Versorgung_aus_einer_Zelle_LowDrop&amp;quot; &lt;br /&gt;
|+ &#039;&#039;&#039;Sparsame Spannungsregler&#039;&#039;&#039;&lt;br /&gt;
!Bezeichnung || Ausgangsspannung [V] || Stromverbrauch [µA] || DropOut [mV] @ 50/150/250mA || max. Strom [mA] || Lieferant&lt;br /&gt;
|-&lt;br /&gt;
|LP2950&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |3 / 3,3 / 5&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |75&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |380 / - / -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |160&lt;br /&gt;
| [[Elektronikversender#Reichelt | Rei]]&lt;br /&gt;
|-&lt;br /&gt;
|LF33&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |3,3&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |500&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |100 / 175 / 250&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |1000&lt;br /&gt;
| [[Elektronikversender#Reichelt | Rei]], [[Elektronikversender#IT-WNS | I]]&lt;br /&gt;
|-&lt;br /&gt;
|LF50&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |5&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |500&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |100 / 175 / 250&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |500-1000&lt;br /&gt;
| [[Elektronikversender#Reichelt | Rei]]&lt;br /&gt;
|-&lt;br /&gt;
|TPS715xx&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |1,2..5&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |3.2&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |415 / - / -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |50-500&lt;br /&gt;
| [[Elektronikversender#RS Components | RS]]&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.robotikhardware.de/download/tps78233.pdf TPS78233]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |3.3&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |0.42&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |130&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |150&lt;br /&gt;
| [[Elektronikversender#Robotikhardware | RH]]&lt;br /&gt;
|-&lt;br /&gt;
|MCP1702&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |1,2..5&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |2&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |15 / 40 / 650&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |200&lt;br /&gt;
| [[Elektronikversender#Reichelt | Rei]],[[Elektronikversender#IT-WNS | I]]&lt;br /&gt;
|-&lt;br /&gt;
|MCP1824&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |0,8..5&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |120&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |30 / 90 / 150&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |300&lt;br /&gt;
| [[Elektronikversender#RS Components | RS]]&lt;br /&gt;
|- &lt;br /&gt;
|ZLDO330&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |3,3&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |1000&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |20 / 50 / 85&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |300&lt;br /&gt;
| [[Elektronikversender#Reichelt | Rei]]&lt;br /&gt;
|- &lt;br /&gt;
|UCC283&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |3,3 5&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |650&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |80 (ca.) / 50mV@0,01A 200mV@1,5A 400mV@3A&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |3000&lt;br /&gt;
| [[Elektronikversender#RS_Components | RS]], [[Elektronikversender#Conrad | Con]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Drei Mignonzellen ohne Spannungsregler ===&lt;br /&gt;
&lt;br /&gt;
Die meisten modernen [[Mikrocontroller]] haben einen sehr breiten Versorgungsspannungsbereich, teilweise von 1,8V bis 5,5V. Daher können sie direkt mit drei in Reihe geschalteten Zellen betrieben werden. Während der Entladung sinkt die Betriebsspannung (3&amp;amp;times;0,8V = 2,4V), was der Mikrocontroller aber verkraftet, sofern er nicht mit maximalem Takt läuft. Wenn man keine weiteren ICs in der Schaltung benötigt oder diese ebenso tolerant bezüglich einer veränderlichen Versorgungsspannung sind, ist diese Methode die einfachste und günstigste (100% Wirkungsgrad). Vor allem wird bei [[Ultra low power | Low Power]] Anwendungen mit [[Sleep Mode]] kein Mikroampere für einen Spannungsregler verschwendet.&lt;br /&gt;
&lt;br /&gt;
=== Lithiumzelle ===&lt;br /&gt;
&lt;br /&gt;
Lithiumzellen haben eine sehr geringe Selbstentladung und eine hohe Spannung von typisch 3V. Damit kann man einen sparsamen Mikrocontroller betreiben. Meist werden diese Zellen für Echtzeituhren und zum Datenerhalt von RAMs genutzt, da hier nur sehr geringe Ströme im Mikroamperebereich benötigt werden. Darauf sind diese Zellen ausgelegt. Aus den meisten kann man nur einige mA entnehmen, bei 10mA und mehr sinkt die verfügbare Kapazität rapide.&lt;br /&gt;
&lt;br /&gt;
Um ein Gerät nur im Notfall mit einer Lithiumzelle zu betreiben (Pufferbetrieb, Netzausfallsicherung), braucht man eine unterbrechungsfreie Umschaltung zwischen Netzteilbetrieb und Batteriebetrieb. Kritisch ist das vor allem für die Lithiumzelle (damit ist kein Lithiumakku gemeint!), da diese nicht aufgeladen werden darf. Sie wird dabei mit heftiger Reaktion zerstört! Eine einfache Schaltung ist die Nutzung von zwei Schottkydioden zur Entkopplung von Batterie und Netzteil, wie es im Artikel &#039;&#039;Speicher&#039;&#039; über  [[Speicher#EEPROM_Schreibzugriffe_minimieren | EEPROM]] gezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Der Nachteil dieser Lösung ist der relativ hohe Spannungsabfall von 300..400mV über den Dioden. Besser ist der Einsatz eines P-Kanal MOSFETs zum Schalten der Batteriespannung. Dadurch kann der Spannungsabfall auf wenige Millivolt gesenkt werden. Die Schaltung dazu ist im diesem [http://www.mikrocontroller.net/topic/72275#591483 Beitrag] zu finden.&lt;br /&gt;
&lt;br /&gt;
== Bessere Lösungsansätze ==&lt;br /&gt;
&lt;br /&gt;
Wie man sehen kann, sind oben dargestellte Methoden nur bedingt zufriedenstellend. Vor allem der Platzbedarf dürfte ein k.-o.-Kriterium sein. Besser wäre es, nur eine oder zwei Zellen zu verwenden.&lt;br /&gt;
&lt;br /&gt;
=== Step-Down-Schaltregler (Abwärtsregler, Tiefsetzsteller) ===&lt;br /&gt;
&lt;br /&gt;
Falls die Batteriespannung auch am Ende der Entladung höher als die Versorgungsspannung ist, bieten sich Step-down Regler an.&lt;br /&gt;
* TPS62056 : U&amp;lt;sub&amp;gt;in&amp;lt;/sub&amp;gt; 2,7 .. 10 V, U&amp;lt;sub&amp;gt;out&amp;lt;/sub&amp;gt;=0,7 .. 6 V, 12 µA Eigenverbrauch, SMD-Gehäuse MSOP10&lt;br /&gt;
* TPS62202 : U&amp;lt;sub&amp;gt;in&amp;lt;/sub&amp;gt; 2,5 .. 6 V, U&amp;lt;sub&amp;gt;out&amp;lt;/sub&amp;gt; 1,8V, 12 µA Eigenverbrauch, SMD-Gehäuse SOT23-5&lt;br /&gt;
* OKI-78SR-xx : U&amp;lt;sub&amp;gt;in&amp;lt;/sub&amp;gt; 7 .. 36 V, U&amp;lt;sub&amp;gt;out&amp;lt;/sub&amp;gt; 3.3V/5V, Module mit Standard 78xx Anschluss.&lt;br /&gt;
&lt;br /&gt;
=== Step-Up-Schaltregler (Aufwärtsregler, Hochsetzsteller) ===&lt;br /&gt;
&lt;br /&gt;
Step-Up-Schaltregler bringen die Spannung, wie der Name schon sagt, &#039;einen Schritt nach oben&#039;. Ideal also, um aus 1,5V oder 3V z.&amp;amp;nbsp;B. 5V zu erzeugen. Desweiteren sind sie auch geeignet, um höhere Ströme (bis 0,5 A, je nach Aufbau und Spule) zu entnehmen. Das Arbeitsprinzip bei Step-Up-Schaltreglern ist immer gleich: Eine Spule wird ständig an- und abgeschaltet und durch Eigeninduktion eine höhere Spannung erzeugt. Um einen Step-Up-Schaltregler aufzubauen, gibt es verschiedene Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
==== ICs ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* zuverlässig&lt;br /&gt;
* meist wenig Außenbeschaltung nötig&lt;br /&gt;
* geringe Größe, auch der Spule, da hohe Schaltfrequenzen verwendet werden&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* teuer, vor allem die, welche ab 1V arbeiten&lt;br /&gt;
* teilweise schwer zu bekommen&lt;br /&gt;
* benötigen mehr Aufwand für Filterung und Schirmung als Linearregler.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Schaltregler-ICs&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 10%&amp;quot;| IC !! style=&amp;quot;width:*&amp;quot;| Bemerkung !! style=&amp;quot;width:7em&amp;quot;| Lieferant&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tranzistoare.ro/datasheets/2300/57048_DS.pdf LT1073-5] &lt;br /&gt;
| 1V (1 Zelle) auf 5V, 40mA&lt;br /&gt;
|-&lt;br /&gt;
| [http://cds.linear.com/docs/en/datasheet/1111fd.pdf LT1111]&lt;br /&gt;
| 2V-12V Step-Up, bis 30V Step-Down, 72kHz Schaltfrequenz, Bezeichnung  -5 und -12 mit fester Ausgangsspannung 5V bzw. 12V&lt;br /&gt;
| R&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.ortodoxism.ro/datasheets/lineartechnology/lt1301.pdf LT1301] &lt;br /&gt;
| 2V (2 Zellen) auf 5V oder 12V, 250mA &lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.ortodoxism.ro/datasheets/lineartechnology/lt1302.pdf LT1302] ||2V (2 Zellen) auf 5V oder 12V, 250mA &lt;br /&gt;
| C, R, RobHard&amp;lt;ref name=&amp;quot;plat_mod&amp;quot;&amp;gt;Platinen/ Module&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://cds.linear.com/docs/en/datasheet/3401fb.pdf LTC3401]  ||ziemlich geniales Teil, weil es mit hoher Schaltfrequenz arbeitet, dadurch kann eine kleine Spule verwendet und ein sehr hoher Wirkungsgrad erzielt werden. 0.5...5.5V Vin, 1,0V Startup-Voltage, 2,6...5,5V Vout, bis 1A&lt;br /&gt;
|-&lt;br /&gt;
| [http://cds.linear.com/docs/Datasheet/3429fa.pdf LTC3429]||0,5...4,4V Vin, 1,0V Startup-Voltage, 2,5...4,3V Vout, 100mA aus einer Zelle, 250mA aus zwei Zellen bei 3,3V Vout&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1003,C1042,C1031,C1060,P13393,D9338 LTC3525-5] ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://datasheets.maxim-ic.com/en/ds/MAX866-MAX867.pdf MAX866/MAX867] ||ziemlich geniales Teil, weil es mit hoher Schaltfrequenz arbeitet, ab 0.8V, bei 0.9V Start-Up-Voltage&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.maximintegrated.com/datasheet/index.mvp/id/1207] || wie MAX866/867 jedoch 85% Wirkungsgrad bei 100mA und 500kHz Schaltgeschwindigkeit&lt;br /&gt;
|-&lt;br /&gt;
| [http://datasheets.maxim-ic.com/en/ds/MAX1595.pdf MAX1595] || dito, benötigt lediglich 3 Kondensatoren als Außenbeschaltung&lt;br /&gt;
|-&lt;br /&gt;
| [http://datasheets.maxim-ic.com/en/ds/MAX1674-MAX1676.pdf MAX1674-1676] ||bis zu ein Ampere, bei einer Zelle ist aber bei 100mA Schluss, und das auch nur, wenn die Spannung beim &amp;quot;Hochfahren&amp;quot; höher war und die richtige Spule verwendet wird&lt;br /&gt;
|I (MAX1674)&lt;br /&gt;
|-&lt;br /&gt;
| [http://datasheets.maxim-ic.com/en/ds/MAX1759.pdf MAX1759] || noch ein Hochfrequenz-Teil&lt;br /&gt;
|-&lt;br /&gt;
| [http://datasheets.maxim-ic.com/en/ds/MAX1722-MAX1724.pdf MAX1722-1724] || bis 150 mA&lt;br /&gt;
|-&lt;br /&gt;
| [http://ww1.microchip.com/downloads/en/DeviceDoc/22234B.pdf MCP1640] ||ab 0.35V bei 0.65V startup, einfache Beschaltung, regelbare Ausgangsspannung, bis 350 mA, 19µA quiescent current, nur kleine Induktivität (4,7µH) nötig&lt;br /&gt;
| C, R&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.prema.com/Application/whiteleddriver.html PR4401/PR4402]||22 und 44 mA, benötigen lediglich 1 externes Bauteil, die Spule. Einfach zu handhaben&lt;br /&gt;
| R, I&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.prema.com/Application/pr4404_e.html PR4404]||150 mA von einer, und 300 mA von zwei Zellen. Preiswert&lt;br /&gt;
| R, I&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.sipex.com/Files/DataSheets/sp6648.pdf SP6648]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| [http://focus.ti.com/lit/ds/symlink/tps61200.pdf TPS61200/201/202] ||1,8..5,5V out, Quellspannung bis herunter auf 0,3V, ?&amp;gt;90%, 0,5mm Pinabstand, 3,15*3,15mm, 10-Pin QFN&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://focus.ti.com/lit/ds/symlink/tps61220.pdf TPS61220] ||1,8..5,5V out, Quellspannung bis herunter auf 0,7V, &amp;gt;90%, 6-pin SC-70(DCK),2mm*2mm&lt;br /&gt;
|R&lt;br /&gt;
|-&lt;br /&gt;
| [http://focus.ti.com/docs/prod/folders/print/tps61006.html TPS6100x]||Single- and Dual-Cell Boost Converster, min 0,8V Vin, 1,5V...3,3V Vout, min. 100mA aus einer Zelle, min.250mA auf zwei Zellen, Gehäuse 10MSOP&lt;br /&gt;
|-&lt;br /&gt;
| [http://focus.ti.com/docs/prod/folders/print/tps61016.html TPS6101x]||1-Cell and 2-Cell Boost Converters, TPS61006 and TPS61016 are functionally equivalent. TPS61006 is non-synchronous. TPS61016 is synchronous and does not require an external Schottky diode.&lt;br /&gt;
|-&lt;br /&gt;
| TPS6030x, TPS6031x, [http://www.ortodoxism.ro/datasheets/lineartechnology/15023f.pdf LTC1502-3.3]  ||(typ. 3,x V bei 15-20 mA)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.ortodoxism.ro/datasheets2/7/0y1y62f9lzj79rs7uuf28jq4xtwy.pdf LM2621] &lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| [[MC34063]]||(ungeeignet, läuft erst ab 3V)&lt;br /&gt;
| R, I&lt;br /&gt;
|-&lt;br /&gt;
| [http://atmel.com/dyn/products/product_card.asp?part_id=4523 ATtiny43U]||AVR-Microcontroller, der einen Boost-Converter eingebaut hat und damit eine Batterie bis auf 0.7V aussaugen kann.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.onsemi.com/pub_link/Collateral/NCP1400A-D.PDF NCP1400A]||Startup 0.8V / |&lt;br /&gt;
| W&amp;lt;ref name=&amp;quot;plat_mod&amp;quot; /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.onsemi.com/pub_link/Collateral/NCP1402-D.PDF NCP1402]||Startup 0.8V, 200mA, Preis &amp;lt; 1 Euro &lt;br /&gt;
| W&amp;lt;ref name=&amp;quot;plat_mod&amp;quot; /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://cds.linear.com/docs/en/datasheet/338813f.pdf LTC3388] ||Nanopower Step Down Regulator, weniger als 1µA Leerlaufstrom, 50mA Ausgangsstrom&lt;br /&gt;
|}&lt;br /&gt;
Lieferanten &#039;&#039;&#039;C&#039;&#039;&#039;onrad, &#039;&#039;&#039;R&#039;&#039;&#039;eichelt, &#039;&#039;&#039;W&#039;&#039;&#039;atterott, &#039;&#039;&#039;Rob&#039;&#039;&#039;otik&#039;&#039;&#039;Hard&#039;&#039;&#039;ware.de, &#039;&#039;&#039;I&#039;&#039;&#039;T-WNS &amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dioden&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Prakisch kann nahezu jede Schottkydiode mit ausreichend Strombelastbarkeit genutzt werden, siehe [[Dioden-Übersicht]].&lt;br /&gt;
&lt;br /&gt;
==== Diskrete Schaltungen ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile:&#039;&#039;&#039;&lt;br /&gt;
* größtmögliche Anpassung an Verwendungszweck&lt;br /&gt;
* teilweise schon mit Standardhühnerfutter aufzubauen&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* kompliziert&lt;br /&gt;
* nicht garantierte Funktion (z.&amp;amp;nbsp;B. wegen gepulster Gleichspannung)&lt;br /&gt;
* schlechte EMV-Eigenschaften&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auflistung diskreter Step-Up-Schaltregler:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* http://www.elektronik-kompendium.de/forum/forum_entry.php?id=17395&lt;br /&gt;
* http://www.joretronik.de/Web_NT_Buch/Kap6_2/Kapitel6_2.html#6.2&lt;br /&gt;
* http://www.mikrocontroller.net/topic/73532#604774&lt;br /&gt;
* [http://www.nxp.com/documents/application_note/AN10218.pdf NXP AN10218] (PDF) (Philips LPC900 microcontroller) single cell power supply&lt;br /&gt;
* [http://www.b-kainka.de/bastel36.htm Der LED-Spannungswandler] von B. Kainka&lt;br /&gt;
* [http://www.bigclive.com/joule.htm Make a Joule Thief] - Versorgung einer LED aus einer 1,5V Zelle&lt;br /&gt;
* Diskussionen von &#039;&#039;&#039;Joule-Thief&#039;&#039;&#039; Schaltungen im Forum&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/47224 Sensor autark betreiben mit einem Thermogenerator]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/55041 LEDs mit Akku(s) effizient betreiben]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/38163 Wie kann man eine Knopfzellenspannung um ca. 1 Volt erhöhen]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/62158 Spannungsanhebung 1,2V -&amp;gt; 2V]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/77154 Step-Up Transistorschaltung für LED Lampe]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/56523 3x 2,9V LEDs mit 2xAAA versorgen]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/55962 Gibt es eine Möglichkeit LEDs bei 1V zu betreiben]&lt;br /&gt;
** [http://cappels.org/dproj/ledpage/leddrv.htm#Rusty_Nail_Night_Light Rusty Nail Night Light]&lt;br /&gt;
&lt;br /&gt;
=== Ladungspumpen ===&lt;br /&gt;
&lt;br /&gt;
Ladungspumpen erhöhen die Spannung, indem sie Kondensatoren zyklisch parallel laden, umpolen und in Reihe entladen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile:&#039;&#039;&#039;&lt;br /&gt;
* geringer Stromverbrauch, deshalb für Low-Power-Anwendungen gut geeignet&lt;br /&gt;
* keine Spulen, deshalb kein magnetisches Störfeld&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile:&#039;&#039;&#039;&lt;br /&gt;
* nur geringe Ausgangsströme möglich (100mA)&lt;br /&gt;
* ICs nur für höhere Eingangspannungen erhältlich, ab 3V&lt;br /&gt;
* Teilweise starke Strompulse beim Umladen der Kondensatoren, womit empfindliche Analogschaltungen gestört werden können (Funkempfänger etc.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auflistung von Ladungspumpen:&#039;&#039;&#039;&lt;br /&gt;
* TPS60300 - Vin 0,9-1,8V&lt;br /&gt;
* TPS60100 - Vin 1,8-3,6V (200mA)&lt;br /&gt;
* MAX1759 - Vin 1,6-5,5V (2-3 Zellen)&lt;br /&gt;
* ICL7660 - Vin 1,5-10V (10mA) [Pollin]&lt;br /&gt;
&lt;br /&gt;
== Forumsbeiträge zum Thema ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/45101 3v3 Volt aus einer 1v2 Volt Zelle]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/18789 Stromversorgung aus einer Zelle]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/73532 Step-Up Mignon zu 5V]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/141635 Stepup/-down: Konstante 5V aus 4xMonozelle]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/189526 Ersatz 9V-Block durch Mikrozelle]&lt;br /&gt;
&lt;br /&gt;
== Externe Links zu Step-Up / µCs ==&lt;br /&gt;
* http://www.linear.com/products/Step-Up_(Boost)_Regulators&lt;br /&gt;
* http://www.ti.com/power&lt;br /&gt;
* http://www.maxim-ic.com/products/power/&lt;br /&gt;
* [http://focus.ti.com/lit/an/slaa105/slaa105.pdf TI Application Report SLAA 105] Simple 1.5-V Boost Converter for MSP430&lt;br /&gt;
* 2-6V DC nach 5V DC Konverter auf der Basis des &#039;&#039;&#039;LT1302&#039;&#039;&#039; als  [http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=83&amp;amp;products_id=195 Fertigmodul] bzw. [http://www.shop.robotikhardware.de/shop/catalog/product_info.php?products_id=194 Platine] (Shop robotikhardware.de)&lt;br /&gt;
* [http://spritesmods.com/?art=ucboost Run an uC from an AA-battery] auf spritesmods.com&lt;br /&gt;
* [http://ww1.microchip.com/downloads/en/AppNotes/01416a.pdf AN1416: Low-Power Design Guide] von Microchip (PDF)&lt;br /&gt;
&amp;lt;!-- Link ist tot&lt;br /&gt;
* [http://www.powerdesignersusa.com/InfoWeb/index.shtml Powerdesigners InfoWeb] - Free tools, resources and education for power electronics designers and students (engl.) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Externe Links zu Batterien allgemein ==&lt;br /&gt;
* [http://batteryshowdown.com/ Battery Showdown] Sehr ausführlicher Test zu Entladekennlinien von Batterien&lt;br /&gt;
* [http://www.powerstream.com/BatteryFAQ.html PowerStream Battery Chemistry FAQ]&lt;br /&gt;
* [http://www.heise.de/mobil/Langzeittest-von-NiMH-Akkus-mit-reduzierter-Selbstentladung--/artikel/143297 Langzeittest von NiMH-Akkus mit reduzierter Selbstentladung] auf heise.de&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;br /&gt;
[[Kategorie:Spannungsversorgung und Energiequellen]]&lt;/div&gt;</summary>
		<author><name>Oliver s</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP&amp;diff=89800</id>
		<title>IRMP</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP&amp;diff=89800"/>
		<updated>2015-09-21T13:56:28Z</updated>

		<summary type="html">&lt;p&gt;Oliver s: &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;
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. Auch das Gegenstück, nämlich IRSND als IR-Encoder, wird in diesem 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#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] ist u.a. lauffähig auf folgenden AVR µCs:&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;
Es gibt aber auch Portierungen auf diverse PIC µCs - für den CCS- und C18-Compiler. Auch ist [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] mittlerweile auf AVR XMega, ARM STM32 und Stellaris LM4F120 Launchpad von TI (ARM Cortex M4) lauffähig.&lt;br /&gt;
&lt;br /&gt;
=== Unterstützte IR-Protokolle ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|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 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 || 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#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#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&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#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 &#039;&#039;&#039;(NEU!)&#039;&#039;&#039;&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;
&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;
=== Entstehung ===&lt;br /&gt;
&lt;br /&gt;
Der auf AVR- und PIC-µCs einsetzbare Source zu [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|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#IRMP_-_Infrarot-Multiprotokoll-Decoder|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#IRMP_-_Infrarot-Multiprotokoll-Decoder|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#IRMP_-_Infrarot-Multiprotokoll-Decoder|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#IRMP_-_Infrarot-Multiprotokoll-Decoder|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#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] misst also das Timing des Start-Bits und stellt dann &amp;quot;on-thy-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#IRMP_-_Infrarot-Multiprotokoll-Decoder|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#IRMP_-_Infrarot-Multiprotokoll-Decoder|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#IRMP_-_Infrarot-Multiprotokoll-Decoder|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 2.9.5, Stand vom 20.09.2015&lt;br /&gt;
&lt;br /&gt;
Download Release-Version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] &amp;amp; [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] sind nun auch über SVN abrufbar: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP im SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP auf GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Version im SVN kann eine Zwischen- oder Test-Version sein, die nicht den hier dokumentierten Stand widerspiegelt! Im Zweifel verwendet man besser den obigen Download-Link auf Irmp.zip.&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;
== 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;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Beispiel Anwendung&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 main.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#IRMP_-_Infrarot-Multiprotokoll-Decoder|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#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.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/main.c?view=markup main.c] bereits integriert.&lt;br /&gt;
&lt;br /&gt;
Ebenso kann [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|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#IRMP_-_Infrarot-Multiprotokoll-Decoder|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#IRMP_-_Infrarot-Multiprotokoll-Decoder|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/main.c?view=markup main.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;
&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;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das obige Beispiel gilt für ATmega88/ATmega168/ATmega328. 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;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;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;
==== IRMP_SUPPORT_xxx_PROTOCOL ====&lt;br /&gt;
&lt;br /&gt;
Hier lässt sich einstellen, welche Protokolle von [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|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#IRMP_-_Infrarot-Multiprotokoll-Decoder|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;
&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;
==== 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 (uint8_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_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;
=== Anwendung von IRMP ===&lt;br /&gt;
&lt;br /&gt;
Die von [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|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#IRMP_-_Infrarot-Multiprotokoll-Decoder|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;
&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/main.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;
== Arbeitsweise ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|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/main.c?view=markup main.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#IRMP_-_Infrarot-Multiprotokoll-Decoder|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#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] an das unbekannte Protokoll anzupassen - siehe nächstes Kapitel.&lt;br /&gt;
&lt;br /&gt;
Wer eine Fernbedienung hat, die nicht von [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|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#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|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;syntaxhighlight lang=&amp;quot;c&amp;quot;&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;/syntaxhighlight&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;syntaxhighlight lang=&amp;quot;c&amp;quot;&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;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Aufruf unter Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|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;
| [[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#IRMP_-_Infrarot-Multiprotokoll-Decoder|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 [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|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#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] unterstützt ab Version 1.7.0 auch IR-Tastaturen, nämlich die Infrarot-Tastatur FDC-3402 - erhältlich bei Pollin (Art. 711 056) für weniger als 2 EUR.&lt;br /&gt;
&lt;br /&gt;
Beim Erkennen einer Taste gibt [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|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#IRMP_-_Infrarot-Multiprotokoll-Decoder|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#IRMP_-_Infrarot-Multiprotokoll-Decoder|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;, &#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;, &#039;ü&#039;, &#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;, &#039;ö&#039;, &#039;ä&#039;, &#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;, &#039;Ü&#039;, &#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;, &#039;Ö&#039;, &#039;Ä&#039;, &#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 = &#039;²&#039;;     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 = &#039;µ&#039;;     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;
----&lt;br /&gt;
&lt;br /&gt;
= IRSND - Infrarot-Multiprotokoll-Encoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
== Einleitung IRSND ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irsnd-sender.png|miniatur|Anschluß eines einfachen IR-Senders an µC.]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] ist das Gegenstück zu IRMP: es reproduziert aus den Daten, die mit [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] empfangen wurden, wieder den Original Frame, der dann über eine Infrarot-Diode ausgegeben werden kann.&lt;br /&gt;
&lt;br /&gt;
=== Von IRSND unterstützte µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] ist lauffähig auf folgenden AVR µCs:&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;
Es gibt aber auch Portierungen auf diverse PIC µCs - für den CCS- und C18-Compiler. Auch ist [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] mittlerweile auf ARM STM32 lauffähig.&lt;br /&gt;
&lt;br /&gt;
=== Von IRSND unterstützte Protokolle ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] unterstützt die folgenden Protokolle:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP#SIRCS|SIRCS]]&lt;br /&gt;
* [[IRMP#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP#SAMSUNG|SAMSUNG]]&lt;br /&gt;
* [[IRMP#SAMSUNG32|SAMSUNG32]]&lt;br /&gt;
* [[IRMP#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* [[IRMP#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
* [[IRMP#RC5_+_RC5X|RC5]]&lt;br /&gt;
* [[IRMP#KASEIKYO|KASEIKYO]]&lt;br /&gt;
* [[IRMP#DENON|DENON]]&lt;br /&gt;
* [[IRMP#JVC|JVC]]&lt;br /&gt;
* [[IRMP#APPLE|APPLE]]&lt;br /&gt;
* [[IRMP#NUBERT|NUBERT]]&lt;br /&gt;
* [[IRMP#B&amp;amp;O|BANG_OLUFSON]]&lt;br /&gt;
* [[IRMP#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* [[IRMP#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]] (bei mind. ~15kHz)&lt;br /&gt;
* [[IRMP#FDC|FDC]] (bei mind. ~15kHz)&lt;br /&gt;
* [[IRMP#RCCAR|RCCAR]] (bei mind. ~15kHz)&lt;br /&gt;
* [[IRMP#RECS80|RECS80]] (bei mind. ~20kHz)&lt;br /&gt;
* [[IRMP#RECS80EXT|RECS80EXT]] (bei mind. ~20kHz)&lt;br /&gt;
* [[IRMP#NIKON|NIKON]]&lt;br /&gt;
* [[IRMP#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP#RC6_+_RC6A|RC6A]]&lt;br /&gt;
* [[IRMP#THOMSON|THOMSON]]&lt;br /&gt;
* [[IRMP#NEC16|NEC16]]&lt;br /&gt;
* [[IRMP#NEC42|NEC42]]&lt;br /&gt;
* [[IRMP#LEGO|LEGO]]&lt;br /&gt;
* [[IRMP#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* [[IRMP#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* [[IRMP#ROOMBA|ROOMBA]]&lt;br /&gt;
* [[IRMP#SPEAKER|SPEAKER]]&lt;br /&gt;
* [[IRMP#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* [[IRMP#LGAIR|LGAIR]]&lt;br /&gt;
* [[IRMP#PENTAX|PENTAX]] &#039;&#039;&#039;(NEU!)&#039;&#039;&#039;&lt;br /&gt;
* [[IRMP#FAN|FAN]] &#039;&#039;&#039;(NEU!)&#039;&#039;&#039;&lt;br /&gt;
* [[IRMP#AP24|ACP24]] &#039;&#039;&#039;(NEU!)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] unterstützt die folgenden Protokolle derzeit (noch) &#039;&#039;&#039;NICHT&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP#KATHREIN|KATHREIN]]&lt;br /&gt;
* [[IRMP#NETBOX|NETBOX]]&lt;br /&gt;
* [[IRMP#ORTEK|ORTEK]]&lt;br /&gt;
* [[IRMP#RCMM|RCMM]]&lt;br /&gt;
* [[IRMP#MERLIN|MERLIN]]&lt;br /&gt;
&lt;br /&gt;
== Download IRSND ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5, Stand vom 20.09.2015&lt;br /&gt;
&lt;br /&gt;
Download Release-Version: [http://www.mikrocontroller.net/wikifiles/c/c7/Irsnd.zip Irsnd.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] &amp;amp; [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] sind nun auch über SVN abrufbar: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP im SVN]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Version im SVN kann eine Zwischen- oder Test-Version sein, die nicht den hier dokumentierten Stand widerspiegelt! Im Zweifel verwendet man besser den obigen Download auf Irsnd.zip.&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_IRSND Software-Historie IRSND]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source-Code IRSND ==&lt;br /&gt;
&lt;br /&gt;
Der Source-Code lässt sich einfach übersetzen, indem man unter Windows die Projekt-Datei irsnd.aps in das AVRStudio 4 lädt.&lt;br /&gt;
&lt;br /&gt;
Auch für andere Entwicklungsumgebungen lässt sich leicht ein Projekt bzw. Makefile zusammenstellen. Zum IRSND-Source gehören folgende Dateien:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irsnd.c?view=markup irsnd.c] - Der eigentliche IR-Encoder&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/irsnd.h?view=markup irsnd.h] - Include-Datei für die Applikation&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irsndconfig.h?view=markup irsndconfig.h] - Anzupassende Konfigurationsdatei&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irsndmain.c?view=markup irsndmain.c] - Beispiel Anwendung&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WICHTIG:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Im Applikations-Source sollte nur [http://www.mikrocontroller.net/svnbrowser/irmp/irsnd.h?view=markup irsnd.h] per include eingefügt werden, also lediglich:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;irsnd.h&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle anderen Include-Dateien werden automatisch über [http://www.mikrocontroller.net/svnbrowser/irmp/irsnd.h?view=markup irsnd.h] &amp;quot;eingefügt&amp;quot;. Siehe dazu auch die Beispieldatei [http://www.mikrocontroller.net/svnbrowser/irmp/irsndmain.c?view=markup irsndmain.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] encodiert sämtliche oben aufgelisteten Protokolle in einer ISR, siehe [http://www.mikrocontroller.net/svnbrowser/irmp/irsnd.c?view=markup irsnd.c].&lt;br /&gt;
&lt;br /&gt;
=== Einstellungen in irsndconfig.h ===&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.&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;
==== IRSND_SUPPORT_xxx_PROTOCOL ====&lt;br /&gt;
&lt;br /&gt;
Hier lässt sich einstellen, welche Protokolle von [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] 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/irsndconfig.h?view=markup irsndconfig.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 IRSND_SUPPORT_SIRCS_PROTOCOL            1       // Sony SIRCS           &amp;gt;= 10000                 ~200 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NEC_PROTOCOL              1       // NEC + APPLE          &amp;gt;= 10000                 ~100 bytes&lt;br /&gt;
#define IRSND_SUPPORT_SAMSUNG_PROTOCOL          1       // Samsung + Samsung32  &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRSND_SUPPORT_MATSUSHITA_PROTOCOL       1       // Matsushita           &amp;gt;= 10000                 ~200 bytes&lt;br /&gt;
#define IRSND_SUPPORT_KASEIKYO_PROTOCOL         1       // Kaseikyo             &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
&lt;br /&gt;
// more protocols, enable here!                 Enable  Remarks                 F_INTERRUPTS            Program Space&lt;br /&gt;
#define IRSND_SUPPORT_DENON_PROTOCOL            0       // DENON, Sharp         &amp;gt;= 10000                 ~200 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RC5_PROTOCOL              0       // RC5                  &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RC6_PROTOCOL              0       // RC6                  &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RC6A_PROTOCOL             0       // RC6A                 &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRSND_SUPPORT_JVC_PROTOCOL              0       // JVC                  &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NEC16_PROTOCOL            0       // NEC16                &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NEC42_PROTOCOL            0       // NEC42                &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_IR60_PROTOCOL             0       // IR60 (SDA2008)       &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRSND_SUPPORT_GRUNDIG_PROTOCOL          0       // Grundig              &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRSND_SUPPORT_SIEMENS_PROTOCOL          0       // Siemens, Gigaset     &amp;gt;= 15000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NOKIA_PROTOCOL            0       // Nokia                &amp;gt;= 10000                 ~400 bytes&lt;br /&gt;
&lt;br /&gt;
// exotic protocols, enable here!               Enable  Remarks                 F_INTERRUPTS            Program Space&lt;br /&gt;
#define IRSND_SUPPORT_KATHREIN_PROTOCOL         0       // Kathrein             &amp;gt;= 10000                 DON&#039;T CHANGE, NOT SUPPORTED YET!&lt;br /&gt;
#define IRSND_SUPPORT_NUBERT_PROTOCOL           0       // NUBERT               &amp;gt;= 10000                 ~100 bytes&lt;br /&gt;
#define IRSND_SUPPORT_BANG_OLUFSEN_PROTOCOL     0       // Bang&amp;amp;Olufsen         &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RECS80_PROTOCOL           0       // RECS80               &amp;gt;= 15000                 ~100 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RECS80EXT_PROTOCOL        0       // RECS80EXT            &amp;gt;= 15000                 ~100 bytes&lt;br /&gt;
#define IRSND_SUPPORT_THOMSON_PROTOCOL          0       // Thomson              &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NIKON_PROTOCOL            0       // NIKON                &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NETBOX_PROTOCOL           0       // Netbox keyboard      &amp;gt;= 10000                 DON&#039;T CHANGE, NOT SUPPORTED YET!&lt;br /&gt;
#define IRSND_SUPPORT_FDC_PROTOCOL              0       // FDC IR keyboard      &amp;gt;= 10000 (better 15000)  ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RCCAR_PROTOCOL            0       // RC CAR               &amp;gt;= 10000 (better 15000)  ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_ROOMBA_PROTOCOL           0       // iRobot Roomba        &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RUWIDO_PROTOCOL           0       // RUWIDO, T-Home       &amp;gt;= 15000                 ~250 bytes&lt;br /&gt;
#define IRSND_SUPPORT_A1TVBOX_PROTOCOL          0       // A1 TV BOX            &amp;gt;= 15000 (better 20000)  ~200 bytes&lt;br /&gt;
#define IRSND_SUPPORT_LEGO_PROTOCOL             0       // LEGO Power RC        &amp;gt;= 20000                 ~150 bytes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit Setzen auf 0 wird das Protokoll deaktiviert, mit Setzen auf 1 wird es aktiviert. Die deaktivierten Protokolle werden dann nicht mitübersetzt. Das spart Speicherplatz im Flash, siehe Angaben in obigen Kommentaren. Wenn man unbedingt Speicherplatz sparen muss, gelten natürlich hier dieselben Tipps wie für IRMP.&lt;br /&gt;
&lt;br /&gt;
Um das [[IRMP#APPLE|APPLE]]-Protokoll zu unterstützen, ist IRSND_SUPPORT_NEC_PROTOCOL auf 1 zu setzen, da es sich hier lediglich um einen Spezialfall vom [[IRMP#NEC_+_extended_NEC|NEC]]-Protokoll handelt.&lt;br /&gt;
&lt;br /&gt;
==== IRSND_OCx ====&lt;br /&gt;
&lt;br /&gt;
Für das Senden der IR-Signale benötigt [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] einen PWM-fähigen Output-Pin, da das Signal moduliert werden muss. Möglich sind eine der folgenden Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC2  // OC2  on ATmegas         supporting OC2,  e.g. ATmega8&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC2A // OC2A on ATmegas         supporting OC2A, e.g. ATmega88&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC2B // OC2B on ATmegas         supporting OC2B, e.g. ATmega88&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC0  // OC0  on ATmegas         supporting OC0,  e.g. ATmega162&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC0A // OC0A on ATmegas/ATtinys supporting OC0A, e.g. ATtiny84, ATtiny85&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC0B // OC0B on ATmegas/ATtinys supporting OC0B, e.g. ATtiny84, ATtiny85&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&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 IRSND_OCx                               IRSND_OC2B&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die PIC- und STM32-µCs sind entsprechende Werte anzupassen, siehe Kommentare in [http://www.mikrocontroller.net/svnbrowser/irmp/irsndconfig.h?view=markup irsndconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== IRSND_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 IRSND_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 Änderung des Signals (IR-Modulation ein/aus) eine Callback-Funktion aufgerufen. Dies kann zum Beispiel dafür verwendet werden, ein unmoduliertes 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 IRSND 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 (uint8_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;
    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;
    irsnd_init ();&lt;br /&gt;
    irsnd_set_callback_ptr (led_callback);&lt;br /&gt;
    sei ();&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anwendung von IRSND ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] baut den zu sendenden Frame &amp;quot;on-the-fly&amp;quot; aus der IRMP-Datenstruktur wieder zusammen. Dazu zählen:&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;
   irsnd_send_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
kann man ein zu encodierendes Telegramm versenden. Der Return-Wert ist 1, wenn das Telegramm versendet werden kann, 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&lt;br /&gt;
    irmp_data_p-&amp;gt;address&lt;br /&gt;
    irmp_data_p-&amp;gt;command&lt;br /&gt;
    irmp_data_p-&amp;gt;flags&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ausgelesen und dann als Frame im jeweils gewünschten Protokoll gesendet.&lt;br /&gt;
&lt;br /&gt;
irmp_data_p-&amp;gt;flags gibt die Anzahl der Wiederholungen an, z.B.&lt;br /&gt;
&lt;br /&gt;
  irmp_data_p-&amp;gt;flags = 0: keine Wiederholung&lt;br /&gt;
  irmp_data_p-&amp;gt;flags = 1: 1 Wiederholung&lt;br /&gt;
  irmp_data_p-&amp;gt;flags = 2: 2 Wiederholungen&lt;br /&gt;
  usw.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zu beachten: Es ist unbedingt darauf zu achten, dass irmp_data_p-&amp;gt;flags vor dem Aufruf von irsnd_send_data() einen definierten Wert hat!&#039;&#039;&#039;&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;
   IRMP_DATA irmp_data;&lt;br /&gt;
&lt;br /&gt;
   irmp_data.protocol = IRMP_NEC_PROTOCOL;       // sende im NEC-Protokoll&lt;br /&gt;
   irmp_data.address  = 0x00FF;                  // verwende Adresse 0x00FF&lt;br /&gt;
   irmp_data.command  = 0x0001;                  // sende Kommando 0001&lt;br /&gt;
   irmp_data.flags    = 0;                       // keine Wiederholung!&lt;br /&gt;
&lt;br /&gt;
   (void) irsnd_send_data (&amp;amp;irmp_data, FALSE);   // versende ohne Prüfung und ohne Warten&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Frame wird asynchron über die Interrupt-Routine irsnd_ISR() verschickt, so dass die Funktion irsnd_send_data() sofort zurückkommt.&lt;br /&gt;
&lt;br /&gt;
Sind Wiederholungen angegeben, wird entweder der Frame nach einer Pause (protokollabhängig) neu ausgegeben oder ein protokollspezifischer Wiederholungsframe (z.B. für NEC) gesendet.&lt;br /&gt;
&lt;br /&gt;
Wird erneut irsnd_send_data() aufgerufen, wartet diese, bis der vorhergenhende Frame vollständig verschickt wurde. Man kann aber auch selbst prüfen, ob [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] gerade &amp;quot;busy&amp;quot; ist oder nicht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
   while (irsnd_is_busy ())&lt;br /&gt;
   {&lt;br /&gt;
      ;                                          // selber warten oder was anderes tun...&lt;br /&gt;
   }&lt;br /&gt;
   (void) irsnd_send_data (&amp;amp;irmp_data, FALSE);   // versende ohne Prüfung und ohne Warten&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird irsnd_send_data() mit dem 2. Argument TRUE aufgerufen, kommt diese Funktion erst zurück, wenn der Frame komplett ausgesendet wurde.&lt;br /&gt;
&lt;br /&gt;
Im Beispiel-Source irsndmain.c findet man neben der Verwendung von irsnd_send_data() auch den [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]]-Aufruf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
ISR(TIMER1_COMPA_vect)&lt;br /&gt;
{&lt;br /&gt;
  irsnd_ISR())          // call irsnd ISR&lt;br /&gt;
  // call other timer interrupt routines...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Paralleles Betreiben von IRMP und IRSND ===&lt;br /&gt;
&lt;br /&gt;
Möchte man [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] und [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] parallel verwenden (also als Sender und Empfänger) schreibt man die ISR folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
ISR(TIMER1_COMPA_vect)&lt;br /&gt;
{&lt;br /&gt;
  if (! irsnd_ISR())          // call irsnd ISR&lt;br /&gt;
  {                           // if not busy...&lt;br /&gt;
      irmp_ISR();             // call irmp ISR&lt;br /&gt;
  }&lt;br /&gt;
  // call other timer interrupt routines...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das heisst: Nur wenn irsnd_ISR() nichts zu tun hat, dann rufe die ISR des Empfängers auf. Damit ist der Empfänger solange abgeschaltet, während irsnd_ISR() noch Daten sendet. Die [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]]-Initialisierungsroutine ist für [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] und [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] dann natürlich dieselbe.&lt;br /&gt;
&lt;br /&gt;
Eine gemeinsame main-Funktion könnte dann zum Beispiel folgendermaßen aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int&lt;br /&gt;
main (void)&lt;br /&gt;
{&lt;br /&gt;
  IRMP_DATA irmp_data;&lt;br /&gt;
&lt;br /&gt;
  irmp_init();                // initialize irmp&lt;br /&gt;
  irsnd_init();               // initialize irsnd&lt;br /&gt;
  timer_init();               // initialize timer&lt;br /&gt;
  sei ();                     // enable interrupts&lt;br /&gt;
&lt;br /&gt;
  for (;;)&lt;br /&gt;
  {&lt;br /&gt;
    if (irmp_get_data (&amp;amp;irmp_data))&lt;br /&gt;
    {&lt;br /&gt;
      irmp_data.flags = 0;    // reset flags!&lt;br /&gt;
      irsnd_send_data (&amp;amp;irmp_data);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Funktion des obigen Sources ist offensichtlich: Ein empfangenes Telegramm wird nach vollständiger Decodierung wieder encodiert und dann wieder über die IR-Diode ausgesandt. Somit können dann zum Beispiel Signale &amp;quot;um die Ecke&amp;quot; oder streckenweise drahtgebunden übertragen werden.&lt;br /&gt;
&lt;br /&gt;
Desweiteren könnte man auch Protokolle transformieren, zum Beispiel NEC-Telegramme in RC5 umwandeln, wenn man seine Original-RC5-FB zu seinem Philips-Gerät verlegt hat...&lt;br /&gt;
&lt;br /&gt;
Der Rest bleibt der Phantasie des geneigten Lesers überlassen ;-)&lt;br /&gt;
&lt;br /&gt;
Hier noch 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;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Daten für die Adresse und das Kommando ermittelt man am besten über IRMP, siehe weiter oben ;-)&lt;br /&gt;
&lt;br /&gt;
== IRSND unter Linux und Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Übersetzen von IRSND ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/svnbrowser/irmp/irsnd.c?view=markup irsnd.c] lässt sich auch unter Linux direkt kompilieren, um damit Telegramme in Form von IRMP-Scan-Dateien zu erzeugen. Das geht folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
    make -f makefile.unx&lt;br /&gt;
&lt;br /&gt;
=== Aufruf von IRSND ===&lt;br /&gt;
&lt;br /&gt;
Der Aufruf geht dann folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
    ./irsnd protocol-number hex-address hex-command [repeat] &amp;gt; filename.txt&lt;br /&gt;
&lt;br /&gt;
also zum Beispiel für das NEC-Protokoll, Adresse 0x00FF, Kommando 0x0001&lt;br /&gt;
&lt;br /&gt;
    ./irsnd 2 00FF 0001 &amp;gt; nec.txt                   # irsnd ausführen&lt;br /&gt;
&lt;br /&gt;
=== IRSND unter Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] kann man auch unter Windows nutzen, nämlich folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
* Eingabeaufforderung starten&lt;br /&gt;
* In das Verzeichnis von irsnd wechseln&lt;br /&gt;
* Aufruf von:&lt;br /&gt;
&lt;br /&gt;
            irsnd.exe 2 00FF 0001 &amp;gt; nec.txt&lt;br /&gt;
&lt;br /&gt;
Nun kann man direkt mit [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] anschließend testen, ob das erzeugte Telegramm auch korrekt ist:&lt;br /&gt;
&lt;br /&gt;
            ./irmp-15kHz &amp;lt; nec.txt&lt;br /&gt;
&lt;br /&gt;
bzw. unter Windows:&lt;br /&gt;
&lt;br /&gt;
            irmp.exe &amp;lt; nec.txt&lt;br /&gt;
&lt;br /&gt;
Das Ganze geht auch ohne Zwischendatei, nämlich:&lt;br /&gt;
&lt;br /&gt;
            ./irsnd-15kHz 2 00FF 0001 | ./irmp-15kHz&lt;br /&gt;
&lt;br /&gt;
bzw. unter Windows:&lt;br /&gt;
&lt;br /&gt;
            irsnd.exe 2 00FF 0001 | irmp.exe&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] gibt dann als Ergebnis folgendes aus:&lt;br /&gt;
&lt;br /&gt;
            11111111000000001000000001111111 p =  2, a = 0x00ff, c = 0x0001, f = 0x00&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] konnte also aus dem von [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] generierten Frame wieder das Protokoll 2, Adresse 0x00FF und Kommando 0x0001 decodieren.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich simuliert [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] unter Linux/Windows immer das zweimalige Drücken einer Taste - mit einer Pause dazwischen. Als Egebnis erscheint daher:&lt;br /&gt;
&lt;br /&gt;
            11111111000000001000000001111111 p =  2, a = 0x00ff, c = 0x0001, f = 0x00&lt;br /&gt;
            11111111000000001000000001111111 p =  2, a = 0x00ff, c = 0x0001, f = 0x00&lt;br /&gt;
&lt;br /&gt;
Der Grund ist einfach: Damit kann man wunderbar testen, ob bei Protokollen mit Toggle-Bit dieses von [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] auch korrekt behandelt wird:&lt;br /&gt;
&lt;br /&gt;
            ./irsnd-15kHz 7 2 3 0 | ./irmp-15kHz&lt;br /&gt;
            1100010000011 p= 7 (RC5), a=0x0002, c=0x0003, f=0x00  &#039;&#039;&#039;Erster Tastendruck&#039;&#039;&#039;&lt;br /&gt;
            1000010000011 p= 7 (RC5), a=0x0002, c=0x0003, f=0x00  &#039;&#039;&#039;Zweiter Tastendruck&#039;&#039;&#039;&lt;br /&gt;
             ^&lt;br /&gt;
             Toggle-Bit&lt;br /&gt;
&lt;br /&gt;
Bitte beachten: Je nach benutztem Protokoll sind die Bit-Breiten der Adressen bzw. Kommandos verschieden, siehe obige Tabelle [http://www.mikrocontroller.net/articles/IRMP#Protokolle].&lt;br /&gt;
&lt;br /&gt;
Man kann also nicht mit jedem IR-Protokoll komplett 16-Bit breite Adressen oder Kommandos transparent übertragen.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== Die IR-Protokolle im Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protokolle ===&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&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 (4500µ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;
==== 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, 13000µ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 || eine nach ca. 47 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;
==== 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 || einmalig nach 74ms Pause&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des 1. 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 (normal: 00, invertiert: 11)&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;
==== 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;
==== 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;
==== 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;
[[Datei:Pulse-Width.png|miniatur|Pulse Width Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Width Protokolle ===&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&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;
[[Datei:Pulse-Distance-Width.png|miniatur|Pulse Distance Width Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Width Protokolle ===&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&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;
[[Datei:Biphase-Coding.png|miniatur|Biphase Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Biphase Protokolle ===&lt;br /&gt;
 &#039;&#039;&#039; &#039;&#039;&#039;&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;
==== 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 || 38 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;
==== 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 2.9.x:&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 20.09.2015: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 15.06.2015: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&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;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&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;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&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;
&lt;br /&gt;
Ältere Versionen:&lt;br /&gt;
&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 main.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.214: 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;
&lt;br /&gt;
* 04.09.2010: Bugfix für F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 02.09.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&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;
&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;
&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;
&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;
&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;
&lt;br /&gt;
* 02.06.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&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;
&lt;br /&gt;
* 17.05.2010: Bugfix [[IRMP#SAMSUNG32|SAMSUNG32]]-Protokoll: Kommando-Bit-Maske korrigiert&lt;br /&gt;
&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;
&lt;br /&gt;
* 28.04.2010: Nur einige kosmetische Code-Optimierungen&lt;br /&gt;
&lt;br /&gt;
* 16.04.2010: Sämtliche Timing-Toleranzen angepasst/optimiert&lt;br /&gt;
&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;
&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;
&lt;br /&gt;
* 17.03.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#NUBERT|NUBERT]]&lt;br /&gt;
&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;
&lt;br /&gt;
* 15.03.2010: Codeoptimierung&lt;br /&gt;
&lt;br /&gt;
* 14.03.2010: Portierung auf PIC&lt;br /&gt;
&lt;br /&gt;
* 11.03.2010: Anpassungen an verschiedene ATMega-Typen durchgeführt&lt;br /&gt;
&lt;br /&gt;
* 07.03.2010: Bugfix: Zurücksetzen der Statemachine nach einem unvollständigen [[IRMP#RC5_+_RC5X|RC5]]-Frame&lt;br /&gt;
&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;
&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;
&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;
&lt;br /&gt;
* 24.02.2010: Neue Variable flags in IRMP_DATA zur Erkennung von langen Tastendrücken&lt;br /&gt;
&lt;br /&gt;
* 20.02.2010: Bugfix [[IRMP#DENON|DENON]]-Protokoll: Wiederholungsframe grundsätzlich invertiert&lt;br /&gt;
&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;
&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;
&lt;br /&gt;
* 12.02.2010: [[IRMP#RC5_+_RC5X|RC5]]-Protokoll-Decoder hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* 05.02.2010: Konflikt zwischen [[IRMP#SAMSUNG|SAMSUNG]]- und [[IRMP#MATSUSHITA|MATSUSHITA]]-Protokoll beseitigt&lt;br /&gt;
&lt;br /&gt;
* 07.01.2010: Erste Version&lt;br /&gt;
&lt;br /&gt;
== Software-Historie IRSND ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 20.09.2015: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 15.06.2015: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Änderungen IRSND in 2.9.x:&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 28.05.2015: Timing-Korrekturen für FAN-Protokoll&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&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;
&lt;br /&gt;
Ältere Versionen:&lt;br /&gt;
&lt;br /&gt;
* 18.05.2015: F_CPU Macro für STM32L1XX hinzugefügt&lt;br /&gt;
* 07.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;
* 10.07.2014: Einige GPIO Änderungen für STM32F10x (in IRSND).&lt;br /&gt;
* 10.07.2014: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 23.06.2014: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#LGAIR|LGAIR]]&lt;br /&gt;
* 03.06.2014: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#TELEFUNKEN|TELEFUNKEN]]&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: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 09.04.2013: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#ROOMBA|ROOMBA]]&lt;br /&gt;
* 12.03.2013: 15kHz für [[IRMP#RECS80|RECS80]]- und  [[IRMP#RECS80EXT|RECS80EXT]]-Protokoll ist nun auch erlaubt&lt;br /&gt;
* 17.01.2013: Unterstützung für ATtiny44 hinzugefügt&lt;br /&gt;
* 12.12.2012: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 07.12.2012: Korrektur Timing beim [[IRMP#NIKON|NIKON]]-Protokoll&lt;br /&gt;
* 26.10.2012: Einige Timer-Korrekturen, Anpassungen an Arduino&lt;br /&gt;
* 18.06.2012: Unterstützung für ATtiny87/167 hinzugefügt&lt;br /&gt;
* 05.06.2012: Korrekturen Portierung auf ARM STM32 - nun getestet&lt;br /&gt;
* 23.05.2012: Portierung auf ARM STM32 (ungetestet!)&lt;br /&gt;
* 23.05.2012: Bugfix Timing für 2. Frame beim Denon-Protokoll&lt;br /&gt;
* 27.02.2012: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 27.02.2012: Bug beim Senden von [[IRMP#Biphase|Biphase]]-Frames (Manchester) behoben&lt;br /&gt;
* 27.02.2012: Portierung auf C18 Compiler für PIC-Mikroprozessoren&lt;br /&gt;
* 15.02.2012: Bugfix: Nur der 1. Frame wurde gesendet&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;
* 13.02.2012: Zusätzliche Pause nach dem Senden des letzten Frames&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#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: Portierung auf ATtiny84 und ATtiny85&lt;br /&gt;
* 20.09.2011: Korrektur von Pausenlängen&lt;br /&gt;
* 20.09.2011: Korrekturen von irsnd_stop()&lt;br /&gt;
* 20.09.2011: Korrektur des [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]]-Timings&lt;br /&gt;
* 20.09.2011: Umstellung auf 36kHz Modulationsfrequenz für [[IRMP#DENON|DENON]]-Protokoll&lt;br /&gt;
* 20.09.2011: Korrektur Behandlung zusätzlicher Bits im [[IRMP#SIRCS|SIRCS]]-Protokoll&lt;br /&gt;
* 18.01.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#RC6_+_RC6A|RC6A]]&lt;br /&gt;
* 18.01.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#RC6_+_RC6A|RC6]]&lt;br /&gt;
* 18.01.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#NIKON|NIKON]]&lt;br /&gt;
* 18.01.2011: Beachten der zusätzlichen Bits (&amp;gt;12) im [[IRMP#SIRCS|SIRCS]]-Protokoll&lt;br /&gt;
* 18.01.2011: Korrektur der Pausenlängen&lt;br /&gt;
* 18.01.2011: Timing-Korrekturen für [[IRMP#DENON|DENON]]-Protokoll&lt;br /&gt;
&lt;br /&gt;
* 02.09.2010: Neues Protokoll: [[IRMP#JVC|JVC]]&lt;br /&gt;
* 02.09.2010: Anpassung des [[IRMP#APPLE|APPLE]]-Encoders an IRMP-Version 1.7.3.&lt;br /&gt;
&lt;br /&gt;
* 29.08.2010: Neues Protokoll: [[IRMP#KASEIKYO|KASEIKYO]] (Panasonic u.a.)&lt;br /&gt;
&lt;br /&gt;
* 01.07.2010: Bugfix: Deaktivieren von [[IRMP#RECS80|RECS80]], [[IRMP#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]] bei geringer Interrupt-Rate&lt;br /&gt;
&lt;br /&gt;
* 25.06.2010: Neues Protokoll: [[IRMP#RCCAR|RCCAR]]&lt;br /&gt;
&lt;br /&gt;
* 09.06.2010: Neues Protokoll: [[IRMP#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 09.06.2010: Timing für [[IRMP#DENON|DENON]]-Protokoll korrigiert&lt;br /&gt;
&lt;br /&gt;
* 02.06.2010: Neues Protokoll: [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
* 02.06.2010: Simulation von langen Tastendrücken&lt;br /&gt;
&lt;br /&gt;
* 26.05.2010: Neues Protokoll: [[IRMP#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
&lt;br /&gt;
* 17.05.2010: Neues Protokoll: [[IRMP#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 17.05.2010: Behandlung von Frame-Wiederholungen für [[IRMP#SIRCS|SIRCS]], [[IRMP#SAMSUNG32|SAMSUNG32]] und [[IRMP#NUBERT|NUBERT]] korrigiert&lt;br /&gt;
&lt;br /&gt;
* 28.04.2010: Unterstützung des [[IRMP#APPLE|APPLE]]-Protokolls&lt;br /&gt;
* 28.04.2010: Konfiguration über [http://www.mikrocontroller.net/svnbrowser/irmp/irsndconfig.h?view=markup irsndconfig.h]&lt;br /&gt;
&lt;br /&gt;
* 16.04.2010: Sämtliche Timing-Toleranzen angepasst/optimiert&lt;br /&gt;
&lt;br /&gt;
* 14.04.2010: Neues Protokoll: [[IRMP#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 17.03.2010: Neues Protokoll: [[IRMP#NUBERT|NUBERT]]&lt;br /&gt;
* 17.03.2010: Korrektur der Pausen zwischen Frame-Wiederholungen&lt;br /&gt;
&lt;br /&gt;
* 16.03.2010: Korrektur des Timer-Registers TCCR2&lt;br /&gt;
* 16.03.2010: Korrektur der [[IRMP#RECS80|RECS80]]-Startbit-Timings&lt;br /&gt;
* 16.03.2010: Neues Protokoll: [[IRMP#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 11.03.2010: Anpassungen an verschiedene ATMega-Typen durchgeführt&lt;br /&gt;
&lt;br /&gt;
* 07.03.2010: Alpha-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.com/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;
&lt;br /&gt;
=== SIRCS-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/sirc.php&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.com/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.com/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.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5- und RC5x-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rc5.php&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://www.mikrocontroller.com/de/IR-Protokolle.php#DENON&lt;br /&gt;
* http://www.manualowl.com/m/Denon/AVR-3803/Manual/170243&lt;br /&gt;
&lt;br /&gt;
=== RC6 und RC6A-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/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.com/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;
&lt;br /&gt;
=== RCMM-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/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#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] habe ich auf Youtube gefunden:&lt;br /&gt;
&lt;br /&gt;
* http://www.youtube.com/watch?v=Q7DJvLIyTEI&lt;br /&gt;
&lt;br /&gt;
* http://www.youtube.com/watch?v=1tQ_aqayWZk&lt;br /&gt;
&lt;br /&gt;
* http://www.youtube.com/watch?v=W4tI2axR3-w&lt;br /&gt;
&lt;br /&gt;
* http://www.youtube.com/watch?v=SRs98dIe2WE&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;
=== IR-Tester ===&lt;br /&gt;
&lt;br /&gt;
Eine Implementierung auf Basis [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] und [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] als Multiprotokoll Dekoder mit LCD&lt;br /&gt;
von Klaus Leidinger: &lt;br /&gt;
* http://www.mikrocontroller-projekte.de/Mikrocontroller/index.html&lt;br /&gt;
&lt;br /&gt;
=== IR-Tester mit AVR-NET-IO ===&lt;br /&gt;
&lt;br /&gt;
Ähnliche Implementierung wie von Klaus Leidinger für Pollin AVR-NET-IO mit Pollin ADD-ON Board:&lt;br /&gt;
* http://son.ffdf-clan.de/include.php?path=forumsthread&amp;amp;threadid=703&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;
=== 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;
=== 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;
=== 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;
* www.eislab.fim.uni-passau.de/files/publications/2010/StudentDiener_ErweiterungDerArduinoPlattform.pdf&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#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] &amp;amp; [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|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.&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;
== 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>Oliver s</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=89260</id>
		<title>Entprellung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=89260"/>
		<updated>2015-07-09T06:50:47Z</updated>

		<summary type="html">&lt;p&gt;Oliver s: Link korrigiert&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. Dafür hat man aber den Vorteil, das man kurze Fehlpulse, die offensichtlich keine Tastenbetätigung sein können sondern zb durch Einstreuungen hervorgerufen werden, einfach ausfiltern zu können.&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 kleinen 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/Pdf/ViewPdf?contentItemId=4324067 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>Oliver s</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Mcruler&amp;diff=79609</id>
		<title>Mcruler</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Mcruler&amp;diff=79609"/>
		<updated>2013-11-17T11:04:30Z</updated>

		<summary type="html">&lt;p&gt;Oliver s: /* Vorbestellungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Infos ==&lt;br /&gt;
&lt;br /&gt;
Hier soll eine Community Variante eines Lineals entstehen, nach Vorbild des µRuler von EEVBlog/Dave Jones:&lt;br /&gt;
&lt;br /&gt;
[[Datei:uRuler.jpg|1200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aktueller Stand:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[https://raw.github.com/maugsburger/ucruler/master/ucruler_top.png]&lt;br /&gt;
[https://raw.github.com/maugsburger/ucruler/master/ucruler_bot.png]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Thread im Forum:&#039;&#039;&#039; http://www.mikrocontroller.net/topic/313642&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekt-Seite auf GitHub:&#039;&#039;&#039; https://github.com/maugsburger/ucruler&lt;br /&gt;
&lt;br /&gt;
== Spezifikationen ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Maße             || 200 x 32 mm&lt;br /&gt;
|-&lt;br /&gt;
| PCB              || 0.5mm oder 0.8mm FR4 &#039;&#039;&#039;1-Layer&#039;&#039;&#039; 35µ (TBD)&lt;br /&gt;
|-&lt;br /&gt;
| Oberfläche       || gold (ENIG)&lt;br /&gt;
|-&lt;br /&gt;
| Lötstop          || beidseitig, Farbe TBD&lt;br /&gt;
|-&lt;br /&gt;
| Bestückungsdruck || beidseitig, weiß&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Preise&#039;&#039;&#039;     || ca. 2 € / MOQ: 5 Stück oder vielfaches von 3 (TBD)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farbe des Lötstopplackes ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grün    |&lt;br /&gt;
gelb    |&lt;br /&gt;
schwarz |+++++++++++++++&lt;br /&gt;
weiß    |+&lt;br /&gt;
rot     |+++++++++&lt;br /&gt;
blau    |++++&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
einfach bitte ein Plus hinter die Farbe die euch als Lötstoplack am besten gefallen würde.&lt;br /&gt;
&lt;br /&gt;
== minimale Schriftgröße ==&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/attachment/196856/ucruler.pdf ausdrucken und die eigenen Augen testen.&lt;br /&gt;
&lt;br /&gt;
Dann bitte eintragen, welche Größe gerade noch lesbar ist. Die normale Schrift wird eins größer werden, aber falls mal wirklich kein Platz mehr sein sollte würde ich darauf zurückgreifen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1,8 |&lt;br /&gt;
1,6 |&lt;br /&gt;
1,4 |&lt;br /&gt;
1,2 | +++++&lt;br /&gt;
1,0 | ++++++&lt;br /&gt;
0,8 |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anpassungen/Ergänzungen ==&lt;br /&gt;
&lt;br /&gt;
Bitte einfach ein + oder - ergänzen oder gar nichts eintragen (wichtig, brauch ich nicht, egal), so dass am Ende ein Stimmungsbild entsteht. Daraus ergeben sich dann Prioritäten, in deren Reihenfolge der Platz aufgefüllt wird.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Wertung !! Beschreibung&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Formelsamlung&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| +++++&lt;br /&gt;
-| ------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Vllt. könnte man auch ein paar Formeln unterbringen die oft verwendet werden und trotzdem gerne vergessen werden&lt;br /&gt;
&lt;br /&gt;
Vorschläge [[Mcnet-ruler#Vorschl.C3.A4ge_f.C3.BCr_Formelsammlung|siehe unten]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  ✓ Leiterbahnstärken &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1| +&lt;br /&gt;
2| ++++++++++++++++++&lt;br /&gt;
3|&lt;br /&gt;
4|&lt;br /&gt;
5|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Bitte genau eine Möglichkeit mit + wählen:&lt;br /&gt;
# Bahnen in mm und mil, beschriftet in mm und mil&lt;br /&gt;
# Bahnen in mm, beschriftet in mm und mil&lt;br /&gt;
# Bahnen in mil, beschriftet in mm und mil&lt;br /&gt;
# Bahnen in mm, beschriftet in mm&lt;br /&gt;
# Bahnen in mil, beschriftet in mil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  ✓ Inches in mm &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| +++++++++++++++++&lt;br /&gt;
-| -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Bitte generell Inches in mm umrechnen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  Isolationsabstände &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| +++++++++++++++++++++++&lt;br /&gt;
-|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Die Tabelle für Isolationsabstände (Luft-/Kriechstrecken) ggf. an  in Deutschland geltende Normen anpassen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  Kabel-Widerstände &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| ++++++++++++&lt;br /&gt;
-| -----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Wenn noch Platz ist, wäre eine Tabelle für Kabel-Widerstände gut (sortiert nach gängigen Querschnitten, pro m oder 10m Kabellänge).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  Widerstands-Farbcode-Tabelle &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| ++++++++++++++&lt;br /&gt;
-| -------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Rückseite Widerstands-Farbcode-Tabelle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  LM317 &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| +++++&lt;br /&gt;
-| ---------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Tabelle für LM317-Widerstandswerte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  Kapazitäts-/Induktivitätsbelag &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+|++++++++ &lt;br /&gt;
-|---&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Tabellen zum Kapazitäts-/Induktivitätsbelag von Leiterbahnen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  Wellenwiderstände &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+|+++++++&lt;br /&gt;
-|----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Richtwerttabellen für Wellenwiderstände, Micro Striplines (insbes. für USB/Ethernet Routing), etc. auf gängigen PCBs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  Wechselstrom Ueff, Upp &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| +++&lt;br /&gt;
-| ---------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Wenn immer noch Platz ist: Tabelle zur Umrechnung von Wechselstromgrößen (Ueff, Upp für gängige Trafowicklungen, 110V, 230V, 240V, 400V, 600V)&lt;br /&gt;
&lt;br /&gt;
Anm.: Sinnvoll für gängige Elko-Spannungen 16VDC, 25VDC, 50VDC, 63VDC, 80VDC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  f/T-Umrechnung &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| ++++&lt;br /&gt;
-| --------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Und wenn dann noch Platz wäre: Tabelle mit f und T für gängige µC-Frequenzen und Samplingraten&lt;br /&gt;
&lt;br /&gt;
Anm.: Sinnvoll und platzsparend, wenn wie vorgeschlagen für einige wenige gängige Werte (z.B. &amp;quot;8 MHz / 125 ns&amp;quot; und &amp;quot;48 kHz / 20,8 µs&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  PCB-Kühlkörper &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| +++++++++++++++++&lt;br /&gt;
-| --&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Was auch interessant waere ist eine Tabelle fuer Leiterplattenkuehlkoerper. K/W pro cm² für div. Kupferstärken!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  SMD-Footprints R &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| +++++++++++++++++++++++++&lt;br /&gt;
-| -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Die Idee mit den SMD Footprints auf der Rückseite finde ich auch sehr gut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  ✓ SMD-Größen R &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| +++++++++++++++&lt;br /&gt;
-| -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Eine Tabelle mit den Größen (im Sinne von Maßen) von SMD Widerständen ist auch manchmal ganz gut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  SMD-Footprints ElKo &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| ++++++++++++++++++++++&lt;br /&gt;
-|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Zudem wäre der Footprint von SMD Elkos wenn möglich auf der Rückseite auch ganz praktisch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  SMD-Größen Elko &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| ++++++++++++++++++++&lt;br /&gt;
-| &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Eine Tabelle mit den Größen (im Sinne von Maßen) von SMD Elkos ist auch manchmal ganz gut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  E-Reihen &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| ++++++++++&lt;br /&gt;
-| --------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Abdruck der E24-Reihe mit Markierungen für E12, E6.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  TQFP, SOP und SOT Footprint &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| +++++++++++++++++&lt;br /&gt;
-| -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Der Footprint von TQFP, SOT und SOP Bauteilen auf der Rückseite könnte sich auch als nützlich erweisen&lt;br /&gt;
&lt;br /&gt;
Vorschläge für Footprints [[Mcnet-ruler#Vorschl.C3.A4ge_f.C3.BCr_Footprints|siehe unten]].&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  ✓ THT Lochreihe &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| ++++++++&lt;br /&gt;
-| -----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Ebenso eine kurze Lochreihe im 2,54mm-Raster für THT.&lt;br /&gt;
&lt;br /&gt;
Anm.: Bitte eine lange Lochreihe ähnlich wie von [http://www.mikrocontroller.net/topic/313642#3389830 Chris gezeigt].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  ✓ Kleines Namensfeld &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| ++++++++++++++++++&lt;br /&gt;
-| --&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Damit die Lineale nicht &amp;quot;verschwinden&amp;quot;, zum selbst beschriften.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  Tabelle Leitfähigkeit/spezifischer Widerstand &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| ++++&lt;br /&gt;
-| ------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Eine Tabelle mit der Leitfähigkeit/spezifischer Widerstand von zb. Kufer, Aluminium, Eisen ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  Temperaturkoeffizent &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| +++&lt;br /&gt;
-| ------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Eine Tabelle mit den Temperaturkoeffizenten (alpha in 1/k) von zb. Kufer, Aluminium, Eisen ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ✓ Transistor-Schaltungssymbole &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| +++++++&lt;br /&gt;
-| --&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Aufdruck von Transistor-Schaltungssymbolen (bipolar/FET) und THT-LEDs, [http://www.adafruit.com/index.php?main_page=popup_image_additional&amp;amp;pID=1554&amp;amp;pic=1&amp;amp;products_image_large_additional=images/large/1554bottom_LRG.jpg siehe hier]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  Pin-Beschriftung für einige Footprints &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| +++++&lt;br /&gt;
-| &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Einige Footprints (z.B. TO-92, SOT-23 etc.) sollten Beschriftungen für BCE/GDS für gängige Transistortypen bekommen, siehe [http://dmohankumar.files.wordpress.com/2011/05/table-showing-the-pins-of-common-transistors.pdf hier] und [http://www.radiomuseum.org/forum/transistor_connections.html hier]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  Kabelschablone&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| +++++&lt;br /&gt;
-| &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Ähnlich dem [http://www.adafruit.com/index.php?main_page=popup_image_additional&amp;amp;pID=1554&amp;amp;pic=1&amp;amp;products_image_large_additional=images/large/1554bottom_LRG.jpg Adafruit Ruler], aber als Tabelle in AWG und mm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vorschläge für Formelsammlung ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Wertung !! Beschreibung&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| C/L &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| +&lt;br /&gt;
-| -&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
||&lt;br /&gt;
http://upload.wikimedia.org/math/d/5/5/d550b39c146790974bae8a9a2e1830fb.png&lt;br /&gt;
&lt;br /&gt;
http://upload.wikimedia.org/math/0/9/a/09ab806c34320b749ddadca35a32fc8a.png&lt;br /&gt;
&lt;br /&gt;
http://de.wikipedia.org/wiki/Elektrische_Kapazit%C3%A4t#Kapazit.C3.A4t_bestimmter_Leiteranordnungen&lt;br /&gt;
&lt;br /&gt;
http://de.wikipedia.org/wiki/Induktivit%C3%A4t#Induktivit.C3.A4t_einer_Zylinderspule&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Eckfrequenz RC-Glied HP/LP &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| +&lt;br /&gt;
-| --&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
||&lt;br /&gt;
http://upload.wikimedia.org/math/5/d/1/5d1295e236a3c860416fbdb9940fb043.png&lt;br /&gt;
&lt;br /&gt;
http://de.wikipedia.org/wiki/RC-Glied#Tiefpass&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| I(t) / U(t) für C/L &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| ++&lt;br /&gt;
-| -&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
||&lt;br /&gt;
http://upload.wikimedia.org/math/0/b/9/0b93b4a1ce2832629d42509b43184894.png&lt;br /&gt;
&lt;br /&gt;
http://upload.wikimedia.org/math/9/e/6/9e6ea02a73a08f263454786c1c9d7e44.png&lt;br /&gt;
&lt;br /&gt;
http://de.wikipedia.org/wiki/Zeitkonstante#Kondensator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Wärmewiderstand  &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+| +&lt;br /&gt;
-| -&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
||&lt;br /&gt;
http://upload.wikimedia.org/math/8/7/b/87b98460f0867373471f540167591ebb.png&lt;br /&gt;
&lt;br /&gt;
http://de.wikipedia.org/wiki/W%C3%A4rmewiderstand#Definition&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vorschläge für Footprints ==&lt;br /&gt;
&lt;br /&gt;
Vorschläge für Footprints auf der Rückseite. Es werden die Pads in Kupfer ausgeführt (also theoretisch lötbar), der Rand des Bauteils im Bestückungsdruck.&lt;br /&gt;
&lt;br /&gt;
* http://www.fairchildsemi.com/package/&lt;br /&gt;
* http://www.maximintegrated.com/design/packaging/&lt;br /&gt;
* http://www.infineon.com/cms/de/product/technology/packages/index.html&lt;br /&gt;
* http://www.nxp.com/packages&lt;br /&gt;
* http://www.topline.tv/Drawings/PDF/QFP/TQFP_Library.pdf&lt;br /&gt;
* http://www.linear.com/designtools/packaging/&lt;br /&gt;
* http://ww1.microchip.com/downloads/en/PackagingSpec/00049AR.pdf&lt;br /&gt;
&lt;br /&gt;
=== Standardisierungen === &lt;br /&gt;
* http://www.jedec.org/category/technology-focus-area/registered-outlines-jep95&lt;br /&gt;
&lt;br /&gt;
=== Inspirationen ===&lt;br /&gt;
&lt;br /&gt;
Siehe auch [http://www.adafruit.com/blog/2013/10/11/new-product-adafruit-pcb-ruler-6/ Adafruit Ruler].&lt;br /&gt;
&lt;br /&gt;
http://www.adafruit.com/images/large/1554bottom_LRG.jpg&lt;br /&gt;
&lt;br /&gt;
=== Widerstände &amp;amp; Kondensatoren ===&lt;br /&gt;
Maße siehe z.B. http://www.panasonic.com/industrial/components/pdf/AOA0000CE1.pdf&lt;br /&gt;
&lt;br /&gt;
* 0201 (wenn der Fertiger des Lineal das kann...)&lt;br /&gt;
* 0402&lt;br /&gt;
* 0603&lt;br /&gt;
* 0805&lt;br /&gt;
* 1206&lt;br /&gt;
* 1210&lt;br /&gt;
* 1812 (wenn noch Platz ist)&lt;br /&gt;
* 2010 (wenn noch Platz ist)&lt;br /&gt;
* 2512 (wenn noch Platz ist)&lt;br /&gt;
&lt;br /&gt;
=== Transistoren &amp;amp; ICs ===&lt;br /&gt;
&lt;br /&gt;
* ✓ SC-70&lt;br /&gt;
* ✓ SOT-23&lt;br /&gt;
* ✓ SOT-23-6&lt;br /&gt;
* ✓ SOT-89&lt;br /&gt;
* ✓ SOT-223&lt;br /&gt;
* TO-252 / DPAK http://www.fairchildsemi.com/dwg/TO/TO252A03.pdf&lt;br /&gt;
* TO-263 / D2PAK http://www.fairchildsemi.com/dwg/TO/TO263A02.pdf&lt;br /&gt;
&lt;br /&gt;
=== Dioden &amp;amp; LEDs ===&lt;br /&gt;
&lt;br /&gt;
* SMA / DO-214AC http://www.fairchildsemi.com/dwg/DO/DO214AC.pdf&lt;br /&gt;
* SMB / DO-214AA http://www.fairchildsemi.com/dwg/DO/DO214AA.pdf&lt;br /&gt;
* SMC / DO-214AB http://www.fairchildsemi.com/dwg/DO/DO214AB.pdf&lt;br /&gt;
* Melf http://www.cdil.com/package/do213ab_dwng.pdf&lt;br /&gt;
* MiniMelf http://www.cdil.com/package/sod_80c.pdf&lt;br /&gt;
* MicroMelf http://www.vishay.com/docs/20003/smm0102.pdf&lt;br /&gt;
* PLCC-4 / 3528 http://catalog.osram-os.com/media/_en/Graphics/00042269_0.pdf&lt;br /&gt;
* PLCC-6 / 5050 http://ledversand24.de/media/pdf/ws2812preliminary51337f1c83131.pdf&lt;br /&gt;
&lt;br /&gt;
=== ICs ===&lt;br /&gt;
&lt;br /&gt;
* SOIC-24, 3.9mm-Body, ein Footprint, aber mit Bestückungsdruck-Linien die kleineren Varianten für 8,14,16,20,24 Pins anzeichen, Pinzahl ranschreiben&lt;br /&gt;
* SOIC-24, 7.5mm-Body, ein Footprint, aber mit Bestückungsdruck-Linien die kleineren Varianten für 8,14,16,20,24 Pins anzeichen, Pinzahl ranschreiben&lt;br /&gt;
Diese beiden SOIC-Breiten wenn möglich in einem Footprint zusammenfassen, also z.B. die linken Pins gemeinsam verwenden. Die beiden&lt;br /&gt;
Breiten dann über Bestückungsdruck-Linien kennzeichnen.&lt;br /&gt;
&lt;br /&gt;
* SSOP-24, 5,3mm-Body, 0,65mm Pitch. Das ist die gängigste Variante, es gibt aber leider auch einige Abweichler mit anderem Pitch und Bodybreite die sich auch SSOP nennen :(&lt;br /&gt;
* TSSOP-28, 4,4mm-Body, 0,65mm Pitch&lt;br /&gt;
Auch bei diesen beiden: ein Footprint, aber mit Bestückungsdruck-Linien die kleineren Varianten für 8,14,16,20,24,28 Pins anzeichen, Pinzahl ranschreiben&lt;br /&gt;
&lt;br /&gt;
Für die Maße: http://www.microchip.com/stellent/groups/techpub_sg/documents/packagingspec/en012702.pdf&lt;br /&gt;
&lt;br /&gt;
Wenn noch Platz:&lt;br /&gt;
* TQFP32, 0.8mm Pitch http://www.microchip.com/stellent/groups/techpub_sg/documents/packagingspec/en012702.pdf&lt;br /&gt;
* TQFP48 / LQFP48, 0.5mm Pitch http://www.nxp.com/documents/outline_drawing/sot313-2_po.pdf&lt;br /&gt;
* QFN32, 0.5mm Pitch http://www.linear.com/docs/38749&lt;br /&gt;
&lt;br /&gt;
== Vorbestellungen ==&lt;br /&gt;
Interessenten tragen sich bitte &#039;&#039;&#039;am Ende der Liste ein und aktualisieren den Zwischenstand&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
Mindestbestellmenge ist nach aktuellem Stand 5 Stück.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10  Dominik S. (dasd)&lt;br /&gt;
 5  Dennis X. (debegr92) &lt;br /&gt;
 2  Arne M. (armut) &lt;br /&gt;
 3  Benedikt K. (benek) &lt;br /&gt;
 5  AVR (Gast) &lt;br /&gt;
 5  Jürgen (Gast) &lt;br /&gt;
 5  Uwe ... (uwegw) &lt;br /&gt;
15  Rene H. (promeus) &lt;br /&gt;
 5  hum (Gast) &lt;br /&gt;
 3  Werner A. (homebrew) &lt;br /&gt;
 2  Frank Werner (wesoft)&lt;br /&gt;
 5  Jan B. (diphthong) &lt;br /&gt;
 5  Thomas J. (tom16) &lt;br /&gt;
10  Felix Schulze (pepe) &lt;br /&gt;
 3  Patrick Berninghaus (patricck) &lt;br /&gt;
 5  B. B. (morgenmuffel) &lt;br /&gt;
 5  Bernd D. (bernd_d56)&lt;br /&gt;
 5  Daniel (Gast) &lt;br /&gt;
 5  Jan Dressler (keyman) &lt;br /&gt;
 3  Gerd E. (robberknight) &lt;br /&gt;
10  Ralf Engelhardt (r_e)&lt;br /&gt;
 5  D. S. (compuvidy) &lt;br /&gt;
 5  Michael R. (elektr-hobbyist) &lt;br /&gt;
 5  Samuel Hildebrandt (musicsammy) &lt;br /&gt;
 5  Martin H. (marrtn) &lt;br /&gt;
 5  Michael Becker (mich_at_el) &lt;br /&gt;
 5  Marco André (marphy) &lt;br /&gt;
 5  Chris (Gast) &lt;br /&gt;
 5  mr. mo (Gast) &lt;br /&gt;
10  René B. (reneb) &lt;br /&gt;
 5  Martin R. (martin84) &lt;br /&gt;
 3  J. S. (voochee) &lt;br /&gt;
 5  Andreas H. (ahz) &lt;br /&gt;
 5  Ronny Spiegel (duselbaer) &lt;br /&gt;
10  G. L. (lele) &lt;br /&gt;
 3  Axel Jäger (axeljaeger) &lt;br /&gt;
 5  Stephan G. (stephan_g35)&lt;br /&gt;
 5  Gibts Ne (schneeblau) &lt;br /&gt;
 5  Sascha G. (sascha-g) &lt;br /&gt;
 5  Richard Zink (Gast) &lt;br /&gt;
 5  Stephan K. (nightowl) &lt;br /&gt;
 5  Martin Wende (Firma: fritzler-avr.de) (fritzler) &lt;br /&gt;
 5  Jörg S. (Gast)&lt;br /&gt;
10  J. L. (lindenbaum) &lt;br /&gt;
10  Jan M. (mueschel) &lt;br /&gt;
 5  Bad Urban (bad_urban) &lt;br /&gt;
 5  Daniel M. (amad)&lt;br /&gt;
 5  Sascha S. (dec) &lt;br /&gt;
 5  A. S. (rava) &lt;br /&gt;
10  Jens M. (jens-m) &lt;br /&gt;
 5  Sascha E. (baracuss) &lt;br /&gt;
 5  avr avr (colombo010) &lt;br /&gt;
 5  Michael B. (michael_b25) &lt;br /&gt;
 5  Thomas Sch. (doschi_) &lt;br /&gt;
 5  K. J. (theborg0815)&lt;br /&gt;
 5  Daniel C. (cecky) &lt;br /&gt;
 3  Philipp E. (erlang) &lt;br /&gt;
 5  Thorsten Ostermann (Firma: mechapro GmbH) (ostermann)&lt;br /&gt;
10  vophatec (Manuel Z.)&lt;br /&gt;
 3  Carsten Peschke &lt;br /&gt;
 2  J.O. (Gast)&lt;br /&gt;
10  F. Fo (foldi)&lt;br /&gt;
 5  D. Braun (garag)&lt;br /&gt;
 5  Michael.S. (michael0307)&lt;br /&gt;
 5  Didi S. (kokisan2000)&lt;br /&gt;
 5  Thomas L. (ics1702)&lt;br /&gt;
 5  Sebastian Engel (s-engel)&lt;br /&gt;
 5  Peter Sieg (petersieg)&lt;br /&gt;
 5  Martin S. (martin_s91)&lt;br /&gt;
 5  Manuel Steiner (steinerhippo)&lt;br /&gt;
 5  Nico B. (vegetico)&lt;br /&gt;
 5  Axel P. (axel_p)&lt;br /&gt;
 5  Mh. M. (mhm)&lt;br /&gt;
 5  Friedrich K (*)&lt;br /&gt;
 5  O.Hagendorf (ohagendorf)&lt;br /&gt;
 5  Jonas K. (jonas k)&lt;br /&gt;
 5  Sam .. (sam1994)&lt;br /&gt;
 5  Jens A. (Nepi)&lt;br /&gt;
 5  Tom Z. (tom_z)&lt;br /&gt;
 5  Sven K. (herbivore)&lt;br /&gt;
 5  Steffen A (*)&lt;br /&gt;
 3  Stephan Henning (stephan-) notfalls auch 5&lt;br /&gt;
 5  Benjamin Jung (benjamin_j)&lt;br /&gt;
 5  Kai D. (kai1972)&lt;br /&gt;
 5  Gerd B. (bertr2d2)&lt;br /&gt;
 5  Martin G. (magoe)&lt;br /&gt;
 5  Stefan K. (oxid)&lt;br /&gt;
 5  S. Q. (frido2001)&lt;br /&gt;
 5  D. K. (elektricar)&lt;br /&gt;
 5  Markus C. (ljmarkus)&lt;br /&gt;
 5  Alexander K. (minjaman)&lt;br /&gt;
 10  Dominic A. (neo123)&lt;br /&gt;
 3  Oliver S. (Oliver_S) notfalls auch 5&lt;br /&gt;
-------------------------------------&lt;br /&gt;
501 ZWISCHENSTAND&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Oliver s</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Transistor-%C3%9Cbersicht&amp;diff=42484</id>
		<title>Transistor-Übersicht</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Transistor-%C3%9Cbersicht&amp;diff=42484"/>
		<updated>2010-01-23T11:37:17Z</updated>

		<summary type="html">&lt;p&gt;Oliver s: /* Transistor-Array */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im Forum wird immer wieder gefragt, welcher [[Transistor]] für eine bestimmte Anwendung passend ist, deswegen lege ich hier mal diesen Wikieintrag an. Wie in der [[Mosfet-Übersicht]] und der [[Dioden-Übersicht]] soll hier eine Liste entstehen mit gängigen Transistoren, die auch für den Bastler erhältlich sind. Für die Typbezeichnung siehe [[Kennzeichnung von Halbleitern]]. Eine allgemeine Übersicht über verschiedene Bauteile gibt es hier: [[Standardbauelemente]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Bei den Spalten für die Liste bin ich mir nicht sicher, was jetzt am wichtigsten ist. Ich hab einfach mal angefangen. Wenn noch etwas fehlt, dann füge bitte die entsprechende Spalte ein, und entferne diesen Hinweis. Danke.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== NPN ==&lt;br /&gt;
&amp;lt;!-- Bitte Punkt . statt Komma , verwenden, damit die Tabelle sortierbar bleibt. --&amp;gt;&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung || Package || U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V || I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A || &amp;amp;beta; (Beta)|| P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W|| f&amp;lt;sub&amp;gt;G&amp;lt;/sub&amp;gt;/MHz|| Bemerkung|| Lieferant|| Datenblatt|| ca. Preis/&amp;amp;euro;&lt;br /&gt;
|-&lt;br /&gt;
|2N3904&lt;br /&gt;
|TO-92&lt;br /&gt;
|60&lt;br /&gt;
|0.2&lt;br /&gt;
|100-300&lt;br /&gt;
|0.5&lt;br /&gt;
|300&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.alldatasheet.com/datasheet-pdf/pdf/15077/PHILIPS/2N3904.html alldatasheet.com]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|2N3055&lt;br /&gt;
|TO-3&lt;br /&gt;
|60&lt;br /&gt;
|15&lt;br /&gt;
|20-70&lt;br /&gt;
|115&lt;br /&gt;
|2.5&lt;br /&gt;
|Leistungstransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/2466/MOSPEC/2N3055.html alldatasheet.com]&lt;br /&gt;
|0.40&lt;br /&gt;
|-&lt;br /&gt;
|BC107B&lt;br /&gt;
|TO-18&lt;br /&gt;
|45&lt;br /&gt;
|0.1&lt;br /&gt;
|200-450&lt;br /&gt;
|0.3&lt;br /&gt;
|300&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/45348/SIEMENS/BC107B.html alldatasheet.com]&lt;br /&gt;
|0.23&lt;br /&gt;
|-&lt;br /&gt;
|BC547B&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.1&lt;br /&gt;
|125-500&lt;br /&gt;
|0.625&lt;br /&gt;
|300&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/16104/PHILIPS/BC547B.html alldatasheet.com]&lt;br /&gt;
|0.03&lt;br /&gt;
|-&lt;br /&gt;
|BD679A&lt;br /&gt;
|SOT-32&lt;br /&gt;
|80&lt;br /&gt;
|4&lt;br /&gt;
|750&lt;br /&gt;
|40&lt;br /&gt;
|&lt;br /&gt;
|Darlington&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/11588/ONSEMI/BD679A.html alldatasheet.com]&lt;br /&gt;
|0.21&lt;br /&gt;
|-&lt;br /&gt;
|MPSA42&lt;br /&gt;
|TO-92&lt;br /&gt;
|300&lt;br /&gt;
|0.5&lt;br /&gt;
|40&lt;br /&gt;
|0.625&lt;br /&gt;
|50&lt;br /&gt;
|hohe Spannung&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/MP/MPSA42.pdf Fairchild]&lt;br /&gt;
|0.05&lt;br /&gt;
|-&lt;br /&gt;
|BC337&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|0.625&lt;br /&gt;
|210&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC337 alldatasheet.com]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|FMMT617&lt;br /&gt;
|SOT-23&lt;br /&gt;
|15&lt;br /&gt;
|3&lt;br /&gt;
|60-300&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT617.pdf Zetex]&lt;br /&gt;
|0.27&lt;br /&gt;
|-&lt;br /&gt;
| MJ15003&lt;br /&gt;
| TO-3&lt;br /&gt;
| 140&lt;br /&gt;
| 20&lt;br /&gt;
| 25-150&lt;br /&gt;
| 250&lt;br /&gt;
| 2&lt;br /&gt;
| Leistungstransistor&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.alldatasheet.com/datasheet-pdf/pdf/4799/MOTOROLA/MJ15004.html alldatasheet.com]&lt;br /&gt;
| 1.55&lt;br /&gt;
|-&lt;br /&gt;
| BD131&lt;br /&gt;
| TO-126&lt;br /&gt;
| 45&lt;br /&gt;
| 3&lt;br /&gt;
| 30-70&lt;br /&gt;
| 15&lt;br /&gt;
| 60&lt;br /&gt;
| Mittlere Leistung, guter Allrounder&lt;br /&gt;
| Rei,?&lt;br /&gt;
| [http://www.alldatasheet.com/datasheet-pdf/view/16167/PHILIPS/BD131.html alldatasheet.com]&lt;br /&gt;
| 0.131&lt;br /&gt;
|-&lt;br /&gt;
|BC517&lt;br /&gt;
|TO-92&lt;br /&gt;
|30&lt;br /&gt;
|1&lt;br /&gt;
|30000&lt;br /&gt;
|0.6&lt;br /&gt;
|200&lt;br /&gt;
|Darlington&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.alldatasheet.com/datasheet-pdf/pdf/2890/MOTOROLA/BC517.html alldatasheet.com]&lt;br /&gt;
|0.07&lt;br /&gt;
|-&lt;br /&gt;
|BCW66&lt;br /&gt;
|SOT-23&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|0.36&lt;br /&gt;
|170&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/21975/STMICROELECTRONICS/BCW66.html alldatasheet.com]&lt;br /&gt;
|0.041&lt;br /&gt;
|-&lt;br /&gt;
|BFR92&lt;br /&gt;
|SOT-23&lt;br /&gt;
|15&lt;br /&gt;
|0.3&lt;br /&gt;
|50&lt;br /&gt;
|0.2&lt;br /&gt;
|5000&lt;br /&gt;
| Hochfrequenz&lt;br /&gt;
|Rei ...&lt;br /&gt;
|&lt;br /&gt;
|0.16&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(Tabelle mit Klick im Kopfbereich sortierbar)&lt;br /&gt;
&lt;br /&gt;
== PNP ==&lt;br /&gt;
&amp;lt;!-- Bitte Punkt . statt Komma , verwenden, damit die Tabelle sortierbar bleibt. --&amp;gt;&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! &amp;amp;beta; (Beta)&lt;br /&gt;
! P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W&lt;br /&gt;
! f&amp;lt;sub&amp;gt;G&amp;lt;/sub&amp;gt;/MHz&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Datenblatt&lt;br /&gt;
! ca. Preis/€&lt;br /&gt;
|-&lt;br /&gt;
|2N3906&lt;br /&gt;
|TO-92&lt;br /&gt;
|40&lt;br /&gt;
|0.2&lt;br /&gt;
|100-300&lt;br /&gt;
|0.5&lt;br /&gt;
|250&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/15078/PHILIPS/2N3906.html alldatasheet.com]&lt;br /&gt;
|0.05&lt;br /&gt;
|-&lt;br /&gt;
|BC560&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0,1&lt;br /&gt;
|110-800&lt;br /&gt;
|0.5&lt;br /&gt;
|150&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC560 alldatasheet.com]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|BC327&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu BC337&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC327 alldatasheet.com]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|FMMT717&lt;br /&gt;
|SOT-23&lt;br /&gt;
|12&lt;br /&gt;
|2.5&lt;br /&gt;
|50-300&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu FMMT617&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT717.pdf Zetex]&lt;br /&gt;
|0.19&lt;br /&gt;
|-&lt;br /&gt;
|BD438&lt;br /&gt;
|TO-126&lt;br /&gt;
|45&lt;br /&gt;
|4&lt;br /&gt;
|30-140&lt;br /&gt;
|36&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BD438 alldatasheet.com]&lt;br /&gt;
|0.17&lt;br /&gt;
|-&lt;br /&gt;
|MJ2955&lt;br /&gt;
|TO-3&lt;br /&gt;
|60&lt;br /&gt;
|15&lt;br /&gt;
|20-70&lt;br /&gt;
|115&lt;br /&gt;
|2.5&lt;br /&gt;
|2N3055 Komplement&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=MJ2955 alldatasheet.com]&lt;br /&gt;
|0.40&lt;br /&gt;
|-&lt;br /&gt;
| BD132&lt;br /&gt;
| TO-126&lt;br /&gt;
| 45&lt;br /&gt;
| 3&lt;br /&gt;
| 30-120&lt;br /&gt;
| 15&lt;br /&gt;
| 60&lt;br /&gt;
| Komplement zu BD131&lt;br /&gt;
| Rei,?&lt;br /&gt;
| [http://www.alldatasheet.com/datasheet-pdf/pdf/16168/PHILIPS/BD132.html alldatasheet.com]&lt;br /&gt;
| 0.20&lt;br /&gt;
|-&lt;br /&gt;
|BC516&lt;br /&gt;
|TO-92&lt;br /&gt;
|30&lt;br /&gt;
|0.5&lt;br /&gt;
|30000&lt;br /&gt;
|0.5&lt;br /&gt;
|220&lt;br /&gt;
|Komplement zum BC517&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/15078/PHILIPS/2N3906.html alldatasheet.com]&lt;br /&gt;
|-&lt;br /&gt;
|BCP53&lt;br /&gt;
|SOT223&lt;br /&gt;
|80&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1.3&lt;br /&gt;
|115&lt;br /&gt;
| &lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.datasheetcatalog.net/de/datasheets_pdf/B/C/P/5/BCP52-16.shtml datasheetcatalog.com]&lt;br /&gt;
|-&lt;br /&gt;
|BDP950&lt;br /&gt;
|SOT223&lt;br /&gt;
|60&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|100&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.datasheetcatalog.com/datasheets_pdf/B/D/P/9/BDP950.shtml datasheetcatalog.com]&lt;br /&gt;
|0.29&lt;br /&gt;
|-&lt;br /&gt;
|BCW67&lt;br /&gt;
|SOT-23&lt;br /&gt;
|42&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|0.32&lt;br /&gt;
|200&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/79166/INFINEON/BCW67.html alldatasheet.com]&lt;br /&gt;
|0.041&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(Tabelle mit Click im Kopfbereich sortierbar)&lt;br /&gt;
&lt;br /&gt;
== Transistor-Array ==&lt;br /&gt;
&amp;lt;!-- Bitte Punkt . statt Komma , verwenden, damit die Tabelle sortierbar bleibt. --&amp;gt;&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! &amp;amp;beta; (Beta)&lt;br /&gt;
! P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W&lt;br /&gt;
! f&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;/MHz&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Datenblatt&lt;br /&gt;
! ca. Preis/€&lt;br /&gt;
|-&lt;br /&gt;
| NTE912&lt;br /&gt;
| DIL-14&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 5 NPN-Transistoren&lt;br /&gt;
| Far&lt;br /&gt;
| [http://www.nteinc.com/specs/900to999/pdf/nte912.pdf NTE]&lt;br /&gt;
| 3.50&lt;br /&gt;
|-&lt;br /&gt;
| CA3086&lt;br /&gt;
| DIL-14&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 5 NPN-Transistoren, abgekündigt&lt;br /&gt;
| ?&lt;br /&gt;
| [http://www.google.de/search?q=CA%203086 Google]&lt;br /&gt;
| 0.50&lt;br /&gt;
|-&lt;br /&gt;
| BCV61&lt;br /&gt;
| SOT143&lt;br /&gt;
| 30&lt;br /&gt;
| 0.1&lt;br /&gt;
| 100-800&lt;br /&gt;
| 0.25&lt;br /&gt;
| 100&lt;br /&gt;
| 2 NPN-Transistoren für Stromspiegel&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.alldatasheet.com/view.jsp?Searchword=BCV61 alldatasheet.com] &lt;br /&gt;
| 0.14&lt;br /&gt;
|-&lt;br /&gt;
| BCV62&lt;br /&gt;
| SOT143&lt;br /&gt;
| 30&lt;br /&gt;
| 0.1&lt;br /&gt;
| 100-800&lt;br /&gt;
| 0.25&lt;br /&gt;
| 100&lt;br /&gt;
| 2 PNP-Transistoren für Stromspiegel&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.alldatasheet.com/view.jsp?Searchword=BCV62 alldatasheet.com] &lt;br /&gt;
| 0.19&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Tabelle mit Click im Kopfbereich sortierbar)&lt;br /&gt;
&lt;br /&gt;
== Bemerkungen ==&lt;br /&gt;
&lt;br /&gt;
*U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt; = Maximale Kollektor-Emitter-Spannung bei I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
*I&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt; = Maximaler Basisstrom&lt;br /&gt;
*I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt; = Maximaler Kollektorstrom&lt;br /&gt;
*SOT-32 = TO-126&lt;br /&gt;
&lt;br /&gt;
== Lieferantenübersicht ==&lt;br /&gt;
&lt;br /&gt;
* [Rei] Reichelt: http://www.reichelt.de&lt;br /&gt;
* [Kes] Kessler: http://www.kessler-elektronik.de&lt;br /&gt;
* [csd] CSD-Electronics: http://www.csd-electronics.de/&lt;br /&gt;
* [Con] Conrad-Elektronik: http://www.conrad.de&lt;br /&gt;
* [Far] Farnell: http://www.farnell.de (gewerbl. oder Student)&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;/div&gt;</summary>
		<author><name>Oliver s</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MOSFET-%C3%9Cbersicht&amp;diff=42469</id>
		<title>MOSFET-Übersicht</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MOSFET-%C3%9Cbersicht&amp;diff=42469"/>
		<updated>2010-01-23T10:33:33Z</updated>

		<summary type="html">&lt;p&gt;Oliver s: /* N-Kanal MOSFET */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im Forum wird immer wieder gefragt, welchen Mosfet-Transistor man für ein Projekt einsetzen sollte. Und wo man die herbekommt. Deshalb soll hier eine Übersicht mit gängigen Mosfet-Transistoren entstehen, wo auch die Bezugsquellen angegeben sind. Bezugsquellen sollten nach Möglichkeit solche sein, die auch für den privaten Bastler in Frage kommen.&lt;br /&gt;
&lt;br /&gt;
Der Thread zum Thema: http://www.mikrocontroller.net/topic/41588&lt;br /&gt;
&lt;br /&gt;
siehe auch : [[Transistor-Übersicht]] - [[Dioden-Übersicht]] - [[Standardbauelemente]]&lt;br /&gt;
&lt;br /&gt;
== P-Kanal MOSFET==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! Hersteller&lt;br /&gt;
! U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! U&amp;lt;sub&amp;gt;DS&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! P/W&lt;br /&gt;
! R&amp;lt;sub&amp;gt;DS,on&amp;lt;/sub&amp;gt;/mOhm&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Preis/EUR&lt;br /&gt;
|-&lt;br /&gt;
| BS250&lt;br /&gt;
| TO-92&lt;br /&gt;
| Siliconix&lt;br /&gt;
| 4.0&lt;br /&gt;
| 60&lt;br /&gt;
| 0.12&lt;br /&gt;
| 0.35&lt;br /&gt;
| 10000&lt;br /&gt;
| -&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.32&lt;br /&gt;
|-&lt;br /&gt;
| BSH205&lt;br /&gt;
| SOT23&lt;br /&gt;
| Phi&lt;br /&gt;
| 1.0&lt;br /&gt;
| 12&lt;br /&gt;
| 0.75&lt;br /&gt;
| 0.4&lt;br /&gt;
| 500&lt;br /&gt;
| kleine Gatekapazität (3.8nC)&lt;br /&gt;
| [[Elektronikversender#csd-electronics|csd]] (a.A.)&lt;br /&gt;
| 0.30&lt;br /&gt;
|-&lt;br /&gt;
| IRLML6302PBF &lt;br /&gt;
| SOT23&lt;br /&gt;
| IRF&lt;br /&gt;
| 1.5&lt;br /&gt;
| 20&lt;br /&gt;
| 0.75&lt;br /&gt;
| 0.54&lt;br /&gt;
| 600&lt;br /&gt;
| ähnlich BSH205&lt;br /&gt;
| [[Elektronikversender#csd-electronics|csd]]&lt;br /&gt;
| 0.18&lt;br /&gt;
|-&lt;br /&gt;
| BSS83P&lt;br /&gt;
| SOT23&lt;br /&gt;
| Inf&lt;br /&gt;
| 3.0&lt;br /&gt;
| 60&lt;br /&gt;
| 0.33&lt;br /&gt;
| 0.35&lt;br /&gt;
| 2000&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.11&lt;br /&gt;
|-&lt;br /&gt;
| BSS84&lt;br /&gt;
| SOT23&lt;br /&gt;
| Fairchild,NXP&lt;br /&gt;
| 2.0&lt;br /&gt;
| 50&lt;br /&gt;
| 0.13&lt;br /&gt;
| 0.35&lt;br /&gt;
| 10000&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Farnell|Fa]]&lt;br /&gt;
| 0.28&lt;br /&gt;
|-&lt;br /&gt;
| BSS83&lt;br /&gt;
| TO-97, SOT23&lt;br /&gt;
| Phi&lt;br /&gt;
| 3.0&lt;br /&gt;
| 50&lt;br /&gt;
| 0.13&lt;br /&gt;
| 0.35&lt;br /&gt;
| 10000&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]],[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.07&lt;br /&gt;
|-&lt;br /&gt;
| BSS110&lt;br /&gt;
| TO-97, SOT23&lt;br /&gt;
| Phi&lt;br /&gt;
| 3.0&lt;br /&gt;
| 50&lt;br /&gt;
| 0.17&lt;br /&gt;
| 0.35&lt;br /&gt;
| 10000&lt;br /&gt;
| -&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| PMV65XP&lt;br /&gt;
| SOT23&lt;br /&gt;
| Phi&lt;br /&gt;
| 1.4&lt;br /&gt;
| 20&lt;br /&gt;
| 3.9&lt;br /&gt;
| ?&lt;br /&gt;
| 76&lt;br /&gt;
| grosser ID für Bauform&lt;br /&gt;
| [[Elektronikversender#Spoerle|Spo]], [[Elektronikversender#RS_Components|RS]]&lt;br /&gt;
| 0.10 (bei 3000er-Rolle)&lt;br /&gt;
|-&lt;br /&gt;
| IRF4905S&lt;br /&gt;
| D2Pack&lt;br /&gt;
| irf&lt;br /&gt;
| 4.0&lt;br /&gt;
| 55&lt;br /&gt;
| 64&lt;br /&gt;
| 3.8&lt;br /&gt;
| 20&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 2.60&lt;br /&gt;
|-&lt;br /&gt;
| IRF4905&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 4.0&lt;br /&gt;
| 55&lt;br /&gt;
| 74&lt;br /&gt;
| 3.8&lt;br /&gt;
| 20&lt;br /&gt;
| -&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.93&lt;br /&gt;
|-&lt;br /&gt;
| IRF5210S&lt;br /&gt;
| D2Pack&lt;br /&gt;
| irf&lt;br /&gt;
| 10.0&lt;br /&gt;
| 100&lt;br /&gt;
| 40&lt;br /&gt;
| ?&lt;br /&gt;
| 60&lt;br /&gt;
| -&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1.25&lt;br /&gt;
|-&lt;br /&gt;
| IRF7104&lt;br /&gt;
| SO-8&lt;br /&gt;
| irf&lt;br /&gt;
| 3.0&lt;br /&gt;
| 20&lt;br /&gt;
| 2.3&lt;br /&gt;
| 2.0&lt;br /&gt;
| 250&lt;br /&gt;
| 2 FETs im Gehäuse&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.36&lt;br /&gt;
|-&lt;br /&gt;
| IRF7205&lt;br /&gt;
| SO-8&lt;br /&gt;
| irf&lt;br /&gt;
| 3.0&lt;br /&gt;
| 30&lt;br /&gt;
| 4.6&lt;br /&gt;
| 2.5&lt;br /&gt;
| 70&lt;br /&gt;
| ?&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]] &lt;br /&gt;
| 0.34&lt;br /&gt;
|-&lt;br /&gt;
| FDC604P&lt;br /&gt;
| SuperSOT-6&lt;br /&gt;
| Fairchild&lt;br /&gt;
| 1.5&lt;br /&gt;
| 20&lt;br /&gt;
| 5.5&lt;br /&gt;
| 0.8/1.6&lt;br /&gt;
| 33&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#csd-electronics|csd]] (a.A.)&lt;br /&gt;
| 0.70&lt;br /&gt;
|-&lt;br /&gt;
| NDS0610 &lt;br /&gt;
| SOT-23&lt;br /&gt;
| Fairchild&lt;br /&gt;
| 1.8&lt;br /&gt;
| 60&lt;br /&gt;
| 0.12&lt;br /&gt;
| 0.36&lt;br /&gt;
| 10000&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#csd-electronics|csd]]&lt;br /&gt;
| 0.07&lt;br /&gt;
|-&lt;br /&gt;
| IRF5305&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 3.0&lt;br /&gt;
| 55&lt;br /&gt;
| 31&lt;br /&gt;
| 110&lt;br /&gt;
| 60&lt;br /&gt;
| -&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.59&lt;br /&gt;
|-&lt;br /&gt;
| NDS352P&lt;br /&gt;
| SOT23&lt;br /&gt;
| Fairchild&lt;br /&gt;
| 4.5&lt;br /&gt;
| 20&lt;br /&gt;
| 0.85&lt;br /&gt;
| 0.5&lt;br /&gt;
| 500&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0.76&lt;br /&gt;
|-&lt;br /&gt;
| [http://crio.mib.infn.it/wig/electronics/Componenti/Siemens/MOS%20Transistor/BSP171.pdf BSP 171]&lt;br /&gt;
| SOT-223&lt;br /&gt;
| Siemens&lt;br /&gt;
| 1.4&lt;br /&gt;
| 60&lt;br /&gt;
| 1.7&lt;br /&gt;
| 1.8&lt;br /&gt;
| 350&lt;br /&gt;
| -&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.51&lt;br /&gt;
|-&lt;br /&gt;
| IRFD9014&lt;br /&gt;
| HEXDIP/DIP4&lt;br /&gt;
| irf&lt;br /&gt;
| 2.0&lt;br /&gt;
| 60&lt;br /&gt;
| 1.1&lt;br /&gt;
| 1.3&lt;br /&gt;
| 500&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0.65&lt;br /&gt;
|-&lt;br /&gt;
| IRFD9024&lt;br /&gt;
| HEXDIP/DIP4&lt;br /&gt;
| irf&lt;br /&gt;
| 2.0&lt;br /&gt;
| 60&lt;br /&gt;
| 1.6&lt;br /&gt;
| 1.3&lt;br /&gt;
| 280&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]],[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.50&lt;br /&gt;
|-&lt;br /&gt;
| IRF7416&lt;br /&gt;
| SO-8&lt;br /&gt;
| irf&lt;br /&gt;
| 1.0&lt;br /&gt;
| 30&lt;br /&gt;
| 10&lt;br /&gt;
| 2.5&lt;br /&gt;
| 20&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]],[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.60&lt;br /&gt;
|-&lt;br /&gt;
| SUP75P03-007&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| VISHAY&lt;br /&gt;
| 3.0&lt;br /&gt;
| 30&lt;br /&gt;
| 75&lt;br /&gt;
| 187&lt;br /&gt;
| 7&lt;br /&gt;
| -&lt;br /&gt;
| nessel-elektronik.de&lt;br /&gt;
| 2.30&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(Tabelle mit Click im Kopfbereich sortierbar; a.A. = Auf Anfrage)&lt;br /&gt;
&lt;br /&gt;
== N-Kanal MOSFET==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;nkanalmosfets&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! Hersteller&lt;br /&gt;
! U&amp;lt;sub&amp;gt;GS(th)&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! U&amp;lt;sub&amp;gt;DS&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! P/W&lt;br /&gt;
! R&amp;lt;sub&amp;gt;DS,on&amp;lt;/sub&amp;gt;/mOhm&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Preis/EUR&lt;br /&gt;
|-&lt;br /&gt;
| IRF 530&lt;br /&gt;
| TO-220&lt;br /&gt;
| irf&lt;br /&gt;
| 2,9&lt;br /&gt;
| 100&lt;br /&gt;
| 16&lt;br /&gt;
| 94&lt;br /&gt;
| 160&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.44&lt;br /&gt;
|-&lt;br /&gt;
| IRL3103&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 1.0&lt;br /&gt;
| 30&lt;br /&gt;
| 64&lt;br /&gt;
| 94&lt;br /&gt;
| 12&lt;br /&gt;
| Qg=33nC (!)&lt;br /&gt;
| [[Elektronikversender#Segor-electronics|Seg]]&lt;br /&gt;
| 0.95&lt;br /&gt;
|-&lt;br /&gt;
| IRF730A&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 2.0&lt;br /&gt;
| 400&lt;br /&gt;
| 5.5&lt;br /&gt;
| 74&lt;br /&gt;
| 1000&lt;br /&gt;
| Qg=22nC (!)&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.54&lt;br /&gt;
|-&lt;br /&gt;
| IRFP064&lt;br /&gt;
| TO-247AC&lt;br /&gt;
| irf&lt;br /&gt;
| 2.0&lt;br /&gt;
| 60&lt;br /&gt;
| 70&lt;br /&gt;
| 300&lt;br /&gt;
| 9&lt;br /&gt;
| Qg=190 nC&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1.65&lt;br /&gt;
|-&lt;br /&gt;
| IRF3205&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 2.0&lt;br /&gt;
| 55&lt;br /&gt;
| 110&lt;br /&gt;
| 200&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1.10&lt;br /&gt;
|-&lt;br /&gt;
| IRL3803&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 1.0&lt;br /&gt;
| 30&lt;br /&gt;
| 140&lt;br /&gt;
| 200&lt;br /&gt;
| 6&lt;br /&gt;
| Qg=140nC&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1.15&lt;br /&gt;
|-&lt;br /&gt;
| IRF540&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 10&lt;br /&gt;
| 100&lt;br /&gt;
| 28&lt;br /&gt;
| 150&lt;br /&gt;
| 77&lt;br /&gt;
|&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Kessler|Kes]]&lt;br /&gt;
| 0.52&lt;br /&gt;
|-&lt;br /&gt;
| IRF7401&lt;br /&gt;
| SO-8&lt;br /&gt;
| irf&lt;br /&gt;
| 2.7&lt;br /&gt;
| 20&lt;br /&gt;
| 8.7&lt;br /&gt;
| 2.0&lt;br /&gt;
| 22&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.565&lt;br /&gt;
|-&lt;br /&gt;
| IRF7403&lt;br /&gt;
| SO-8&lt;br /&gt;
| irf&lt;br /&gt;
| 4.85&lt;br /&gt;
| 30&lt;br /&gt;
| 8.5&lt;br /&gt;
| 2.5&lt;br /&gt;
| 22&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.42&lt;br /&gt;
|-&lt;br /&gt;
| IRF7413&lt;br /&gt;
| SO-8&lt;br /&gt;
| irf&lt;br /&gt;
| 3.0&lt;br /&gt;
| 30&lt;br /&gt;
| 13.0&lt;br /&gt;
| 2.5&lt;br /&gt;
| 11&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Kessler|Kes]]&lt;br /&gt;
| 0.65&lt;br /&gt;
|-&lt;br /&gt;
| BUZ11&lt;br /&gt;
| TO-220&lt;br /&gt;
| ST&lt;br /&gt;
| 5.0&lt;br /&gt;
| 50&lt;br /&gt;
| 33.0&lt;br /&gt;
| 90.0&lt;br /&gt;
| 30&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.41&lt;br /&gt;
|-&lt;br /&gt;
| BS170&lt;br /&gt;
| TO-92&lt;br /&gt;
| gs&lt;br /&gt;
| 2.0&lt;br /&gt;
| 60&lt;br /&gt;
| 0.3&lt;br /&gt;
| 0.83&lt;br /&gt;
| 5000&lt;br /&gt;
|&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.13&lt;br /&gt;
|-&lt;br /&gt;
| BSN20&lt;br /&gt;
| SOT-23&lt;br /&gt;
| gs&lt;br /&gt;
| 1.8&lt;br /&gt;
| 50&lt;br /&gt;
| 0.18&lt;br /&gt;
| 0.35&lt;br /&gt;
| 6000&lt;br /&gt;
|&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.092&lt;br /&gt;
|-&lt;br /&gt;
| BSS138&lt;br /&gt;
| SOT-23&lt;br /&gt;
| div&lt;br /&gt;
| 0.8-1.6&lt;br /&gt;
| 50&lt;br /&gt;
| 0.22&lt;br /&gt;
| 0.36&lt;br /&gt;
| ~2000&lt;br /&gt;
| Rds=1,4-3,6Ohm je nach Hersteller&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.06&lt;br /&gt;
|-&lt;br /&gt;
| IRFP2907&lt;br /&gt;
| TO-247AC&lt;br /&gt;
| irf&lt;br /&gt;
| 4.0&lt;br /&gt;
| 75&lt;br /&gt;
| 209&lt;br /&gt;
| 470&lt;br /&gt;
| 4.5&lt;br /&gt;
|&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 4.70&lt;br /&gt;
|-&lt;br /&gt;
| 2N7000&lt;br /&gt;
| TO-92&lt;br /&gt;
| ON&lt;br /&gt;
| 3.0&lt;br /&gt;
| 60&lt;br /&gt;
| 0.2&lt;br /&gt;
| 0.35&lt;br /&gt;
| 5000&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Kessler|Kes]]&lt;br /&gt;
| 0.13&lt;br /&gt;
|-&lt;br /&gt;
| BS107&lt;br /&gt;
| TO-92&lt;br /&gt;
| ON, Phi&lt;br /&gt;
| 3.0&lt;br /&gt;
| 200&lt;br /&gt;
| 0.25&lt;br /&gt;
| 0.35&lt;br /&gt;
| 6400/14000&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.18&lt;br /&gt;
|-&lt;br /&gt;
| BS108&lt;br /&gt;
| TO-92&lt;br /&gt;
| ON, Phi&lt;br /&gt;
| 2.0&lt;br /&gt;
| 200&lt;br /&gt;
| 0.25&lt;br /&gt;
| 0.35&lt;br /&gt;
| 8000&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.14&lt;br /&gt;
|-&lt;br /&gt;
| BUK100&lt;br /&gt;
| TO-220&lt;br /&gt;
| Phi&lt;br /&gt;
| 3.0&lt;br /&gt;
| 50&lt;br /&gt;
| 13.5&lt;br /&gt;
| 40&lt;br /&gt;
| 125&lt;br /&gt;
| Overload-Protection, ESD-Protection&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1.40&lt;br /&gt;
|-&lt;br /&gt;
| IRL3705N&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 2.0&lt;br /&gt;
| 55&lt;br /&gt;
| 89&lt;br /&gt;
| 170&lt;br /&gt;
| 10&lt;br /&gt;
| Qg=98nC&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1.20&lt;br /&gt;
|-&lt;br /&gt;
| BUZ72A&lt;br /&gt;
| TO-220&lt;br /&gt;
| Infineon&lt;br /&gt;
| 4.0&lt;br /&gt;
| 100&lt;br /&gt;
| 9.0&lt;br /&gt;
| 40&lt;br /&gt;
| 250&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.45&lt;br /&gt;
|-&lt;br /&gt;
| IRLZ34N&lt;br /&gt;
| TO-220&lt;br /&gt;
| irf&lt;br /&gt;
| 2.5&lt;br /&gt;
| 55&lt;br /&gt;
| 30&lt;br /&gt;
| 68&lt;br /&gt;
| 35.0&lt;br /&gt;
| Logic-Level&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.42&lt;br /&gt;
|-&lt;br /&gt;
| IRF1404&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 4.0&lt;br /&gt;
| 40&lt;br /&gt;
| 202&lt;br /&gt;
| 333&lt;br /&gt;
| 4&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1.65&lt;br /&gt;
|-&lt;br /&gt;
| IRL1004&lt;br /&gt;
| TO-220&lt;br /&gt;
| irf&lt;br /&gt;
| 2.7&lt;br /&gt;
| 40&lt;br /&gt;
| 130&lt;br /&gt;
| 200&lt;br /&gt;
| 6.5&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1.25&lt;br /&gt;
|-&lt;br /&gt;
| IRL530&lt;br /&gt;
| TO220, D2Pack&lt;br /&gt;
| irf&lt;br /&gt;
| 2&lt;br /&gt;
| 100&lt;br /&gt;
| 15.0&lt;br /&gt;
| 88&lt;br /&gt;
| 160&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.51&lt;br /&gt;
|-&lt;br /&gt;
| IRF830&lt;br /&gt;
| TO220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 2.0-4.5   &lt;br /&gt;
| 500&lt;br /&gt;
| 5.0&lt;br /&gt;
| 74&lt;br /&gt;
| 1400&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Kessler|Kes]]&lt;br /&gt;
| 0.57&lt;br /&gt;
|-&lt;br /&gt;
| IRF840&lt;br /&gt;
| TO220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 2.0-4.0   &lt;br /&gt;
| 500&lt;br /&gt;
| 8.0&lt;br /&gt;
| 125&lt;br /&gt;
| 850&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.57&lt;br /&gt;
|-&lt;br /&gt;
| FDC645N&lt;br /&gt;
| SuperSOT-6&lt;br /&gt;
| Fairchild&lt;br /&gt;
| 1.5&lt;br /&gt;
| 30&lt;br /&gt;
| 5.5&lt;br /&gt;
| 0.8/1.6&lt;br /&gt;
| 30&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#csd-electronics|csd]] (a.A.), Far&lt;br /&gt;
| 0.7&lt;br /&gt;
|-&lt;br /&gt;
| BSP297&lt;br /&gt;
| SOT-223&lt;br /&gt;
| Siemens/Infineon&lt;br /&gt;
| 0.8-2.4&lt;br /&gt;
| 200&lt;br /&gt;
| 0.65&lt;br /&gt;
| 1.8&lt;br /&gt;
| 6000&lt;br /&gt;
| 200V UDS, SMT und LL (seltene Kombi)&lt;br /&gt;
| [[Elektronikversender#Farnell|Far]], [[Elektronikversender#Schuricht|Schu]], [[Elektronikversender#RS_Components|RS]]&lt;br /&gt;
| 0.56&lt;br /&gt;
|-&lt;br /&gt;
| IRF7455&lt;br /&gt;
| SO-8&lt;br /&gt;
| irf&lt;br /&gt;
| 4.5&lt;br /&gt;
| 30&lt;br /&gt;
| 15&lt;br /&gt;
| 2.5&lt;br /&gt;
| 7.5&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Kessler|Kes]]&lt;br /&gt;
| 1.04&lt;br /&gt;
|-&lt;br /&gt;
| SI4442DY&lt;br /&gt;
| SO-8&lt;br /&gt;
| vis&lt;br /&gt;
| 2.5&lt;br /&gt;
| 30&lt;br /&gt;
| 22&lt;br /&gt;
| 2.5&lt;br /&gt;
| 5/4.5V&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Kessler|Kes]]&lt;br /&gt;
| 1.64&lt;br /&gt;
|-&lt;br /&gt;
| IRLU2905&lt;br /&gt;
| TO251, DPack&lt;br /&gt;
| irf&lt;br /&gt;
| 2,0&lt;br /&gt;
| 55&lt;br /&gt;
| 42&lt;br /&gt;
| 1,5&lt;br /&gt;
| 27&lt;br /&gt;
| Logic-Level&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.67&lt;br /&gt;
|-&lt;br /&gt;
| IRFD014&lt;br /&gt;
| HEXDIP/DIP4&lt;br /&gt;
| irf&lt;br /&gt;
| 2.0-4.0&lt;br /&gt;
| 60&lt;br /&gt;
| 1.7&lt;br /&gt;
| 1.3&lt;br /&gt;
| 200&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Conrad|Con]],[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.52&lt;br /&gt;
|-&lt;br /&gt;
| IRFD024&lt;br /&gt;
| HEXDIP/DIP4&lt;br /&gt;
| irf&lt;br /&gt;
| 2.0-4.0&lt;br /&gt;
| 60&lt;br /&gt;
| 2.5&lt;br /&gt;
| 1.3&lt;br /&gt;
| 100&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Conrad|Con]],[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.54&lt;br /&gt;
|-&lt;br /&gt;
| IRLD024&lt;br /&gt;
| HEXDIP/DIP4&lt;br /&gt;
| irf&lt;br /&gt;
| 1.0-2.0&lt;br /&gt;
| 60&lt;br /&gt;
| 2.5&lt;br /&gt;
| 1.3&lt;br /&gt;
| 100&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Conrad|Con]],[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.47&lt;br /&gt;
|-&lt;br /&gt;
| IRLU3717&lt;br /&gt;
| I-Pak&lt;br /&gt;
| irf&lt;br /&gt;
| 2.0&lt;br /&gt;
| 20&lt;br /&gt;
| 120&lt;br /&gt;
| 1.5/89&lt;br /&gt;
| 4&lt;br /&gt;
| Qg=21nC&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0.86&lt;br /&gt;
|-&lt;br /&gt;
| IRFP3703&lt;br /&gt;
| TO-247AC&lt;br /&gt;
| irf&lt;br /&gt;
| 4.0&lt;br /&gt;
| 30&lt;br /&gt;
| 210&lt;br /&gt;
| 230&lt;br /&gt;
| 2.8&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 5.08&lt;br /&gt;
|-&lt;br /&gt;
| IRF3710&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 5&lt;br /&gt;
| 100&lt;br /&gt;
| 57&lt;br /&gt;
| 200&lt;br /&gt;
| 23&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0.83&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(Tabelle mit Click im Kopfbereich sortierbar, a.A.=Auf Anfrage)&lt;br /&gt;
&lt;br /&gt;
== N-Kanal J-FET==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;nkanalmosfets&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! Hersteller&lt;br /&gt;
! U&amp;lt;sub&amp;gt;GS(co)&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! U&amp;lt;sub&amp;gt;DS&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;D(max)&amp;lt;/sub&amp;gt;/mA&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Preis/EUR&lt;br /&gt;
|-&lt;br /&gt;
| BF245A&lt;br /&gt;
| TO-92&lt;br /&gt;
| diverse&lt;br /&gt;
| -2,2&lt;br /&gt;
| 30&lt;br /&gt;
| 6,5&lt;br /&gt;
| ??&lt;br /&gt;
| ??&lt;br /&gt;
|-&lt;br /&gt;
| BF245B&lt;br /&gt;
| TO-92&lt;br /&gt;
| diverse&lt;br /&gt;
| -3,8&lt;br /&gt;
| 30&lt;br /&gt;
| 15&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,15&lt;br /&gt;
|-&lt;br /&gt;
| BF245C&lt;br /&gt;
| TO-92&lt;br /&gt;
| diverse&lt;br /&gt;
| -7,5&lt;br /&gt;
| 30&lt;br /&gt;
| 25&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,15&lt;br /&gt;
|-&lt;br /&gt;
| BF246A&lt;br /&gt;
| TO-92&lt;br /&gt;
| diverse&lt;br /&gt;
| -4&lt;br /&gt;
| 25&lt;br /&gt;
| 80&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,15&lt;br /&gt;
|-&lt;br /&gt;
| BF246B&lt;br /&gt;
| TO-92&lt;br /&gt;
| diverse&lt;br /&gt;
| -7&lt;br /&gt;
| 25&lt;br /&gt;
| 140&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,17&lt;br /&gt;
|-&lt;br /&gt;
| BF246C&lt;br /&gt;
| TO-92&lt;br /&gt;
| diverse&lt;br /&gt;
| -12&lt;br /&gt;
| 25&lt;br /&gt;
| 250&lt;br /&gt;
| ??&lt;br /&gt;
| ??&lt;br /&gt;
|-&lt;br /&gt;
| BF511&lt;br /&gt;
| SOT-23&lt;br /&gt;
| diverse&lt;br /&gt;
| -1,5&lt;br /&gt;
| 20&lt;br /&gt;
| 7&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,36&lt;br /&gt;
|-&lt;br /&gt;
| BFR30&lt;br /&gt;
| SOT-23&lt;br /&gt;
| diverse&lt;br /&gt;
| -4&lt;br /&gt;
| 25&lt;br /&gt;
| 10&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| BFR31&lt;br /&gt;
| SOT-23&lt;br /&gt;
| diverse&lt;br /&gt;
| -2&lt;br /&gt;
| 25&lt;br /&gt;
| 5&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(Tabelle mit Click im Kopfbereich sortierbar)&lt;br /&gt;
&lt;br /&gt;
== FET-Paare ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;fetpaare&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! Hersteller&lt;br /&gt;
! UGS/V&lt;br /&gt;
! UDS/V&lt;br /&gt;
! ID/A&lt;br /&gt;
! P/W&lt;br /&gt;
! RDSon/mOhm&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Preis/EUR&lt;br /&gt;
|-&lt;br /&gt;
| IRF7389&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 3.0&lt;br /&gt;
| 30&lt;br /&gt;
| 7.3/-5.3&lt;br /&gt;
| 2.0&lt;br /&gt;
| 29/58&lt;br /&gt;
| P+N&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0.56&lt;br /&gt;
|-&lt;br /&gt;
| IRF7501&lt;br /&gt;
| micro8&lt;br /&gt;
| IRF&lt;br /&gt;
| 2,7&lt;br /&gt;
| 20&lt;br /&gt;
| 2,4&lt;br /&gt;
| ?&lt;br /&gt;
| 135/4,5V&lt;br /&gt;
| 2*N&lt;br /&gt;
| [[Elektronikversender#Kessler|Kessler]], [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 1,64&lt;br /&gt;
|-&lt;br /&gt;
| IRF7506&lt;br /&gt;
| micro8&lt;br /&gt;
| IRF&lt;br /&gt;
| 4,5&lt;br /&gt;
| 30&lt;br /&gt;
| 1,7&lt;br /&gt;
| ?&lt;br /&gt;
| 270/10V&lt;br /&gt;
| 2*P&lt;br /&gt;
| [[Elektronikversender#Kessler|Kessler]], [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0,56&lt;br /&gt;
|-&lt;br /&gt;
| IRF7103&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 4,5&lt;br /&gt;
| 50&lt;br /&gt;
| 2,3&lt;br /&gt;
| 2&lt;br /&gt;
| 130/10V&lt;br /&gt;
| 2*N&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]], [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0,32&lt;br /&gt;
|-&lt;br /&gt;
| IRF7104&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 4,5&lt;br /&gt;
| 20&lt;br /&gt;
| 2,3&lt;br /&gt;
| 2&lt;br /&gt;
| 250/10V&lt;br /&gt;
| 2*P&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,32&lt;br /&gt;
|-&lt;br /&gt;
| IRF7316&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 4,5&lt;br /&gt;
| 30&lt;br /&gt;
| 4,9&lt;br /&gt;
| ?&lt;br /&gt;
| 58/10V&lt;br /&gt;
| 2*P&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,49&lt;br /&gt;
|-&lt;br /&gt;
| IRF7313&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 4,5&lt;br /&gt;
| 30&lt;br /&gt;
| 6,5&lt;br /&gt;
| ?&lt;br /&gt;
| 46/4,5V&lt;br /&gt;
| 2*N&lt;br /&gt;
| [[Elektronikversender#Kessler|Kessler]], [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0,66&lt;br /&gt;
|-&lt;br /&gt;
| FDD8424H&lt;br /&gt;
| Dual DPAK4L&lt;br /&gt;
| Fairchild&lt;br /&gt;
| +-20/+-20&lt;br /&gt;
| 40/-40 &lt;br /&gt;
| 9/-6,5&lt;br /&gt;
| 3,1&lt;br /&gt;
| 24/54 @+ -10V(GS) 30/70 @ + - 4,5V(GS)&lt;br /&gt;
| P+N&lt;br /&gt;
| [[Elektronikversender#Digi-Key|Digi-Key]] &lt;br /&gt;
| 0,73&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(Tabelle mit Click im Kopfbereich sortierbar)&lt;br /&gt;
&lt;br /&gt;
== Mosfet-Treiber ==&lt;br /&gt;
&lt;br /&gt;
Bitte falls möglich auch bei den MOSFET-Treibern einen Händler nennen!&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;fetpaare&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant / Datenblatt&lt;br /&gt;
! Preis/EUR&lt;br /&gt;
|-&lt;br /&gt;
| IR2101&lt;br /&gt;
| High &amp;amp; Low-Side Driver, 130/270mA&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
|-&lt;br /&gt;
| IR2104&lt;br /&gt;
| Half Bridge Driver, 130/270mA&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
|-&lt;br /&gt;
| IR2110&lt;br /&gt;
| High &amp;amp; Low-Side Driver, 2A&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
| 1,55 EUR&lt;br /&gt;
|- &lt;br /&gt;
| IR2111&lt;br /&gt;
| Half Bridge Driver 200/430mA&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 1,10 EUR&lt;br /&gt;
|- &lt;br /&gt;
| IR2112&lt;br /&gt;
| High &amp;amp; Low-Side Driver, 200/420mA&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
| 1,45 EUR&lt;br /&gt;
|- &lt;br /&gt;
| IR2113&lt;br /&gt;
| High &amp;amp; Low-Side Driver, 2A&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
| 1,85 EUR&lt;br /&gt;
|- &lt;br /&gt;
| IR2117&lt;br /&gt;
| Single Channel Driver, 200/420mA (High-Side)&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
| 1,20 EUR&lt;br /&gt;
|- &lt;br /&gt;
| IR2121&lt;br /&gt;
| Low Side Driver, 1A/2A&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
|- &lt;br /&gt;
| IR2125&lt;br /&gt;
| Single Channel Driver, 1A/2A (High-Side, Current-Limiting)&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
|- &lt;br /&gt;
| IR2127&lt;br /&gt;
| Single Channel Driver, 200/420mA (High-Side)&amp;lt;br/&amp;gt;3,3V und 5V Input Logic Kompatibel&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
|- &lt;br /&gt;
| IR2130&lt;br /&gt;
| 3-Phase Bridge Driver 200/420mA&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
|- &lt;br /&gt;
| IR2151&lt;br /&gt;
| Self Oscillating Half Bridge Driver&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
|- &lt;br /&gt;
| IR2153&lt;br /&gt;
| Self Oscillating Half Bridge Driver&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
|- &lt;br /&gt;
| IR2155&lt;br /&gt;
| Self Oscillating Half Bridge Driver&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
|- &lt;br /&gt;
| IR2181&lt;br /&gt;
| High &amp;amp; Low-Side Driver, 1.4A/1.8A&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
|- &lt;br /&gt;
| IR2183&lt;br /&gt;
| Half Bridge Driver, 1.4A/1.8A, Ton/Toff=180ns/220ns&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] (günstiger als Reichelt) &lt;br /&gt;
|- &lt;br /&gt;
| IR2184&lt;br /&gt;
| Half Bridge Driver, 1.4A/1.8A, Ton/Toff=680ns/270ns&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] (günstiger als Reichelt) &lt;br /&gt;
|- &lt;br /&gt;
| IR2136&lt;br /&gt;
| 3 Phase Driver, DIP28 SOIC28, 120/250mA, Ton/Toff=400ns/380ns&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
|- &lt;br /&gt;
| ICL7667&lt;br /&gt;
| Dual Power MOSFET Driver (VCC = 4.5V-15V, 7 Ohm) &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
|- &lt;br /&gt;
| HIP4080&lt;br /&gt;
| Full Bridge Driver &amp;amp; PWM Generator 80V 2,5A DIP20 SOIC20&lt;br /&gt;
| [http://www.intersil.com/data/an/an9324.pdf Datenblatt], veraltet-&amp;gt;[http://www.intersil.com/data/fn/fn3658.pdf 4080A]&lt;br /&gt;
|- &lt;br /&gt;
| HIP4080A&lt;br /&gt;
| Full Bridge Driver 80V 2,5A DIP20 SOIC20&lt;br /&gt;
| [http://www.intersil.com/data/fn/fn3/fn3658/ Datenblatt]&lt;br /&gt;
|- &lt;br /&gt;
| HIP4081&lt;br /&gt;
| Full Bridge Driver 80V 2,5A DIP20 SOIC20&lt;br /&gt;
| [http://www.intersil.com/data/tb/tb321.pdf Datenblatt], veraltet-&amp;gt;[http://www.intersil.com/data/fn/fn3/fn3178/fn3178.pdf 4081A]  &lt;br /&gt;
|- &lt;br /&gt;
| HIP4081A&lt;br /&gt;
| Full Bridge Driver 80V 2,5A DIP20 SOIC20&lt;br /&gt;
| [http://www.intersil.com/data/fn/fn3/fn3659/ Datenblatt]&lt;br /&gt;
|- &lt;br /&gt;
| HIP4082&lt;br /&gt;
| Full Bridge Driver 80V 1,2A DIP16 SOIC16&lt;br /&gt;
| [http://www.intersil.com/data/fn/fn3676.pdf Datenblatt]; [http://www.intersil.com/data/an/an9611.pdf App-Note]&lt;br /&gt;
|- &lt;br /&gt;
| HIP4083&lt;br /&gt;
| 3 Phase High side N-channel MOSFET driver 80V 0.3A DIP16 SOIC16&lt;br /&gt;
| [http://www.intersil.com/data/fn/fn4223.pdf Datenblatt]&lt;br /&gt;
|- &lt;br /&gt;
| HIP4084&lt;br /&gt;
| 4 Phase Driver 80V 0.5A DIP28 SOIC28&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| HIP4086&lt;br /&gt;
| 3 Phase Driver 80V 0.5A DIP24 SOIC24&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| VNH3ASP30-E&lt;br /&gt;
| Automotive Fully Integrated H-Bridge Motor Driver (30A, 41V, STMicroelectronics)&lt;br /&gt;
| [[Elektronikversender#Spoerle|Spo]], ca. 320 EUR/100 Stk. ohne MwSt&amp;lt;br&amp;gt;[http://www.st.com/stonline/stappl/productcatalog/app?path=/pages/stcom/PcStComPartNumberSearch.searchPartNumber&amp;amp;search=vnh3asp30-e Datasheet VNH3ASP30-E]&lt;br /&gt;
|-&lt;br /&gt;
| TC4451 / TC4452&lt;br /&gt;
| 12A High-Speed MOSFET Drivers, Microchip (8-Pin PDIP/SOIC, 8-Pin DFN, TO-220&lt;br /&gt;
| [[Elektronikversender#Farnell|Far]]&lt;br /&gt;
|-&lt;br /&gt;
| LM5104&lt;br /&gt;
| High Voltage Half-Bridge Gate Driver (SO8). Ist im MD23 Motorboard verbaut &lt;br /&gt;
| RS, [http://de.rs-online.com/web/search/searchBrowseAction.html?method=searchProducts&amp;amp;searchTerm=lm5104&amp;amp;x=0&amp;amp;y=0  Produktansicht]&lt;br /&gt;
| 5Stk 12,88 EUR -&amp;gt; 3 Eur Stk.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Anmerkungen ==&lt;br /&gt;
&lt;br /&gt;
* U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; - minimale Gatespannung, bei welcher der MOSFET zu leiten anfängt (100µA..1mA, nicht genormt). Zur vollständigen Durchschaltung bei maximalem Strom braucht es höhere Spannungen.&lt;br /&gt;
* Logic Level - FET schaltet bei niedrigen Gatespannungen von typisch 4,5V (z.B. CMOS Logikpegel) hinreichend durch. Normale MOSFETs brauchen hierfür typisch 10V.&lt;br /&gt;
* U&amp;lt;sub&amp;gt;GS(co)&amp;lt;/sub&amp;gt; - Gate Source Cut Off Spannung, bei welcher der Drainstrom I&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt; eines JFETs praktisch Null ist. Die Messbedingung ist jedoch nicht genormt (0,5nA..200µA).&lt;br /&gt;
* N-Kanal MOSFETs mit niedrigem R&amp;lt;sub&amp;gt;DS,On&amp;lt;/sub&amp;gt; sind technologisch einfacher herzustellen als P-Kanal MOSFETs. Deshalb gibt es bei P-Kanal keine so große Auswahl und oft werden Schaltungen angestrebt, in denen ausschließlich N-Kanal MOSFETs verwendet werden. Es gibt spezielle Treiberbausteine, die über eine Ladungspumpe für entsprechend hohe Gatespannung auch für die High-Side N-Fets sorgen (&amp;quot;Bootstrap Circuits&amp;quot;, siehe Artikel [[Treiber]]).&lt;br /&gt;
* Bei der Dimensionierung ist zu beachten, dass die Stromangabe im allgemeinen für 25°C gilt. Geht man davon aus, dass der MOSFET mit maximal zulässigem Strom betrieben wird und mit passend dimensioniertem [[Kühlkörper]] ausgestattet ist, so beträgt die Sperrschichttemperatur bis zu 150°C, folglich gilt z.B. für den IRF540 nicht mehr 28A, sondern nur noch ca. 12-15A.&lt;br /&gt;
* Restströme sind auch stark von der Temperatur abhängig. Bei höherer Temperatur nehmen die Restströme exponentiell zu. So können bei 100°C durchaus 100 µA zwischen Source und Drain auch im gesperrten Zustand fließen. Bei 25°C ist dieser Reststrom meist bei 1µA spezifiziert. Real sind es meist weniger.&lt;br /&gt;
* Die Gate-Charge-Werte (s. Datenblatt) bestimmen, wie schnell das Gate beim Schalten umgeladen werden kann. Auch wenn MOSFETs stromlos den durchgeschalteten Zustand halten können, braucht man während des Umschaltvorganges einen Strom, der das Gate umlädt (ähnlich wie ein Kondensator). Je höher dieser Strom, um so schneller ist der Umschaltvorgang und um so geringer die Verlustleistung während dieser Phase. Leistungs-MOSFETs können bei höheren Frequenzen (&amp;gt;1KHz) oft nur mit höheren Gateströmen von 0,1A-2A sinnvoll geschaltet werden. Man kann das Gate also nicht direkt an einen Digitalpin anschließen. Man braucht einen [[MOSFET-Übersicht#MOSFET-Treiber | MOSFET-Treiber]]. Manche MOSFETs haben eine sehr geringe Total Gate Charge (z.B. 4-10nC). Diese können in gewissen Grenzen recht gut direkt an digitalen [[Ausgangsstufen Logik-ICs | Logikausgängen]] betrieben werden. Zur Abschätzung kann man sich merken: Wenn man das Gate eines MOSFETs mit einer Eingangskapazität von 1nF (~10nC) in 100ns auf 10V aufladen will, braucht man dazu 100mA.&lt;br /&gt;
&lt;br /&gt;
== Lieferantenübersicht ==&lt;br /&gt;
&lt;br /&gt;
* [[Elektronikversender#Reichelt|Rei]]&amp;lt;nowiki&amp;gt;chelt&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [[Elektronikversender#Conrad|Con]]&amp;lt;nowiki&amp;gt;rad&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [[Elektronikversender#Kessler|Kes]]&amp;lt;nowiki&amp;gt;sler&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [[Elektronikversender#csd-electronics|csd]]&amp;lt;nowiki&amp;gt;-electronics&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [[Elektronikversender#Farnell|Far]]&amp;lt;nowiki&amp;gt;nell&amp;lt;/nowiki&amp;gt; (nur gewerbliche Kunden oder Studenten)&lt;br /&gt;
* [[Elektronikversender#Schuricht|Schu]]&amp;lt;nowiki&amp;gt;richt&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [[Elektronikversender#RS_Components|RS]]&lt;br /&gt;
* [[Elektronikversender#Spoerle|Spo]]&amp;lt;nowiki&amp;gt;erle&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*   HBE-Shop_FARNELL-Fachhändler, auch als nichtgewerblicher Kunde&lt;br /&gt;
&lt;br /&gt;
== Herstellerübersicht ==&lt;br /&gt;
&lt;br /&gt;
* [irf] [http://www.irf.com International Rectifier]&lt;br /&gt;
* [Siliconix] [http://www.vishay.com/company/brands/siliconix/ Vishay Siliconix]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[FET]]&lt;br /&gt;
* [[IGBT]]&lt;br /&gt;
* [[Treiber]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.sprut.de/electronic/switch/nkanal/nkanal.html N-Kanal MOSFET leicht erklärt bei sprut.de]&lt;br /&gt;
* [http://www.sprut.de/electronic/switch/pkanal/pkanal.html P-Kanal MOSFET leicht erklärt bei sprut.de]&lt;br /&gt;
* [http://elektronik-kompendium.de/sites/bau/0510161.htm MOSFET im ElKo]&lt;br /&gt;
* [http://elektronik-kompendium.de/public/schaerer/battoff.htm Abschaltverzögerung beim ElKo]&lt;br /&gt;
* [http://elektronik-kompendium.de/sites/bau/0207011.htm FET beim ElKo]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Mosfet MOSFET bei Wikipedia]&lt;br /&gt;
* [http://www.irf.com/product-info/auto/autogdic.html IR21xx Familienvergleich]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;/div&gt;</summary>
		<author><name>Oliver s</name></author>
	</entry>
</feed>