<?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=Jojos</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=Jojos"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Jojos"/>
	<updated>2026-04-09T22:59:07Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Dampfphasen_L%C3%B6ten_-_DIY_L%C3%B6sungen&amp;diff=106200</id>
		<title>Dampfphasen Löten - DIY Lösungen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Dampfphasen_L%C3%B6ten_-_DIY_L%C3%B6sungen&amp;diff=106200"/>
		<updated>2023-06-21T16:07:55Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* YouTube Videos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dampfphasenlöten ==&lt;br /&gt;
Löten per Dampfphase ist eine interessante Variante, um sehr gute Lötergebnisse zu erzielen. Kommerzielle Anlagen sind recht teuer, diese müssen reproduzierbare Ergebnisse liefern und einfach bedienbar sein. Trotzdem gibt es Hobbyprojekte, die dieses Verfahren nutzen und eine Alternative zum umgebauten Pizzaofen sind. In diesem Artikel sollen Links zu solchen Projekten gesammelt werden, gerne können auch eigene Projekte und positive wie negative Erfahrungen ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/481363 Forumsbeitrag]: DIY Dampfphasen Lötofen&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/307715 Forumsbeitrag]: Dampfphasenlöten mit Galden und Friteuse&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/reflow-loeten-selbstgemacht Forumsbeitrag]: Reflow löten selbstgemacht&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://www.fingers-welt.de/phpBB/viewtopic.php?f=14&amp;amp;t=6871 Fingers Welt]&lt;br /&gt;
* [https://www.imdes.de/ IMDES], Dampfphasenlötanlagen für Laborbetrieb&lt;br /&gt;
&lt;br /&gt;
== YouTube Videos ==&lt;br /&gt;
* [https://www.youtube.com/watch?v=8JRXbwYZmrU Blechdosenofen, sehr interessant]&lt;br /&gt;
* [https://diyodemag.com/features/vapour_caper Beitrag zum Video]&lt;br /&gt;
* [https://www.youtube.com/watch?v=czwRntpEzgg Glasbehälter auf Heizplatte]&lt;br /&gt;
* [https://www.youtube.com/watch?v=FJvLBmhPMx0 McGyver :)]  &lt;br /&gt;
* [https://www.youtube.com/watch?v=W0mymbEpZDA Experimenteller Aufbau, NL]&lt;br /&gt;
* [https://www.youtube.com/watch?v=3TgbaxAnVQs Studienarbeit? Wenig Infos, schöne Bilder]&lt;br /&gt;
* [https://www.youtube.com/watch?v=D28uSzCs7-k&amp;amp;t=318s Gastronorm (GN) Behälter mit Glasdeckel]&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Dampfphasen_L%C3%B6ten_-_DIY_L%C3%B6sungen&amp;diff=106199</id>
		<title>Dampfphasen Löten - DIY Lösungen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Dampfphasen_L%C3%B6ten_-_DIY_L%C3%B6sungen&amp;diff=106199"/>
		<updated>2023-06-21T16:07:03Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* YouTube Videos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dampfphasenlöten ==&lt;br /&gt;
Löten per Dampfphase ist eine interessante Variante, um sehr gute Lötergebnisse zu erzielen. Kommerzielle Anlagen sind recht teuer, diese müssen reproduzierbare Ergebnisse liefern und einfach bedienbar sein. Trotzdem gibt es Hobbyprojekte, die dieses Verfahren nutzen und eine Alternative zum umgebauten Pizzaofen sind. In diesem Artikel sollen Links zu solchen Projekten gesammelt werden, gerne können auch eigene Projekte und positive wie negative Erfahrungen ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/481363 Forumsbeitrag]: DIY Dampfphasen Lötofen&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/307715 Forumsbeitrag]: Dampfphasenlöten mit Galden und Friteuse&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/reflow-loeten-selbstgemacht Forumsbeitrag]: Reflow löten selbstgemacht&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://www.fingers-welt.de/phpBB/viewtopic.php?f=14&amp;amp;t=6871 Fingers Welt]&lt;br /&gt;
* [https://www.imdes.de/ IMDES], Dampfphasenlötanlagen für Laborbetrieb&lt;br /&gt;
&lt;br /&gt;
== YouTube Videos ==&lt;br /&gt;
* [https://www.youtube.com/watch?v=8JRXbwYZmrU Blechdosenofen], sehr interessant&lt;br /&gt;
* [https://diyodemag.com/features/vapour_caper Beitrag zum Video]&lt;br /&gt;
* [https://www.youtube.com/watch?v=czwRntpEzgg Glasbehälter auf Heizplatte]&lt;br /&gt;
* [https://www.youtube.com/watch?v=FJvLBmhPMx0 McGyver :)]  &lt;br /&gt;
* [https://www.youtube.com/watch?v=W0mymbEpZDA Experimenteller Aufbau, NL]&lt;br /&gt;
* [https://www.youtube.com/watch?v=3TgbaxAnVQs Studienarbeit?] Wenig Infos, schöne Bilder&lt;br /&gt;
* [https://www.youtube.com/watch?v=D28uSzCs7-k&amp;amp;t=318s] Gastronorm (GN) Behälter mit Glasdeckel&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Dampfphasen_L%C3%B6ten_-_DIY_L%C3%B6sungen&amp;diff=101091</id>
		<title>Dampfphasen Löten - DIY Lösungen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Dampfphasen_L%C3%B6ten_-_DIY_L%C3%B6sungen&amp;diff=101091"/>
		<updated>2019-09-25T19:10:02Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* YouTube Videos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dampfphasenlöten ==&lt;br /&gt;
Löten per Dampfphase ist eine interessante Variante um sehr gute Lötergebnisse zu erzielen. Kommerzielle Anlagen sind recht teuer, diese müssen reproduzierbare Ergebnisse liefern und einfach bedienbar sein.&lt;br /&gt;
Trotzdem gibt es Hobbyprojekte die dieses Verfahren nutzen und eine Alternative zum umgebauten Pizzaofen sind. In diesem Artikel sollen Links zu solchen Projekten gesammelt werden, gerne können auch eigene Projekte und positive wie negative Erfahrungen ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Threads in µC.net ===&lt;br /&gt;
https://www.mikrocontroller.net/topic/481363&amp;lt;br /&amp;gt;&lt;br /&gt;
https://www.mikrocontroller.net/topic/307715&amp;lt;br /&amp;gt;&lt;br /&gt;
https://www.mikrocontroller.net/topic/reflow-loeten-selbstgemacht&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== YouTube Videos ===&lt;br /&gt;
Blechdosenofen, sehr interessant.   https://www.youtube.com/watch?v=8JRXbwYZmrU&amp;lt;br /&amp;gt;&lt;br /&gt;
Beitrag dazu: https://diyodemag.com/features/vapour_caper&amp;lt;br /&amp;gt;&lt;br /&gt;
Glasbehälter auf Heizplatte  https://www.youtube.com/watch?v=czwRntpEzgg&amp;lt;br /&amp;gt;&lt;br /&gt;
McGyver :)  https://www.youtube.com/watch?v=FJvLBmhPMx0&amp;lt;br /&amp;gt;&lt;br /&gt;
Experimenteller Aufbau, NL  https://www.youtube.com/watch?v=W0mymbEpZDA&amp;lt;br /&amp;gt;&lt;br /&gt;
Studienarbeit? Wenig Info, schöne Bilder https://www.youtube.com/watch?v=3TgbaxAnVQs&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Websites ===&lt;br /&gt;
Fingers Welt Thread https://www.fingers-welt.de/phpBB/viewtopic.php?f=14&amp;amp;t=6871&amp;lt;br /&amp;gt;&lt;br /&gt;
Blog Engineering-Arts, Spargeltopfmethode https://engineeringarts.wordpress.com/2016/03/06/diy-dampfphasenloeten/&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Dampfphasen_L%C3%B6ten_-_DIY_L%C3%B6sungen&amp;diff=101090</id>
		<title>Dampfphasen Löten - DIY Lösungen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Dampfphasen_L%C3%B6ten_-_DIY_L%C3%B6sungen&amp;diff=101090"/>
		<updated>2019-09-25T19:09:24Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* YouTube Videos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dampfphasenlöten ==&lt;br /&gt;
Löten per Dampfphase ist eine interessante Variante um sehr gute Lötergebnisse zu erzielen. Kommerzielle Anlagen sind recht teuer, diese müssen reproduzierbare Ergebnisse liefern und einfach bedienbar sein.&lt;br /&gt;
Trotzdem gibt es Hobbyprojekte die dieses Verfahren nutzen und eine Alternative zum umgebauten Pizzaofen sind. In diesem Artikel sollen Links zu solchen Projekten gesammelt werden, gerne können auch eigene Projekte und positive wie negative Erfahrungen ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Threads in µC.net ===&lt;br /&gt;
https://www.mikrocontroller.net/topic/481363&amp;lt;br /&amp;gt;&lt;br /&gt;
https://www.mikrocontroller.net/topic/307715&amp;lt;br /&amp;gt;&lt;br /&gt;
https://www.mikrocontroller.net/topic/reflow-loeten-selbstgemacht&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== YouTube Videos ===&lt;br /&gt;
Blechdosenofen, sehr interessant.   https://www.youtube.com/watch?v=8JRXbwYZmrU&amp;lt;br /&amp;gt;&lt;br /&gt;
 Beitrag dazu: https://diyodemag.com/features/vapour_caper&amp;lt;br /&amp;gt;&lt;br /&gt;
Glasbehälter auf Heizplatte  https://www.youtube.com/watch?v=czwRntpEzgg&amp;lt;br /&amp;gt;&lt;br /&gt;
McGyver :)  https://www.youtube.com/watch?v=FJvLBmhPMx0&amp;lt;br /&amp;gt;&lt;br /&gt;
Experimenteller Aufbau, NL  https://www.youtube.com/watch?v=W0mymbEpZDA&amp;lt;br /&amp;gt;&lt;br /&gt;
Studienarbeit? Wenig Info, schöne Bilder https://www.youtube.com/watch?v=3TgbaxAnVQs&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Websites ===&lt;br /&gt;
Fingers Welt Thread https://www.fingers-welt.de/phpBB/viewtopic.php?f=14&amp;amp;t=6871&amp;lt;br /&amp;gt;&lt;br /&gt;
Blog Engineering-Arts, Spargeltopfmethode https://engineeringarts.wordpress.com/2016/03/06/diy-dampfphasenloeten/&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Dampfphasen_L%C3%B6ten_-_DIY_L%C3%B6sungen&amp;diff=101089</id>
		<title>Dampfphasen Löten - DIY Lösungen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Dampfphasen_L%C3%B6ten_-_DIY_L%C3%B6sungen&amp;diff=101089"/>
		<updated>2019-09-25T19:08:55Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* YouTube Videos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dampfphasenlöten ==&lt;br /&gt;
Löten per Dampfphase ist eine interessante Variante um sehr gute Lötergebnisse zu erzielen. Kommerzielle Anlagen sind recht teuer, diese müssen reproduzierbare Ergebnisse liefern und einfach bedienbar sein.&lt;br /&gt;
Trotzdem gibt es Hobbyprojekte die dieses Verfahren nutzen und eine Alternative zum umgebauten Pizzaofen sind. In diesem Artikel sollen Links zu solchen Projekten gesammelt werden, gerne können auch eigene Projekte und positive wie negative Erfahrungen ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Threads in µC.net ===&lt;br /&gt;
https://www.mikrocontroller.net/topic/481363&amp;lt;br /&amp;gt;&lt;br /&gt;
https://www.mikrocontroller.net/topic/307715&amp;lt;br /&amp;gt;&lt;br /&gt;
https://www.mikrocontroller.net/topic/reflow-loeten-selbstgemacht&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== YouTube Videos ===&lt;br /&gt;
Blechdosenofen, sehr interessant.   https://www.youtube.com/watch?v=8JRXbwYZmrU&amp;lt;br /&amp;gt;&lt;br /&gt;
  Beitrag dazu: https://diyodemag.com/features/vapour_caper&amp;lt;br /&amp;gt;&lt;br /&gt;
Glasbehälter auf Heizplatte  https://www.youtube.com/watch?v=czwRntpEzgg&amp;lt;br /&amp;gt;&lt;br /&gt;
McGyver :)  https://www.youtube.com/watch?v=FJvLBmhPMx0&amp;lt;br /&amp;gt;&lt;br /&gt;
Experimenteller Aufbau, NL  https://www.youtube.com/watch?v=W0mymbEpZDA&amp;lt;br /&amp;gt;&lt;br /&gt;
Studienarbeit? Wenig Info, schöne Bilder https://www.youtube.com/watch?v=3TgbaxAnVQs&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Websites ===&lt;br /&gt;
Fingers Welt Thread https://www.fingers-welt.de/phpBB/viewtopic.php?f=14&amp;amp;t=6871&amp;lt;br /&amp;gt;&lt;br /&gt;
Blog Engineering-Arts, Spargeltopfmethode https://engineeringarts.wordpress.com/2016/03/06/diy-dampfphasenloeten/&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Dampfphasen_L%C3%B6ten_-_DIY_L%C3%B6sungen&amp;diff=101088</id>
		<title>Dampfphasen Löten - DIY Lösungen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Dampfphasen_L%C3%B6ten_-_DIY_L%C3%B6sungen&amp;diff=101088"/>
		<updated>2019-09-25T11:24:24Z</updated>

		<summary type="html">&lt;p&gt;Jojos: Die Seite wurde neu angelegt: „== Dampfphasenlöten == Löten per Dampfphase ist eine interessante Variante um sehr gute Lötergebnisse zu erzielen. Kommerzielle Anlagen sind recht teuer, di…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dampfphasenlöten ==&lt;br /&gt;
Löten per Dampfphase ist eine interessante Variante um sehr gute Lötergebnisse zu erzielen. Kommerzielle Anlagen sind recht teuer, diese müssen reproduzierbare Ergebnisse liefern und einfach bedienbar sein.&lt;br /&gt;
Trotzdem gibt es Hobbyprojekte die dieses Verfahren nutzen und eine Alternative zum umgebauten Pizzaofen sind. In diesem Artikel sollen Links zu solchen Projekten gesammelt werden, gerne können auch eigene Projekte und positive wie negative Erfahrungen ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Threads in µC.net ===&lt;br /&gt;
https://www.mikrocontroller.net/topic/481363&amp;lt;br /&amp;gt;&lt;br /&gt;
https://www.mikrocontroller.net/topic/307715&amp;lt;br /&amp;gt;&lt;br /&gt;
https://www.mikrocontroller.net/topic/reflow-loeten-selbstgemacht&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== YouTube Videos ===&lt;br /&gt;
Blechdosenofen, sehr interessant.   https://www.youtube.com/watch?v=8JRXbwYZmrU&amp;lt;br /&amp;gt;&lt;br /&gt;
Glasbehälter auf Heizplatte  https://www.youtube.com/watch?v=czwRntpEzgg&amp;lt;br /&amp;gt;&lt;br /&gt;
McGyver :)  https://www.youtube.com/watch?v=FJvLBmhPMx0&amp;lt;br /&amp;gt;&lt;br /&gt;
Experimenteller Aufbau, NL  https://www.youtube.com/watch?v=W0mymbEpZDA&amp;lt;br /&amp;gt;&lt;br /&gt;
Studienarbeit? Wenig Info, schöne Bilder https://www.youtube.com/watch?v=3TgbaxAnVQs&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Websites ===&lt;br /&gt;
Fingers Welt Thread https://www.fingers-welt.de/phpBB/viewtopic.php?f=14&amp;amp;t=6871&amp;lt;br /&amp;gt;&lt;br /&gt;
Blog Engineering-Arts, Spargeltopfmethode https://engineeringarts.wordpress.com/2016/03/06/diy-dampfphasenloeten/&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Temperatursensor&amp;diff=98342</id>
		<title>Temperatursensor</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Temperatursensor&amp;diff=98342"/>
		<updated>2018-02-05T17:43:57Z</updated>

		<summary type="html">&lt;p&gt;Jojos: DHT21 / AM2301&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Will man mit einem [[Mikrocontroller]] Temperaturen messen, dann braucht man&lt;br /&gt;
* einen [[Sensor]], der die Temperatur z.&amp;amp;nbsp;B. in eine Spannung oder einen Strom umsetzt&lt;br /&gt;
* einen [[ADC | AD-Wandler]], der das Signal digitalisiert. Der kann auf dem Sensor oder dem Mikrocontroller integriert sein.&lt;br /&gt;
&lt;br /&gt;
Temperatursensoren gibt es nun in allen möglichen Varianten. Vom temperaturabhängigen [[Widerstand]] bis zum fertig abgeglichenen All-in-one-Bauteil mit digitalem Ausgang. Wie bei allen Sensoren sollte man auch hier genau hinschauen und [[Auflösung und Genauigkeit]] unterscheiden.&lt;br /&gt;
&lt;br /&gt;
== Analoge Temperatursensoren ==&lt;br /&gt;
&lt;br /&gt;
=== PT100 ===&lt;br /&gt;
&lt;br /&gt;
Unter einem PT100 versteht man einen Platinwiderstand, der bei 0°C einen Widerstand von 100Ω hat.&lt;br /&gt;
Platinwiderstände sind temperaturabhängige Widerstände mit hoher Wiederholgenauigkeit und Konstanz[http://de.wikipedia.org/wiki/Konstante].  Wegen der relativ geringen Widerstandsänderung von nur ca. 0,4Ω pro Grad ist etwas mehr Schaltungsaufwand erforderlich als bei anderen Sensoren. Genauere Formeln zur Temperaturbestimmung gibt es u.a. bei [http://de.wikipedia.org/wiki/Pt100 Wikipedia]. Ein Schaltplan findet sich bei der [http://www.heise.de/ct/artikel/Sensibelchen-289608.html c&#039;t].&lt;br /&gt;
&lt;br /&gt;
Die Sensoren gibt es auch mit anderen Widerstandswerten, z.&amp;amp;nbsp;B. mit 1000&amp;amp;Omega; und heißen dann entsprechend PT1000.&lt;br /&gt;
&lt;br /&gt;
Vorteil:&lt;br /&gt;
* genormt&lt;br /&gt;
* großer Meßbereich&lt;br /&gt;
* hohe Linearität&lt;br /&gt;
* hohe Wiederholgenauigkeit&lt;br /&gt;
* einfach austauschbar&lt;br /&gt;
&lt;br /&gt;
Nachteil:&lt;br /&gt;
* brauchen aufwändigere Auswerteschaltung&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://de.wikibooks.org/wiki/Linearisierung_von_resistiven_Sensoren/_Pt100 Wikibooks: Linearisierung von resistiven Sensoren - PT100]&lt;br /&gt;
* [http://www.heise.de/ct/04/22/236/ c&#039;t-Artikel: Mikrocontroller-Programmierung: Timer, Sensoren und Drehgeber (mit PT100 Schaltung)]&lt;br /&gt;
* [http://www.maxim-ic.com/app-notes/index.mvp/id/3450 Maxim AN3450 Positive Analog Feedback Compensates PT100 Transducer]&lt;br /&gt;
* [http://www.maxim-ic.com/app-notes/index.mvp/id/4875 Maxim AN4875 High-Accuracy Temperature Measurements Call for Platinum Resistance Temperature Detectors (PRTDs) and Precision Delta-Sigma ADCs]&lt;br /&gt;
* [http://ww1.microchip.com/downloads/en/AppNotes/01154a.pdf Microchip AN1154 Precision RTD Instrumentation for Temperature Sensing]&lt;br /&gt;
* [http://www.analog.com/static/imported-files/application_notes/AN709_0.pdf Analog Devices AN709 RTD Interfacing and Linearization Using an ADuC8xx MicroConverter]&lt;br /&gt;
&lt;br /&gt;
=== NTC/PTC ===&lt;br /&gt;
&lt;br /&gt;
NTC und PTC sind temperaturabhängige Widerstände.&lt;br /&gt;
&lt;br /&gt;
* NTC (engl. &#039;&#039;&#039;N&#039;&#039;&#039;egative &#039;&#039;&#039;T&#039;&#039;&#039;emperature &#039;&#039;&#039;C&#039;&#039;&#039;oefficient, Heißleiter), hat bei hohen Temperaturen seinen niedrigsten Widerstand, z.&amp;amp;nbsp;B. Silizium&lt;br /&gt;
* PTC (engl. &#039;&#039;&#039;P&#039;&#039;&#039;ositive &#039;&#039;&#039;T&#039;&#039;&#039;emperature &#039;&#039;&#039;C&#039;&#039;&#039;oefficient, Kaltleiter), hat bei niedrigen Temperaturen seinen geringsten Widerstand, z.&amp;amp;nbsp;B. Glühlampe&lt;br /&gt;
&lt;br /&gt;
Um den Widerstandswert zu messen schaltet man sie mit einem normalen Widerstand oder einer [[Konstantstromquelle]] in Reihe zu einem [[Spannungsteiler]] und misst den Spannungsabfall. Eine Beispielschaltung findet sich [http://www.mathar.com/msp_thermo1.html hier].&lt;br /&gt;
&lt;br /&gt;
Vorteil:&lt;br /&gt;
* billig (z.B. [https://www.reichelt.de/index.html?ACTION=446&amp;amp;LA=446&amp;amp;SEARCH=kty81 KTY81-x] bei Reichelt  0,52-0,75 &amp;amp;euro; 2018-01-03)&lt;br /&gt;
&lt;br /&gt;
Nachteil:&lt;br /&gt;
* müssen für höhere Genauigkeiten abgeglichen werden&lt;br /&gt;
* brauchen A/D-Wandler&lt;br /&gt;
* sind nichtlinear&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
* KTY10-5&lt;br /&gt;
* KTY13-6&lt;br /&gt;
* KTY81-121&lt;br /&gt;
* KTY81-122&lt;br /&gt;
* KTY81-210&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://www.sprut.de/electronic/temeratur/temp.htm Temperaturabhängige Stromquelle und NTC/PTC inclusive Linearisierung]&lt;br /&gt;
*[http://www.umnicom.de/Elektronik/Mikrokontroller/Atmel/AtFan/AtFan.html#2.2.2 Berechnung des Linearisierungswiderstandes für gewünschten Temperaturbereich] der fällt sonst immer vom Himmel&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/208587#2065880 KTY 10-5 Formelprobleme]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/225563 Codesammlung: Beispiel mit 0,5°C Auflösung]&lt;br /&gt;
* [http://preis-ing.de/extras/alle-berechnungen-im-schnellzugriff/automatisches-erzeugen-einer-ntc-tabelle/ Automatisches Erzeugen von C-Code zur NTC Auswertung] Aus den NTC Parametern und den Anforderungen wird  ein schneller und schlanker C-Code generiert.&lt;br /&gt;
&lt;br /&gt;
=== LMx35 ===&lt;br /&gt;
&lt;br /&gt;
Eine IC-Familie, die pro Kelvin Temperaturänderung ihre Ausgangsspannung um 10&amp;amp;nbsp;mV ändert. Die ICs gibt es in verschiedenen Genauigkeiten und Temperaturbereichen mit den Bezeichnungen LM135(A), LM235(A) und LM335(A). Der günstigste ist der LM335 mit einem Temperaturbereich von −40 … +100°C.&lt;br /&gt;
In verschiedenen Bauformen erhältlich. Beispielschaltungen finden sich im [http://www.national.com/ds.cgi/LM/LM135.pdf Datenblatt] und [http://www.suessbrich.info/elek/elektherm1.html hier]&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* hat auch ohne Kalibrierung eine Genauigkeit von einem Grad (bei 25°C)&lt;br /&gt;
* relativ billig (LM335 bei Reichelt ab 0,76&amp;amp;nbsp;€)&lt;br /&gt;
&lt;br /&gt;
Nachteile:&lt;br /&gt;
* benötigt A/D-Wandler&lt;br /&gt;
* bei längerer Anschlussleitung störanfällig&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://www.schramm-software.de/tipps/temperaturmessung/analogsensoren.htm Test-Schaltungen und -Code zur Auswertung mit ADC (AVR-Assembler)]&lt;br /&gt;
&lt;br /&gt;
=== LM334 ===&lt;br /&gt;
&lt;br /&gt;
Ein IC ähnlich dem LM335 mit dem Unterschied, dass der durch das IC fließende Strom proportional von der Temperatur abhängt. Mit einer einfachen Schaltung aus nur zwei Widerständen kann man dann den Strom in einer Weise wandeln, dass pro Kelvin eine Spannungsänderung von 10mV ausgegeben wird. Da die Strom-Spannungswandlung auf der Platine (und damit nahe am AD-Wandler) stattfindet und die Übertragung des Messwerts durch einen Strom stattfindet, sind Störungen durch Netzbrummen etc. viel geringer als beim LM335&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
&amp;lt;!-- * hat auch ohne Kalibrierung eine Genauigkeit von einem Grad (bei 25°C) &lt;br /&gt;
Laut Datenblatt +-3°C&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* relativ billig ([http://www.reichelt.de/?ARTICLE=10468 Reichelt 0,54 &amp;amp;euro;])&lt;br /&gt;
&lt;br /&gt;
Nachteile:&lt;br /&gt;
* benötigt A/D-Wandler&lt;br /&gt;
* Bereich 0°C-70°C&lt;br /&gt;
&lt;br /&gt;
Ähnliche ICs:&lt;br /&gt;
* AD592 (Ausgangsstrom 1µA pro Kelvin, absolute Temperatur) [http://www.reichelt.de/?ARTICLE=3825 Reichelt: 3,75 €], Conrad 174912 8,50 &amp;amp;euro;&lt;br /&gt;
&lt;br /&gt;
=== SMT160-30 ===&lt;br /&gt;
&lt;br /&gt;
Ist ein Zwischending zwischen Digital und Analog. Sein Ausgangssignal ist ein digitales PWM-Signal, zu dessen Messung man am besten den Input-Capture-Eingang eines Mikrocontrollers verwendet. Man kann ihn also wie einen analogen Sensor nur indirekt auslesen, anstatt über einen AD-Wandler hier über einen Timer.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* Digitales PWM-Signal ist unempfindlich gegen Störeinflüsse&lt;br /&gt;
* gibt es in SO8, TO18, TO92 und &amp;lt;b&amp;gt;TO220&amp;lt;/b&amp;gt;, gut befestigbar, z.B am Kühlkörper&lt;br /&gt;
* linear&lt;br /&gt;
* kein Abgleich nötig&lt;br /&gt;
&lt;br /&gt;
Nachteile (viele):&lt;br /&gt;
* benötigt Timer&lt;br /&gt;
* jittert extrem, genaue Messungen nur über Mittelung / Filterung möglich&lt;br /&gt;
* nicht nur das PWM-Verhältnis, sondern auch die Frequenz ist temp-abhängig (1-4kHz)&lt;br /&gt;
* teuer (Farnell 10,90&amp;amp;euro; +16%, Conrad 9,xx&amp;amp;euro; , www.hy-line.de ??).&lt;br /&gt;
* TO92 Gehäuse ist günstiger, dafür weniger genau&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* http://www.hy-line.de/co/sensor-tec/hersteller/smartec/smt-160-30/index.html&lt;br /&gt;
&lt;br /&gt;
=== Thermoelement ===&lt;br /&gt;
&lt;br /&gt;
Ein Thermoelement besteht im einfachsten Fall aus zwei ungleichen Metallendrähten, die an einem Punkt miteinander verbunden sind und bei dem die Verbindungsstelle einer anderen Temperatur ausgesetzt ist als die offenen Enden der Drähte. An den offenen Enden der Drähten entsteht eine Spannung (Thermospannung). Dieser Effekt wurde 1821 von Thomas Seebeck entdeckt ([http://de.wikipedia.org/wiki/Seebeck-Effekt Seebeck-Effekt] bei Wikipedia). Eine weitere Anwendung ist der thermoelektrische Generator (&amp;quot;Thermogenerator&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
* MCP3421 18bit ADC 15SPS, I2C, auch mit andere Auflösungen erhältlich, Thermoelement kann direkt angeschlossen werden! (Reichelt : 2,10€)&lt;br /&gt;
&lt;br /&gt;
Vorteil:&lt;br /&gt;
* über einen sehr weiten Temperaturbereich einsetzbar&lt;br /&gt;
&lt;br /&gt;
Nachteil:&lt;br /&gt;
* die sehr geringen Temperaturspannungen im Mikrovoltbereich benötigen eine sehr gute Auswertelektronik (guter Analogteil + AD-Wandler). (aber: beachte MCP3421)&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
&amp;lt;!-- Der Link wird von NI umgebogen zur Homepage. Recherche nach dem Autor brachte nix hervor :-(&lt;br /&gt;
* [http://digital.ni.com/worldwide/germany.nsf/web/all/7A4F02BAEFEC22AC802567F6003E0D6E  Temperaturmessung mit Thermoelementen] - Eine Einführung von David Potter (deutsche Überarbeitung: G.Sinkovic) (inkl. Erläuterung der Kaltstellenkompensation) --&amp;gt;&lt;br /&gt;
* [http://www.sensorwell.at/fileadmin/templates/images/data_sheets/temperatur_messtechnik.pdf Warum Thermoelemente Relativtemperaturen messen! oder Was ist eine Kaltstelle?] - Technische Information von www.sensorwell.at (PDF, ca. 600kB)&lt;br /&gt;
&lt;br /&gt;
=== indirekte Messung über die Temperaturabhängigkeit der Schallgeschwindigkeit ===&lt;br /&gt;
&lt;br /&gt;
Acoustic Thermometry Measures Temperature To 0.1 Degree&lt;br /&gt;
http://www.linear.com/solutions/1558&lt;br /&gt;
AN131  http://www.linear.com/docs/39793 (PDF momentan nicht verfügbar) --&amp;gt;&lt;br /&gt;
http://www.mikrocontroller.net/topic/307557#new&lt;br /&gt;
&lt;br /&gt;
== Digitale Temperatursensoren ==&lt;br /&gt;
&lt;br /&gt;
=== AM2301 / DHT21 ===&lt;br /&gt;
&lt;br /&gt;
Low Cost One-Wire Sensoren&lt;br /&gt;
&lt;br /&gt;
*    Stromversorgung: DC 3.3 - 5.2 V&lt;br /&gt;
*    Ausgangssignal: 1-Draht-Bus - digitales Signal (One wire)&lt;br /&gt;
*    Sensorelement: Polymer Feuchtigkeits-Kondensator&lt;br /&gt;
*    Messbereich:    &lt;br /&gt;
*        Luftfeuchtigkeit: 0 - 100 % relative Luftfeuchte&lt;br /&gt;
*        Temperatur: -40 °C  bis +80 °C&lt;br /&gt;
*    Genauigkeit:&lt;br /&gt;
*        + - 3 % (Luftfeuchtigkeit)&lt;br /&gt;
*        + - 0.5 °C (Temperatur)&lt;br /&gt;
*    Auflösung oder Empfindlichkeit:&lt;br /&gt;
*        Feuchtigkeit 0,1 % RH&lt;br /&gt;
*        Temperatur 0.1 °C&lt;br /&gt;
&lt;br /&gt;
Relativ großer Sensor, gibt es auch kleiner als DHT11 / DHT22 mit Drahtanschlüssen.&lt;br /&gt;
DHT11 :&lt;br /&gt;
*    Genauigkeit:&lt;br /&gt;
*        + - 5 % (Luftfeuchtigkeit)&lt;br /&gt;
*        + - 2 °C (Temperatur)&lt;br /&gt;
&lt;br /&gt;
Kosten ca. 2,00 € (Ali) ... 8,00 € (deutsche eBay Versender)&lt;br /&gt;
&lt;br /&gt;
=== DS1621 ===&lt;br /&gt;
&lt;br /&gt;
Der DS1621 ist Temperatursensor und A/D-Wandler in einem. Er gibt seine Daten per [[I²C]]-[[Bus]] aus. Ein Schaltplan für einen elektronischen Thermometer mit diesem IC findet sich [http://www.myplace.nu/avr/thermo/ hier].&lt;br /&gt;
&lt;br /&gt;
Eine Library für den AVR: https://sourceforge.net/projects/ds1621avr/&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* bereits kalibriert&lt;br /&gt;
* kein A/D-Wandler nötig&lt;br /&gt;
* da I²C ein Bus ist, kann man mehrere DS1621 und andere I²C-Bausteine zusammen anschließen und braucht dafür trotzdem nur zwei I/O-Ports.&lt;br /&gt;
* Messbereich -55°C to +125°C &lt;br /&gt;
* Genauigkeit +-0,5°C&lt;br /&gt;
* Auflösung besser 0,01°C, wenn man die beiden Zählerregister (Count-Remain und Count-per-C) auswertet&lt;br /&gt;
&lt;br /&gt;
Nachteile:&lt;br /&gt;
* teuer (Segor 5,80&amp;amp;euro;; RS 3,95&amp;amp;euro;; Conrad 5,22&amp;amp;euro;)&lt;br /&gt;
* obwohl die meisten Register [[Speicher#NVRAM | nichtflüchtig]] sind, kann man ihn nicht als Stand-Alone-Thermostat einsetzen, da er erst nach einem Start-Conversion-Befehl zu messen beginnt.&lt;br /&gt;
&lt;br /&gt;
Nachfolger:&lt;br /&gt;
* DS1631, DS1631A (Auto-Start-&amp;gt; Stand-Alone-Thermostat), DS1731&lt;br /&gt;
* weitere Stand-Alone-Thermostaten: DS1821, DS1629&lt;br /&gt;
&lt;br /&gt;
=== LM75 ===&lt;br /&gt;
&lt;br /&gt;
Der LM75 ist so ähnlich wie der DS1621, allerdings nur in SMD erhältlich und nicht so genau. Er ist aber öfters mal auf PC-Mainboards zu finden, so dass man beim Schlachten eines solchen günstig an einen Temperatursensor kommen kann. Eine Beispiel Schaltplan mit einem ATmega8 findet man [http://www.ucblog.de/2010/09/mikrocontroller-thermometer-schaltplan/ hier]&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* bereits kalibriert&lt;br /&gt;
* kein A/D-Wandler nötig&lt;br /&gt;
* I²C-Bus Ausgang&lt;br /&gt;
* billiger als DS1621 (Reichelt 1,45 &amp;amp;euro;; RS 3V: 3,75&amp;amp;euro;; 5V: 2,72&amp;amp;euro;)&lt;br /&gt;
* Auflösung +-0,5°C&lt;br /&gt;
&lt;br /&gt;
Nachteile:&lt;br /&gt;
* nur im SMD-Gehäuse erhältlich&lt;br /&gt;
* relativ ungenau (+-2°C), kann man jedoch kalibrieren / kompensieren&lt;br /&gt;
&lt;br /&gt;
Kompatible Typen:&lt;br /&gt;
* AD7415ART&lt;br /&gt;
* DS7505S+&lt;br /&gt;
&lt;br /&gt;
=== LM76 ===&lt;br /&gt;
&lt;br /&gt;
Der LM76 ähnlich dem LM75, bietet aber eine 8-fach höhere Auflösung und eine Genauigkeit von 0.5 bzw. 1°C.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* höhere Auflösung&lt;br /&gt;
* höhere Genauigkeit&lt;br /&gt;
&lt;br /&gt;
Nachteil:&lt;br /&gt;
* schwerer zu beschaffen&lt;br /&gt;
&lt;br /&gt;
=== TMP175 / TMP75 ===&lt;br /&gt;
&lt;br /&gt;
Ähnelt dem LM75 stark! Temperatursensor von Texas Instruments.&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ManuelSchneid3r/RaspberryPi/blob/master/sensors/src/tmp.c Linux Kommandozeilen Tool für den Zugriff]&lt;br /&gt;
&lt;br /&gt;
=== DS18S20 / DS18B20 ===&lt;br /&gt;
&lt;br /&gt;
Der DS18S20 (Nachfolger des DS1820) und DS18B20 sind scheinbar Temperatursensoren und A/D-Wandler in einem. Wenn man genauer hinschaut, stellt man fest, dass es sich um direktwandelnde Sensoren handelt. Die Temperatur wird ohne Umweg über eine analoge Zwischengröße (Spannung oder Strom) in ein digitales Signal überführt.&lt;br /&gt;
&lt;br /&gt;
Die Datenkommunikation erfolgt über ein 1-Wire-Interface, wodurch man am [[Mikrocontroller]] mit nur einem einzigen I/O-Pin auskommen kann. Außerdem beherrschen sie die parasitäre Stromversorgung, d.h., man braucht für Daten und Stromversorgung zusammen nur zwei Leitungen.&lt;br /&gt;
&lt;br /&gt;
Beim DS18B20 sind Auflösungen von 9, 10, 11 und 12 Bits konfigurierbar. Je kleiner die Auflösung, desto kürzer ist die Messzeit. Der DS18S20 hat eine feste Auflösung von 12 Bits, wobei die unteren 4 Bits aufwändiger auszuwerten sind als beim DS18B20. Der DS18S20 ist als Ersatz für den DS1820 gedacht. Der Hersteller empfiehlt den DS18B20 für Neuentwicklungen.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* bereits kalibriert&lt;br /&gt;
* Genauigkeit +-0,5°C&lt;br /&gt;
* 1-Wire-Ausgang&lt;br /&gt;
&lt;br /&gt;
Nachteil:&lt;br /&gt;
* Reichelt: 1,60&amp;amp;euro; / CSD: 1,59&amp;amp;euro; / Conrad 5,08&amp;amp;euro;&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://www.avr-projekte.de/ds18b20.htm Ein oder mehrere DS18B20 DS18S20 über Romcode einlesen. AVR-Assembler]&lt;br /&gt;
* [http://pic-projekte.de/wiki/index.php?title=Ansteuerung_eines_DS18S20 Ansteuern eines DS18S20 in C (PIC)]&lt;br /&gt;
* [http://pdfserv.maxim-ic.com/en/ds/DS18S20.pdf Datenblatt DS18S20] &lt;br /&gt;
* [http://pdfserv.maxim-ic.com/en/ds/DS18B20.pdf Datenblatt DS18B20]&lt;br /&gt;
* [http://www.maxim-ic.com/app-notes/index.mvp/id/4377 Vergleich DS18B20 &amp;lt;-&amp;gt; DS18S20]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/6505 Code zur Ansteuerung (ASM ATTiny12)]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/14792 Code zur Ansteuerung (AVR-GCC)]&lt;br /&gt;
* [http://gandalf.arubi.uni-kl.de/avr_projects/tempsensor/ Code zur Ansteuerung mit CRC-Prüfung (AVR-GCC)]&lt;br /&gt;
* [http://www.schramm-software.de/tipps/temperaturmessung/digitalsensoren.htm Code zur Ansteuerung mit CRC-Prüfung (AVR-Assembler)]&lt;br /&gt;
* [http://chaokhun.kmitl.ac.th/~kswichit/avrthermo/avrthermo.html LED-Thermometer mit AT90S2313 (C)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-4-248219.html Webserver zur Ansteuerung von bis zu 63 Bausteinen]&lt;br /&gt;
* [http://www.teslabs.com/openplayer/docs/docs/other/ds18b20_pre1.pdf PDF Anleitung zur Beschaltung und Programmierung (C)]&lt;br /&gt;
*[http://www.digitemp.com/building.shtml Anleitung Sensorfühleraufbau (DigiTemp)]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/14792 Forumsbeitrag]: Onewire + DS18x20 Ansteuerung in C&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/232156 Forumsbeitrag]: Timing der parasitären Versorgung&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/387139#4602608 Projekt]: Onewire + DS18x20 Bibliothek&lt;br /&gt;
&lt;br /&gt;
=== DS1822 ===&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie DS18S20, aber weniger genau (+-2°) und in großen Stückzahlen billiger. Wegen der geringeren Verbreitung kommt der Preisvorteil aber bei Einzelstücken nicht beim Kunden an. So kostet er bei Reichelt mit 3,50&amp;amp;euro; mehr als der DS18S20.&lt;br /&gt;
&lt;br /&gt;
=== DS1921 / DS1922 ===&lt;br /&gt;
&lt;br /&gt;
Sind wie die DS1821 1-wire-Sensoren mit zusätzlicher Logging-Funktion.&lt;br /&gt;
Im iButton-Gehäuse befindet sich eine Lithium-Zelle, eine RTC, CMOS-RAM und der Temp-Sensor. Nach umfangreicher Progammierung startet der Button seine Mission (Aufzeichnung des Temperaturverlaufs).&lt;br /&gt;
Gibt es auch mit zusätzlicher Feuchtemessung (DS1923).&lt;br /&gt;
&lt;br /&gt;
=== TSic ===&lt;br /&gt;
&lt;br /&gt;
Die TSic Sensoren werden baugleich von 2 Herstellern angeboten:&lt;br /&gt;
* IST AG ([http://www.ist-ag.com/en/products-services/temperature-sensors Homepage])&lt;br /&gt;
* B+B Thermo-Technik ([https://shop.bb-sensors.com/Temperaturmesstechnik/Temperatursensoren/Digitaler-TSic-Temperatursensor-TO92.html Homepage])&lt;br /&gt;
&lt;br /&gt;
Die TSic Sensoren ([https://shop.bb-sensors.com/out/media/Datasheet_Digital_Semiconductor_temperatur_sensor_TSIC.pdf Datenblatt]) geben ihre Temperaturmessdaten automatisch in einem festen Intervall aus. Daher muss der Host nur warten bis die nächsten Messdaten rausgeschickt werden. Die TSic Sensoren die es im freien Handel gibt, geben ihre Messdaten alle 100ms (10Hz) aus. &lt;br /&gt;
Zur Übertragung wird das [http://www.ist-ag.com/eh/ist-ag/resource.nsf/imgref/Download_ZACWireAppNotes.pdf/$FILE/ZACWireAppNotes.pdf ZACwire] Protokoll benutzt. Es handelt sich um eine einfach zwei Byte Übertragung per Manchester-Code. Diese zwei Byte repräsentieren den digital gewandelten Temperaturwert. Im Gegensatz zu Sensoren wie den DS18xxx von Dallas muss dieser Wert aber erst auf einen dezimalen Wert umgerechnet werden. &lt;br /&gt;
Die Sensoren kommen mit 3 Pins aus (VCC, GND, Dout).&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* Bereits kalibriert&lt;br /&gt;
* Verschiedene Genauigkeiten lieferbar&lt;br /&gt;
* Sehr einfaches Kommunikationsprotokoll&lt;br /&gt;
* Geringer Stromverbrauch&lt;br /&gt;
* Hochgenau: bis zu +/- 0.1°C (TSic 50x)&lt;br /&gt;
&lt;br /&gt;
Nachteil:&lt;br /&gt;
* Recht teuer (Reichelt: 4,70&amp;amp;euro; für den TSic206)&lt;br /&gt;
* Nur ein Sensor an einem I/O nutzbar (Kein Bussystem)&lt;br /&gt;
&lt;br /&gt;
Achtung! &lt;br /&gt;
Die TSic Sensoren gibt es auch als Version mit analog Ausgang. Bei der Typenbezeichnung gibt die 3. Stelle an ob es sich um die analog- oder Digitalversion handelt (1 = analog, 6 = digital). &lt;br /&gt;
Der TSic201 ist also analog, wärend der TSic206 ein digitaler ist.&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/283615#3025721 ZACwire Protokoll im Logic Analyzer]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/159774?goto=3157908#3157908 C-Code, (ohne Interrupt und ohne Timer) Sensor wird eingeschaltet-&amp;gt;gelesen-&amp;gt;ausgeschaltet]&lt;br /&gt;
* [http://www.avr-projekte.de/zacwireasm.htm Zacwire Protokoll, AVR-Assembler]&lt;br /&gt;
* [http://www.loetstelle.net/projekte2/tsic306/tsic306.php GCC AtMega8 Interruptgesteuerte Statemachine für TSIC206/306]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/45573#347765 Ansatz zum Empfang der Daten]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/225554# Beispiel mit Strobe ohne Interrupt]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/82087 Diskussion mit Beispielcode (MSP430, AVR, PIC) blockierend]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/144424#1367539 C++ Interrupt]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/88847 noch mehr C, problematisch Interrupt]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/151791#1426974 C für ATmega8]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/159149#1510455 auch problematisch]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/188462#1837622 fertiger Code zum Einlesen des Zacwire-Protokolls für PIC in ASM]&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=55103 RN: Bascom]&lt;br /&gt;
* [http://www.avr-projekte.de/tinyclock.htm TSIC206 Thermometer mit Uhr und Kalender. Komplette Bauanleitung mit ASM Quellcode für AT-Tiny2313]&lt;br /&gt;
* [http://www.andeanelectronic.com/?Supporte___Arduino_con_TSic306%2CTSic506_y_TSic716 TSIC Routinen für Arduino von Andean Electronic aus Peru - Quelltext Dokumentation in Englisch]&lt;br /&gt;
&lt;br /&gt;
=== SHT1x/SHT7x ===&lt;br /&gt;
&lt;br /&gt;
Der SHT1x/SHT7x (SHT10, SHT11, SHT15, STH71, SHT75) sind kombinierte Temperatur- und Feuchtesensoren von [http://www.sensirion.com Sensirion]. Sie unterscheiden sich in Bauform und Genauigkeit.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* digitale Schnittstelle mit einfacher [[I²C]]-&#039;&#039;ähnlicher&#039;&#039; Ansteuerung&lt;br /&gt;
* keine Kalibrierung notwendig&lt;br /&gt;
* Beispielcode (C, MC51) auf der Sensirion-Seite verfügbar (relativ leicht portierbar)&lt;br /&gt;
* interne Heizelemente (Funktionsprüfung, &amp;quot;raue&amp;quot; Umgebung)&lt;br /&gt;
* Spannungsmonitor (&amp;quot;Battery fail&amp;quot;)&lt;br /&gt;
* sehr hohe Genauigkeit&lt;br /&gt;
&lt;br /&gt;
Nachteile:&lt;br /&gt;
* kann nicht am [[I²C]] Bus betrieben werden, theoretisch gleiche Clockleitung möglich, fixe Adresse&lt;br /&gt;
* relativ teuer (Farnell 18,60&amp;amp;euro;)(SHT11 bei CSD 14€)&lt;br /&gt;
&lt;br /&gt;
[http://www.sensirion.com/de/produkte/feuchte-und-temperatur/ Übersicht] der Temperatur- und Feuchtigkeitssensoren von Sensirion.&lt;br /&gt;
&lt;br /&gt;
=== SHT21 ===&lt;br /&gt;
&lt;br /&gt;
[http://www.sensirion.com Sensirion] bietet auch den SHT21 Feuchtigkeits- und Temperatursensor an, welcher wesentlich genauer ist.&lt;br /&gt;
    &lt;br /&gt;
Vorteile:&lt;br /&gt;
* I2C digital, PWM and SDM/analog Volt Ausgabe&lt;br /&gt;
* Maximal 5 Messungen/s @ 14bit&lt;br /&gt;
* Temperaturbereich von -40 – +125°C&lt;br /&gt;
* Feuchtigkeit mit einer Genauigkeit von +-2%RH&lt;br /&gt;
* Günstig (3-4€ Farnell/RS 2014)&lt;br /&gt;
&lt;br /&gt;
Nachteile:&lt;br /&gt;
* nur als SMD-Package&lt;br /&gt;
&lt;br /&gt;
Application Notes und Datenblätter findet man [http://www.sensirion.com/en/products/humidity-temperature/humidity-sensor-sht2x/ hier].&lt;br /&gt;
&lt;br /&gt;
=== ADT7310 / ADT7xxx-Familie von AD ===&lt;br /&gt;
&lt;br /&gt;
Der [http://www.analog.com/en/sensors/digital-temperature-sensors/adt7310/products/product.html ADT7310] von [http://www.analog.com/ Analog Devices] besitzt eine Auflösung von 16 Bit und eine Genauigkeit von ±0.5°C im Bereich von −40°C bis +105°C.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* Ansteuerung per [[SPI]] ADT73xx  oder  [[I2C]] ADT74xx&lt;br /&gt;
* keine Kalibrierung notwendig&lt;br /&gt;
* hohe [[Auflösung und Genauigkeit]]: 16 Bit&lt;br /&gt;
** ADT7x02 2,00°&lt;br /&gt;
** ADT7x01 1,00°&lt;br /&gt;
** ADT7x10 0,40 / 0,50°&lt;br /&gt;
** ADT7x20 0,20 / 0,25°&lt;br /&gt;
* auch für automotive / als Die lieferbar&lt;br /&gt;
* programmierbarer [[Interrupt]]ausgang für Unter- und Übertemperatur&lt;br /&gt;
* relativ günstig (ca. 3-8€ bei Digi-Key, Stand 12/2011)&lt;br /&gt;
&lt;br /&gt;
Nachteile:&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
NB: ONsemi hat auch Temperatursensoren mit der Bezeichnung ADT7xxx, verwendet aber ein anderes Namensschema&lt;br /&gt;
&lt;br /&gt;
=== TSYS01 / G-NICO-018 von Measurement Specialties Inc. ===&lt;br /&gt;
* sehr hohe [[Auflösung und Genauigkeit]]:  0,10° @ -5°C … +50°C   16/24 Bit&lt;br /&gt;
* Gehäuse 16-VQFN Exposed Pad&lt;br /&gt;
* SPI / I2C über Pin auswählbar&lt;br /&gt;
* Preis: 8,60 (4,40 @1k) bei Digikey&lt;br /&gt;
kleiner Nachteil: der Sensor liefert den ADC-Wert und die Kompensationskonstanten (5 Polynom-Koeffizienten), mit denen im µC die Temperatur berechnet werden muss.&lt;br /&gt;
&lt;br /&gt;
=== SE95 ===&lt;br /&gt;
&lt;br /&gt;
Der [http://www.nxp.com/documents/data_sheet/SE95.pdf SE95] von NXP hat 13 Bit Auflösung, Genauigkeit ±2°C im Messbereich von -55°C bis +125°C, I²C, Gehäuse SO8 und TSSOP8. Einzelstück-Preis bei Segor 1,50€ (2012/I)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BMP085 / BMP180 ===&lt;br /&gt;
Die BMP085 (bzw. der verbesserte, aber Pin- und Software-komapatible Nachfolger BMP180) sind eigentlich Luftdrucksensoren, die jedoch auch einen Temperatursensor mitbringen. Der Anschluss erfolgt über I2C.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* Wenig Stromverbrauch (5µA bei 1 Messung/s)&lt;br /&gt;
* Liefern Luftdruck gleich mit&lt;br /&gt;
* Absolute Genauigkeit (+-1°C typ. über kompletten Temperaturbereich). Relative Genauigkeit ist im Datenblatt nicht spezifiziert, gemessen gegen einen SHT11 ca. +-0.1°C. &lt;br /&gt;
* Auflösung: 0.1°C mit Herstellercode, mehr ist möglich (16Bit)&lt;br /&gt;
* Fertige Platinen für wenig Geld verfügbar (ca. 1,70€ inkl. Versand aus China)&lt;br /&gt;
&lt;br /&gt;
Nachteile:&lt;br /&gt;
* Sehr aufwändige Linearisierung (Kalibrationskoeffizienten sind im Sensor gespeichert, müssen aber vom Host-µC verrechnet werden. Code ist im Datenblatt)&lt;br /&gt;
* Nur als SMD&lt;br /&gt;
* Bei Reichelt und Conrad nicht erhältlich. &lt;br /&gt;
&lt;br /&gt;
Preis: Ebay 1,70€ (mit Platine, China), Aliexpress 1,10€ (nackter Chip, China, mind. 10 Stück sonst auch ca. 1,70€)&lt;br /&gt;
&lt;br /&gt;
== Preisübersicht ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Preisübersicht 11/2012&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil   || Segor || RS-Components || Conrad || Farnell || Reichelt || DigiKey&lt;br /&gt;
|-&lt;br /&gt;
| AD592     || 21,40 || 5,74          || 6,43   || 5,90    || 3,95     || 4,61&lt;br /&gt;
|-&lt;br /&gt;
| ADT7310   ||  -    || -             || -      || 4,56    || -        || 3,02&lt;br /&gt;
|-&lt;br /&gt;
| ADT7410   ||  -    || 3,35          || -      || 2,71    || -        || 3,02&lt;br /&gt;
|-&lt;br /&gt;
| DS1621    ||  7,60 || 5,29          || 5,08   || 5,65    || -        || 4,54&lt;br /&gt;
|-&lt;br /&gt;
| DS1629    ||  8,70 || 8,68          || -      || 5,00    || 6,50     || 7,65&lt;br /&gt;
|-&lt;br /&gt;
| DS1631    ||  8,00 || 2,91          || -      || 3,11    || -        || 3,94&lt;br /&gt;
|-&lt;br /&gt;
| DS1731    ||  -    || -             || -      || 9,79    || -        || 3,81&lt;br /&gt;
|-&lt;br /&gt;
| DS1821    ||  5,90 || 5,27          || 6,27   || -       || -        || 5,05&lt;br /&gt;
|-&lt;br /&gt;
| DS18B20   ||  2,50 || 3,06          || -      || 3,26    || 3,20     || 3,93&lt;br /&gt;
|-&lt;br /&gt;
| DS1921    ||  -    || 26,15         || -      || -       || -        || 21,13&lt;br /&gt;
|-&lt;br /&gt;
| DS1922    ||  -    || 62,00         || -      || -       || -        || 43,11&lt;br /&gt;
|-&lt;br /&gt;
| DS1923    ||  -    || 97,96         || -      || -       || -        || 80,30&lt;br /&gt;
|-&lt;br /&gt;
| KTY81/121 ||  -    || -             || -      || 0,79    || 0,59     || 0,85&lt;br /&gt;
|-&lt;br /&gt;
| LM75      ||  1,50 || 0,68          || 3,64   || 0,81    || 1,45     || 0,82&lt;br /&gt;
|-&lt;br /&gt;
| LM76      ||  -    || 2,83          || -      || 3,02    || -        || 2,39&lt;br /&gt;
|-&lt;br /&gt;
| LM135     || 10,10 || 10,28         || -      || 8,95    || 7,95     || 10,26&lt;br /&gt;
|-&lt;br /&gt;
| LM235     ||  -    || -             || -      || 1,80    || 1,40     || 1,26&lt;br /&gt;
|-&lt;br /&gt;
| LM334     ||  0,90 || 0,72          || 1,67   || 1,01    || 0,49     || 0,74&lt;br /&gt;
|-&lt;br /&gt;
| LM335     ||  1,30 || 0,56          || 1,92   || 0,55    || 0,71     || 0,80&lt;br /&gt;
|-&lt;br /&gt;
| PT100     ||  3,80 || 3,99          || 4,00   || 9,79    || 4,27     || 0,68&lt;br /&gt;
|-&lt;br /&gt;
| SE95      ||  1,50 || 0,63          || -      || 1,45    || -        || 1,00&lt;br /&gt;
|-&lt;br /&gt;
| SHT11     || 26,00 || 24,38         || 33,20  || 25,65   || -        || 36,76&lt;br /&gt;
|-&lt;br /&gt;
| SHT15     ||  -    || 27,69         || 36,30  || 28,72   || -        || -&lt;br /&gt;
|-&lt;br /&gt;
| SHT21     || 29,50 || 18,10         || -      || 21,16   || -        || -&lt;br /&gt;
|-&lt;br /&gt;
| SHT71     || 25,40 || 29,06         || 36,89  || 30,88   || -        || -&lt;br /&gt;
|-&lt;br /&gt;
| SHT75     ||  -    || 33,77         || 42,48  || 35,52   || -        || -&lt;br /&gt;
|-&lt;br /&gt;
| SMT160-30 ||  -    || 9,28          || 8,14   || 12,38   || -        || -&lt;br /&gt;
|-&lt;br /&gt;
| TMP75     ||  -    || 0,80          || -      || 0,85    || -        || 1,37&lt;br /&gt;
|-&lt;br /&gt;
| TSic206   ||  -    || -             || 5,84   || -       || 4,20     || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/forum/mikrocontroller-elektronik?filter=temperatur* Beiträge im Forum]&lt;br /&gt;
* [[Feuchtesensor]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=WS2812_Ansteuerung&amp;diff=97610</id>
		<title>WS2812 Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=WS2812_Ansteuerung&amp;diff=97610"/>
		<updated>2017-10-25T14:33:32Z</updated>

		<summary type="html">&lt;p&gt;Jojos: Ansteuerung mit ATTiny817 hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Die Ansteuerung von WS2812 RGB LEDs mit integriertem Controller =&lt;br /&gt;
&lt;br /&gt;
[[Datei:WS2812 Timing.png|rechts|WS2812 Protokoll]]&lt;br /&gt;
&lt;br /&gt;
Die Ansteuerung der WS2812 erfolgt über eine einzelne Datenleitung mit einem asynchronen seriellen Protokoll.&lt;br /&gt;
Eine &amp;quot;0&amp;quot; wird dabei über einen kurzen, eine &amp;quot;1&amp;quot; über einen langen High-Puls definiert. Jede LED benötigt 24 Datenbits&lt;br /&gt;
(G8:R8:B8). Die Daten aller LEDs werden seriell direkt hintereinander übertragen. Wenn die Datenleitung für mehr als&lt;br /&gt;
50µs auf &amp;quot;low&amp;quot; gehalten wird (&amp;quot;reset code&amp;quot;), werden die Daten in die PWM-Register der LEDs übernommen. &lt;br /&gt;
&lt;br /&gt;
Die Herstellerangaben für das genaue Timing des Protokolls weichen teilweise zwischen unterschiedlichen Datenblattrevisionen ab.&lt;br /&gt;
In der Praxis hat sich allerdings gezeigt, dass die Bauteile relativ tolerant gegenüber kleinen Timingfehlern sind. Pausen von&lt;br /&gt;
mehr als 5 µs zwischen den Datenbits sind zu vermeiden, da diese als Reset interpretiert werden können, was eine gravierende Abweichung von dem im Datenblatt hinterlegten Wert von 50µs ist.&lt;br /&gt;
&lt;br /&gt;
Empfohlenes Timing (Details [http://cpldcpu.wordpress.com/2014/01/14/light_ws2812-library-v2-0-part-i-understanding-the-ws2812/ hier]) :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   !! Zeit High !! Zeit Low&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung &amp;quot;0&amp;quot; || 0.35 µs ±150 ns || 0.9 µs ±150 ns&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung &amp;quot;1&amp;quot; || 0.9 µs ±150 ns || 0.35 µs ±150 ns&lt;br /&gt;
|-&lt;br /&gt;
| Reset || -  || &amp;gt;50 µs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Gesamtdauer eines Bits beträgt 1.25 µs.&lt;br /&gt;
&lt;br /&gt;
Da das WS2812 Protokoll keinen gängigen Standards folgt, wird es nicht durch die übliche Mikrocontroller-Peripherie unterstützt. Das relativ schnelle Timing stellt zusätzliche Herausforderungen dar.&lt;br /&gt;
&lt;br /&gt;
= Ansteuerung mit reiner Softwarelösung (&amp;quot;Bitbanging&amp;quot;) =&lt;br /&gt;
&lt;br /&gt;
Aufgrund der kurzen Pulszeiten muss die Ansteuerung in Software durch taktzyklenoptimierten Code, idealerweise direkt in Assembler, erfolgen.&lt;br /&gt;
Vorteile einer Bitbanging-Lösung sind kleine Codegröße und gute Kompatibilität zu unterschiedlichen Controllern, da keine spezielle Peripherie erforderlich ist.&lt;br /&gt;
Ein Nachteil dieser Herangehensweise ist, dass der Code exakt auf die Taktfrequenz der CPU angepasst werden muss. Interrupts sind zu sperren.&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== Light weight WS2812 Library ===&lt;br /&gt;
Geschrieben in Ansi-C. Unterstützt alle AVR-Cores (XMEGA, classic, tinyavr 4-20 Mhz), sowie ARM (8-60 MHz). Der Code ist extrem klein, so dass er auch auf sehr kleinen Controllern wie ATtiny 10 genutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/292775 Forenthread 1] &lt;br /&gt;
* [https://www.mikrocontroller.net/topic/306683 Forenthread 2] &lt;br /&gt;
* [https://github.com/cpldcpu/light_ws2812 Github Repository]&lt;br /&gt;
&lt;br /&gt;
=== Adafruit neopixel Library ===&lt;br /&gt;
Geschrieben in C++. Unterstützt AVR von 8-16 Mhz, sowie ARM. &lt;br /&gt;
&lt;br /&gt;
* [https://github.com/adafruit/Adafruit_NeoPixel Github Repository]&lt;br /&gt;
&lt;br /&gt;
= Ansteuerung unter Nutzung integrierter Peripherie =&lt;br /&gt;
&lt;br /&gt;
Neben reinen Softwarelösungen gibt es auch Ansätze in denen Peripherie zur Implementierung des Timings eingesetzt wird. z.B. können auf dem AVR SPI oder PWM verwendet werden um das Timing eines einzelnen Bits abzubilden. Ein Vorteil dieser Lösungen ist, dass sie nicht für jede CPU-Taktfrequenz adaptiert werden müssen. Nachteilig ist allerdings, dass aufgrund des schnellen Bittimings trotzdem die CPU zu 100% ausgelastet wird, sich Codegröße und Komplexität gegenüber der Softwarelösung erhöhen und keine einfache Portierung mehr möglich ist.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Ansteuerung mit fastPWM auf AVR ===&lt;br /&gt;
Geschrieben in Ansi-C. Unterstützt ATtiny 45/85, ATmega 48/88/168/328, ATxmega xA3, xA3U ab 16(?) Mhz.  &lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/281135 Forenthread]&lt;br /&gt;
&lt;br /&gt;
Die mächtigere Peripherie auf größeren und moderneren Mikrocontrollern, wie DMA und komplexe Timer, erlaubt teilweise die Ansteurung des WS2812 weitestgehend unabhängig von der CPU. In diesem Fall kann die CPU entlastet werden und es ergibt sich ein deutlicher Vorteil gegenüber einer Bitbanging Implementierung.&lt;br /&gt;
&lt;br /&gt;
=== Ansteuerung mit Timer und DMA auf STM32F4 ===&lt;br /&gt;
Geschrieben in Ansi-C. Nutzt Timer und DMA.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/benwilliam/equinox_clock/tree/master/WS2811 Github Repository]&lt;br /&gt;
&lt;br /&gt;
=== Ansteuerung mit SCT  und SPI auf LPC800 ===&lt;br /&gt;
Geschrieben in Ansi-C. Nutzt den state configurable timer zur Konvertierung des SPI Ausgangs in das WS2812 Protokoll.&lt;br /&gt;
&lt;br /&gt;
* [https://community.nxp.com/message/767512  Forendiskussion auf LPCWare]&lt;br /&gt;
* [https://cache.nxp.com/docs/en/application-note/AN11538.zip?fsrch=1&amp;amp;sr=8&amp;amp;pageNum=1  AN11538 von NXP mit Beispielcode]&lt;br /&gt;
&lt;br /&gt;
=== Ansteuerung mit MSP430 ===&lt;br /&gt;
&lt;br /&gt;
==== und DMA ====&lt;br /&gt;
basierend auf 5529 launchpad kit from TI. Braucht DMA Modul und UART&lt;br /&gt;
* [https://github.com/hoihu/WS2812 Github Repository]&lt;br /&gt;
&lt;br /&gt;
==== Assembler ====&lt;br /&gt;
MSP430G2553 mit 16 MHz, Interrupts müssen gesperrt sein&lt;br /&gt;
* [http://forum.43oh.com/topic/2852-ws2811-led-controller-driver/ 43oh forum]&lt;br /&gt;
&lt;br /&gt;
=== Ansteuerung mit PIC12, PIC18 und PIC24 mit SPI ===&lt;br /&gt;
Der PIC12/18 muss mit 32MHz (--&amp;gt; 8MHz SPI) laufen. Beim PIC24 sollte das SPI mit 5.3333MHz (16/3) laufen.&lt;br /&gt;
&lt;br /&gt;
Für den PIC12 und 18 gibt es nur Code in ASM, für den PIC24 gibt es einen in ASM und einen in C.&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/322375 Forenthread]&lt;br /&gt;
&lt;br /&gt;
=== Ansteuerung mit PIC16F1509 mit CLC ===&lt;br /&gt;
Vorteil: Nicht 100% CPU Auslastung während des Sendens.&lt;br /&gt;
* [http://ww1.microchip.com/downloads/en/AppNotes/00001606A.pdf AN1606 Using the Configurable Logic Cell (CLC) to Interface a PIC16F1509 and WS2811 LED Driver]&lt;br /&gt;
&lt;br /&gt;
=== Ansteuerung mit Event System auf AVR ATTiny817 ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/437709 Forenthread]&lt;br /&gt;
&lt;br /&gt;
= Beschaltung der LEDs =&lt;br /&gt;
&lt;br /&gt;
Der laut Datenblatt vorgesehene Abblockkondensator von 100 nF ist unbedingt notwendig. Ohne diesen verhalten sich die LEDs fehlerhaft (siehe z.B. diesen [http://www.mikrocontroller.net/topic/325107#3593566 Beitrag im Forum])&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Displays und Anzeigen]]&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=WS2812_Ansteuerung&amp;diff=97609</id>
		<title>WS2812 Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=WS2812_Ansteuerung&amp;diff=97609"/>
		<updated>2017-10-25T14:25:36Z</updated>

		<summary type="html">&lt;p&gt;Jojos: Toten Link entfernt, Ersetzt durch aktuellere&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Die Ansteuerung von WS2812 RGB LEDs mit integriertem Controller =&lt;br /&gt;
&lt;br /&gt;
[[Datei:WS2812 Timing.png|rechts|WS2812 Protokoll]]&lt;br /&gt;
&lt;br /&gt;
Die Ansteuerung der WS2812 erfolgt über eine einzelne Datenleitung mit einem asynchronen seriellen Protokoll.&lt;br /&gt;
Eine &amp;quot;0&amp;quot; wird dabei über einen kurzen, eine &amp;quot;1&amp;quot; über einen langen High-Puls definiert. Jede LED benötigt 24 Datenbits&lt;br /&gt;
(G8:R8:B8). Die Daten aller LEDs werden seriell direkt hintereinander übertragen. Wenn die Datenleitung für mehr als&lt;br /&gt;
50µs auf &amp;quot;low&amp;quot; gehalten wird (&amp;quot;reset code&amp;quot;), werden die Daten in die PWM-Register der LEDs übernommen. &lt;br /&gt;
&lt;br /&gt;
Die Herstellerangaben für das genaue Timing des Protokolls weichen teilweise zwischen unterschiedlichen Datenblattrevisionen ab.&lt;br /&gt;
In der Praxis hat sich allerdings gezeigt, dass die Bauteile relativ tolerant gegenüber kleinen Timingfehlern sind. Pausen von&lt;br /&gt;
mehr als 5 µs zwischen den Datenbits sind zu vermeiden, da diese als Reset interpretiert werden können, was eine gravierende Abweichung von dem im Datenblatt hinterlegten Wert von 50µs ist.&lt;br /&gt;
&lt;br /&gt;
Empfohlenes Timing (Details [http://cpldcpu.wordpress.com/2014/01/14/light_ws2812-library-v2-0-part-i-understanding-the-ws2812/ hier]) :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   !! Zeit High !! Zeit Low&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung &amp;quot;0&amp;quot; || 0.35 µs ±150 ns || 0.9 µs ±150 ns&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung &amp;quot;1&amp;quot; || 0.9 µs ±150 ns || 0.35 µs ±150 ns&lt;br /&gt;
|-&lt;br /&gt;
| Reset || -  || &amp;gt;50 µs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Gesamtdauer eines Bits beträgt 1.25 µs.&lt;br /&gt;
&lt;br /&gt;
Da das WS2812 Protokoll keinen gängigen Standards folgt, wird es nicht durch die übliche Mikrocontroller-Peripherie unterstützt. Das relativ schnelle Timing stellt zusätzliche Herausforderungen dar.&lt;br /&gt;
&lt;br /&gt;
= Ansteuerung mit reiner Softwarelösung (&amp;quot;Bitbanging&amp;quot;) =&lt;br /&gt;
&lt;br /&gt;
Aufgrund der kurzen Pulszeiten muss die Ansteuerung in Software durch taktzyklenoptimierten Code, idealerweise direkt in Assembler, erfolgen.&lt;br /&gt;
Vorteile einer Bitbanging-Lösung sind kleine Codegröße und gute Kompatibilität zu unterschiedlichen Controllern, da keine spezielle Peripherie erforderlich ist.&lt;br /&gt;
Ein Nachteil dieser Herangehensweise ist, dass der Code exakt auf die Taktfrequenz der CPU angepasst werden muss. Interrupts sind zu sperren.&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== Light weight WS2812 Library ===&lt;br /&gt;
Geschrieben in Ansi-C. Unterstützt alle AVR-Cores (XMEGA, classic, tinyavr 4-20 Mhz), sowie ARM (8-60 MHz). Der Code ist extrem klein, so dass er auch auf sehr kleinen Controllern wie ATtiny 10 genutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/292775 Forenthread 1] &lt;br /&gt;
* [https://www.mikrocontroller.net/topic/306683 Forenthread 2] &lt;br /&gt;
* [https://github.com/cpldcpu/light_ws2812 Github Repository]&lt;br /&gt;
&lt;br /&gt;
=== Adafruit neopixel Library ===&lt;br /&gt;
Geschrieben in C++. Unterstützt AVR von 8-16 Mhz, sowie ARM. &lt;br /&gt;
&lt;br /&gt;
* [https://github.com/adafruit/Adafruit_NeoPixel Github Repository]&lt;br /&gt;
&lt;br /&gt;
= Ansteuerung unter Nutzung integrierter Peripherie =&lt;br /&gt;
&lt;br /&gt;
Neben reinen Softwarelösungen gibt es auch Ansätze in denen Peripherie zur Implementierung des Timings eingesetzt wird. z.B. können auf dem AVR SPI oder PWM verwendet werden um das Timing eines einzelnen Bits abzubilden. Ein Vorteil dieser Lösungen ist, dass sie nicht für jede CPU-Taktfrequenz adaptiert werden müssen. Nachteilig ist allerdings, dass aufgrund des schnellen Bittimings trotzdem die CPU zu 100% ausgelastet wird, sich Codegröße und Komplexität gegenüber der Softwarelösung erhöhen und keine einfache Portierung mehr möglich ist.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Ansteuerung mit fastPWM auf AVR ===&lt;br /&gt;
Geschrieben in Ansi-C. Unterstützt ATtiny 45/85, ATmega 48/88/168/328, ATxmega xA3, xA3U ab 16(?) Mhz.  &lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/281135 Forenthread]&lt;br /&gt;
&lt;br /&gt;
Die mächtigere Peripherie auf größeren und moderneren Mikrocontrollern, wie DMA und komplexe Timer, erlaubt teilweise die Ansteurung des WS2812 weitestgehend unabhängig von der CPU. In diesem Fall kann die CPU entlastet werden und es ergibt sich ein deutlicher Vorteil gegenüber einer Bitbanging Implementierung.&lt;br /&gt;
&lt;br /&gt;
=== Ansteuerung mit Timer und DMA auf STM32F4 ===&lt;br /&gt;
Geschrieben in Ansi-C. Nutzt Timer und DMA.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/benwilliam/equinox_clock/tree/master/WS2811 Github Repository]&lt;br /&gt;
&lt;br /&gt;
=== Ansteuerung mit SCT  und SPI auf LPC800 ===&lt;br /&gt;
Geschrieben in Ansi-C. Nutzt den state configurable timer zur Konvertierung des SPI Ausgangs in das WS2812 Protokoll.&lt;br /&gt;
&lt;br /&gt;
* [https://community.nxp.com/message/767512  Forendiskussion auf LPCWare]&lt;br /&gt;
* [https://cache.nxp.com/docs/en/application-note/AN11538.zip?fsrch=1&amp;amp;sr=8&amp;amp;pageNum=1  AN11538 von NXP mit Beispielcode]&lt;br /&gt;
&lt;br /&gt;
=== Ansteuerung mit MSP430 ===&lt;br /&gt;
&lt;br /&gt;
==== und DMA ====&lt;br /&gt;
basierend auf 5529 launchpad kit from TI. Braucht DMA Modul und UART&lt;br /&gt;
* [https://github.com/hoihu/WS2812 Github Repository]&lt;br /&gt;
&lt;br /&gt;
==== Assembler ====&lt;br /&gt;
MSP430G2553 mit 16 MHz, Interrupts müssen gesperrt sein&lt;br /&gt;
* [http://forum.43oh.com/topic/2852-ws2811-led-controller-driver/ 43oh forum]&lt;br /&gt;
&lt;br /&gt;
=== Ansteuerung mit PIC12, PIC18 und PIC24 mit SPI ===&lt;br /&gt;
Der PIC12/18 muss mit 32MHz (--&amp;gt; 8MHz SPI) laufen. Beim PIC24 sollte das SPI mit 5.3333MHz (16/3) laufen.&lt;br /&gt;
&lt;br /&gt;
Für den PIC12 und 18 gibt es nur Code in ASM, für den PIC24 gibt es einen in ASM und einen in C.&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/322375 Forenthread]&lt;br /&gt;
&lt;br /&gt;
=== Ansteuerung mit PIC16F1509 mit CLC ===&lt;br /&gt;
Vorteil: Nicht 100% CPU Auslastung während des Sendens.&lt;br /&gt;
* [http://ww1.microchip.com/downloads/en/AppNotes/00001606A.pdf AN1606 Using the Configurable Logic Cell (CLC) to Interface a PIC16F1509 and WS2811 LED Driver]&lt;br /&gt;
&lt;br /&gt;
= Beschaltung der LEDs =&lt;br /&gt;
&lt;br /&gt;
Der laut Datenblatt vorgesehene Abblockkondensator von 100 nF ist unbedingt notwendig. Ohne diesen verhalten sich die LEDs fehlerhaft (siehe z.B. diesen [http://www.mikrocontroller.net/topic/325107#3593566 Beitrag im Forum])&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Displays und Anzeigen]]&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=97058</id>
		<title>LPC-Mikrocontroller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=97058"/>
		<updated>2017-08-28T13:27:40Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* MCUXpresso */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:overview_Sep2011.png|thumb|right|850px|Überblick über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
[[Bild:positioning_NXPSep2011.gif|thumb|right|850px|Vergleich über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
Die LPC-Familie von NXP basiert auf 32-Bit Cortex-Kernen von ARM und arbeitet mit bis zu 204MHz. Die verschiedenen Serien basieren auf den Cortex-M0/M0+/M3/M4-Kernen und sind inzwischen auch für Privatnutzer zu Preisen erhältlich, die mit denen von 8-Bit-Mikrocontrollern vergleichbar sind. Eine Auflistung der verschiedenen Typen findet sich in der Tabelle unten. Die mittlerweile veraltete [[LPC2000]]-Reihe mit ARM7TDMI-Kern wird [[LPC2000|auf einer separaten Seite beschrieben]].&lt;br /&gt;
&lt;br /&gt;
Von NXP sind preiswerte Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger oder den neuen LPC-Link2, ein reiner Programmer + Debugger) erhältlich z.B. bei [http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]. Siehe dazu auch die Dokumentation von NXP zu den [http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)] und diese [[LPC1xxx Entwicklungskit LPCXpresso]].&lt;br /&gt;
&lt;br /&gt;
== Vergleich aller Typen ==&lt;br /&gt;
&#039;&#039;Stand Feb. 2017&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; class=&amp;quot;unsortable&amp;quot;                               | &lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | CPU&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Max. Frequency&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Flash&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | SRAM&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Voltage&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; class=&amp;quot;unsortable&amp;quot;   | Features&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2&amp;quot;              | Cortex-M0+&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;30&amp;quot;             | 30MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-32kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
SCTimer/PWM,&lt;br /&gt;
Switch Matrix,&lt;br /&gt;
Pattern Match Engine&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC54000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;128&amp;quot;            | 128-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;96&amp;quot;             | 96-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.62&amp;quot;           | 1.62-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
LCD,&lt;br /&gt;
Ethernet,&lt;br /&gt;
FlexComm,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1100&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | Cortex-M0/M0+&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;50&amp;quot; | 50MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-36kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.71&amp;quot;           | 1.71-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
EEPROM&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1200&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;0&amp;quot;              | Cortex-M0&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;32&amp;quot;             | 32-128kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
8 kV protection,&lt;br /&gt;
IEC 60730 Class B certified&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1300&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;3&amp;quot;  | Cortex-M3&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;72&amp;quot; | 72MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-64kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-12kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.0&amp;quot;            | 2.0-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1500&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;12&amp;quot;             | 12-36kB&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.4&amp;quot;| 2.4-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1700&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;                | 32-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;24&amp;quot;             | 24-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4300&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;240&amp;quot;            | 204MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-282kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
SGPIO,&lt;br /&gt;
Security&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;: gibt es auch als Mehrkern-Prozessoren (mit 0/1/2 Cortex-M0(+)-Cores)&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Informationen ==&lt;br /&gt;
&lt;br /&gt;
Aktuelle Linecard von NXP: http://www.nxp.com/assets/documents/data/en/product-selector-guide/LPCMICROLNCD.pdf&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Infos + User-Manuals==&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC8xx (Cortex-M0+) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://www.nxp.com/products/microcontrollers/cortex_m0_m0/series/LPC800.html#quickreference LPC8xx]&#039;&#039;&#039; ist nur in Packages mit einer relativ niedrigen Pinanzahl (DIP8, SO20, TSSOP16, TSSOP20) verfügbar, hat zwischen 4-16kB Flash, und 1-4kB RAM. Die zulässige Betriebsspannung liegt zwischen 1,8V und 3,6V.&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features der LPC800-Serie: &lt;br /&gt;
* 1-4 I2C&lt;br /&gt;
* 1-2 SSP&lt;br /&gt;
* 2-3 UART&lt;br /&gt;
* 4 Timer,  1 OS-Timer&lt;br /&gt;
* 1 watch dog&lt;br /&gt;
* 4 PWM-Einheiten&lt;br /&gt;
* 12-bit ADC&lt;br /&gt;
* CRC engine&lt;br /&gt;
* DMA with 18 channels and 9 trigger inputs&lt;br /&gt;
* 1 SCT (state configurable timer)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/download/grouping/11045/user_manual User Manual der LPC8-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC11xx (Cortex-M0) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc11xx/ LPC11xx-Serie]&#039;&#039;&#039; (3,3V) bietet viele Möglichkeiten&lt;br /&gt;
* Der LPC1100L ist derzeit laut NXP (Sep2011) der preisgünstigste ARM auf dem Markt. Der 32Bit ARM mit einer Performance von ca. 45DMIPS @50MHZ benötigt bei dieser Taktfrequenz nur etwa 10mA. (Details siehe NXP-Seite)&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features :&lt;br /&gt;
** LPC1100 Serie: • I2C, SSP, UART, GPIO, • Timers and watch dog timer, • 10-bit ADC, • Flash/SRAM memory, • Weitere Funktionen, siehe &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/LPC1xxx#Features_eines_LPC11xx 2.3 Features]&#039;&#039;&#039;&lt;br /&gt;
** LPC1100L Serie zusätzlich zu LPC1100: • Power Profile mit lower power consumption in Active- und Sleep-mode, • Interne pull-ups auf VDD level, • Programmierbarer pseudo open-drain mode für GPIO Pins, • WWDT mit Clock Source Lock.&lt;br /&gt;
**LPC11C00 Serie zusätzlich zu LPC1100: • CAN controller, • On-chip CAN Treiber, • On-chip CAN Transceiver (LPC11C2x), • WDT (not windowed) mit Clock Source Lock.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10398.pdf User Manual der LPC11-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Besonderes Augenmerk möchte ich auf die neue Serie  &#039;&#039;&#039;[http://www.nxp.com/ps/#/i=71498 LPC111xFD]&#039;&#039;&#039; legen, denn in jetzt gibt es den Cortex-M0 auch im DIL 28 &#039;&#039;&#039;[http://www.nxp.com/redirect/pip/LPC1114FN28.html den LPC1114FN28]&#039;&#039;&#039;&lt;br /&gt;
**Des Weiteren sind damit SO20, sowie TSSOP20 und TSSOP28 Bauformen verfügbar&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC12xx (Cortex-M0) ===&lt;br /&gt;
* Die Low Power &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc12xx/ LPC12xx-Serie]&#039;&#039;&#039; (3,3V) ist laut NXP (Sep2011) ein Cortex-M0 mit 32 bis 128kB Flash, einem 45 CoreMark™ Benchmark-Score bei 30MHz, 2 bis 8kB SRAM, und einem internen 1% genauen 12MHz Oscillator.&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features: fMAX von 30MHz, 1 10-Bit  ADC mit 8 Kanälen, 2 Comparatoren, 2 UARTs, 1 SSP/SPI, 1 I2C, DMA Controller, CRC Engine, 1 32-Bit, 5 Timer (16- und 32-Bit, + RTC), 13 PWM Kanäle, bis zu 55 GPIOs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10441.pdf User Manual der LPC12xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC13xx (Cortex-M3) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc13xx/ LPC13xx-Serie]&#039;&#039;&#039; (3,3V) bietet im LQFP 48 Gehäuse 8..32k Flash, 2..8k SRAM, 5 Timer (mit WD), 11 PWM, 1 UART, 1IIC, 1USB, 1..2 SPI, einen 8-Kanal/10Bit AD-Wandler und eine Taktfrequenz von max. 72MHz. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10375.pdf User Manual der LPC13xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC17xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc17xx/ LPC17xx-Serie]&#039;&#039;&#039; hingegen enthält eine weit größere Peripherie in einem LQFP80/100/144/208 Package.&lt;br /&gt;
32..512k Flash, 8..96k SRAM, 6 Timer (mit WD), 6 zusätzliche PWM-Einheiten, teilweise Ethernet und STN/TFT-LCD-Controller, meist USB (teilw. mit Host+OTG), 4 UART, 2..3IIC, 1..2 CAN, 1 SPI, 2 SSP/SPI einen 6..8-Kanal/12Bit AD-Wandler, einen 10Bit DAC, Motor-Control-Einheiten, einen Encoder-Eingang und eine Taktfrequenz von max. 100MHz(120MHz) und vieles mehr. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10360.pdf User Manual der LPC17xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC18xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc18xx/ LPC18xx-Serie]&#039;&#039;&#039; stellt DIE &amp;quot;High-Performance&amp;quot; Controller aus der Cortex-M3-Serie. Die Taktfrequenz geht bis 150MHz, die Controller enthalten große dual-Bank Flash Speicher bis zu 1MB, ein großes On-Chip SRAM mit bis zu 200KB, zusätzliche Peripherie wie z.B. SPI Flash Interface (SPIFI) und State Configurable Timer (SCT), 2x High Speed USB (1x mit On-Chip HS PHY) und eine MPU.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://ics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc18xx.pdf User Manual der LPC18xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features: &#039;&#039;&#039;[http://ics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc18xx.pdf LPC18xx Flyer von NXP]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungskits ===&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Kostenlose Entwicklungsumgebung für ALLE hier genannten Controller ===&lt;br /&gt;
Für die ganze Prozessorfamilie ist eine &amp;lt;u&amp;gt;kostenlose&amp;lt;/u&amp;gt; Entwicklungsumgebung  erhältlich. Informationen unter &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home  lpcware]&#039;&#039;&#039;: Die auf Eclipse basierende Entwicklungsumgebung ist nach der Installation bis 8k freigeschaltet und nach einer einfachen und kostenlosen Registrierung für 256kB. Die IDE ist auch für &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home Linux und Mac]&#039;&#039;&#039; verfügbar.&lt;br /&gt;
&lt;br /&gt;
Hier die &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== LPC8xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC8xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 06/2016)&lt;br /&gt;
* LPC810FN8 (DIP8): Digikey 1,09 € (bei einem Stuck).&lt;br /&gt;
* LPC812JD20 (SOIC-W 20): Digikey 1,26 € (bei einem Stuck).&lt;br /&gt;
* LPC812JDH20 (TSSOP-20): Digikey 1,44 € (bei einem Stuck).&lt;br /&gt;
* LPC824M201JDH20J (TSSOP-20): Conrad 2,99 € incl. MwSt, (2017/03) &lt;br /&gt;
* LPC812M101JD20FP (SO-20): Conrad 2,49 incl. MwSt, (2017/03) &lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC800_block_diagram_Jan2014.gif|thumb|right|850px|Blockdiagramm des Cortex-M0+, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC8xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC8xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0+ processor, running at frequencies of up to 30 MHz. &lt;br /&gt;
** single cycle multiplier&lt;br /&gt;
** single cycle I/O port&lt;br /&gt;
** ARM Cortex-M0+ built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug, Micro Trace Buffer supported.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32kB (LPC824), 16 kB (LPC812M101JD20/LPC812M101JDH20/LPC812M101JDH16), 8 kB (LPC811M001JDH16) or 4kB (LPC810M021FN8) on-chip flash programming memory. &lt;br /&gt;
**  8kB, 4kB, 2 kB, or 1 kB SRAM.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** ROM support routines for: power profiles, USART, SPI, I2C, ADC, integer division&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 18 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages down to 6.&lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
** &#039;&#039;&#039;Switch matrix for flexible configuration of each I/O pin function.&#039;&#039;&#039;&lt;br /&gt;
** CRC engine&lt;br /&gt;
** DMA with 18 channels and 9 sources&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** Comparator with internal and external references and 31 step voltage divider.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 9.4 kHz to 2.3 MHz.&lt;br /&gt;
** 10 kHz low-power oscillator for the WKT.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Reduced power modes: Sleep mode, Deep-sleep mode, Power-down mode, and Deep power-down mode.&lt;br /&gt;
** Wake-up from Deep-sleep and Power-down modes on activity on USART, SPI, and I2C peripherals.&lt;br /&gt;
** Brownout detect.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available as DIP8, TSSOP16, SO20, and TSSOP20 package.&lt;br /&gt;
&lt;br /&gt;
== LPC11xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC11xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 01/2014):&lt;br /&gt;
&lt;br /&gt;
elpro.org: von 1.61EUR (LPC1111FN33) bis 5.73EUR (LPC11U37) bei einen Stueck. Die Familie ist sehr gross mit sehr unterschiedlichen Ausfuehrungen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC11xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC11xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 50 MHz. &lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32 kB (LPC1114/LPC11C14), 24 kB (LPC1113), 16 kB (LPC1112/LPC11C12), or 8 kB (LPC1111) on-chip flash programming memory.  &lt;br /&gt;
** 8 kB, 4 kB, or 2 kB SRAM. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages and LPC11C22/C24. &lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 13 of the functional pins.&lt;br /&gt;
** Power-On Reset (POR). &lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset. &lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available in the following packages: 16WLCSP, 25WLCSP 20-SOIC, 20-TSSOP, 28-DIP, 28-TSSOP, 48-LQFP, 64-LQFP, 100-LQFP, and others.&lt;br /&gt;
&lt;br /&gt;
== LPC12xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC12xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
[[Bild:block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC12xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC12xx ===&lt;br /&gt;
&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 45 MHz (one wait state from flash) or 30 MHz (zero wait states from flash). The LPC122x have a high score of over 45 in CoreMark CPU performance benchmark testing, equivalent to 1.51/MHz.&lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug (SWD).&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory&lt;br /&gt;
** Up to 8 kB SRAM.&lt;br /&gt;
** Up to 128 kB on-chip flash programming memory. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Includes ROM-based 32-bit integer division routines.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz Internal RC (IRC) oscillator trimmed to 1 % accuracy that can optionally be used as a system clock.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, main clock, and Watchdog clock.&lt;br /&gt;
** Real-Time Clock (RTC).&lt;br /&gt;
* Digital peripherals&lt;br /&gt;
** Micro DMA controller with 21 channels.&lt;br /&gt;
** CRC engine.&lt;br /&gt;
** Two UARTs with fractional baud rate generation and internal FIFO. One UART with RS-485 and modem support and one standard UART with IrDA.&lt;br /&gt;
** SSP/SPI controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. I2C-bus pins have programmable glitch filter.&lt;br /&gt;
** Up to 55 General Purpose I/O (GPIO) pins with programmable pull-up resistor, open-drain mode, programmable digital input glitch filter, and programmable input inverter. &lt;br /&gt;
** Programmable output drive on all GPIO pins. Four pins support high-current output drivers.&lt;br /&gt;
** All GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** Four general purpose counter/timers with four capture inputs and four match outputs (32-bit timers) or two capture inputs and two match outputs (16-bit timers). &lt;br /&gt;
** Windowed WatchDog Timer (WWDT).&lt;br /&gt;
* Analog peripherals&lt;br /&gt;
** One 8-channel, 10-bit ADC.&lt;br /&gt;
** Two highly flexible analog comparators. Comparator outputs can be programmed to trigger a timer match signal or can be used to emulate 555 timer behavior.&lt;br /&gt;
* Power&lt;br /&gt;
** Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Deep-sleep mode via start logic using 12 port pins.&lt;br /&gt;
** Processor wake-up from Deep-power down and Deep-sleep modes via the RTC.&lt;br /&gt;
** Brownout detect with three separate thresholds each for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
** Integrated PMU (Power Management Unit).&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* 3.3 V power supply.&lt;br /&gt;
* Available as 64-pin and 48-pin LQFP package.&lt;br /&gt;
&lt;br /&gt;
== LPC13xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC13xx ===&lt;br /&gt;
[[Bild:LPC13xx_Selection_Guide_Sep2011.png|thumb|left|600px|Selection Guide zur LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1313 mit 32k-Flash mit 72MHz im LQFP 48 Gehäuse. Der LPC1313 ist bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; erhältlich für 3,57 € (Juli 2016), oder elpro.org für 2,29 €.  Entwicklungskit INKLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1343-LPCXpresso-Board Watterott]&#039;&#039;&#039; für 23,80 € (Juli 2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC13xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC13xx Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1313 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 72 MHz.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 32 kB on-chip flash programming memory.&lt;br /&gt;
* 8 kB SRAM.&lt;br /&gt;
* In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* UART with fractional baud rate generation, modem, internal FIFO, and RS-485/EIA-485 support.&lt;br /&gt;
* SSP controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
* Additional SSP controller on LPC1313FBD48/01.&lt;br /&gt;
* I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode.&lt;br /&gt;
* Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors.&lt;br /&gt;
* Four general purpose counter/timers with a total of four capture inputs and 13 match outputs.&lt;br /&gt;
* Programmable Watchdog Timer (WDT) &lt;br /&gt;
* System tick timer.&lt;br /&gt;
* Serial Wire Debug and Serial Wire Trace port.&lt;br /&gt;
* High-current output driver (20 mA) on one pin.&lt;br /&gt;
* High-current sink drivers (20 mA) on two I2C-bus pins in Fast-mode Plus.&lt;br /&gt;
* Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
* Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
* Single power supply (2.0 V to 3.6 V).&lt;br /&gt;
* 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
* Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, or the watchdog clock.&lt;br /&gt;
* Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 40 of the functional pins.&lt;br /&gt;
* Brownout detect with four separate thresholds for interrupt and one thresholds for forced reset.&lt;br /&gt;
* Power-On Reset (POR).&lt;br /&gt;
* Integrated oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 12 MHz internal RC oscillator trimmed to 1 % accuracy over the entire temperature and voltage range that can optionally be used as a system clock.&lt;br /&gt;
* Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz. System PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
* Code Read Protection (CRP) with different security levels.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Available as 48-pin LQFP package and 33-pin HVQFN package.&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1347 ===&lt;br /&gt;
* 64 kB Flash&lt;br /&gt;
* 12 kB SRAM&lt;br /&gt;
* 4 kB EEPROM&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* USB Code in ROM&lt;br /&gt;
* USB Bootloader in ROM, programming via copy to mass storage device&lt;br /&gt;
&lt;br /&gt;
== LPC17xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC17xx ===&lt;br /&gt;
[[Bild:LPC17xx_Selection_Guide_Sep2011.png|thumb|left|680px|Selection Guide zur LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1754 mit 128K Flash im LQFP80, der bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; für 7€74 (Juli/2011) erhältlich ist,[den LPC1751 (32k/8k) schon für 5€95] und bei Digikey für 6€35, den LPC1764FBD100 bei &#039;&#039;&#039;[http://www.tme.eu/de TME]&#039;&#039;&#039;    für 7€ Entwicklungskit INCLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1769-LPCXpresso Watterott]&#039;&#039;&#039; für 23€80 (Juli/2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC17xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC177x_178x Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1754 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 100 MHz &lt;br /&gt;
* A Memory Protection Unit (MPU) supporting eight regions is included.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 128 kB on-chip flash program memory with In-System Programming (ISP) and In-Application Programming (IAP) capabilities. &lt;br /&gt;
* 32 kB of SRAM on the CPU with local code/data bus for high-performance CPU access.&lt;br /&gt;
* Eight channel General Purpose DMA controller &lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
* USB 2.0 full-speed controller that can be configured for either device, Host, or OTG operation with an on-chip PHY for device and Host functions &lt;br /&gt;
* Four UARTs with fractional baud rate generation, internal FIFO, IrDA, and DMA, Einer mit Modem I/Os und RS485 Support&lt;br /&gt;
* 1 CAN controller.&lt;br /&gt;
* 2 SSP controllers &lt;br /&gt;
* 1 SPI controller &lt;br /&gt;
* 2 I2C-bus interfaces with data rates of 1Mbit/s,&lt;br /&gt;
* I2S (Inter-IC Sound) &lt;br /&gt;
* 52  General Purpose I/O (GPIO) pins Any pin of ports 0 and 2 can be used to generate an interrupt.&lt;br /&gt;
* 8x 12-bit Analog-to-Digital Converter (ADC) conversion rates up to 200 kHz&lt;br /&gt;
* 1x 10-bit Digital-to-Analog Converter (DAC) &lt;br /&gt;
* Four general purpose timers/counters, with a total of eight capture inputs and ten compare outputs. &lt;br /&gt;
* One motor control PWM with support for three-phase motor control.&lt;br /&gt;
* Quadrature encoder interface that can monitor one external quadrature encoder.&lt;br /&gt;
* One standard PWM/timer block with external count input.&lt;br /&gt;
* Real-Time Clock (RTC) with a separate power domain including 20 bytes of battery-powered backup registers,  An RTC interrupt can wake up the CPU from any reduced power mode.&lt;br /&gt;
* Watchdog Timer (WDT). &lt;br /&gt;
* Cortex-M3 system tick timer&lt;br /&gt;
* Repetitive interrupt timer &lt;br /&gt;
* Standard JTAG test/debug interface as well as Serial Wire Debug and Serial Wire Trace Port options.&lt;br /&gt;
* Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
* Single 3.3 V power supply (2.4 V to 3.6 V). &lt;br /&gt;
* Four external interrupt inputs configurable as edge/level sensitive. All pins on PORT0 and PORT2 can be used as edge sensitive interrupt sources.&lt;br /&gt;
* Non-maskable Interrupt (NMI) input.&lt;br /&gt;
* Wakeup Interrupt Controller (WIC) &lt;br /&gt;
* Each peripheral has its own clock divider for further power savings.&lt;br /&gt;
* Brownout detect with separate threshold for interrupt and forced reset.&lt;br /&gt;
* On-chip Power-On Reset (POR).&lt;br /&gt;
* On-chip crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 4 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
* An on-chip PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the main oscillator, the internal RC oscillator, or the RTC oscillator.&lt;br /&gt;
* Available as 80-pin LQFP (12 x 12 x 1.4 mm) packages.&lt;br /&gt;
&lt;br /&gt;
== LPC18xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC18xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC18xx Familie ===&lt;br /&gt;
[[Bild:block.diagram_NXP18xx Sep2011.gif|thumb|left|680px|Blockdiagramm der LPC18xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC18xx ===&lt;br /&gt;
DRAFT!&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M3 processor, running at frequencies of up to 180 MHz.&lt;br /&gt;
** ARM Cortex-M3 built-in Memory Protection Unit (MPU) supporting eight regions.&lt;br /&gt;
** ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Non-maskable Interrupt (NMI) input.&lt;br /&gt;
** JTAG and Serial Wire Debug, serial trace, eight breakpoints, and four watch points.&lt;br /&gt;
** ETM and ETB support.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* On-chip memory (flashless parts LPC1850/30/20/10)&lt;br /&gt;
** Up to 200 kB SRAM total for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 64 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* On-chip memory (parts with on-chip flash)&lt;br /&gt;
** Up to 1 MB total dual bank flash memory with flash accelerator.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Up to 136 kB SRAM for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 32 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1 % accuracy.&lt;br /&gt;
** Ultra-low power RTC crystal oscillator.&lt;br /&gt;
** Three PLLs allow CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. The second PLL is dedicated to the High-speed USB, the third PLL can be used as audio PLL.&lt;br /&gt;
** Clock output.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** Quad SPI Flash Interface (SPIFI) with four lanes and data rates of up to 40 MB per second total.&lt;br /&gt;
** 10/100T Ethernet MAC with RMII and MII interfaces and DMA support for high throughput at low CPU load. Support for IEEE 1588 time stamping/advanced time stamping (IEEE 1588-2008 v2).&lt;br /&gt;
** One High-speed USB 2.0 Host/Device/OTG interface with DMA support and on-chip PHY.&lt;br /&gt;
** One High-speed USB 2.0 Host/Device interface with DMA support, on-chip full-speed PHY and ULPI interface to external high-speed PHY.&lt;br /&gt;
** USB interface electrical test software included in ROM USB stack.&lt;br /&gt;
** Four 550 UARTs with DMA support: one UART with full modem interface; one UART with IrDA interface; three USARTs support synchronous mode and a smart card interface conforming to ISO7816 specification.&lt;br /&gt;
** Two C_CAN 2.0B controllers with one channel each.&lt;br /&gt;
** Two SSP controllers with FIFO and multi-protocol support. Both SSPs with DMA support.&lt;br /&gt;
** One Fast-mode Plus I2C-bus interface with monitor mode and with open-drain I/O pins conforming to the full I2C-bus specification. Supports data rates of up to 1 Mbit/s.&lt;br /&gt;
** One standard I2C-bus interface with monitor mode and standard I/O pins.&lt;br /&gt;
** Two I2S interfaces with DMA support, each with one input and one output.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** External Memory Controller (EMC) supporting external SRAM, ROM, NOR flash, and SDRAM devices.&lt;br /&gt;
** LCD controller with DMA support and a programmable display resolution of up to 1024H x 768V. Supports monochrome and color STN panels and TFT color panels; supports 1/2/4/8 bpp CLUT and 16/24-bit direct pixel mapping.&lt;br /&gt;
** SD/MMC card interface.&lt;br /&gt;
** Eight-channel General-Purpose DMA (GPDMA) controller can access all memories on the AHB and all DMA-capable AHB slaves.&lt;br /&gt;
** Up to 80 General-Purpose Input/Output (GPIO) pins with configurable pull-up/pull-down resistors and open-drain modes. &lt;br /&gt;
** GPIO registers are located on the AHB for fast access. GPIO ports have DMA support.&lt;br /&gt;
** State Configurable Timer (SCT) subsystem on AHB.&lt;br /&gt;
** Four general-purpose timer/counters with capture and match capabilities.&lt;br /&gt;
** One motor control PWM for three-phase motor control.&lt;br /&gt;
** One Quadrature Encoder Interface (QEI).&lt;br /&gt;
** Repetitive Interrupt timer (RI timer).&lt;br /&gt;
** Windowed watchdog timer.&lt;br /&gt;
** Ultra-low power Real-Time Clock (RTC) on separate power domain with 256 bytes of battery powered backup registers.&lt;br /&gt;
** Alarm timer; can be battery powered.&lt;br /&gt;
* Digital peripherals available on flash-based parts LPC18xx only:&lt;br /&gt;
** &amp;lt;tbd&amp;gt;&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** One 10-bit DAC with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
** Two 10-bit ADCs with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
* Security:&lt;br /&gt;
** Hardware-based AES security engine programmable through an on-chip API.&lt;br /&gt;
** Two 128-bit secure OTP memories for AES key storage and customer use.&lt;br /&gt;
** Unique ID for each device.&lt;br /&gt;
* Power: &lt;br /&gt;
** Single 3.3 V (2.2 V to 3.6 V) power supply with on-chip internal voltage regulator for the core supply and the RTC power domain.&lt;br /&gt;
** RTC power domain can be powered separately by a 3 V battery supply.&lt;br /&gt;
** Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Sleep mode via wake-up interrupts from various eripherals. &lt;br /&gt;
** Wake-up from Deep-sleep, Power-down, and Deep power-down modes via external interrupts and interrupts generated by battery powered blocks in the RTC power domain.&lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
* Available as 100-pin, 144-pin, and 208-pin LQFP packages and as 100-pin, 180-pin, and 256-pin LBGA packages.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
=== MCUXpresso ===&lt;br /&gt;
Neu, seit 2017/04 verfügbar&lt;br /&gt;
* kostenlos, ohne Codelimits&lt;br /&gt;
* Unterstützung für LPC und Kinetis Familie&lt;br /&gt;
* läuft unter Windows, Linux, MacOS&lt;br /&gt;
* sieht genauso aus wie LPCXpresso&lt;br /&gt;
* Projekte die mit LPCXpresso erstellt wurden lassen sich mit MCUXpresso öffnen&lt;br /&gt;
&lt;br /&gt;
weitere Infos unter: http://www.nxp.com/products/software-and-tools/run-time-software/mcuxpresso-software-and-tools/mcuxpresso-integrated-development-environment-ide:MCUXpresso-IDE&lt;br /&gt;
&lt;br /&gt;
=== LPCWare (kostenlos) ===&lt;br /&gt;
[[Bild:lpcxpresso-debug_Code-red_3Sep2011.gif|thumb|right|680px|Ansicht der Entwicklungsumgebung, ©code-red-tech.com]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Entwicklungs Tool ====&lt;br /&gt;
(Beschreibung aus der Web-Site:)&lt;br /&gt;
LPCXpresso&#039;s IDE (Ursprünglich von &amp;quot;Code RED&amp;quot; entwickelt, die Firma wurde 2013 von LPC gekauft) ist eine hoch integrierte Entwicklungsumgebung für LPC-Controller, und beinhaltet alle zur Entwicklung erforderlichen Tools um hoch qualitative Software in einer angemessenen Zeit zu schreiben. LPCXpresso basiert auf ein vereinfachtes Eclipse mit vielen LPC-specifischen Erweiterungen.&lt;br /&gt;
Des Weiteren ist eine aktuelle Version der Industrie-Standard GNU Tool-Chain mit einer propritären und optimierten C-Lib mit dabei. Die LPCXpresso IDE stellt ein voll optimiertes Executable zur Verfügung. Die einzige Beschränkung der kostenlosen Version ist eine Limitierung auf 256kB Code nach erfolgter Registrierung.&lt;br /&gt;
Das LPCXpresso Target Board ist eine Gemeinschaftsentwicklung von Embedded Artists, Code Red und NXP.&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
Die LPCXpresso IDE stellt eine C-Umgebung mit Syntax-Colouring, Source-Formatierung, Funktions-Folding, sowie mit Online- und Offline Hilfe und umfangreichen Projekt-Management Funktionen zur Verfügung.  &lt;br /&gt;
Dies beinhaltet:&lt;br /&gt;
* Wizards um Projekte für alle unterstützten Controller zu erstellen &lt;br /&gt;
* Automatische Linker Script Generierung inklusive Memory-Map Unterstützung &lt;br /&gt;
* Programmierung des Controllers&lt;br /&gt;
* On-Line Debugging&lt;br /&gt;
* Datenblatt-Zugriff über eingebauten Browser&lt;br /&gt;
* Support für die NXP LPC Microcontroller Familien, von Cortex-M0, Cortex-M3 bis Cortex-M4 und ARM7 bis ARM9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Peripherie und Register Views im Debugger ====&lt;br /&gt;
Der Peripherie-Viewer im integrierten Debugger zeigt alle Register und Bit-Felder in einer einfachen Baumstruktur.&lt;br /&gt;
Ein Prozessor-Register Viewer erlaubt den Zugriff auf alle Prozessor-Register und stellt eine &amp;quot;Smart-Formatting&amp;quot;  Funktion zur Verfügung um komplexe Register wie Flags oder Status Register übersichtlich darstellen zu können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Unterstützte Familien ====&lt;br /&gt;
Cortex-M0, Cortex-M3, Cortex-M4, Einzelne Controller aus der LPC2000 family, ARM966, ARM926-EJ, ARM926-EJ + VFP&lt;br /&gt;
&lt;br /&gt;
==== Sehr preiswerter USB_JTAG_SWD Debugger ====&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039; und diese &#039;&#039;&#039;[http://www.mikrocontroller.net/wikisoftware/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso Beschreibung]&#039;&#039;&#039;&lt;br /&gt;
Der neue Programmer/Debugger ist hier für ca 18€ +P&amp;amp;P erhältlich &#039;&#039;&#039;[http://www.watterott.com/de/LPC-Link-2 Programmer]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Standard Library ====&lt;br /&gt;
Im Download der &amp;quot;Code Red&amp;quot; Entwicklungsumgebung ist eine relativ umfangreiche Firmwarebibliothek vorhanden.&lt;br /&gt;
&lt;br /&gt;
==== Installationsanleitung zur IDE ====&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Codebase für LPC11xx und LPC13xx ====&lt;br /&gt;
Für die Cortex-M0 und -M3 Familien existieren verschiedene Basispakete die als Startausstattung sehr gut geeignet sind. Auf microbuilder.eu findet man eine sehr interessante Version inklusive Dokumentation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Codebase_f%C3%BCr_LPC1xxx HIER]&#039;&#039;&#039; findet man alle Links zur original Codebase mit allen Dateien (Stand Januar 2012) aber auch eine deutsche Übersetzung zu den Files.&lt;br /&gt;
&lt;br /&gt;
=== CooCox ===&lt;br /&gt;
&lt;br /&gt;
Auf der &#039;&#039;&#039;[http://www.coocox.org/Index.html Homepage]&#039;&#039;&#039; von CooCox - einem chinesischen Open-Source Projekt, auf der eine IDE für Atmel, Energy Micro, Holtek, Nuvoton, ST, TI und NXP verfügbar ist  - findet man die auf Eclipse basierende &amp;quot;CooCox CoIDE&amp;quot;, die sich aus dem &amp;quot;CoBuilder&amp;quot; und dem &amp;quot;CoDebugger&amp;quot; zusammensetzt.&lt;br /&gt;
Des Weiteren bietet man dort ein Echtzeit-Multitasking Betriebssystem, sowie SW-Versionen von zwei unterschiedliche Debugging-Adapter und ein Stand-alone Flash-Tool zum freien Download an.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Controller können damit programmiert und debugged werden:&lt;br /&gt;
    LPC1111x101    LPC1111x201   LPC1112x101   LPC1112x201&lt;br /&gt;
    LPC1113x201    LPC1113x301   LPC1114x201   LPC1114x301&lt;br /&gt;
    LPC11C14x301   LPC11C12x301&lt;br /&gt;
    LPC1224x101    LPC1224x121   LPC1225x301   LPC1225x321   LPC1226x301  LPC1227x301&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    LPC1311   LPC1313   LPC1342   LPC1343&lt;br /&gt;
    LPC1751   LPC1752   LPC1754   LPC1756   LPC1758   LPC1759&lt;br /&gt;
    LPC1763   LPC1764   LPC1765   LPC1766   LPC1767   LPC1768   LPC1769&lt;br /&gt;
&lt;br /&gt;
=== EmBlocks ===&lt;br /&gt;
&#039;&#039;&#039;[http://www.emblocks.org/web/ Emblocks]&#039;&#039;&#039; ist eine kostenlose Entwicklungsumgebung. Sie unterstützt neben NXP uC weitere ARM uC (STM32, EFM32) sowie PIC, AVR und MSP430. Die IDE hat einen eingebauten GDB Debugger welcher System view (Peripherie Register anzeigen) beim Debuggen unterstützt. Ausserdem gibt es einen Project Wizzard für NXP uC &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Unterstützt wird der JLINK mit folgenden NXP uC:&lt;br /&gt;
LPC11Axx, LPC11Exx, LPC11Uxx, LPC11xxLV, LPC12xx, LPC13Uxx, LPC13xx, LPC17xx, LPC18xx, LPC18xx, LPC177x_8x, LPC407x_8x&lt;br /&gt;
&lt;br /&gt;
=== Codebase ===&lt;br /&gt;
Des Weiteren existiert eine umfangreiche Sammlung von &#039;&#039;&#039;[http://www.coocox.org/NXP-Series.php Code-Beispielen]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Keil ===&lt;br /&gt;
[https://www.keil.com/demo/eval/arm.htm KEIL MDK-ARM] (Windows, Free Version auf 32KB begrenzt, mit vielen Beispielen zu div. Evaluation Boards) &lt;br /&gt;
*[http://www.keil.com/arm/chips.asp unterstützte Mikrocontroller]&lt;br /&gt;
=== WinARM ===&lt;br /&gt;
[http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/#winarm WinARM] (wird derzeit nicht gepflegt)&lt;br /&gt;
&lt;br /&gt;
=== GNUARM ===&lt;br /&gt;
[http://gnuarm.com/ GNUARM] (Linux, Windows, wird derzeit nicht gepflegt), &lt;br /&gt;
&lt;br /&gt;
=== Yagarto ===&lt;br /&gt;
[http://www.yagarto.de/ Yagarto] (Windows, mit Eclipse-Integration) &lt;br /&gt;
&lt;br /&gt;
=== CodeSourcery ===&lt;br /&gt;
[http://www.codesourcery.com/gnu_toolchains/arm CodeSourcery CodeBench Lite]&lt;br /&gt;
&lt;br /&gt;
== CMSIS  -  Standard für alle Plattformen ==&lt;br /&gt;
Der Cortex Microcontroller Software Interface Standard (CMSIS) stellt einen &amp;quot;abstraction layer&amp;quot; für alle Cortex-Mx Controller zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
CMSIS stellt einen Schnittstellenstandard von ARM dar, der von vielen Tool-Herstellern unterstützt wird und ist (laut verschiedener Berichte)  kompatibel mit den verschiedensten Compilern (incl GCC). Dies wird erreicht durch einheitliche Definitionen für Adressen und Namen die den Zugriff auf die Register des Cores und der Peripherie ermöglichen.&lt;br /&gt;
Auch Standard-Funktionen für den Start und die Interrupts stehen zur Verfügung.&lt;br /&gt;
Natürlich kann auch weiterhin direkt auf die HW zugegriffen werden, es geht nur um eine Vereinheitlichung von identischen Funktionen. &lt;br /&gt;
Da die Peripherie-Teile zumindest innerhalb eines Halbleiterherstellers für die Cortex-Mx Controller sehr ähnlich oder sogar weitgehend identisch sind kann deutlich mehr SW für verschiedene Derivate innerhalb dieser Prozessorfamilien wiederverwendet werden.  (siehe Google: &amp;quot;CMSIS_Doulos_Tutorial.pdf&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Ein weiterer, interessanter Punkt ist die CMSIS-DSP Lib mit ihren Vektorfunktionen, Matrix-Berechnung sowie komplexen Algorithmen für Filter, &lt;br /&gt;
Regler und Fourietransformation sowie weiterer DSP Algorithmen (insgesamt 61).&lt;br /&gt;
&lt;br /&gt;
Leider hat diese Kompatibilität auch ihre Grenzen, denn Sonderfunktionen bzw. Spezialitäten in der &amp;quot;gleichen&amp;quot; Peripherie zwischen unterschiedlichen Halbleiterherstellern werden nicht abgedeckt. &lt;br /&gt;
Wäre auch zu schön, wenn die Prozesorhersteller dem Entwickler dadurch einen fliegenden HW-Wechsel bzw. eine einfache Vergleichbarkeit ermöglichen würden ;-)&lt;br /&gt;
&lt;br /&gt;
Eine komplette CMSIS-Lib (V2.0) &amp;quot;Cortex Microcontroller Software Interface Standard&amp;quot; ist für das &amp;quot;Code Red&amp;quot; Paket verfügbar, inklusive einer &amp;quot;DSP-Library&amp;quot; &lt;br /&gt;
http://support.code-red-tech.com/CodeRedWiki/NewInVersion4&lt;br /&gt;
bzw. für GNU / Keil / IAR unter&lt;br /&gt;
http://ics.nxp.com/support/documents/microcontrollers/?search=CMSIS&amp;amp;type=software&amp;amp;Search.x=8&amp;amp;Search.y=12&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* Wiki&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx_Entwicklungskit_LPCXpresso]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Codebase_f%C3%BCr_LPC1xxx]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx für Umsteiger]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Projekte&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/264089 FreeRTOS auf LPC1768]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/321481 Multithreading auf LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/319537 Python Script zum Flashen des LPC8xx]&lt;br /&gt;
&lt;br /&gt;
* Suche im Forum&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC8* LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC12* LPC12xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC13* LPC13xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC17* LPC17xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC18* LPC18xx]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
(Die Preiswertesten sind &#039;&#039;&#039;fett&#039;&#039;&#039; dargestellt)&lt;br /&gt;
* &#039;&#039;&#039;[http://darisusgmbh.de/shop/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 Darisus]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[http://www.elpro.org/shop/shop.php elpro]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.hbe-shop.de HBE] &lt;br /&gt;
* [http://www.tme.eu/de/katalog#cleanParameters%3D1%26searchClick%3D1%26search%3DLPC1%26bf_szukaj%3D+ TME]&lt;br /&gt;
* [http://www.tn-electronics.de/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 TN]&lt;br /&gt;
* [http://de.mouser.com/_/?Keyword=LPC1&amp;amp;Ns=Pricing|0&amp;amp;FS=True Mouser]&lt;br /&gt;
* [http://www.soselectronic.eu/?searchstring=LPC1&amp;amp;str=378 SOS]&lt;br /&gt;
* [http://de.farnell.com Farnell/Element14]&lt;br /&gt;
* [http://conrad.de Conrad]&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
* [http://www.watterott.com/index.php?page=search&amp;amp;page_action=query&amp;amp;desc=off&amp;amp;sdesc=on&amp;amp;keywords=LPCXpresso Watterott (24€ inclusive JTAG-Programmiergerät UND JTAG Debugger für kostenlose &amp;quot;Code-Red&amp;quot; Entwicklungsplattform)], dazu hier die [[LPC1xxx_Entwicklungskit_LPCXpresso|Beschreibung]]&lt;br /&gt;
* [http://www.lpctools.com/evaluationboardskitsforlpc17xx.aspx LPC-Tools]&lt;br /&gt;
* [http://thinkembedded.ch/NXP:::25.html thinkembedded.ch] div. Olimex Boards&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* http://www.nxp.com/#/page/content=[f=/dynamic/applicationnotes/tid-50809_sid-56890/data.xml] Appnotes&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html Projects]&lt;br /&gt;
* [http://mbed.org/handbook/Homepage MBED]&lt;br /&gt;
* [http://forums.nxp.com/forums/viewforum.php?f=1 NXP-WIKI]&lt;br /&gt;
* [http://knowledgebase.nxp.com/forumdisplay.php?s=389a3610c741bca7b18221d32b9c0ce0&amp;amp;f=4 NXP-Forum]&lt;br /&gt;
* [http://ics.nxp.com/lpcxpresso/ LPCXpresso]&lt;br /&gt;
* [http://code.google.com/p/32bitmicro/ 32BitMicro]&lt;br /&gt;
* [http://www.brc-electronics.nl SimpleCortex]&lt;br /&gt;
* [http://www.lpcware.com/ LPCWare NXP MCU community]&lt;br /&gt;
* [http://nanohome.be/nxp/index.html LPC175/6x und LPC23xx pin Configurator]&lt;br /&gt;
* [https://code.google.com/p/lpc-1768-arm-synthesizer/  MIDI controlled monophonic synthesizer based on the LPCXpresso 1768.]&lt;br /&gt;
* [https://code.google.com/p/lpc1343codebase/  An open source software library for NXP&#039;s Cortex-M3 based LPC1300 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc1114codebase/   An open source software library for NXP&#039;s Cortex-M0 based LPC1100 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc-12xx-bootloader/  A flexible bootloader for use with LPC12xx Microcontrollers from NXP, Firmware code is AES128 encrypted to secure your project / source code when giving out public firmware updates. ]&lt;br /&gt;
* [https://code.google.com/p/lpcxpresso-rc/   Read receiver and sensor signals for radio controlled model aircrafts configured for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/olpcx/   Open toolset for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/32bitmicro/   Collection of code and tools for 32 bit microcontrollers]&lt;br /&gt;
* [https://code.google.com/p/my-nxp-lpc1114/   my-nxp-lpc1114 study course]&lt;br /&gt;
* [https://code.google.com/p/nxp-lpc/   nxp-lpc]&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsplattformen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.lpcware.com/lpcxpresso/home LPDXpresso Download (Kostenlos mit Debugger)]&lt;br /&gt;
* [http://www.lpcware.com LPCXpresso Homepage]&lt;br /&gt;
* [http://support.code-red-tech.com/CodeRedWiki/WikiHome CR-WIKI]&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp ARM/Keil MDK-ARM]&lt;br /&gt;
* IAR EWARM&lt;br /&gt;
* Rowley Crossworks&lt;br /&gt;
* Green Hills Software &lt;br /&gt;
* [http://www.coocox.org/CooCox_CoIDE.htm CooCox] (Kostenlos)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:LPC1x]]&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:LPC-Mikrocontroller&amp;diff=95439</id>
		<title>Diskussion:LPC-Mikrocontroller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:LPC-Mikrocontroller&amp;diff=95439"/>
		<updated>2017-03-06T12:14:18Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* Umstrukturierung der Seite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Zustimmung von NXP sowie code-red zur Verlinkung bzw. zum direkten Kopieren aus der Domain www.nxp.com bzw. www.code-red-tech.com liegt mir vor. ([[Benutzer:Powerfreak|Powerfreak]] 3. Sep. 2011 (UTC))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kann man die Cortex M0 denn mit dem einfachen GCC für M3 bearbeiten? Oder bracht es da andere Tools?&lt;br /&gt;
Ja, kann man, die Standard-Tools decken das mit ab&lt;br /&gt;
&lt;br /&gt;
Solche Fragen bitte im Forum stellen - wie auch immer: siehe http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html und darin Erläuterungen zu -mcpu=name ([[Benutzer:Mthomas|Mthomas]] 15:35, 2. Sep. 2011 (UTC))&lt;br /&gt;
&lt;br /&gt;
== Umstrukturierung der Seite ==&lt;br /&gt;
&lt;br /&gt;
Wenn man sich einmal das aktuelle Portfolio von NXP anschaut ([http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-mcus:LPC-ARM-CORTEX-M-MCUS LPC Microcontrollers | NXP]), dann stellt man fest, dass diese Seite nicht mehr aktuell ist: &lt;br /&gt;
Es gibt mehr Typen, als die bisher erwähnten LPC1xxx-µCs.&lt;br /&gt;
Der Seitentitel suggeriert auch, dass es eben nur um die LPC1x00-Serie geht, obwohl die LPC800er Serie auch erwähnt wird.&lt;br /&gt;
&lt;br /&gt;
Generell finde ich die Seite nicht mehr übersichtlich genug.&lt;br /&gt;
&lt;br /&gt;
Ein kleiner Überblick zu den aktuellen Produktreihen:&lt;br /&gt;
* Cortex-Kerne&lt;br /&gt;
:* LPC800 mit Cortex-M0+&lt;br /&gt;
:* LPC1100 mit Cortex-M0+/M0&lt;br /&gt;
:* LPC1200 mit Cortex-M0&lt;br /&gt;
:* LPC1300 mit Cortex-M3&lt;br /&gt;
:* LPC1500 mit Cortex-M3&lt;br /&gt;
:* LPC1700 mit Cortex-M3&lt;br /&gt;
:* LPC1800 mit Cortex-M3&lt;br /&gt;
:* LPC4000 mit Cortex-M4&lt;br /&gt;
:* LPC4300 mit Cortex-M4 und M0&lt;br /&gt;
:* LPC54000 mit Cortex-M4 und M0+&lt;br /&gt;
* und eventuell auch die anderen ARM Kerne&lt;br /&gt;
:* (LPC2000 mit ARM7TDMI)&lt;br /&gt;
:* (LPC3000 mit ARM926EJ)&lt;br /&gt;
&lt;br /&gt;
Deswegen mein Vorschlag: die aktuelle Seite umbenennen/verschieben auf eine neue Seite &amp;quot;LPC MCUs&amp;quot;/&amp;quot;LPC Mikrocontroller&amp;quot;/&amp;quot;LPC Series MCUs&amp;quot; (oder so ähnlich) und dann die Seite zu updaten. Darunter fällt &lt;br /&gt;
sowohl generell die neuen Informationen aufzunehmen, als auch ältere Daten auf den aktuellen Stand zu bringen (Der Stand der Seite scheint teilweise von 2013 oder noch früher zu sein). &lt;br /&gt;
Die Verlinkung links oben in der Übersicht müsste bei der Umbenennung der Seite auch angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Auch sollte man die Seite durchgehend in deutsch schreiben, oder wenigstens deutsche Erklärungen dazu.&lt;br /&gt;
&lt;br /&gt;
Angefangen habe ich schon mal mit der neuen Vergleichstabelle, die allerdings auch noch erweiterbar ist.&lt;br /&gt;
&lt;br /&gt;
Freue mich auf eure Meinungen dazu&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Newgeneration|Newgeneration]] ([[Benutzer Diskussion:Newgeneration|Diskussion]]) 18:06, 11. Feb. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
Die abgeschriebenen Übersichten sind nie so aktuell wie die Seiten der Hersteller. Die Änderungen sind schön, aber die parametrische Suche von NXP ist umfangreicher. &lt;br /&gt;
Die Seite nur &#039;LPC&#039; zu nennen fände ich auch besser, LPC1xxx ist mittlerweile wirklich obsolet.&lt;br /&gt;
Leider ist hier das Interesse an der LPC Serie sehr gering, obwohl die sehr einfach zu programmieren sind. Interessanter wären da eher Tutorials zum Einstieg.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Jojos|Jojos]] ([[Benutzer Diskussion:Jojos|Diskussion]]) 13:12, 6. Mär. 2017 (CET)&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:LPC-Mikrocontroller&amp;diff=95438</id>
		<title>Diskussion:LPC-Mikrocontroller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:LPC-Mikrocontroller&amp;diff=95438"/>
		<updated>2017-03-06T12:12:22Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* Umstrukturierung der Seite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Zustimmung von NXP sowie code-red zur Verlinkung bzw. zum direkten Kopieren aus der Domain www.nxp.com bzw. www.code-red-tech.com liegt mir vor. ([[Benutzer:Powerfreak|Powerfreak]] 3. Sep. 2011 (UTC))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kann man die Cortex M0 denn mit dem einfachen GCC für M3 bearbeiten? Oder bracht es da andere Tools?&lt;br /&gt;
Ja, kann man, die Standard-Tools decken das mit ab&lt;br /&gt;
&lt;br /&gt;
Solche Fragen bitte im Forum stellen - wie auch immer: siehe http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html und darin Erläuterungen zu -mcpu=name ([[Benutzer:Mthomas|Mthomas]] 15:35, 2. Sep. 2011 (UTC))&lt;br /&gt;
&lt;br /&gt;
== Umstrukturierung der Seite ==&lt;br /&gt;
&lt;br /&gt;
Wenn man sich einmal das aktuelle Portfolio von NXP anschaut ([http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-mcus:LPC-ARM-CORTEX-M-MCUS LPC Microcontrollers | NXP]), dann stellt man fest, dass diese Seite nicht mehr aktuell ist: &lt;br /&gt;
Es gibt mehr Typen, als die bisher erwähnten LPC1xxx-µCs.&lt;br /&gt;
Der Seitentitel suggeriert auch, dass es eben nur um die LPC1x00-Serie geht, obwohl die LPC800er Serie auch erwähnt wird.&lt;br /&gt;
&lt;br /&gt;
Generell finde ich die Seite nicht mehr übersichtlich genug.&lt;br /&gt;
&lt;br /&gt;
Ein kleiner Überblick zu den aktuellen Produktreihen:&lt;br /&gt;
* Cortex-Kerne&lt;br /&gt;
:* LPC800 mit Cortex-M0+&lt;br /&gt;
:* LPC1100 mit Cortex-M0+/M0&lt;br /&gt;
:* LPC1200 mit Cortex-M0&lt;br /&gt;
:* LPC1300 mit Cortex-M3&lt;br /&gt;
:* LPC1500 mit Cortex-M3&lt;br /&gt;
:* LPC1700 mit Cortex-M3&lt;br /&gt;
:* LPC1800 mit Cortex-M3&lt;br /&gt;
:* LPC4000 mit Cortex-M4&lt;br /&gt;
:* LPC4300 mit Cortex-M4 und M0&lt;br /&gt;
:* LPC54000 mit Cortex-M4 und M0+&lt;br /&gt;
* und eventuell auch die anderen ARM Kerne&lt;br /&gt;
:* (LPC2000 mit ARM7TDMI)&lt;br /&gt;
:* (LPC3000 mit ARM926EJ)&lt;br /&gt;
&lt;br /&gt;
Deswegen mein Vorschlag: die aktuelle Seite umbenennen/verschieben auf eine neue Seite &amp;quot;LPC MCUs&amp;quot;/&amp;quot;LPC Mikrocontroller&amp;quot;/&amp;quot;LPC Series MCUs&amp;quot; (oder so ähnlich) und dann die Seite zu updaten. Darunter fällt &lt;br /&gt;
sowohl generell die neuen Informationen aufzunehmen, als auch ältere Daten auf den aktuellen Stand zu bringen (Der Stand der Seite scheint teilweise von 2013 oder noch früher zu sein). &lt;br /&gt;
Die Verlinkung links oben in der Übersicht müsste bei der Umbenennung der Seite auch angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Auch sollte man die Seite durchgehend in deutsch schreiben, oder wenigstens deutsche Erklärungen dazu.&lt;br /&gt;
&lt;br /&gt;
Angefangen habe ich schon mal mit der neuen Vergleichstabelle, die allerdings auch noch erweiterbar ist.&lt;br /&gt;
&lt;br /&gt;
Freue mich auf eure Meinungen dazu&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Newgeneration|Newgeneration]] ([[Benutzer Diskussion:Newgeneration|Diskussion]]) 18:06, 11. Feb. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
Die abgeschriebenen Übersichten sind nie so aktuell wie die Seiten der Hersteller. Die Änderungen sind schön, aber die parametrische Suche von NXP ist umfangreicher. &lt;br /&gt;
Leider ist hier das Interesse an der LPC Serie sehr gering, obwohl die sehr einfach zu programmieren sind. Interessanter wären da eher Tutorials zum Einstieg.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Jojos|Jojos]] ([[Benutzer Diskussion:Jojos|Diskussion]]) 13:12, 6. Mär. 2017 (CET)&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=95437</id>
		<title>LPC-Mikrocontroller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=95437"/>
		<updated>2017-03-06T12:02:51Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* Entwicklungsumgebungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:overview_Sep2011.png|thumb|right|850px|Überblick über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
[[Bild:positioning_NXPSep2011.gif|thumb|right|850px|Vergleich über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
Die LPC-Familie von NXP basiert auf 32-Bit Cortex-Kernen von ARM und arbeitet mit bis zu 204MHz. Die verschiedenen Serien basieren auf den Cortex-M0/M0+/M3/M4-Kernen und sind inzwischen auch für Privatnutzer zu Preisen erhältlich, die mit denen von 8-Bit-Mikrocontrollern vergleichbar sind. Eine Auflistung der verschiedenen Typen findet sich in der Tabelle unten.&lt;br /&gt;
&lt;br /&gt;
Von NXP sind preiswerte Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger oder den neuen LPC-Link2, ein reiner Programmer + Debugger) erhältlich z.B. bei [http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]. Siehe dazu auch die Dokumentation von NXP zu den [http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)] und diese [[LPC1xxx Entwicklungskit LPCXpresso]].&lt;br /&gt;
&lt;br /&gt;
== Vergleich aller Typen ==&lt;br /&gt;
&#039;&#039;Stand Feb. 2017&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; class=&amp;quot;unsortable&amp;quot;                               | &lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | CPU&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Max. Frequency&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Flash&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | SRAM&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Voltage&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; class=&amp;quot;unsortable&amp;quot;   | Features&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2&amp;quot;              | Cortex-M0+&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;30&amp;quot;             | 30MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-32kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
SCTimer/PWM,&lt;br /&gt;
Switch Matrix,&lt;br /&gt;
Pattern Match Engine&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC54000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;128&amp;quot;            | 128-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;96&amp;quot;             | 96-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.62&amp;quot;           | 1.62-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
LCD,&lt;br /&gt;
Ethernet,&lt;br /&gt;
FlexComm,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1100&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | Cortex-M0/M0+&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;50&amp;quot; | 50MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-36kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.71&amp;quot;           | 1.71-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
EEPROM&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1200&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;0&amp;quot;              | Cortex-M0&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;32&amp;quot;             | 32-128kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
8 kV protection,&lt;br /&gt;
IEC 60730 Class B certified&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1300&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;3&amp;quot;  | Cortex-M3&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;72&amp;quot; | 72MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-64kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-12kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.0&amp;quot;            | 2.0-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1500&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;12&amp;quot;             | 12-36kB&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.4&amp;quot;| 2.4-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1700&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;                | 32-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;24&amp;quot;             | 24-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4300&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;240&amp;quot;            | 204MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-282kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
SGPIO,&lt;br /&gt;
Security&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;: gibt es auch als Mehrkern-Prozessoren (mit 0/1/2 Cortex-M0(+)-Cores)&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Informationen ==&lt;br /&gt;
&lt;br /&gt;
Aktuelle Linecard von NXP: http://www.nxp.com/assets/documents/data/en/product-selector-guide/LPCMICROLNCD.pdf&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Infos + User-Manuals==&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC8xx (Cortex-M0+) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://www.nxp.com/products/microcontrollers/cortex_m0_m0/series/LPC800.html#quickreference LPC8xx]&#039;&#039;&#039; ist nur in Packages mit einer relativ niedrigen Pinanzahl (DIP8, SO20, TSSOP16, TSSOP20) verfügbar, hat zwischen 4-16kB Flash, und 1-4kB RAM. Die zulässige Betriebsspannung liegt zwischen 1,8V und 3,6V.&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features der LPC800-Serie: &lt;br /&gt;
* 1-4 I2C&lt;br /&gt;
* 1-2 SSP&lt;br /&gt;
* 2-3 UART&lt;br /&gt;
* 4 Timer,  1 OS-Timer&lt;br /&gt;
* 1 watch dog&lt;br /&gt;
* 4 PWM-Einheiten&lt;br /&gt;
* 12-bit ADC&lt;br /&gt;
* CRC engine&lt;br /&gt;
* DMA with 18 channels and 9 trigger inputs&lt;br /&gt;
* 1 SCT (state configurable timer)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/download/grouping/11045/user_manual User Manual der LPC8-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC11xx (Cortex-M0) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc11xx/ LPC11xx-Serie]&#039;&#039;&#039; (3,3V) bietet viele Möglichkeiten&lt;br /&gt;
* Der LPC1100L ist derzeit laut NXP (Sep2011) der preisgünstigste ARM auf dem Markt. Der 32Bit ARM mit einer Performance von ca. 45DMIPS @50MHZ benötigt bei dieser Taktfrequenz nur etwa 10mA. (Details siehe NXP-Seite)&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features :&lt;br /&gt;
** LPC1100 Serie: • I2C, SSP, UART, GPIO, • Timers and watch dog timer, • 10-bit ADC, • Flash/SRAM memory, • Weitere Funktionen, siehe &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/LPC1xxx#Features_eines_LPC11xx 2.3 Features]&#039;&#039;&#039;&lt;br /&gt;
** LPC1100L Serie zusätzlich zu LPC1100: • Power Profile mit lower power consumption in Active- und Sleep-mode, • Interne pull-ups auf VDD level, • Programmierbarer pseudo open-drain mode für GPIO Pins, • WWDT mit Clock Source Lock.&lt;br /&gt;
**LPC11C00 Serie zusätzlich zu LPC1100: • CAN controller, • On-chip CAN Treiber, • On-chip CAN Transceiver (LPC11C2x), • WDT (not windowed) mit Clock Source Lock.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10398.pdf User Manual der LPC11-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Besonderes Augenmerk möchte ich auf die neue Serie  &#039;&#039;&#039;[http://www.nxp.com/ps/#/i=71498 LPC111xFD]&#039;&#039;&#039; legen, denn in jetzt gibt es den Cortex-M0 auch im DIL 28 &#039;&#039;&#039;[http://www.nxp.com/redirect/pip/LPC1114FN28.html den LPC1114FN28]&#039;&#039;&#039;&lt;br /&gt;
**Des Weiteren sind damit SO20, sowie TSSOP20 und TSSOP28 Bauformen verfügbar&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC12xx (Cortex-M0) ===&lt;br /&gt;
* Die Low Power &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc12xx/ LPC12xx-Serie]&#039;&#039;&#039; (3,3V) ist laut NXP (Sep2011) ein Cortex-M0 mit 32 bis 128kB Flash, einem 45 CoreMark™ Benchmark-Score bei 30MHz, 2 bis 8kB SRAM, und einem internen 1% genauen 12MHz Oscillator.&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features: fMAX von 30MHz, 1 10-Bit  ADC mit 8 Kanälen, 2 Comparatoren, 2 UARTs, 1 SSP/SPI, 1 I2C, DMA Controller, CRC Engine, 1 32-Bit, 5 Timer (16- und 32-Bit, + RTC), 13 PWM Kanäle, bis zu 55 GPIOs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10441.pdf User Manual der LPC12xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC13xx (Cortex-M3) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc13xx/ LPC13xx-Serie]&#039;&#039;&#039; (3,3V) bietet im LQFP 48 Gehäuse 8..32k Flash, 2..8k SRAM, 5 Timer (mit WD), 11 PWM, 1 UART, 1IIC, 1USB, 1..2 SPI, einen 8-Kanal/10Bit AD-Wandler und eine Taktfrequenz von max. 72MHz. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10375.pdf User Manual der LPC13xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC17xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc17xx/ LPC17xx-Serie]&#039;&#039;&#039; hingegen enthält eine weit größere Peripherie in einem LQFP80/100/144/208 Package.&lt;br /&gt;
32..512k Flash, 8..96k SRAM, 6 Timer (mit WD), 6 zusätzliche PWM-Einheiten, teilweise Ethernet und STN/TFT-LCD-Controller, meist USB (teilw. mit Host+OTG), 4 UART, 2..3IIC, 1..2 CAN, 1 SPI, 2 SSP/SPI einen 6..8-Kanal/12Bit AD-Wandler, einen 10Bit DAC, Motor-Control-Einheiten, einen Encoder-Eingang und eine Taktfrequenz von max. 100MHz(120MHz) und vieles mehr. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10360.pdf User Manual der LPC17xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC18xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc18xx/ LPC18xx-Serie]&#039;&#039;&#039; stellt DIE &amp;quot;High-Performance&amp;quot; Controller aus der Cortex-M3-Serie. Die Taktfrequenz geht bis 150MHz, die Controller enthalten große dual-Bank Flash Speicher bis zu 1MB, ein großes On-Chip SRAM mit bis zu 200KB, zusätzliche Peripherie wie z.B. SPI Flash Interface (SPIFI) und State Configurable Timer (SCT), 2x High Speed USB (1x mit On-Chip HS PHY) und eine MPU.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://ics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc18xx.pdf User Manual der LPC18xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features: &#039;&#039;&#039;[http://ics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc18xx.pdf LPC18xx Flyer von NXP]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungskits ===&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Kostenlose Entwicklungsumgebung für ALLE hier genannten Controller ===&lt;br /&gt;
Für die ganze Prozessorfamilie ist eine &amp;lt;u&amp;gt;kostenlose&amp;lt;/u&amp;gt; Entwicklungsumgebung  erhältlich. Informationen unter &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home  lpcware]&#039;&#039;&#039;: Die auf Eclipse basierende Entwicklungsumgebung ist nach der Installation bis 8k freigeschaltet und nach einer einfachen und kostenlosen Registrierung für 256kB. Die IDE ist auch für &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home Linux und Mac]&#039;&#039;&#039; verfügbar.&lt;br /&gt;
&lt;br /&gt;
Hier die &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== LPC8xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC8xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 06/2016)&lt;br /&gt;
* LPC810FN8 (DIP8): Digikey 1,09 € (bei einem Stuck).&lt;br /&gt;
* LPC812JD20 (SOIC-W 20): Digikey 1,26 € (bei einem Stuck).&lt;br /&gt;
* LPC812JDH20 (TSSOP-20): Digikey 1,44 € (bei einem Stuck).&lt;br /&gt;
* LPC824M201JDH20J (TSSOP-20): Conrad 2,99 € incl. MwSt, (2017/03) &lt;br /&gt;
* LPC812M101JD20FP (SO-20): Conrad 2,49 incl. MwSt, (2017/03) &lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC800_block_diagram_Jan2014.gif|thumb|right|850px|Blockdiagramm des Cortex-M0+, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC8xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC8xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0+ processor, running at frequencies of up to 30 MHz. &lt;br /&gt;
** single cycle multiplier&lt;br /&gt;
** single cycle I/O port&lt;br /&gt;
** ARM Cortex-M0+ built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug, Micro Trace Buffer supported.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32kB (LPC824), 16 kB (LPC812M101JD20/LPC812M101JDH20/LPC812M101JDH16), 8 kB (LPC811M001JDH16) or 4kB (LPC810M021FN8) on-chip flash programming memory. &lt;br /&gt;
**  8kB, 4kB, 2 kB, or 1 kB SRAM.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** ROM support routines for: power profiles, USART, SPI, I2C, ADC, integer division&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 18 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages down to 6.&lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
** &#039;&#039;&#039;Switch matrix for flexible configuration of each I/O pin function.&#039;&#039;&#039;&lt;br /&gt;
** CRC engine&lt;br /&gt;
** DMA with 18 channels and 9 sources&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** Comparator with internal and external references and 31 step voltage divider.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 9.4 kHz to 2.3 MHz.&lt;br /&gt;
** 10 kHz low-power oscillator for the WKT.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Reduced power modes: Sleep mode, Deep-sleep mode, Power-down mode, and Deep power-down mode.&lt;br /&gt;
** Wake-up from Deep-sleep and Power-down modes on activity on USART, SPI, and I2C peripherals.&lt;br /&gt;
** Brownout detect.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available as DIP8, TSSOP16, SO20, and TSSOP20 package.&lt;br /&gt;
&lt;br /&gt;
== LPC11xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC11xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 01/2014):&lt;br /&gt;
&lt;br /&gt;
elpro.org: von 1.61EUR (LPC1111FN33) bis 5.73EUR (LPC11U37) bei einen Stueck. Die Familie ist sehr gross mit sehr unterschiedlichen Ausfuehrungen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC11xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC11xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 50 MHz. &lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32 kB (LPC1114/LPC11C14), 24 kB (LPC1113), 16 kB (LPC1112/LPC11C12), or 8 kB (LPC1111) on-chip flash programming memory.  &lt;br /&gt;
** 8 kB, 4 kB, or 2 kB SRAM. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages and LPC11C22/C24. &lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 13 of the functional pins.&lt;br /&gt;
** Power-On Reset (POR). &lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset. &lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available in the following packages: 16WLCSP, 25WLCSP 20-SOIC, 20-TSSOP, 28-DIP, 28-TSSOP, 48-LQFP, 64-LQFP, 100-LQFP, and others.&lt;br /&gt;
&lt;br /&gt;
== LPC12xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC12xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
[[Bild:block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC12xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC12xx ===&lt;br /&gt;
&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 45 MHz (one wait state from flash) or 30 MHz (zero wait states from flash). The LPC122x have a high score of over 45 in CoreMark CPU performance benchmark testing, equivalent to 1.51/MHz.&lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug (SWD).&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory&lt;br /&gt;
** Up to 8 kB SRAM.&lt;br /&gt;
** Up to 128 kB on-chip flash programming memory. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Includes ROM-based 32-bit integer division routines.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz Internal RC (IRC) oscillator trimmed to 1 % accuracy that can optionally be used as a system clock.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, main clock, and Watchdog clock.&lt;br /&gt;
** Real-Time Clock (RTC).&lt;br /&gt;
* Digital peripherals&lt;br /&gt;
** Micro DMA controller with 21 channels.&lt;br /&gt;
** CRC engine.&lt;br /&gt;
** Two UARTs with fractional baud rate generation and internal FIFO. One UART with RS-485 and modem support and one standard UART with IrDA.&lt;br /&gt;
** SSP/SPI controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. I2C-bus pins have programmable glitch filter.&lt;br /&gt;
** Up to 55 General Purpose I/O (GPIO) pins with programmable pull-up resistor, open-drain mode, programmable digital input glitch filter, and programmable input inverter. &lt;br /&gt;
** Programmable output drive on all GPIO pins. Four pins support high-current output drivers.&lt;br /&gt;
** All GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** Four general purpose counter/timers with four capture inputs and four match outputs (32-bit timers) or two capture inputs and two match outputs (16-bit timers). &lt;br /&gt;
** Windowed WatchDog Timer (WWDT).&lt;br /&gt;
* Analog peripherals&lt;br /&gt;
** One 8-channel, 10-bit ADC.&lt;br /&gt;
** Two highly flexible analog comparators. Comparator outputs can be programmed to trigger a timer match signal or can be used to emulate 555 timer behavior.&lt;br /&gt;
* Power&lt;br /&gt;
** Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Deep-sleep mode via start logic using 12 port pins.&lt;br /&gt;
** Processor wake-up from Deep-power down and Deep-sleep modes via the RTC.&lt;br /&gt;
** Brownout detect with three separate thresholds each for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
** Integrated PMU (Power Management Unit).&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* 3.3 V power supply.&lt;br /&gt;
* Available as 64-pin and 48-pin LQFP package.&lt;br /&gt;
&lt;br /&gt;
== LPC13xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC13xx ===&lt;br /&gt;
[[Bild:LPC13xx_Selection_Guide_Sep2011.png|thumb|left|600px|Selection Guide zur LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1313 mit 32k-Flash mit 72MHz im LQFP 48 Gehäuse. Der LPC1313 ist bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; erhältlich für 3,57 € (Juli 2016), oder elpro.org für 2,29 €.  Entwicklungskit INKLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1343-LPCXpresso-Board Watterott]&#039;&#039;&#039; für 23,80 € (Juli 2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC13xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC13xx Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1313 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 72 MHz.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 32 kB on-chip flash programming memory.&lt;br /&gt;
* 8 kB SRAM.&lt;br /&gt;
* In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* UART with fractional baud rate generation, modem, internal FIFO, and RS-485/EIA-485 support.&lt;br /&gt;
* SSP controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
* Additional SSP controller on LPC1313FBD48/01.&lt;br /&gt;
* I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode.&lt;br /&gt;
* Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors.&lt;br /&gt;
* Four general purpose counter/timers with a total of four capture inputs and 13 match outputs.&lt;br /&gt;
* Programmable Watchdog Timer (WDT) &lt;br /&gt;
* System tick timer.&lt;br /&gt;
* Serial Wire Debug and Serial Wire Trace port.&lt;br /&gt;
* High-current output driver (20 mA) on one pin.&lt;br /&gt;
* High-current sink drivers (20 mA) on two I2C-bus pins in Fast-mode Plus.&lt;br /&gt;
* Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
* Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
* Single power supply (2.0 V to 3.6 V).&lt;br /&gt;
* 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
* Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, or the watchdog clock.&lt;br /&gt;
* Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 40 of the functional pins.&lt;br /&gt;
* Brownout detect with four separate thresholds for interrupt and one thresholds for forced reset.&lt;br /&gt;
* Power-On Reset (POR).&lt;br /&gt;
* Integrated oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 12 MHz internal RC oscillator trimmed to 1 % accuracy over the entire temperature and voltage range that can optionally be used as a system clock.&lt;br /&gt;
* Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz. System PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
* Code Read Protection (CRP) with different security levels.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Available as 48-pin LQFP package and 33-pin HVQFN package.&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1347 ===&lt;br /&gt;
* 64 kB Flash&lt;br /&gt;
* 12 kB SRAM&lt;br /&gt;
* 4 kB EEPROM&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* USB Code in ROM&lt;br /&gt;
* USB Bootloader in ROM, programming via copy to mass storage device&lt;br /&gt;
&lt;br /&gt;
== LPC17xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC17xx ===&lt;br /&gt;
[[Bild:LPC17xx_Selection_Guide_Sep2011.png|thumb|left|680px|Selection Guide zur LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1754 mit 128K Flash im LQFP80, der bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; für 7€74 (Juli/2011) erhältlich ist,[den LPC1751 (32k/8k) schon für 5€95] und bei Digikey für 6€35, den LPC1764FBD100 bei &#039;&#039;&#039;[http://www.tme.eu/de TME]&#039;&#039;&#039;    für 7€ Entwicklungskit INCLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1769-LPCXpresso Watterott]&#039;&#039;&#039; für 23€80 (Juli/2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC17xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC177x_178x Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1754 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 100 MHz &lt;br /&gt;
* A Memory Protection Unit (MPU) supporting eight regions is included.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 128 kB on-chip flash program memory with In-System Programming (ISP) and In-Application Programming (IAP) capabilities. &lt;br /&gt;
* 32 kB of SRAM on the CPU with local code/data bus for high-performance CPU access.&lt;br /&gt;
* Eight channel General Purpose DMA controller &lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
* USB 2.0 full-speed controller that can be configured for either device, Host, or OTG operation with an on-chip PHY for device and Host functions &lt;br /&gt;
* Four UARTs with fractional baud rate generation, internal FIFO, IrDA, and DMA, Einer mit Modem I/Os und RS485 Support&lt;br /&gt;
* 1 CAN controller.&lt;br /&gt;
* 2 SSP controllers &lt;br /&gt;
* 1 SPI controller &lt;br /&gt;
* 2 I2C-bus interfaces with data rates of 1Mbit/s,&lt;br /&gt;
* I2S (Inter-IC Sound) &lt;br /&gt;
* 52  General Purpose I/O (GPIO) pins Any pin of ports 0 and 2 can be used to generate an interrupt.&lt;br /&gt;
* 8x 12-bit Analog-to-Digital Converter (ADC) conversion rates up to 200 kHz&lt;br /&gt;
* 1x 10-bit Digital-to-Analog Converter (DAC) &lt;br /&gt;
* Four general purpose timers/counters, with a total of eight capture inputs and ten compare outputs. &lt;br /&gt;
* One motor control PWM with support for three-phase motor control.&lt;br /&gt;
* Quadrature encoder interface that can monitor one external quadrature encoder.&lt;br /&gt;
* One standard PWM/timer block with external count input.&lt;br /&gt;
* Real-Time Clock (RTC) with a separate power domain including 20 bytes of battery-powered backup registers,  An RTC interrupt can wake up the CPU from any reduced power mode.&lt;br /&gt;
* Watchdog Timer (WDT). &lt;br /&gt;
* Cortex-M3 system tick timer&lt;br /&gt;
* Repetitive interrupt timer &lt;br /&gt;
* Standard JTAG test/debug interface as well as Serial Wire Debug and Serial Wire Trace Port options.&lt;br /&gt;
* Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
* Single 3.3 V power supply (2.4 V to 3.6 V). &lt;br /&gt;
* Four external interrupt inputs configurable as edge/level sensitive. All pins on PORT0 and PORT2 can be used as edge sensitive interrupt sources.&lt;br /&gt;
* Non-maskable Interrupt (NMI) input.&lt;br /&gt;
* Wakeup Interrupt Controller (WIC) &lt;br /&gt;
* Each peripheral has its own clock divider for further power savings.&lt;br /&gt;
* Brownout detect with separate threshold for interrupt and forced reset.&lt;br /&gt;
* On-chip Power-On Reset (POR).&lt;br /&gt;
* On-chip crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 4 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
* An on-chip PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the main oscillator, the internal RC oscillator, or the RTC oscillator.&lt;br /&gt;
* Available as 80-pin LQFP (12 x 12 x 1.4 mm) packages.&lt;br /&gt;
&lt;br /&gt;
== LPC18xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC18xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC18xx Familie ===&lt;br /&gt;
[[Bild:block.diagram_NXP18xx Sep2011.gif|thumb|left|680px|Blockdiagramm der LPC18xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC18xx ===&lt;br /&gt;
DRAFT!&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M3 processor, running at frequencies of up to 180 MHz.&lt;br /&gt;
** ARM Cortex-M3 built-in Memory Protection Unit (MPU) supporting eight regions.&lt;br /&gt;
** ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Non-maskable Interrupt (NMI) input.&lt;br /&gt;
** JTAG and Serial Wire Debug, serial trace, eight breakpoints, and four watch points.&lt;br /&gt;
** ETM and ETB support.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* On-chip memory (flashless parts LPC1850/30/20/10)&lt;br /&gt;
** Up to 200 kB SRAM total for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 64 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* On-chip memory (parts with on-chip flash)&lt;br /&gt;
** Up to 1 MB total dual bank flash memory with flash accelerator.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Up to 136 kB SRAM for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 32 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1 % accuracy.&lt;br /&gt;
** Ultra-low power RTC crystal oscillator.&lt;br /&gt;
** Three PLLs allow CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. The second PLL is dedicated to the High-speed USB, the third PLL can be used as audio PLL.&lt;br /&gt;
** Clock output.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** Quad SPI Flash Interface (SPIFI) with four lanes and data rates of up to 40 MB per second total.&lt;br /&gt;
** 10/100T Ethernet MAC with RMII and MII interfaces and DMA support for high throughput at low CPU load. Support for IEEE 1588 time stamping/advanced time stamping (IEEE 1588-2008 v2).&lt;br /&gt;
** One High-speed USB 2.0 Host/Device/OTG interface with DMA support and on-chip PHY.&lt;br /&gt;
** One High-speed USB 2.0 Host/Device interface with DMA support, on-chip full-speed PHY and ULPI interface to external high-speed PHY.&lt;br /&gt;
** USB interface electrical test software included in ROM USB stack.&lt;br /&gt;
** Four 550 UARTs with DMA support: one UART with full modem interface; one UART with IrDA interface; three USARTs support synchronous mode and a smart card interface conforming to ISO7816 specification.&lt;br /&gt;
** Two C_CAN 2.0B controllers with one channel each.&lt;br /&gt;
** Two SSP controllers with FIFO and multi-protocol support. Both SSPs with DMA support.&lt;br /&gt;
** One Fast-mode Plus I2C-bus interface with monitor mode and with open-drain I/O pins conforming to the full I2C-bus specification. Supports data rates of up to 1 Mbit/s.&lt;br /&gt;
** One standard I2C-bus interface with monitor mode and standard I/O pins.&lt;br /&gt;
** Two I2S interfaces with DMA support, each with one input and one output.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** External Memory Controller (EMC) supporting external SRAM, ROM, NOR flash, and SDRAM devices.&lt;br /&gt;
** LCD controller with DMA support and a programmable display resolution of up to 1024H x 768V. Supports monochrome and color STN panels and TFT color panels; supports 1/2/4/8 bpp CLUT and 16/24-bit direct pixel mapping.&lt;br /&gt;
** SD/MMC card interface.&lt;br /&gt;
** Eight-channel General-Purpose DMA (GPDMA) controller can access all memories on the AHB and all DMA-capable AHB slaves.&lt;br /&gt;
** Up to 80 General-Purpose Input/Output (GPIO) pins with configurable pull-up/pull-down resistors and open-drain modes. &lt;br /&gt;
** GPIO registers are located on the AHB for fast access. GPIO ports have DMA support.&lt;br /&gt;
** State Configurable Timer (SCT) subsystem on AHB.&lt;br /&gt;
** Four general-purpose timer/counters with capture and match capabilities.&lt;br /&gt;
** One motor control PWM for three-phase motor control.&lt;br /&gt;
** One Quadrature Encoder Interface (QEI).&lt;br /&gt;
** Repetitive Interrupt timer (RI timer).&lt;br /&gt;
** Windowed watchdog timer.&lt;br /&gt;
** Ultra-low power Real-Time Clock (RTC) on separate power domain with 256 bytes of battery powered backup registers.&lt;br /&gt;
** Alarm timer; can be battery powered.&lt;br /&gt;
* Digital peripherals available on flash-based parts LPC18xx only:&lt;br /&gt;
** &amp;lt;tbd&amp;gt;&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** One 10-bit DAC with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
** Two 10-bit ADCs with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
* Security:&lt;br /&gt;
** Hardware-based AES security engine programmable through an on-chip API.&lt;br /&gt;
** Two 128-bit secure OTP memories for AES key storage and customer use.&lt;br /&gt;
** Unique ID for each device.&lt;br /&gt;
* Power: &lt;br /&gt;
** Single 3.3 V (2.2 V to 3.6 V) power supply with on-chip internal voltage regulator for the core supply and the RTC power domain.&lt;br /&gt;
** RTC power domain can be powered separately by a 3 V battery supply.&lt;br /&gt;
** Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Sleep mode via wake-up interrupts from various eripherals. &lt;br /&gt;
** Wake-up from Deep-sleep, Power-down, and Deep power-down modes via external interrupts and interrupts generated by battery powered blocks in the RTC power domain.&lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
* Available as 100-pin, 144-pin, and 208-pin LQFP packages and as 100-pin, 180-pin, and 256-pin LBGA packages.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
=== MCUXpresso ===&lt;br /&gt;
Neu, soll ab 2017/03 verfügbar sein. &lt;br /&gt;
* kostenlos, ohne Codelimits&lt;br /&gt;
* Unterstützung für LPC und Kinetis Familie&lt;br /&gt;
* läuft unter Windows, Linux, MacOS&lt;br /&gt;
&lt;br /&gt;
weitere Infos unter: http://www.nxp.com/products/software-and-tools/run-time-software/mcuxpresso-software-and-tools/mcuxpresso-integrated-development-environment-ide:MCUXpresso-IDE&lt;br /&gt;
&lt;br /&gt;
=== LPCWare (kostenlos) ===&lt;br /&gt;
[[Bild:lpcxpresso-debug_Code-red_3Sep2011.gif|thumb|right|680px|Ansicht der Entwicklungsumgebung, ©code-red-tech.com]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Entwicklungs Tool ====&lt;br /&gt;
(Beschreibung aus der Web-Site:)&lt;br /&gt;
LPCXpresso&#039;s IDE (Ursprünglich von &amp;quot;Code RED&amp;quot; entwickelt, die Firma wurde 2013 von LPC gekauft) ist eine hoch integrierte Entwicklungsumgebung für LPC-Controller, und beinhaltet alle zur Entwicklung erforderlichen Tools um hoch qualitative Software in einer angemessenen Zeit zu schreiben. LPCXpresso basiert auf ein vereinfachtes Eclipse mit vielen LPC-specifischen Erweiterungen.&lt;br /&gt;
Des Weiteren ist eine aktuelle Version der Industrie-Standard GNU Tool-Chain mit einer propritären und optimierten C-Lib mit dabei. Die LPCXpresso IDE stellt ein voll optimiertes Executable zur Verfügung. Die einzige Beschränkung der kostenlosen Version ist eine Limitierung auf 256kB Code nach erfolgter Registrierung.&lt;br /&gt;
Das LPCXpresso Target Board ist eine Gemeinschaftsentwicklung von Embedded Artists, Code Red und NXP.&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
Die LPCXpresso IDE stellt eine C-Umgebung mit Syntax-Colouring, Source-Formatierung, Funktions-Folding, sowie mit Online- und Offline Hilfe und umfangreichen Projekt-Management Funktionen zur Verfügung.  &lt;br /&gt;
Dies beinhaltet:&lt;br /&gt;
* Wizards um Projekte für alle unterstützten Controller zu erstellen &lt;br /&gt;
* Automatische Linker Script Generierung inklusive Memory-Map Unterstützung &lt;br /&gt;
* Programmierung des Controllers&lt;br /&gt;
* On-Line Debugging&lt;br /&gt;
* Datenblatt-Zugriff über eingebauten Browser&lt;br /&gt;
* Support für die NXP LPC Microcontroller Familien, von Cortex-M0, Cortex-M3 bis Cortex-M4 und ARM7 bis ARM9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Peripherie und Register Views im Debugger ====&lt;br /&gt;
Der Peripherie-Viewer im integrierten Debugger zeigt alle Register und Bit-Felder in einer einfachen Baumstruktur.&lt;br /&gt;
Ein Prozessor-Register Viewer erlaubt den Zugriff auf alle Prozessor-Register und stellt eine &amp;quot;Smart-Formatting&amp;quot;  Funktion zur Verfügung um komplexe Register wie Flags oder Status Register übersichtlich darstellen zu können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Unterstützte Familien ====&lt;br /&gt;
Cortex-M0, Cortex-M3, Cortex-M4, Einzelne Controller aus der LPC2000 family, ARM966, ARM926-EJ, ARM926-EJ + VFP&lt;br /&gt;
&lt;br /&gt;
==== Sehr preiswerter USB_JTAG_SWD Debugger ====&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039; und diese &#039;&#039;&#039;[http://www.mikrocontroller.net/wikisoftware/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso Beschreibung]&#039;&#039;&#039;&lt;br /&gt;
Der neue Programmer/Debugger ist hier für ca 18€ +P&amp;amp;P erhältlich &#039;&#039;&#039;[http://www.watterott.com/de/LPC-Link-2 Programmer]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Standard Library ====&lt;br /&gt;
Im Download der &amp;quot;Code Red&amp;quot; Entwicklungsumgebung ist eine relativ umfangreiche Firmwarebibliothek vorhanden.&lt;br /&gt;
&lt;br /&gt;
==== Installationsanleitung zur IDE ====&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Codebase für LPC11xx und LPC13xx ====&lt;br /&gt;
Für die Cortex-M0 und -M3 Familien existieren verschiedene Basispakete die als Startausstattung sehr gut geeignet sind. Auf microbuilder.eu findet man eine sehr interessante Version inklusive Dokumentation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Codebase_f%C3%BCr_LPC1xxx HIER]&#039;&#039;&#039; findet man alle Links zur original Codebase mit allen Dateien (Stand Januar 2012) aber auch eine deutsche Übersetzung zu den Files.&lt;br /&gt;
&lt;br /&gt;
=== CooCox ===&lt;br /&gt;
&lt;br /&gt;
Auf der &#039;&#039;&#039;[http://www.coocox.org/Index.html Homepage]&#039;&#039;&#039; von CooCox - einem chinesischen Open-Source Projekt, auf der eine IDE für Atmel, Energy Micro, Holtek, Nuvoton, ST, TI und NXP verfügbar ist  - findet man die auf Eclipse basierende &amp;quot;CooCox CoIDE&amp;quot;, die sich aus dem &amp;quot;CoBuilder&amp;quot; und dem &amp;quot;CoDebugger&amp;quot; zusammensetzt.&lt;br /&gt;
Des Weiteren bietet man dort ein Echtzeit-Multitasking Betriebssystem, sowie SW-Versionen von zwei unterschiedliche Debugging-Adapter und ein Stand-alone Flash-Tool zum freien Download an.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Controller können damit programmiert und debugged werden:&lt;br /&gt;
    LPC1111x101    LPC1111x201   LPC1112x101   LPC1112x201&lt;br /&gt;
    LPC1113x201    LPC1113x301   LPC1114x201   LPC1114x301&lt;br /&gt;
    LPC11C14x301   LPC11C12x301&lt;br /&gt;
    LPC1224x101    LPC1224x121   LPC1225x301   LPC1225x321   LPC1226x301  LPC1227x301&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    LPC1311   LPC1313   LPC1342   LPC1343&lt;br /&gt;
    LPC1751   LPC1752   LPC1754   LPC1756   LPC1758   LPC1759&lt;br /&gt;
    LPC1763   LPC1764   LPC1765   LPC1766   LPC1767   LPC1768   LPC1769&lt;br /&gt;
&lt;br /&gt;
=== EmBlocks ===&lt;br /&gt;
&#039;&#039;&#039;[http://www.emblocks.org/web/ Emblocks]&#039;&#039;&#039; ist eine kostenlose Entwicklungsumgebung. Sie unterstützt neben NXP uC weitere ARM uC (STM32, EFM32) sowie PIC, AVR und MSP430. Die IDE hat einen eingebauten GDB Debugger welcher System view (Peripherie Register anzeigen) beim Debuggen unterstützt. Ausserdem gibt es einen Project Wizzard für NXP uC &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Unterstützt wird der JLINK mit folgenden NXP uC:&lt;br /&gt;
LPC11Axx, LPC11Exx, LPC11Uxx, LPC11xxLV, LPC12xx, LPC13Uxx, LPC13xx, LPC17xx, LPC18xx, LPC18xx, LPC177x_8x, LPC407x_8x&lt;br /&gt;
&lt;br /&gt;
=== Codebase ===&lt;br /&gt;
Des Weiteren existiert eine umfangreiche Sammlung von &#039;&#039;&#039;[http://www.coocox.org/NXP-Series.php Code-Beispielen]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Keil ===&lt;br /&gt;
[https://www.keil.com/demo/eval/arm.htm KEIL MDK-ARM] (Windows, Free Version auf 32KB begrenzt, mit vielen Beispielen zu div. Evaluation Boards) &lt;br /&gt;
*[http://www.keil.com/arm/chips.asp unterstützte Mikrocontroller]&lt;br /&gt;
=== WinARM ===&lt;br /&gt;
[http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/#winarm WinARM] (wird derzeit nicht gepflegt)&lt;br /&gt;
&lt;br /&gt;
=== GNUARM ===&lt;br /&gt;
[http://gnuarm.com/ GNUARM] (Linux, Windows, wird derzeit nicht gepflegt), &lt;br /&gt;
&lt;br /&gt;
=== Yagarto ===&lt;br /&gt;
[http://www.yagarto.de/ Yagarto] (Windows, mit Eclipse-Integration) &lt;br /&gt;
&lt;br /&gt;
=== CodeSourcery ===&lt;br /&gt;
[http://www.codesourcery.com/gnu_toolchains/arm CodeSourcery CodeBench Lite]&lt;br /&gt;
&lt;br /&gt;
== CMSIS  -  Standard für alle Plattformen ==&lt;br /&gt;
Der Cortex Microcontroller Software Interface Standard (CMSIS) stellt einen &amp;quot;abstraction layer&amp;quot; für alle Cortex-Mx Controller zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
CMSIS stellt einen Schnittstellenstandard von ARM dar, der von vielen Tool-Herstellern unterstützt wird und ist (laut verschiedener Berichte)  kompatibel mit den verschiedensten Compilern (incl GCC). Dies wird erreicht durch einheitliche Definitionen für Adressen und Namen die den Zugriff auf die Register des Cores und der Peripherie ermöglichen.&lt;br /&gt;
Auch Standard-Funktionen für den Start und die Interrupts stehen zur Verfügung.&lt;br /&gt;
Natürlich kann auch weiterhin direkt auf die HW zugegriffen werden, es geht nur um eine Vereinheitlichung von identischen Funktionen. &lt;br /&gt;
Da die Peripherie-Teile zumindest innerhalb eines Halbleiterherstellers für die Cortex-Mx Controller sehr ähnlich oder sogar weitgehend identisch sind kann deutlich mehr SW für verschiedene Derivate innerhalb dieser Prozessorfamilien wiederverwendet werden.  (siehe Google: &amp;quot;CMSIS_Doulos_Tutorial.pdf&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Ein weiterer, interessanter Punkt ist die CMSIS-DSP Lib mit ihren Vektorfunktionen, Matrix-Berechnung sowie komplexen Algorithmen für Filter, &lt;br /&gt;
Regler und Fourietransformation sowie weiterer DSP Algorithmen (insgesamt 61).&lt;br /&gt;
&lt;br /&gt;
Leider hat diese Kompatibilität auch ihre Grenzen, denn Sonderfunktionen bzw. Spezialitäten in der &amp;quot;gleichen&amp;quot; Peripherie zwischen unterschiedlichen Halbleiterherstellern werden nicht abgedeckt. &lt;br /&gt;
Wäre auch zu schön, wenn die Prozesorhersteller dem Entwickler dadurch einen fliegenden HW-Wechsel bzw. eine einfache Vergleichbarkeit ermöglichen würden ;-)&lt;br /&gt;
&lt;br /&gt;
Eine komplette CMSIS-Lib (V2.0) &amp;quot;Cortex Microcontroller Software Interface Standard&amp;quot; ist für das &amp;quot;Code Red&amp;quot; Paket verfügbar, inklusive einer &amp;quot;DSP-Library&amp;quot; &lt;br /&gt;
http://support.code-red-tech.com/CodeRedWiki/NewInVersion4&lt;br /&gt;
bzw. für GNU / Keil / IAR unter&lt;br /&gt;
http://ics.nxp.com/support/documents/microcontrollers/?search=CMSIS&amp;amp;type=software&amp;amp;Search.x=8&amp;amp;Search.y=12&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* Wiki&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx_Entwicklungskit_LPCXpresso]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Codebase_f%C3%BCr_LPC1xxx]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx für Umsteiger]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Projekte&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/264089 FreeRTOS auf LPC1768]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/321481 Multithreading auf LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/319537 Python Script zum Flashen des LPC8xx]&lt;br /&gt;
&lt;br /&gt;
* Suche im Forum&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC8* LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC12* LPC12xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC13* LPC13xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC17* LPC17xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC18* LPC18xx]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
(Die Preiswertesten sind &#039;&#039;&#039;fett&#039;&#039;&#039; dargestellt)&lt;br /&gt;
* &#039;&#039;&#039;[http://darisusgmbh.de/shop/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 Darisus]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[http://www.elpro.org/shop/shop.php elpro]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.hbe-shop.de HBE] &lt;br /&gt;
* [http://www.tme.eu/de/katalog#cleanParameters%3D1%26searchClick%3D1%26search%3DLPC1%26bf_szukaj%3D+ TME]&lt;br /&gt;
* [http://www.tn-electronics.de/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 TN]&lt;br /&gt;
* [http://de.mouser.com/_/?Keyword=LPC1&amp;amp;Ns=Pricing|0&amp;amp;FS=True Mouser]&lt;br /&gt;
* [http://www.soselectronic.eu/?searchstring=LPC1&amp;amp;str=378 SOS]&lt;br /&gt;
* [http://de.farnell.com Farnell/Element14]&lt;br /&gt;
* [http://conrad.de Conrad]&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
* [http://www.watterott.com/index.php?page=search&amp;amp;page_action=query&amp;amp;desc=off&amp;amp;sdesc=on&amp;amp;keywords=LPCXpresso Watterott (24€ inclusive JTAG-Programmiergerät UND JTAG Debugger für kostenlose &amp;quot;Code-Red&amp;quot; Entwicklungsplattform)], dazu hier die [[LPC1xxx_Entwicklungskit_LPCXpresso|Beschreibung]]&lt;br /&gt;
* [http://www.lpctools.com/evaluationboardskitsforlpc17xx.aspx LPC-Tools]&lt;br /&gt;
* [http://thinkembedded.ch/NXP:::25.html thinkembedded.ch] div. Olimex Boards&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* http://www.nxp.com/#/page/content=[f=/dynamic/applicationnotes/tid-50809_sid-56890/data.xml] Appnotes&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html Projects]&lt;br /&gt;
* [http://mbed.org/handbook/Homepage MBED]&lt;br /&gt;
* [http://forums.nxp.com/forums/viewforum.php?f=1 NXP-WIKI]&lt;br /&gt;
* [http://knowledgebase.nxp.com/forumdisplay.php?s=389a3610c741bca7b18221d32b9c0ce0&amp;amp;f=4 NXP-Forum]&lt;br /&gt;
* [http://ics.nxp.com/lpcxpresso/ LPCXpresso]&lt;br /&gt;
* [http://code.google.com/p/32bitmicro/ 32BitMicro]&lt;br /&gt;
* [http://www.brc-electronics.nl SimpleCortex]&lt;br /&gt;
* [http://www.lpcware.com/ LPCWare NXP MCU community]&lt;br /&gt;
* [http://nanohome.be/nxp/index.html LPC175/6x und LPC23xx pin Configurator]&lt;br /&gt;
* [https://code.google.com/p/lpc-1768-arm-synthesizer/  MIDI controlled monophonic synthesizer based on the LPCXpresso 1768.]&lt;br /&gt;
* [https://code.google.com/p/lpc1343codebase/  An open source software library for NXP&#039;s Cortex-M3 based LPC1300 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc1114codebase/   An open source software library for NXP&#039;s Cortex-M0 based LPC1100 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc-12xx-bootloader/  A flexible bootloader for use with LPC12xx Microcontrollers from NXP, Firmware code is AES128 encrypted to secure your project / source code when giving out public firmware updates. ]&lt;br /&gt;
* [https://code.google.com/p/lpcxpresso-rc/   Read receiver and sensor signals for radio controlled model aircrafts configured for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/olpcx/   Open toolset for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/32bitmicro/   Collection of code and tools for 32 bit microcontrollers]&lt;br /&gt;
* [https://code.google.com/p/my-nxp-lpc1114/   my-nxp-lpc1114 study course]&lt;br /&gt;
* [https://code.google.com/p/nxp-lpc/   nxp-lpc]&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsplattformen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.lpcware.com/lpcxpresso/home LPDXpresso Download (Kostenlos mit Debugger)]&lt;br /&gt;
* [http://www.lpcware.com LPCXpresso Homepage]&lt;br /&gt;
* [http://support.code-red-tech.com/CodeRedWiki/WikiHome CR-WIKI]&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp ARM/Keil MDK-ARM]&lt;br /&gt;
* IAR EWARM&lt;br /&gt;
* Rowley Crossworks&lt;br /&gt;
* Green Hills Software &lt;br /&gt;
* [http://www.coocox.org/CooCox_CoIDE.htm CooCox] (Kostenlos)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:LPC1x]]&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=95436</id>
		<title>LPC-Mikrocontroller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=95436"/>
		<updated>2017-03-06T11:57:27Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* Controller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:overview_Sep2011.png|thumb|right|850px|Überblick über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
[[Bild:positioning_NXPSep2011.gif|thumb|right|850px|Vergleich über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
Die LPC-Familie von NXP basiert auf 32-Bit Cortex-Kernen von ARM und arbeitet mit bis zu 204MHz. Die verschiedenen Serien basieren auf den Cortex-M0/M0+/M3/M4-Kernen und sind inzwischen auch für Privatnutzer zu Preisen erhältlich, die mit denen von 8-Bit-Mikrocontrollern vergleichbar sind. Eine Auflistung der verschiedenen Typen findet sich in der Tabelle unten.&lt;br /&gt;
&lt;br /&gt;
Von NXP sind preiswerte Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger oder den neuen LPC-Link2, ein reiner Programmer + Debugger) erhältlich z.B. bei [http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]. Siehe dazu auch die Dokumentation von NXP zu den [http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)] und diese [[LPC1xxx Entwicklungskit LPCXpresso]].&lt;br /&gt;
&lt;br /&gt;
== Vergleich aller Typen ==&lt;br /&gt;
&#039;&#039;Stand Feb. 2017&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; class=&amp;quot;unsortable&amp;quot;                               | &lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | CPU&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Max. Frequency&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Flash&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | SRAM&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Voltage&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; class=&amp;quot;unsortable&amp;quot;   | Features&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2&amp;quot;              | Cortex-M0+&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;30&amp;quot;             | 30MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-32kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
SCTimer/PWM,&lt;br /&gt;
Switch Matrix,&lt;br /&gt;
Pattern Match Engine&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC54000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;128&amp;quot;            | 128-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;96&amp;quot;             | 96-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.62&amp;quot;           | 1.62-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
LCD,&lt;br /&gt;
Ethernet,&lt;br /&gt;
FlexComm,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1100&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | Cortex-M0/M0+&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;50&amp;quot; | 50MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-36kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.71&amp;quot;           | 1.71-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
EEPROM&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1200&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;0&amp;quot;              | Cortex-M0&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;32&amp;quot;             | 32-128kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
8 kV protection,&lt;br /&gt;
IEC 60730 Class B certified&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1300&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;3&amp;quot;  | Cortex-M3&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;72&amp;quot; | 72MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-64kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-12kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.0&amp;quot;            | 2.0-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1500&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;12&amp;quot;             | 12-36kB&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.4&amp;quot;| 2.4-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1700&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;                | 32-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;24&amp;quot;             | 24-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4300&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;240&amp;quot;            | 204MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-282kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
SGPIO,&lt;br /&gt;
Security&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;: gibt es auch als Mehrkern-Prozessoren (mit 0/1/2 Cortex-M0(+)-Cores)&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Informationen ==&lt;br /&gt;
&lt;br /&gt;
Aktuelle Linecard von NXP: http://www.nxp.com/assets/documents/data/en/product-selector-guide/LPCMICROLNCD.pdf&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Infos + User-Manuals==&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC8xx (Cortex-M0+) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://www.nxp.com/products/microcontrollers/cortex_m0_m0/series/LPC800.html#quickreference LPC8xx]&#039;&#039;&#039; ist nur in Packages mit einer relativ niedrigen Pinanzahl (DIP8, SO20, TSSOP16, TSSOP20) verfügbar, hat zwischen 4-16kB Flash, und 1-4kB RAM. Die zulässige Betriebsspannung liegt zwischen 1,8V und 3,6V.&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features der LPC800-Serie: &lt;br /&gt;
* 1-4 I2C&lt;br /&gt;
* 1-2 SSP&lt;br /&gt;
* 2-3 UART&lt;br /&gt;
* 4 Timer,  1 OS-Timer&lt;br /&gt;
* 1 watch dog&lt;br /&gt;
* 4 PWM-Einheiten&lt;br /&gt;
* 12-bit ADC&lt;br /&gt;
* CRC engine&lt;br /&gt;
* DMA with 18 channels and 9 trigger inputs&lt;br /&gt;
* 1 SCT (state configurable timer)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/download/grouping/11045/user_manual User Manual der LPC8-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC11xx (Cortex-M0) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc11xx/ LPC11xx-Serie]&#039;&#039;&#039; (3,3V) bietet viele Möglichkeiten&lt;br /&gt;
* Der LPC1100L ist derzeit laut NXP (Sep2011) der preisgünstigste ARM auf dem Markt. Der 32Bit ARM mit einer Performance von ca. 45DMIPS @50MHZ benötigt bei dieser Taktfrequenz nur etwa 10mA. (Details siehe NXP-Seite)&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features :&lt;br /&gt;
** LPC1100 Serie: • I2C, SSP, UART, GPIO, • Timers and watch dog timer, • 10-bit ADC, • Flash/SRAM memory, • Weitere Funktionen, siehe &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/LPC1xxx#Features_eines_LPC11xx 2.3 Features]&#039;&#039;&#039;&lt;br /&gt;
** LPC1100L Serie zusätzlich zu LPC1100: • Power Profile mit lower power consumption in Active- und Sleep-mode, • Interne pull-ups auf VDD level, • Programmierbarer pseudo open-drain mode für GPIO Pins, • WWDT mit Clock Source Lock.&lt;br /&gt;
**LPC11C00 Serie zusätzlich zu LPC1100: • CAN controller, • On-chip CAN Treiber, • On-chip CAN Transceiver (LPC11C2x), • WDT (not windowed) mit Clock Source Lock.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10398.pdf User Manual der LPC11-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Besonderes Augenmerk möchte ich auf die neue Serie  &#039;&#039;&#039;[http://www.nxp.com/ps/#/i=71498 LPC111xFD]&#039;&#039;&#039; legen, denn in jetzt gibt es den Cortex-M0 auch im DIL 28 &#039;&#039;&#039;[http://www.nxp.com/redirect/pip/LPC1114FN28.html den LPC1114FN28]&#039;&#039;&#039;&lt;br /&gt;
**Des Weiteren sind damit SO20, sowie TSSOP20 und TSSOP28 Bauformen verfügbar&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC12xx (Cortex-M0) ===&lt;br /&gt;
* Die Low Power &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc12xx/ LPC12xx-Serie]&#039;&#039;&#039; (3,3V) ist laut NXP (Sep2011) ein Cortex-M0 mit 32 bis 128kB Flash, einem 45 CoreMark™ Benchmark-Score bei 30MHz, 2 bis 8kB SRAM, und einem internen 1% genauen 12MHz Oscillator.&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features: fMAX von 30MHz, 1 10-Bit  ADC mit 8 Kanälen, 2 Comparatoren, 2 UARTs, 1 SSP/SPI, 1 I2C, DMA Controller, CRC Engine, 1 32-Bit, 5 Timer (16- und 32-Bit, + RTC), 13 PWM Kanäle, bis zu 55 GPIOs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10441.pdf User Manual der LPC12xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC13xx (Cortex-M3) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc13xx/ LPC13xx-Serie]&#039;&#039;&#039; (3,3V) bietet im LQFP 48 Gehäuse 8..32k Flash, 2..8k SRAM, 5 Timer (mit WD), 11 PWM, 1 UART, 1IIC, 1USB, 1..2 SPI, einen 8-Kanal/10Bit AD-Wandler und eine Taktfrequenz von max. 72MHz. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10375.pdf User Manual der LPC13xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC17xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc17xx/ LPC17xx-Serie]&#039;&#039;&#039; hingegen enthält eine weit größere Peripherie in einem LQFP80/100/144/208 Package.&lt;br /&gt;
32..512k Flash, 8..96k SRAM, 6 Timer (mit WD), 6 zusätzliche PWM-Einheiten, teilweise Ethernet und STN/TFT-LCD-Controller, meist USB (teilw. mit Host+OTG), 4 UART, 2..3IIC, 1..2 CAN, 1 SPI, 2 SSP/SPI einen 6..8-Kanal/12Bit AD-Wandler, einen 10Bit DAC, Motor-Control-Einheiten, einen Encoder-Eingang und eine Taktfrequenz von max. 100MHz(120MHz) und vieles mehr. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10360.pdf User Manual der LPC17xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC18xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc18xx/ LPC18xx-Serie]&#039;&#039;&#039; stellt DIE &amp;quot;High-Performance&amp;quot; Controller aus der Cortex-M3-Serie. Die Taktfrequenz geht bis 150MHz, die Controller enthalten große dual-Bank Flash Speicher bis zu 1MB, ein großes On-Chip SRAM mit bis zu 200KB, zusätzliche Peripherie wie z.B. SPI Flash Interface (SPIFI) und State Configurable Timer (SCT), 2x High Speed USB (1x mit On-Chip HS PHY) und eine MPU.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://ics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc18xx.pdf User Manual der LPC18xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features: &#039;&#039;&#039;[http://ics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc18xx.pdf LPC18xx Flyer von NXP]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungskits ===&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Kostenlose Entwicklungsumgebung für ALLE hier genannten Controller ===&lt;br /&gt;
Für die ganze Prozessorfamilie ist eine &amp;lt;u&amp;gt;kostenlose&amp;lt;/u&amp;gt; Entwicklungsumgebung  erhältlich. Informationen unter &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home  lpcware]&#039;&#039;&#039;: Die auf Eclipse basierende Entwicklungsumgebung ist nach der Installation bis 8k freigeschaltet und nach einer einfachen und kostenlosen Registrierung für 256kB. Die IDE ist auch für &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home Linux und Mac]&#039;&#039;&#039; verfügbar.&lt;br /&gt;
&lt;br /&gt;
Hier die &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== LPC8xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC8xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 06/2016)&lt;br /&gt;
* LPC810FN8 (DIP8): Digikey 1,09 € (bei einem Stuck).&lt;br /&gt;
* LPC812JD20 (SOIC-W 20): Digikey 1,26 € (bei einem Stuck).&lt;br /&gt;
* LPC812JDH20 (TSSOP-20): Digikey 1,44 € (bei einem Stuck).&lt;br /&gt;
* LPC824M201JDH20J (TSSOP-20): Conrad 2,99 € incl. MwSt, (2017/03) &lt;br /&gt;
* LPC812M101JD20FP (SO-20): Conrad 2,49 incl. MwSt, (2017/03) &lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC800_block_diagram_Jan2014.gif|thumb|right|850px|Blockdiagramm des Cortex-M0+, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC8xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC8xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0+ processor, running at frequencies of up to 30 MHz. &lt;br /&gt;
** single cycle multiplier&lt;br /&gt;
** single cycle I/O port&lt;br /&gt;
** ARM Cortex-M0+ built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug, Micro Trace Buffer supported.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32kB (LPC824), 16 kB (LPC812M101JD20/LPC812M101JDH20/LPC812M101JDH16), 8 kB (LPC811M001JDH16) or 4kB (LPC810M021FN8) on-chip flash programming memory. &lt;br /&gt;
**  8kB, 4kB, 2 kB, or 1 kB SRAM.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** ROM support routines for: power profiles, USART, SPI, I2C, ADC, integer division&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 18 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages down to 6.&lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
** &#039;&#039;&#039;Switch matrix for flexible configuration of each I/O pin function.&#039;&#039;&#039;&lt;br /&gt;
** CRC engine&lt;br /&gt;
** DMA with 18 channels and 9 sources&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** Comparator with internal and external references and 31 step voltage divider.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 9.4 kHz to 2.3 MHz.&lt;br /&gt;
** 10 kHz low-power oscillator for the WKT.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Reduced power modes: Sleep mode, Deep-sleep mode, Power-down mode, and Deep power-down mode.&lt;br /&gt;
** Wake-up from Deep-sleep and Power-down modes on activity on USART, SPI, and I2C peripherals.&lt;br /&gt;
** Brownout detect.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available as DIP8, TSSOP16, SO20, and TSSOP20 package.&lt;br /&gt;
&lt;br /&gt;
== LPC11xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC11xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 01/2014):&lt;br /&gt;
&lt;br /&gt;
elpro.org: von 1.61EUR (LPC1111FN33) bis 5.73EUR (LPC11U37) bei einen Stueck. Die Familie ist sehr gross mit sehr unterschiedlichen Ausfuehrungen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC11xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC11xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 50 MHz. &lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32 kB (LPC1114/LPC11C14), 24 kB (LPC1113), 16 kB (LPC1112/LPC11C12), or 8 kB (LPC1111) on-chip flash programming memory.  &lt;br /&gt;
** 8 kB, 4 kB, or 2 kB SRAM. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages and LPC11C22/C24. &lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 13 of the functional pins.&lt;br /&gt;
** Power-On Reset (POR). &lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset. &lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available in the following packages: 16WLCSP, 25WLCSP 20-SOIC, 20-TSSOP, 28-DIP, 28-TSSOP, 48-LQFP, 64-LQFP, 100-LQFP, and others.&lt;br /&gt;
&lt;br /&gt;
== LPC12xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC12xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
[[Bild:block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC12xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC12xx ===&lt;br /&gt;
&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 45 MHz (one wait state from flash) or 30 MHz (zero wait states from flash). The LPC122x have a high score of over 45 in CoreMark CPU performance benchmark testing, equivalent to 1.51/MHz.&lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug (SWD).&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory&lt;br /&gt;
** Up to 8 kB SRAM.&lt;br /&gt;
** Up to 128 kB on-chip flash programming memory. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Includes ROM-based 32-bit integer division routines.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz Internal RC (IRC) oscillator trimmed to 1 % accuracy that can optionally be used as a system clock.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, main clock, and Watchdog clock.&lt;br /&gt;
** Real-Time Clock (RTC).&lt;br /&gt;
* Digital peripherals&lt;br /&gt;
** Micro DMA controller with 21 channels.&lt;br /&gt;
** CRC engine.&lt;br /&gt;
** Two UARTs with fractional baud rate generation and internal FIFO. One UART with RS-485 and modem support and one standard UART with IrDA.&lt;br /&gt;
** SSP/SPI controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. I2C-bus pins have programmable glitch filter.&lt;br /&gt;
** Up to 55 General Purpose I/O (GPIO) pins with programmable pull-up resistor, open-drain mode, programmable digital input glitch filter, and programmable input inverter. &lt;br /&gt;
** Programmable output drive on all GPIO pins. Four pins support high-current output drivers.&lt;br /&gt;
** All GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** Four general purpose counter/timers with four capture inputs and four match outputs (32-bit timers) or two capture inputs and two match outputs (16-bit timers). &lt;br /&gt;
** Windowed WatchDog Timer (WWDT).&lt;br /&gt;
* Analog peripherals&lt;br /&gt;
** One 8-channel, 10-bit ADC.&lt;br /&gt;
** Two highly flexible analog comparators. Comparator outputs can be programmed to trigger a timer match signal or can be used to emulate 555 timer behavior.&lt;br /&gt;
* Power&lt;br /&gt;
** Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Deep-sleep mode via start logic using 12 port pins.&lt;br /&gt;
** Processor wake-up from Deep-power down and Deep-sleep modes via the RTC.&lt;br /&gt;
** Brownout detect with three separate thresholds each for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
** Integrated PMU (Power Management Unit).&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* 3.3 V power supply.&lt;br /&gt;
* Available as 64-pin and 48-pin LQFP package.&lt;br /&gt;
&lt;br /&gt;
== LPC13xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC13xx ===&lt;br /&gt;
[[Bild:LPC13xx_Selection_Guide_Sep2011.png|thumb|left|600px|Selection Guide zur LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1313 mit 32k-Flash mit 72MHz im LQFP 48 Gehäuse. Der LPC1313 ist bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; erhältlich für 3,57 € (Juli 2016), oder elpro.org für 2,29 €.  Entwicklungskit INKLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1343-LPCXpresso-Board Watterott]&#039;&#039;&#039; für 23,80 € (Juli 2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC13xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC13xx Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1313 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 72 MHz.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 32 kB on-chip flash programming memory.&lt;br /&gt;
* 8 kB SRAM.&lt;br /&gt;
* In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* UART with fractional baud rate generation, modem, internal FIFO, and RS-485/EIA-485 support.&lt;br /&gt;
* SSP controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
* Additional SSP controller on LPC1313FBD48/01.&lt;br /&gt;
* I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode.&lt;br /&gt;
* Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors.&lt;br /&gt;
* Four general purpose counter/timers with a total of four capture inputs and 13 match outputs.&lt;br /&gt;
* Programmable Watchdog Timer (WDT) &lt;br /&gt;
* System tick timer.&lt;br /&gt;
* Serial Wire Debug and Serial Wire Trace port.&lt;br /&gt;
* High-current output driver (20 mA) on one pin.&lt;br /&gt;
* High-current sink drivers (20 mA) on two I2C-bus pins in Fast-mode Plus.&lt;br /&gt;
* Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
* Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
* Single power supply (2.0 V to 3.6 V).&lt;br /&gt;
* 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
* Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, or the watchdog clock.&lt;br /&gt;
* Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 40 of the functional pins.&lt;br /&gt;
* Brownout detect with four separate thresholds for interrupt and one thresholds for forced reset.&lt;br /&gt;
* Power-On Reset (POR).&lt;br /&gt;
* Integrated oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 12 MHz internal RC oscillator trimmed to 1 % accuracy over the entire temperature and voltage range that can optionally be used as a system clock.&lt;br /&gt;
* Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz. System PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
* Code Read Protection (CRP) with different security levels.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Available as 48-pin LQFP package and 33-pin HVQFN package.&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1347 ===&lt;br /&gt;
* 64 kB Flash&lt;br /&gt;
* 12 kB SRAM&lt;br /&gt;
* 4 kB EEPROM&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* USB Code in ROM&lt;br /&gt;
* USB Bootloader in ROM, programming via copy to mass storage device&lt;br /&gt;
&lt;br /&gt;
== LPC17xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC17xx ===&lt;br /&gt;
[[Bild:LPC17xx_Selection_Guide_Sep2011.png|thumb|left|680px|Selection Guide zur LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1754 mit 128K Flash im LQFP80, der bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; für 7€74 (Juli/2011) erhältlich ist,[den LPC1751 (32k/8k) schon für 5€95] und bei Digikey für 6€35, den LPC1764FBD100 bei &#039;&#039;&#039;[http://www.tme.eu/de TME]&#039;&#039;&#039;    für 7€ Entwicklungskit INCLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1769-LPCXpresso Watterott]&#039;&#039;&#039; für 23€80 (Juli/2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC17xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC177x_178x Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1754 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 100 MHz &lt;br /&gt;
* A Memory Protection Unit (MPU) supporting eight regions is included.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 128 kB on-chip flash program memory with In-System Programming (ISP) and In-Application Programming (IAP) capabilities. &lt;br /&gt;
* 32 kB of SRAM on the CPU with local code/data bus for high-performance CPU access.&lt;br /&gt;
* Eight channel General Purpose DMA controller &lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
* USB 2.0 full-speed controller that can be configured for either device, Host, or OTG operation with an on-chip PHY for device and Host functions &lt;br /&gt;
* Four UARTs with fractional baud rate generation, internal FIFO, IrDA, and DMA, Einer mit Modem I/Os und RS485 Support&lt;br /&gt;
* 1 CAN controller.&lt;br /&gt;
* 2 SSP controllers &lt;br /&gt;
* 1 SPI controller &lt;br /&gt;
* 2 I2C-bus interfaces with data rates of 1Mbit/s,&lt;br /&gt;
* I2S (Inter-IC Sound) &lt;br /&gt;
* 52  General Purpose I/O (GPIO) pins Any pin of ports 0 and 2 can be used to generate an interrupt.&lt;br /&gt;
* 8x 12-bit Analog-to-Digital Converter (ADC) conversion rates up to 200 kHz&lt;br /&gt;
* 1x 10-bit Digital-to-Analog Converter (DAC) &lt;br /&gt;
* Four general purpose timers/counters, with a total of eight capture inputs and ten compare outputs. &lt;br /&gt;
* One motor control PWM with support for three-phase motor control.&lt;br /&gt;
* Quadrature encoder interface that can monitor one external quadrature encoder.&lt;br /&gt;
* One standard PWM/timer block with external count input.&lt;br /&gt;
* Real-Time Clock (RTC) with a separate power domain including 20 bytes of battery-powered backup registers,  An RTC interrupt can wake up the CPU from any reduced power mode.&lt;br /&gt;
* Watchdog Timer (WDT). &lt;br /&gt;
* Cortex-M3 system tick timer&lt;br /&gt;
* Repetitive interrupt timer &lt;br /&gt;
* Standard JTAG test/debug interface as well as Serial Wire Debug and Serial Wire Trace Port options.&lt;br /&gt;
* Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
* Single 3.3 V power supply (2.4 V to 3.6 V). &lt;br /&gt;
* Four external interrupt inputs configurable as edge/level sensitive. All pins on PORT0 and PORT2 can be used as edge sensitive interrupt sources.&lt;br /&gt;
* Non-maskable Interrupt (NMI) input.&lt;br /&gt;
* Wakeup Interrupt Controller (WIC) &lt;br /&gt;
* Each peripheral has its own clock divider for further power savings.&lt;br /&gt;
* Brownout detect with separate threshold for interrupt and forced reset.&lt;br /&gt;
* On-chip Power-On Reset (POR).&lt;br /&gt;
* On-chip crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 4 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
* An on-chip PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the main oscillator, the internal RC oscillator, or the RTC oscillator.&lt;br /&gt;
* Available as 80-pin LQFP (12 x 12 x 1.4 mm) packages.&lt;br /&gt;
&lt;br /&gt;
== LPC18xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC18xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC18xx Familie ===&lt;br /&gt;
[[Bild:block.diagram_NXP18xx Sep2011.gif|thumb|left|680px|Blockdiagramm der LPC18xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC18xx ===&lt;br /&gt;
DRAFT!&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M3 processor, running at frequencies of up to 180 MHz.&lt;br /&gt;
** ARM Cortex-M3 built-in Memory Protection Unit (MPU) supporting eight regions.&lt;br /&gt;
** ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Non-maskable Interrupt (NMI) input.&lt;br /&gt;
** JTAG and Serial Wire Debug, serial trace, eight breakpoints, and four watch points.&lt;br /&gt;
** ETM and ETB support.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* On-chip memory (flashless parts LPC1850/30/20/10)&lt;br /&gt;
** Up to 200 kB SRAM total for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 64 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* On-chip memory (parts with on-chip flash)&lt;br /&gt;
** Up to 1 MB total dual bank flash memory with flash accelerator.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Up to 136 kB SRAM for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 32 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1 % accuracy.&lt;br /&gt;
** Ultra-low power RTC crystal oscillator.&lt;br /&gt;
** Three PLLs allow CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. The second PLL is dedicated to the High-speed USB, the third PLL can be used as audio PLL.&lt;br /&gt;
** Clock output.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** Quad SPI Flash Interface (SPIFI) with four lanes and data rates of up to 40 MB per second total.&lt;br /&gt;
** 10/100T Ethernet MAC with RMII and MII interfaces and DMA support for high throughput at low CPU load. Support for IEEE 1588 time stamping/advanced time stamping (IEEE 1588-2008 v2).&lt;br /&gt;
** One High-speed USB 2.0 Host/Device/OTG interface with DMA support and on-chip PHY.&lt;br /&gt;
** One High-speed USB 2.0 Host/Device interface with DMA support, on-chip full-speed PHY and ULPI interface to external high-speed PHY.&lt;br /&gt;
** USB interface electrical test software included in ROM USB stack.&lt;br /&gt;
** Four 550 UARTs with DMA support: one UART with full modem interface; one UART with IrDA interface; three USARTs support synchronous mode and a smart card interface conforming to ISO7816 specification.&lt;br /&gt;
** Two C_CAN 2.0B controllers with one channel each.&lt;br /&gt;
** Two SSP controllers with FIFO and multi-protocol support. Both SSPs with DMA support.&lt;br /&gt;
** One Fast-mode Plus I2C-bus interface with monitor mode and with open-drain I/O pins conforming to the full I2C-bus specification. Supports data rates of up to 1 Mbit/s.&lt;br /&gt;
** One standard I2C-bus interface with monitor mode and standard I/O pins.&lt;br /&gt;
** Two I2S interfaces with DMA support, each with one input and one output.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** External Memory Controller (EMC) supporting external SRAM, ROM, NOR flash, and SDRAM devices.&lt;br /&gt;
** LCD controller with DMA support and a programmable display resolution of up to 1024H x 768V. Supports monochrome and color STN panels and TFT color panels; supports 1/2/4/8 bpp CLUT and 16/24-bit direct pixel mapping.&lt;br /&gt;
** SD/MMC card interface.&lt;br /&gt;
** Eight-channel General-Purpose DMA (GPDMA) controller can access all memories on the AHB and all DMA-capable AHB slaves.&lt;br /&gt;
** Up to 80 General-Purpose Input/Output (GPIO) pins with configurable pull-up/pull-down resistors and open-drain modes. &lt;br /&gt;
** GPIO registers are located on the AHB for fast access. GPIO ports have DMA support.&lt;br /&gt;
** State Configurable Timer (SCT) subsystem on AHB.&lt;br /&gt;
** Four general-purpose timer/counters with capture and match capabilities.&lt;br /&gt;
** One motor control PWM for three-phase motor control.&lt;br /&gt;
** One Quadrature Encoder Interface (QEI).&lt;br /&gt;
** Repetitive Interrupt timer (RI timer).&lt;br /&gt;
** Windowed watchdog timer.&lt;br /&gt;
** Ultra-low power Real-Time Clock (RTC) on separate power domain with 256 bytes of battery powered backup registers.&lt;br /&gt;
** Alarm timer; can be battery powered.&lt;br /&gt;
* Digital peripherals available on flash-based parts LPC18xx only:&lt;br /&gt;
** &amp;lt;tbd&amp;gt;&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** One 10-bit DAC with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
** Two 10-bit ADCs with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
* Security:&lt;br /&gt;
** Hardware-based AES security engine programmable through an on-chip API.&lt;br /&gt;
** Two 128-bit secure OTP memories for AES key storage and customer use.&lt;br /&gt;
** Unique ID for each device.&lt;br /&gt;
* Power: &lt;br /&gt;
** Single 3.3 V (2.2 V to 3.6 V) power supply with on-chip internal voltage regulator for the core supply and the RTC power domain.&lt;br /&gt;
** RTC power domain can be powered separately by a 3 V battery supply.&lt;br /&gt;
** Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Sleep mode via wake-up interrupts from various eripherals. &lt;br /&gt;
** Wake-up from Deep-sleep, Power-down, and Deep power-down modes via external interrupts and interrupts generated by battery powered blocks in the RTC power domain.&lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
* Available as 100-pin, 144-pin, and 208-pin LQFP packages and as 100-pin, 180-pin, and 256-pin LBGA packages.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
=== LPCWare (kostenlos) ===&lt;br /&gt;
[[Bild:lpcxpresso-debug_Code-red_3Sep2011.gif|thumb|right|680px|Ansicht der Entwicklungsumgebung, ©code-red-tech.com]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Entwicklungs Tool ====&lt;br /&gt;
(Beschreibung aus der Web-Site:)&lt;br /&gt;
LPCXpresso&#039;s IDE (Ursprünglich von &amp;quot;Code RED&amp;quot; entwickelt, die Firma wurde 2013 von LPC gekauft) ist eine hoch integrierte Entwicklungsumgebung für LPC-Controller, und beinhaltet alle zur Entwicklung erforderlichen Tools um hoch qualitative Software in einer angemessenen Zeit zu schreiben. LPCXpresso basiert auf ein vereinfachtes Eclipse mit vielen LPC-specifischen Erweiterungen.&lt;br /&gt;
Des Weiteren ist eine aktuelle Version der Industrie-Standard GNU Tool-Chain mit einer propritären und optimierten C-Lib mit dabei. Die LPCXpresso IDE stellt ein voll optimiertes Executable zur Verfügung. Die einzige Beschränkung der kostenlosen Version ist eine Limitierung auf 256kB Code nach erfolgter Registrierung.&lt;br /&gt;
Das LPCXpresso Target Board ist eine Gemeinschaftsentwicklung von Embedded Artists, Code Red und NXP.&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
Die LPCXpresso IDE stellt eine C-Umgebung mit Syntax-Colouring, Source-Formatierung, Funktions-Folding, sowie mit Online- und Offline Hilfe und umfangreichen Projekt-Management Funktionen zur Verfügung.  &lt;br /&gt;
Dies beinhaltet:&lt;br /&gt;
* Wizards um Projekte für alle unterstützten Controller zu erstellen &lt;br /&gt;
* Automatische Linker Script Generierung inklusive Memory-Map Unterstützung &lt;br /&gt;
* Programmierung des Controllers&lt;br /&gt;
* On-Line Debugging&lt;br /&gt;
* Datenblatt-Zugriff über eingebauten Browser&lt;br /&gt;
* Support für die NXP LPC Microcontroller Familien, von Cortex-M0, Cortex-M3 bis Cortex-M4 und ARM7 bis ARM9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Peripherie und Register Views im Debugger ====&lt;br /&gt;
Der Peripherie-Viewer im integrierten Debugger zeigt alle Register und Bit-Felder in einer einfachen Baumstruktur.&lt;br /&gt;
Ein Prozessor-Register Viewer erlaubt den Zugriff auf alle Prozessor-Register und stellt eine &amp;quot;Smart-Formatting&amp;quot;  Funktion zur Verfügung um komplexe Register wie Flags oder Status Register übersichtlich darstellen zu können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Unterstützte Familien ====&lt;br /&gt;
Cortex-M0, Cortex-M3, Cortex-M4, Einzelne Controller aus der LPC2000 family, ARM966, ARM926-EJ, ARM926-EJ + VFP&lt;br /&gt;
&lt;br /&gt;
==== Sehr preiswerter USB_JTAG_SWD Debugger ====&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039; und diese &#039;&#039;&#039;[http://www.mikrocontroller.net/wikisoftware/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso Beschreibung]&#039;&#039;&#039;&lt;br /&gt;
Der neue Programmer/Debugger ist hier für ca 18€ +P&amp;amp;P erhältlich &#039;&#039;&#039;[http://www.watterott.com/de/LPC-Link-2 Programmer]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Standard Library ====&lt;br /&gt;
Im Download der &amp;quot;Code Red&amp;quot; Entwicklungsumgebung ist eine relativ umfangreiche Firmwarebibliothek vorhanden.&lt;br /&gt;
&lt;br /&gt;
==== Installationsanleitung zur IDE ====&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Codebase für LPC11xx und LPC13xx ====&lt;br /&gt;
Für die Cortex-M0 und -M3 Familien existieren verschiedene Basispakete die als Startausstattung sehr gut geeignet sind. Auf microbuilder.eu findet man eine sehr interessante Version inklusive Dokumentation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Codebase_f%C3%BCr_LPC1xxx HIER]&#039;&#039;&#039; findet man alle Links zur original Codebase mit allen Dateien (Stand Januar 2012) aber auch eine deutsche Übersetzung zu den Files.&lt;br /&gt;
&lt;br /&gt;
=== CooCox ===&lt;br /&gt;
&lt;br /&gt;
Auf der &#039;&#039;&#039;[http://www.coocox.org/Index.html Homepage]&#039;&#039;&#039; von CooCox - einem chinesischen Open-Source Projekt, auf der eine IDE für Atmel, Energy Micro, Holtek, Nuvoton, ST, TI und NXP verfügbar ist  - findet man die auf Eclipse basierende &amp;quot;CooCox CoIDE&amp;quot;, die sich aus dem &amp;quot;CoBuilder&amp;quot; und dem &amp;quot;CoDebugger&amp;quot; zusammensetzt.&lt;br /&gt;
Des Weiteren bietet man dort ein Echtzeit-Multitasking Betriebssystem, sowie SW-Versionen von zwei unterschiedliche Debugging-Adapter und ein Stand-alone Flash-Tool zum freien Download an.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Controller können damit programmiert und debugged werden:&lt;br /&gt;
    LPC1111x101    LPC1111x201   LPC1112x101   LPC1112x201&lt;br /&gt;
    LPC1113x201    LPC1113x301   LPC1114x201   LPC1114x301&lt;br /&gt;
    LPC11C14x301   LPC11C12x301&lt;br /&gt;
    LPC1224x101    LPC1224x121   LPC1225x301   LPC1225x321   LPC1226x301  LPC1227x301&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    LPC1311   LPC1313   LPC1342   LPC1343&lt;br /&gt;
    LPC1751   LPC1752   LPC1754   LPC1756   LPC1758   LPC1759&lt;br /&gt;
    LPC1763   LPC1764   LPC1765   LPC1766   LPC1767   LPC1768   LPC1769&lt;br /&gt;
&lt;br /&gt;
=== EmBlocks ===&lt;br /&gt;
&#039;&#039;&#039;[http://www.emblocks.org/web/ Emblocks]&#039;&#039;&#039; ist eine kostenlose Entwicklungsumgebung. Sie unterstützt neben NXP uC weitere ARM uC (STM32, EFM32) sowie PIC, AVR und MSP430. Die IDE hat einen eingebauten GDB Debugger welcher System view (Peripherie Register anzeigen) beim Debuggen unterstützt. Ausserdem gibt es einen Project Wizzard für NXP uC &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Unterstützt wird der JLINK mit folgenden NXP uC:&lt;br /&gt;
LPC11Axx, LPC11Exx, LPC11Uxx, LPC11xxLV, LPC12xx, LPC13Uxx, LPC13xx, LPC17xx, LPC18xx, LPC18xx, LPC177x_8x, LPC407x_8x&lt;br /&gt;
&lt;br /&gt;
=== Codebase ===&lt;br /&gt;
Des Weiteren existiert eine umfangreiche Sammlung von &#039;&#039;&#039;[http://www.coocox.org/NXP-Series.php Code-Beispielen]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Keil ===&lt;br /&gt;
[https://www.keil.com/demo/eval/arm.htm KEIL MDK-ARM] (Windows, Free Version auf 32KB begrenzt, mit vielen Beispielen zu div. Evaluation Boards) &lt;br /&gt;
*[http://www.keil.com/arm/chips.asp unterstützte Mikrocontroller]&lt;br /&gt;
=== WinARM ===&lt;br /&gt;
[http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/#winarm WinARM] (wird derzeit nicht gepflegt)&lt;br /&gt;
&lt;br /&gt;
=== GNUARM ===&lt;br /&gt;
[http://gnuarm.com/ GNUARM] (Linux, Windows, wird derzeit nicht gepflegt), &lt;br /&gt;
&lt;br /&gt;
=== Yagarto ===&lt;br /&gt;
[http://www.yagarto.de/ Yagarto] (Windows, mit Eclipse-Integration) &lt;br /&gt;
&lt;br /&gt;
=== CodeSourcery ===&lt;br /&gt;
[http://www.codesourcery.com/gnu_toolchains/arm CodeSourcery CodeBench Lite]&lt;br /&gt;
&lt;br /&gt;
== CMSIS  -  Standard für alle Plattformen ==&lt;br /&gt;
Der Cortex Microcontroller Software Interface Standard (CMSIS) stellt einen &amp;quot;abstraction layer&amp;quot; für alle Cortex-Mx Controller zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
CMSIS stellt einen Schnittstellenstandard von ARM dar, der von vielen Tool-Herstellern unterstützt wird und ist (laut verschiedener Berichte)  kompatibel mit den verschiedensten Compilern (incl GCC). Dies wird erreicht durch einheitliche Definitionen für Adressen und Namen die den Zugriff auf die Register des Cores und der Peripherie ermöglichen.&lt;br /&gt;
Auch Standard-Funktionen für den Start und die Interrupts stehen zur Verfügung.&lt;br /&gt;
Natürlich kann auch weiterhin direkt auf die HW zugegriffen werden, es geht nur um eine Vereinheitlichung von identischen Funktionen. &lt;br /&gt;
Da die Peripherie-Teile zumindest innerhalb eines Halbleiterherstellers für die Cortex-Mx Controller sehr ähnlich oder sogar weitgehend identisch sind kann deutlich mehr SW für verschiedene Derivate innerhalb dieser Prozessorfamilien wiederverwendet werden.  (siehe Google: &amp;quot;CMSIS_Doulos_Tutorial.pdf&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Ein weiterer, interessanter Punkt ist die CMSIS-DSP Lib mit ihren Vektorfunktionen, Matrix-Berechnung sowie komplexen Algorithmen für Filter, &lt;br /&gt;
Regler und Fourietransformation sowie weiterer DSP Algorithmen (insgesamt 61).&lt;br /&gt;
&lt;br /&gt;
Leider hat diese Kompatibilität auch ihre Grenzen, denn Sonderfunktionen bzw. Spezialitäten in der &amp;quot;gleichen&amp;quot; Peripherie zwischen unterschiedlichen Halbleiterherstellern werden nicht abgedeckt. &lt;br /&gt;
Wäre auch zu schön, wenn die Prozesorhersteller dem Entwickler dadurch einen fliegenden HW-Wechsel bzw. eine einfache Vergleichbarkeit ermöglichen würden ;-)&lt;br /&gt;
&lt;br /&gt;
Eine komplette CMSIS-Lib (V2.0) &amp;quot;Cortex Microcontroller Software Interface Standard&amp;quot; ist für das &amp;quot;Code Red&amp;quot; Paket verfügbar, inklusive einer &amp;quot;DSP-Library&amp;quot; &lt;br /&gt;
http://support.code-red-tech.com/CodeRedWiki/NewInVersion4&lt;br /&gt;
bzw. für GNU / Keil / IAR unter&lt;br /&gt;
http://ics.nxp.com/support/documents/microcontrollers/?search=CMSIS&amp;amp;type=software&amp;amp;Search.x=8&amp;amp;Search.y=12&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* Wiki&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx_Entwicklungskit_LPCXpresso]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Codebase_f%C3%BCr_LPC1xxx]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx für Umsteiger]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Projekte&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/264089 FreeRTOS auf LPC1768]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/321481 Multithreading auf LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/319537 Python Script zum Flashen des LPC8xx]&lt;br /&gt;
&lt;br /&gt;
* Suche im Forum&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC8* LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC12* LPC12xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC13* LPC13xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC17* LPC17xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC18* LPC18xx]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
(Die Preiswertesten sind &#039;&#039;&#039;fett&#039;&#039;&#039; dargestellt)&lt;br /&gt;
* &#039;&#039;&#039;[http://darisusgmbh.de/shop/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 Darisus]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[http://www.elpro.org/shop/shop.php elpro]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.hbe-shop.de HBE] &lt;br /&gt;
* [http://www.tme.eu/de/katalog#cleanParameters%3D1%26searchClick%3D1%26search%3DLPC1%26bf_szukaj%3D+ TME]&lt;br /&gt;
* [http://www.tn-electronics.de/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 TN]&lt;br /&gt;
* [http://de.mouser.com/_/?Keyword=LPC1&amp;amp;Ns=Pricing|0&amp;amp;FS=True Mouser]&lt;br /&gt;
* [http://www.soselectronic.eu/?searchstring=LPC1&amp;amp;str=378 SOS]&lt;br /&gt;
* [http://de.farnell.com Farnell/Element14]&lt;br /&gt;
* [http://conrad.de Conrad]&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
* [http://www.watterott.com/index.php?page=search&amp;amp;page_action=query&amp;amp;desc=off&amp;amp;sdesc=on&amp;amp;keywords=LPCXpresso Watterott (24€ inclusive JTAG-Programmiergerät UND JTAG Debugger für kostenlose &amp;quot;Code-Red&amp;quot; Entwicklungsplattform)], dazu hier die [[LPC1xxx_Entwicklungskit_LPCXpresso|Beschreibung]]&lt;br /&gt;
* [http://www.lpctools.com/evaluationboardskitsforlpc17xx.aspx LPC-Tools]&lt;br /&gt;
* [http://thinkembedded.ch/NXP:::25.html thinkembedded.ch] div. Olimex Boards&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* http://www.nxp.com/#/page/content=[f=/dynamic/applicationnotes/tid-50809_sid-56890/data.xml] Appnotes&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html Projects]&lt;br /&gt;
* [http://mbed.org/handbook/Homepage MBED]&lt;br /&gt;
* [http://forums.nxp.com/forums/viewforum.php?f=1 NXP-WIKI]&lt;br /&gt;
* [http://knowledgebase.nxp.com/forumdisplay.php?s=389a3610c741bca7b18221d32b9c0ce0&amp;amp;f=4 NXP-Forum]&lt;br /&gt;
* [http://ics.nxp.com/lpcxpresso/ LPCXpresso]&lt;br /&gt;
* [http://code.google.com/p/32bitmicro/ 32BitMicro]&lt;br /&gt;
* [http://www.brc-electronics.nl SimpleCortex]&lt;br /&gt;
* [http://www.lpcware.com/ LPCWare NXP MCU community]&lt;br /&gt;
* [http://nanohome.be/nxp/index.html LPC175/6x und LPC23xx pin Configurator]&lt;br /&gt;
* [https://code.google.com/p/lpc-1768-arm-synthesizer/  MIDI controlled monophonic synthesizer based on the LPCXpresso 1768.]&lt;br /&gt;
* [https://code.google.com/p/lpc1343codebase/  An open source software library for NXP&#039;s Cortex-M3 based LPC1300 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc1114codebase/   An open source software library for NXP&#039;s Cortex-M0 based LPC1100 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc-12xx-bootloader/  A flexible bootloader for use with LPC12xx Microcontrollers from NXP, Firmware code is AES128 encrypted to secure your project / source code when giving out public firmware updates. ]&lt;br /&gt;
* [https://code.google.com/p/lpcxpresso-rc/   Read receiver and sensor signals for radio controlled model aircrafts configured for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/olpcx/   Open toolset for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/32bitmicro/   Collection of code and tools for 32 bit microcontrollers]&lt;br /&gt;
* [https://code.google.com/p/my-nxp-lpc1114/   my-nxp-lpc1114 study course]&lt;br /&gt;
* [https://code.google.com/p/nxp-lpc/   nxp-lpc]&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsplattformen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.lpcware.com/lpcxpresso/home LPDXpresso Download (Kostenlos mit Debugger)]&lt;br /&gt;
* [http://www.lpcware.com LPCXpresso Homepage]&lt;br /&gt;
* [http://support.code-red-tech.com/CodeRedWiki/WikiHome CR-WIKI]&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp ARM/Keil MDK-ARM]&lt;br /&gt;
* IAR EWARM&lt;br /&gt;
* Rowley Crossworks&lt;br /&gt;
* Green Hills Software &lt;br /&gt;
* [http://www.coocox.org/CooCox_CoIDE.htm CooCox] (Kostenlos)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:LPC1x]]&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=95435</id>
		<title>LPC-Mikrocontroller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=95435"/>
		<updated>2017-03-06T11:55:35Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* Allgemeine Informationen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:overview_Sep2011.png|thumb|right|850px|Überblick über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
[[Bild:positioning_NXPSep2011.gif|thumb|right|850px|Vergleich über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
Die LPC-Familie von NXP basiert auf 32-Bit Cortex-Kernen von ARM und arbeitet mit bis zu 204MHz. Die verschiedenen Serien basieren auf den Cortex-M0/M0+/M3/M4-Kernen und sind inzwischen auch für Privatnutzer zu Preisen erhältlich, die mit denen von 8-Bit-Mikrocontrollern vergleichbar sind. Eine Auflistung der verschiedenen Typen findet sich in der Tabelle unten.&lt;br /&gt;
&lt;br /&gt;
Von NXP sind preiswerte Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger oder den neuen LPC-Link2, ein reiner Programmer + Debugger) erhältlich z.B. bei [http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]. Siehe dazu auch die Dokumentation von NXP zu den [http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)] und diese [[LPC1xxx Entwicklungskit LPCXpresso]].&lt;br /&gt;
&lt;br /&gt;
== Vergleich aller Typen ==&lt;br /&gt;
&#039;&#039;Stand Feb. 2017&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; class=&amp;quot;unsortable&amp;quot;                               | &lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | CPU&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Max. Frequency&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Flash&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | SRAM&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Voltage&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; class=&amp;quot;unsortable&amp;quot;   | Features&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2&amp;quot;              | Cortex-M0+&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;30&amp;quot;             | 30MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-32kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
SCTimer/PWM,&lt;br /&gt;
Switch Matrix,&lt;br /&gt;
Pattern Match Engine&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC54000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;128&amp;quot;            | 128-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;96&amp;quot;             | 96-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.62&amp;quot;           | 1.62-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
LCD,&lt;br /&gt;
Ethernet,&lt;br /&gt;
FlexComm,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1100&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | Cortex-M0/M0+&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;50&amp;quot; | 50MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-36kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.71&amp;quot;           | 1.71-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
EEPROM&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1200&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;0&amp;quot;              | Cortex-M0&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;32&amp;quot;             | 32-128kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
8 kV protection,&lt;br /&gt;
IEC 60730 Class B certified&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1300&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;3&amp;quot;  | Cortex-M3&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;72&amp;quot; | 72MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-64kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-12kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.0&amp;quot;            | 2.0-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1500&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;12&amp;quot;             | 12-36kB&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.4&amp;quot;| 2.4-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1700&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;                | 32-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;24&amp;quot;             | 24-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4300&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;240&amp;quot;            | 204MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-282kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
SGPIO,&lt;br /&gt;
Security&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;: gibt es auch als Mehrkern-Prozessoren (mit 0/1/2 Cortex-M0(+)-Cores)&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Informationen ==&lt;br /&gt;
&lt;br /&gt;
Aktuelle Linecard von NXP: http://www.nxp.com/assets/documents/data/en/product-selector-guide/LPCMICROLNCD.pdf&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Infos + User-Manuals==&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC8xx (Cortex-M0+) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://www.nxp.com/products/microcontrollers/cortex_m0_m0/series/LPC800.html#quickreference LPC8xx]&#039;&#039;&#039; ist nur in Packages mit einer relativ niedrigen Pinanzahl (DIP8, SO20, TSSOP16, TSSOP20) verfügbar, hat zwischen 4-16kB Flash, und 1-4kB RAM. Die zulässige Betriebsspannung liegt zwischen 1,8V und 3,6V.&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features der LPC800-Serie: &lt;br /&gt;
* 1-4 I2C&lt;br /&gt;
* 1-2 SSP&lt;br /&gt;
* 2-3 UART&lt;br /&gt;
* 4 Timer,  1 OS-Timer&lt;br /&gt;
* 1 watch dog&lt;br /&gt;
* 4 PWM-Einheiten&lt;br /&gt;
* 12-bit ADC&lt;br /&gt;
* CRC engine&lt;br /&gt;
* DMA with 18 channels and 9 trigger inputs&lt;br /&gt;
* 1 SCT (state configurable timer)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/download/grouping/11045/user_manual User Manual der LPC8-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC11xx (Cortex-M0) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc11xx/ LPC11xx-Serie]&#039;&#039;&#039; (3,3V) bietet viele Möglichkeiten&lt;br /&gt;
* Der LPC1100L ist derzeit laut NXP (Sep2011) der preisgünstigste ARM auf dem Markt. Der 32Bit ARM mit einer Performance von ca. 45DMIPS @50MHZ benötigt bei dieser Taktfrequenz nur etwa 10mA. (Details siehe NXP-Seite)&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features :&lt;br /&gt;
** LPC1100 Serie: • I2C, SSP, UART, GPIO, • Timers and watch dog timer, • 10-bit ADC, • Flash/SRAM memory, • Weitere Funktionen, siehe &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/LPC1xxx#Features_eines_LPC11xx 2.3 Features]&#039;&#039;&#039;&lt;br /&gt;
** LPC1100L Serie zusätzlich zu LPC1100: • Power Profile mit lower power consumption in Active- und Sleep-mode, • Interne pull-ups auf VDD level, • Programmierbarer pseudo open-drain mode für GPIO Pins, • WWDT mit Clock Source Lock.&lt;br /&gt;
**LPC11C00 Serie zusätzlich zu LPC1100: • CAN controller, • On-chip CAN Treiber, • On-chip CAN Transceiver (LPC11C2x), • WDT (not windowed) mit Clock Source Lock.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10398.pdf User Manual der LPC11-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Besonderes Augenmerk möchte ich auf die neue Serie  &#039;&#039;&#039;[http://www.nxp.com/ps/#/i=71498 LPC111xFD]&#039;&#039;&#039; legen, denn in jetzt gibt es den Cortex-M0 auch im DIL 28 &#039;&#039;&#039;[http://www.nxp.com/redirect/pip/LPC1114FN28.html den LPC1114FN28]&#039;&#039;&#039;&lt;br /&gt;
**Des Weiteren sind damit SO20, sowie TSSOP20 und TSSOP28 Bauformen verfügbar&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC12xx (Cortex-M0) ===&lt;br /&gt;
* Die Low Power &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc12xx/ LPC12xx-Serie]&#039;&#039;&#039; (3,3V) ist laut NXP (Sep2011) ein Cortex-M0 mit 32 bis 128kB Flash, einem 45 CoreMark™ Benchmark-Score bei 30MHz, 2 bis 8kB SRAM, und einem internen 1% genauen 12MHz Oscillator.&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features: fMAX von 30MHz, 1 10-Bit  ADC mit 8 Kanälen, 2 Comparatoren, 2 UARTs, 1 SSP/SPI, 1 I2C, DMA Controller, CRC Engine, 1 32-Bit, 5 Timer (16- und 32-Bit, + RTC), 13 PWM Kanäle, bis zu 55 GPIOs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10441.pdf User Manual der LPC12xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC13xx (Cortex-M3) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc13xx/ LPC13xx-Serie]&#039;&#039;&#039; (3,3V) bietet im LQFP 48 Gehäuse 8..32k Flash, 2..8k SRAM, 5 Timer (mit WD), 11 PWM, 1 UART, 1IIC, 1USB, 1..2 SPI, einen 8-Kanal/10Bit AD-Wandler und eine Taktfrequenz von max. 72MHz. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10375.pdf User Manual der LPC13xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC17xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc17xx/ LPC17xx-Serie]&#039;&#039;&#039; hingegen enthält eine weit größere Peripherie in einem LQFP80/100/144/208 Package.&lt;br /&gt;
32..512k Flash, 8..96k SRAM, 6 Timer (mit WD), 6 zusätzliche PWM-Einheiten, teilweise Ethernet und STN/TFT-LCD-Controller, meist USB (teilw. mit Host+OTG), 4 UART, 2..3IIC, 1..2 CAN, 1 SPI, 2 SSP/SPI einen 6..8-Kanal/12Bit AD-Wandler, einen 10Bit DAC, Motor-Control-Einheiten, einen Encoder-Eingang und eine Taktfrequenz von max. 100MHz(120MHz) und vieles mehr. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10360.pdf User Manual der LPC17xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC18xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc18xx/ LPC18xx-Serie]&#039;&#039;&#039; stellt DIE &amp;quot;High-Performance&amp;quot; Controller aus der Cortex-M3-Serie. Die Taktfrequenz geht bis 150MHz, die Controller enthalten große dual-Bank Flash Speicher bis zu 1MB, ein großes On-Chip SRAM mit bis zu 200KB, zusätzliche Peripherie wie z.B. SPI Flash Interface (SPIFI) und State Configurable Timer (SCT), 2x High Speed USB (1x mit On-Chip HS PHY) und eine MPU.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://ics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc18xx.pdf User Manual der LPC18xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features: &#039;&#039;&#039;[http://ics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc18xx.pdf LPC18xx Flyer von NXP]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungskits ===&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Kostenlose Entwicklungsumgebung für ALLE hier genannten Controller ===&lt;br /&gt;
Für die ganze Prozessorfamilie ist eine &amp;lt;u&amp;gt;kostenlose&amp;lt;/u&amp;gt; Entwicklungsumgebung  erhältlich. Informationen unter &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home  lpcware]&#039;&#039;&#039;: Die auf Eclipse basierende Entwicklungsumgebung ist nach der Installation bis 8k freigeschaltet und nach einer einfachen und kostenlosen Registrierung für 256kB. Die IDE ist auch für &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home Linux und Mac]&#039;&#039;&#039; verfügbar.&lt;br /&gt;
&lt;br /&gt;
Hier die &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== LPC8xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC8xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 06/2016)&lt;br /&gt;
* LPC810FN8 (DIP8): Digikey 1,09 € (bei einem Stuck).&lt;br /&gt;
* LPC812JD20 (SOIC-W 20): Digikey 1,26 € (bei einem Stuck).&lt;br /&gt;
* LPC812JDH20 (TSSOP-20): Digikey 1,44 € (bei einem Stuck).&lt;br /&gt;
* LPC824M201JDH20J (TSSOP-20): Conrad 2,99 € incl. MwSt, (2017/03) &lt;br /&gt;
* LPC812M101JD20FP (SO-20): Conrad 2,49 incl. MwSt, (2017/03) &lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC800_block_diagram_Jan2014.gif|thumb|right|850px|Blockdiagramm des Cortex-M0+, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC8xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC8xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0+ processor, running at frequencies of up to 30 MHz. &lt;br /&gt;
** single cycle multiplier&lt;br /&gt;
** single cycle I/O port&lt;br /&gt;
** ARM Cortex-M0+ built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug, Micro Trace Buffer supported.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32kB (LPC824), 16 kB (LPC812M101JD20/LPC812M101JDH20/LPC812M101JDH16), 8 kB (LPC811M001JDH16) or 4kB (LPC810M021FN8) on-chip flash programming memory. &lt;br /&gt;
**  8kB, 4kB, 2 kB, or 1 kB SRAM.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** ROM support routines for: power profiles, USART, SPI, I2C, ADC, integer division&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 18 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages down to 6.&lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
** &#039;&#039;&#039;Switch matrix for flexible configuration of each I/O pin function.&#039;&#039;&#039;&lt;br /&gt;
** CRC engine&lt;br /&gt;
** DMA with 18 channels and 9 sources&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** Comparator with internal and external references and 31 step voltage divider.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 9.4 kHz to 2.3 MHz.&lt;br /&gt;
** 10 kHz low-power oscillator for the WKT.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Reduced power modes: Sleep mode, Deep-sleep mode, Power-down mode, and Deep power-down mode.&lt;br /&gt;
** Wake-up from Deep-sleep and Power-down modes on activity on USART, SPI, and I2C peripherals.&lt;br /&gt;
** Brownout detect.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available as DIP8, TSSOP16, SO20, and TSSOP20 package.&lt;br /&gt;
&lt;br /&gt;
== LPC11xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC11xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 01/2014):&lt;br /&gt;
&lt;br /&gt;
elpro.org: von 1.61EUR (LPC1111FN33) bis 5.73EUR (LPC11U37) bei einen Stueck. Die Familie ist sehr gross mit sehr unterschiedlichen Ausfuehrungen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC11xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC11xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 50 MHz. &lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32 kB (LPC1114/LPC11C14), 24 kB (LPC1113), 16 kB (LPC1112/LPC11C12), or 8 kB (LPC1111) on-chip flash programming memory.  &lt;br /&gt;
** 8 kB, 4 kB, or 2 kB SRAM. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages and LPC11C22/C24. &lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 13 of the functional pins.&lt;br /&gt;
** Power-On Reset (POR). &lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset. &lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available in the following packages: 16WLCSP, 25WLCSP 20-SOIC, 20-TSSOP, 28-DIP, 28-TSSOP, 48-LQFP, 64-LQFP, 100-LQFP, and others.&lt;br /&gt;
&lt;br /&gt;
== LPC12xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC12xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
[[Bild:block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC12xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC12xx ===&lt;br /&gt;
&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 45 MHz (one wait state from flash) or 30 MHz (zero wait states from flash). The LPC122x have a high score of over 45 in CoreMark CPU performance benchmark testing, equivalent to 1.51/MHz.&lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug (SWD).&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory&lt;br /&gt;
** Up to 8 kB SRAM.&lt;br /&gt;
** Up to 128 kB on-chip flash programming memory. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Includes ROM-based 32-bit integer division routines.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz Internal RC (IRC) oscillator trimmed to 1 % accuracy that can optionally be used as a system clock.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, main clock, and Watchdog clock.&lt;br /&gt;
** Real-Time Clock (RTC).&lt;br /&gt;
* Digital peripherals&lt;br /&gt;
** Micro DMA controller with 21 channels.&lt;br /&gt;
** CRC engine.&lt;br /&gt;
** Two UARTs with fractional baud rate generation and internal FIFO. One UART with RS-485 and modem support and one standard UART with IrDA.&lt;br /&gt;
** SSP/SPI controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. I2C-bus pins have programmable glitch filter.&lt;br /&gt;
** Up to 55 General Purpose I/O (GPIO) pins with programmable pull-up resistor, open-drain mode, programmable digital input glitch filter, and programmable input inverter. &lt;br /&gt;
** Programmable output drive on all GPIO pins. Four pins support high-current output drivers.&lt;br /&gt;
** All GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** Four general purpose counter/timers with four capture inputs and four match outputs (32-bit timers) or two capture inputs and two match outputs (16-bit timers). &lt;br /&gt;
** Windowed WatchDog Timer (WWDT).&lt;br /&gt;
* Analog peripherals&lt;br /&gt;
** One 8-channel, 10-bit ADC.&lt;br /&gt;
** Two highly flexible analog comparators. Comparator outputs can be programmed to trigger a timer match signal or can be used to emulate 555 timer behavior.&lt;br /&gt;
* Power&lt;br /&gt;
** Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Deep-sleep mode via start logic using 12 port pins.&lt;br /&gt;
** Processor wake-up from Deep-power down and Deep-sleep modes via the RTC.&lt;br /&gt;
** Brownout detect with three separate thresholds each for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
** Integrated PMU (Power Management Unit).&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* 3.3 V power supply.&lt;br /&gt;
* Available as 64-pin and 48-pin LQFP package.&lt;br /&gt;
&lt;br /&gt;
== LPC13xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC13xx ===&lt;br /&gt;
[[Bild:LPC13xx_Selection_Guide_Sep2011.png|thumb|left|600px|Selection Guide zur LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1313 mit 32k-Flash mit 72MHz im LQFP 48 Gehäuse. Der LPC1313 ist bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; erhältlich für 3,57 € (Juli 2016), oder elpro.org für 2,29 €.  Entwicklungskit INKLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1343-LPCXpresso-Board Watterott]&#039;&#039;&#039; für 23,80 € (Juli 2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC13xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC13xx Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1313 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 72 MHz.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 32 kB on-chip flash programming memory.&lt;br /&gt;
* 8 kB SRAM.&lt;br /&gt;
* In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* UART with fractional baud rate generation, modem, internal FIFO, and RS-485/EIA-485 support.&lt;br /&gt;
* SSP controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
* Additional SSP controller on LPC1313FBD48/01.&lt;br /&gt;
* I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode.&lt;br /&gt;
* Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors.&lt;br /&gt;
* Four general purpose counter/timers with a total of four capture inputs and 13 match outputs.&lt;br /&gt;
* Programmable Watchdog Timer (WDT) &lt;br /&gt;
* System tick timer.&lt;br /&gt;
* Serial Wire Debug and Serial Wire Trace port.&lt;br /&gt;
* High-current output driver (20 mA) on one pin.&lt;br /&gt;
* High-current sink drivers (20 mA) on two I2C-bus pins in Fast-mode Plus.&lt;br /&gt;
* Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
* Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
* Single power supply (2.0 V to 3.6 V).&lt;br /&gt;
* 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
* Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, or the watchdog clock.&lt;br /&gt;
* Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 40 of the functional pins.&lt;br /&gt;
* Brownout detect with four separate thresholds for interrupt and one thresholds for forced reset.&lt;br /&gt;
* Power-On Reset (POR).&lt;br /&gt;
* Integrated oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 12 MHz internal RC oscillator trimmed to 1 % accuracy over the entire temperature and voltage range that can optionally be used as a system clock.&lt;br /&gt;
* Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz. System PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
* Code Read Protection (CRP) with different security levels.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Available as 48-pin LQFP package and 33-pin HVQFN package.&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1347 ===&lt;br /&gt;
* 64 kB Flash&lt;br /&gt;
* 12 kB SRAM&lt;br /&gt;
* 4 kB EEPROM&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* USB Code in ROM&lt;br /&gt;
* USB Bootloader in ROM, programming via copy to mass storage device&lt;br /&gt;
&lt;br /&gt;
== LPC17xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC17xx ===&lt;br /&gt;
[[Bild:LPC17xx_Selection_Guide_Sep2011.png|thumb|left|680px|Selection Guide zur LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1754 mit 128K Flash im LQFP80, der bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; für 7€74 (Juli/2011) erhältlich ist,[den LPC1751 (32k/8k) schon für 5€95] und bei Digikey für 6€35, den LPC1764FBD100 bei &#039;&#039;&#039;[http://www.tme.eu/de TME]&#039;&#039;&#039;    für 7€ Entwicklungskit INCLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1769-LPCXpresso Watterott]&#039;&#039;&#039; für 23€80 (Juli/2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC17xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC177x_178x Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1754 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 100 MHz &lt;br /&gt;
* A Memory Protection Unit (MPU) supporting eight regions is included.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 128 kB on-chip flash program memory with In-System Programming (ISP) and In-Application Programming (IAP) capabilities. &lt;br /&gt;
* 32 kB of SRAM on the CPU with local code/data bus for high-performance CPU access.&lt;br /&gt;
* Eight channel General Purpose DMA controller &lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
* USB 2.0 full-speed controller that can be configured for either device, Host, or OTG operation with an on-chip PHY for device and Host functions &lt;br /&gt;
* Four UARTs with fractional baud rate generation, internal FIFO, IrDA, and DMA, Einer mit Modem I/Os und RS485 Support&lt;br /&gt;
* 1 CAN controller.&lt;br /&gt;
* 2 SSP controllers &lt;br /&gt;
* 1 SPI controller &lt;br /&gt;
* 2 I2C-bus interfaces with data rates of 1Mbit/s,&lt;br /&gt;
* I2S (Inter-IC Sound) &lt;br /&gt;
* 52  General Purpose I/O (GPIO) pins Any pin of ports 0 and 2 can be used to generate an interrupt.&lt;br /&gt;
* 8x 12-bit Analog-to-Digital Converter (ADC) conversion rates up to 200 kHz&lt;br /&gt;
* 1x 10-bit Digital-to-Analog Converter (DAC) &lt;br /&gt;
* Four general purpose timers/counters, with a total of eight capture inputs and ten compare outputs. &lt;br /&gt;
* One motor control PWM with support for three-phase motor control.&lt;br /&gt;
* Quadrature encoder interface that can monitor one external quadrature encoder.&lt;br /&gt;
* One standard PWM/timer block with external count input.&lt;br /&gt;
* Real-Time Clock (RTC) with a separate power domain including 20 bytes of battery-powered backup registers,  An RTC interrupt can wake up the CPU from any reduced power mode.&lt;br /&gt;
* Watchdog Timer (WDT). &lt;br /&gt;
* Cortex-M3 system tick timer&lt;br /&gt;
* Repetitive interrupt timer &lt;br /&gt;
* Standard JTAG test/debug interface as well as Serial Wire Debug and Serial Wire Trace Port options.&lt;br /&gt;
* Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
* Single 3.3 V power supply (2.4 V to 3.6 V). &lt;br /&gt;
* Four external interrupt inputs configurable as edge/level sensitive. All pins on PORT0 and PORT2 can be used as edge sensitive interrupt sources.&lt;br /&gt;
* Non-maskable Interrupt (NMI) input.&lt;br /&gt;
* Wakeup Interrupt Controller (WIC) &lt;br /&gt;
* Each peripheral has its own clock divider for further power savings.&lt;br /&gt;
* Brownout detect with separate threshold for interrupt and forced reset.&lt;br /&gt;
* On-chip Power-On Reset (POR).&lt;br /&gt;
* On-chip crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 4 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
* An on-chip PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the main oscillator, the internal RC oscillator, or the RTC oscillator.&lt;br /&gt;
* Available as 80-pin LQFP (12 x 12 x 1.4 mm) packages.&lt;br /&gt;
&lt;br /&gt;
== LPC18xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC18xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC18xx Familie ===&lt;br /&gt;
[[Bild:block.diagram_NXP18xx Sep2011.gif|thumb|left|680px|Blockdiagramm der LPC18xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC18xx ===&lt;br /&gt;
DRAFT!&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M3 processor, running at frequencies of up to 180 MHz.&lt;br /&gt;
** ARM Cortex-M3 built-in Memory Protection Unit (MPU) supporting eight regions.&lt;br /&gt;
** ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Non-maskable Interrupt (NMI) input.&lt;br /&gt;
** JTAG and Serial Wire Debug, serial trace, eight breakpoints, and four watch points.&lt;br /&gt;
** ETM and ETB support.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* On-chip memory (flashless parts LPC1850/30/20/10)&lt;br /&gt;
** Up to 200 kB SRAM total for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 64 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* On-chip memory (parts with on-chip flash)&lt;br /&gt;
** Up to 1 MB total dual bank flash memory with flash accelerator.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Up to 136 kB SRAM for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 32 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1 % accuracy.&lt;br /&gt;
** Ultra-low power RTC crystal oscillator.&lt;br /&gt;
** Three PLLs allow CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. The second PLL is dedicated to the High-speed USB, the third PLL can be used as audio PLL.&lt;br /&gt;
** Clock output.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** Quad SPI Flash Interface (SPIFI) with four lanes and data rates of up to 40 MB per second total.&lt;br /&gt;
** 10/100T Ethernet MAC with RMII and MII interfaces and DMA support for high throughput at low CPU load. Support for IEEE 1588 time stamping/advanced time stamping (IEEE 1588-2008 v2).&lt;br /&gt;
** One High-speed USB 2.0 Host/Device/OTG interface with DMA support and on-chip PHY.&lt;br /&gt;
** One High-speed USB 2.0 Host/Device interface with DMA support, on-chip full-speed PHY and ULPI interface to external high-speed PHY.&lt;br /&gt;
** USB interface electrical test software included in ROM USB stack.&lt;br /&gt;
** Four 550 UARTs with DMA support: one UART with full modem interface; one UART with IrDA interface; three USARTs support synchronous mode and a smart card interface conforming to ISO7816 specification.&lt;br /&gt;
** Two C_CAN 2.0B controllers with one channel each.&lt;br /&gt;
** Two SSP controllers with FIFO and multi-protocol support. Both SSPs with DMA support.&lt;br /&gt;
** One Fast-mode Plus I2C-bus interface with monitor mode and with open-drain I/O pins conforming to the full I2C-bus specification. Supports data rates of up to 1 Mbit/s.&lt;br /&gt;
** One standard I2C-bus interface with monitor mode and standard I/O pins.&lt;br /&gt;
** Two I2S interfaces with DMA support, each with one input and one output.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** External Memory Controller (EMC) supporting external SRAM, ROM, NOR flash, and SDRAM devices.&lt;br /&gt;
** LCD controller with DMA support and a programmable display resolution of up to 1024H x 768V. Supports monochrome and color STN panels and TFT color panels; supports 1/2/4/8 bpp CLUT and 16/24-bit direct pixel mapping.&lt;br /&gt;
** SD/MMC card interface.&lt;br /&gt;
** Eight-channel General-Purpose DMA (GPDMA) controller can access all memories on the AHB and all DMA-capable AHB slaves.&lt;br /&gt;
** Up to 80 General-Purpose Input/Output (GPIO) pins with configurable pull-up/pull-down resistors and open-drain modes. &lt;br /&gt;
** GPIO registers are located on the AHB for fast access. GPIO ports have DMA support.&lt;br /&gt;
** State Configurable Timer (SCT) subsystem on AHB.&lt;br /&gt;
** Four general-purpose timer/counters with capture and match capabilities.&lt;br /&gt;
** One motor control PWM for three-phase motor control.&lt;br /&gt;
** One Quadrature Encoder Interface (QEI).&lt;br /&gt;
** Repetitive Interrupt timer (RI timer).&lt;br /&gt;
** Windowed watchdog timer.&lt;br /&gt;
** Ultra-low power Real-Time Clock (RTC) on separate power domain with 256 bytes of battery powered backup registers.&lt;br /&gt;
** Alarm timer; can be battery powered.&lt;br /&gt;
* Digital peripherals available on flash-based parts LPC18xx only:&lt;br /&gt;
** &amp;lt;tbd&amp;gt;&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** One 10-bit DAC with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
** Two 10-bit ADCs with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
* Security:&lt;br /&gt;
** Hardware-based AES security engine programmable through an on-chip API.&lt;br /&gt;
** Two 128-bit secure OTP memories for AES key storage and customer use.&lt;br /&gt;
** Unique ID for each device.&lt;br /&gt;
* Power: &lt;br /&gt;
** Single 3.3 V (2.2 V to 3.6 V) power supply with on-chip internal voltage regulator for the core supply and the RTC power domain.&lt;br /&gt;
** RTC power domain can be powered separately by a 3 V battery supply.&lt;br /&gt;
** Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Sleep mode via wake-up interrupts from various eripherals. &lt;br /&gt;
** Wake-up from Deep-sleep, Power-down, and Deep power-down modes via external interrupts and interrupts generated by battery powered blocks in the RTC power domain.&lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
* Available as 100-pin, 144-pin, and 208-pin LQFP packages and as 100-pin, 180-pin, and 256-pin LBGA packages.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
=== LPCWare (kostenlos) ===&lt;br /&gt;
[[Bild:lpcxpresso-debug_Code-red_3Sep2011.gif|thumb|right|680px|Ansicht der Entwicklungsumgebung, ©code-red-tech.com]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Entwicklungs Tool ====&lt;br /&gt;
(Beschreibung aus der Web-Site:)&lt;br /&gt;
LPCXpresso&#039;s IDE (Ursprünglich von &amp;quot;Code RED&amp;quot; entwickelt, die Firma wurde 2013 von LPC gekauft) ist eine hoch integrierte Entwicklungsumgebung für LPC-Controller, und beinhaltet alle zur Entwicklung erforderlichen Tools um hoch qualitative Software in einer angemessenen Zeit zu schreiben. LPCXpresso basiert auf ein vereinfachtes Eclipse mit vielen LPC-specifischen Erweiterungen.&lt;br /&gt;
Des Weiteren ist eine aktuelle Version der Industrie-Standard GNU Tool-Chain mit einer propritären und optimierten C-Lib mit dabei. Die LPCXpresso IDE stellt ein voll optimiertes Executable zur Verfügung. Die einzige Beschränkung der kostenlosen Version ist eine Limitierung auf 256kB Code nach erfolgter Registrierung.&lt;br /&gt;
Das LPCXpresso Target Board ist eine Gemeinschaftsentwicklung von Embedded Artists, Code Red und NXP.&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
Die LPCXpresso IDE stellt eine C-Umgebung mit Syntax-Colouring, Source-Formatierung, Funktions-Folding, sowie mit Online- und Offline Hilfe und umfangreichen Projekt-Management Funktionen zur Verfügung.  &lt;br /&gt;
Dies beinhaltet:&lt;br /&gt;
* Wizards um Projekte für alle unterstützten Controller zu erstellen &lt;br /&gt;
* Automatische Linker Script Generierung inklusive Memory-Map Unterstützung &lt;br /&gt;
* Programmierung des Controllers&lt;br /&gt;
* On-Line Debugging&lt;br /&gt;
* Datenblatt-Zugriff über eingebauten Browser&lt;br /&gt;
* Support für die NXP LPC Microcontroller Familien, von Cortex-M0, Cortex-M3 bis Cortex-M4 und ARM7 bis ARM9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Peripherie und Register Views im Debugger ====&lt;br /&gt;
Der Peripherie-Viewer im integrierten Debugger zeigt alle Register und Bit-Felder in einer einfachen Baumstruktur.&lt;br /&gt;
Ein Prozessor-Register Viewer erlaubt den Zugriff auf alle Prozessor-Register und stellt eine &amp;quot;Smart-Formatting&amp;quot;  Funktion zur Verfügung um komplexe Register wie Flags oder Status Register übersichtlich darstellen zu können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Unterstützte Familien ====&lt;br /&gt;
Cortex-M0, Cortex-M3, Cortex-M4, Einzelne Controller aus der LPC2000 family, ARM966, ARM926-EJ, ARM926-EJ + VFP&lt;br /&gt;
&lt;br /&gt;
==== Sehr preiswerter USB_JTAG_SWD Debugger ====&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039; und diese &#039;&#039;&#039;[http://www.mikrocontroller.net/wikisoftware/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso Beschreibung]&#039;&#039;&#039;&lt;br /&gt;
Der neue Programmer/Debugger ist hier für ca 18€ +P&amp;amp;P erhältlich &#039;&#039;&#039;[http://www.watterott.com/de/LPC-Link-2 Programmer]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Standard Library ====&lt;br /&gt;
Im Download der &amp;quot;Code Red&amp;quot; Entwicklungsumgebung ist eine relativ umfangreiche Firmwarebibliothek vorhanden.&lt;br /&gt;
&lt;br /&gt;
==== Installationsanleitung zur IDE ====&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Codebase für LPC11xx und LPC13xx ====&lt;br /&gt;
Für die Cortex-M0 und -M3 Familien existieren verschiedene Basispakete die als Startausstattung sehr gut geeignet sind. Auf microbuilder.eu findet man eine sehr interessante Version inklusive Dokumentation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Codebase_f%C3%BCr_LPC1xxx HIER]&#039;&#039;&#039; findet man alle Links zur original Codebase mit allen Dateien (Stand Januar 2012) aber auch eine deutsche Übersetzung zu den Files.&lt;br /&gt;
&lt;br /&gt;
=== CooCox ===&lt;br /&gt;
&lt;br /&gt;
Auf der &#039;&#039;&#039;[http://www.coocox.org/Index.html Homepage]&#039;&#039;&#039; von CooCox - einem chinesischen Open-Source Projekt, auf der eine IDE für Atmel, Energy Micro, Holtek, Nuvoton, ST, TI und NXP verfügbar ist  - findet man die auf Eclipse basierende &amp;quot;CooCox CoIDE&amp;quot;, die sich aus dem &amp;quot;CoBuilder&amp;quot; und dem &amp;quot;CoDebugger&amp;quot; zusammensetzt.&lt;br /&gt;
Des Weiteren bietet man dort ein Echtzeit-Multitasking Betriebssystem, sowie SW-Versionen von zwei unterschiedliche Debugging-Adapter und ein Stand-alone Flash-Tool zum freien Download an.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Controller können damit programmiert und debugged werden:&lt;br /&gt;
    LPC1111x101    LPC1111x201   LPC1112x101   LPC1112x201&lt;br /&gt;
    LPC1113x201    LPC1113x301   LPC1114x201   LPC1114x301&lt;br /&gt;
    LPC11C14x301   LPC11C12x301&lt;br /&gt;
    LPC1224x101    LPC1224x121   LPC1225x301   LPC1225x321   LPC1226x301  LPC1227x301&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    LPC1311   LPC1313   LPC1342   LPC1343&lt;br /&gt;
    LPC1751   LPC1752   LPC1754   LPC1756   LPC1758   LPC1759&lt;br /&gt;
    LPC1763   LPC1764   LPC1765   LPC1766   LPC1767   LPC1768   LPC1769&lt;br /&gt;
&lt;br /&gt;
=== EmBlocks ===&lt;br /&gt;
&#039;&#039;&#039;[http://www.emblocks.org/web/ Emblocks]&#039;&#039;&#039; ist eine kostenlose Entwicklungsumgebung. Sie unterstützt neben NXP uC weitere ARM uC (STM32, EFM32) sowie PIC, AVR und MSP430. Die IDE hat einen eingebauten GDB Debugger welcher System view (Peripherie Register anzeigen) beim Debuggen unterstützt. Ausserdem gibt es einen Project Wizzard für NXP uC &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Unterstützt wird der JLINK mit folgenden NXP uC:&lt;br /&gt;
LPC11Axx, LPC11Exx, LPC11Uxx, LPC11xxLV, LPC12xx, LPC13Uxx, LPC13xx, LPC17xx, LPC18xx, LPC18xx, LPC177x_8x, LPC407x_8x&lt;br /&gt;
&lt;br /&gt;
=== Codebase ===&lt;br /&gt;
Des Weiteren existiert eine umfangreiche Sammlung von &#039;&#039;&#039;[http://www.coocox.org/NXP-Series.php Code-Beispielen]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Keil ===&lt;br /&gt;
[https://www.keil.com/demo/eval/arm.htm KEIL MDK-ARM] (Windows, Free Version auf 32KB begrenzt, mit vielen Beispielen zu div. Evaluation Boards) &lt;br /&gt;
*[http://www.keil.com/arm/chips.asp unterstützte Mikrocontroller]&lt;br /&gt;
=== WinARM ===&lt;br /&gt;
[http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/#winarm WinARM] (wird derzeit nicht gepflegt)&lt;br /&gt;
&lt;br /&gt;
=== GNUARM ===&lt;br /&gt;
[http://gnuarm.com/ GNUARM] (Linux, Windows, wird derzeit nicht gepflegt), &lt;br /&gt;
&lt;br /&gt;
=== Yagarto ===&lt;br /&gt;
[http://www.yagarto.de/ Yagarto] (Windows, mit Eclipse-Integration) &lt;br /&gt;
&lt;br /&gt;
=== CodeSourcery ===&lt;br /&gt;
[http://www.codesourcery.com/gnu_toolchains/arm CodeSourcery CodeBench Lite]&lt;br /&gt;
&lt;br /&gt;
== CMSIS  -  Standard für alle Plattformen ==&lt;br /&gt;
Der Cortex Microcontroller Software Interface Standard (CMSIS) stellt einen &amp;quot;abstraction layer&amp;quot; für alle Cortex-Mx Controller zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
CMSIS stellt einen Schnittstellenstandard von ARM dar, der von vielen Tool-Herstellern unterstützt wird und ist (laut verschiedener Berichte)  kompatibel mit den verschiedensten Compilern (incl GCC). Dies wird erreicht durch einheitliche Definitionen für Adressen und Namen die den Zugriff auf die Register des Cores und der Peripherie ermöglichen.&lt;br /&gt;
Auch Standard-Funktionen für den Start und die Interrupts stehen zur Verfügung.&lt;br /&gt;
Natürlich kann auch weiterhin direkt auf die HW zugegriffen werden, es geht nur um eine Vereinheitlichung von identischen Funktionen. &lt;br /&gt;
Da die Peripherie-Teile zumindest innerhalb eines Halbleiterherstellers für die Cortex-Mx Controller sehr ähnlich oder sogar weitgehend identisch sind kann deutlich mehr SW für verschiedene Derivate innerhalb dieser Prozessorfamilien wiederverwendet werden.  (siehe Google: &amp;quot;CMSIS_Doulos_Tutorial.pdf&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Ein weiterer, interessanter Punkt ist die CMSIS-DSP Lib mit ihren Vektorfunktionen, Matrix-Berechnung sowie komplexen Algorithmen für Filter, &lt;br /&gt;
Regler und Fourietransformation sowie weiterer DSP Algorithmen (insgesamt 61).&lt;br /&gt;
&lt;br /&gt;
Leider hat diese Kompatibilität auch ihre Grenzen, denn Sonderfunktionen bzw. Spezialitäten in der &amp;quot;gleichen&amp;quot; Peripherie zwischen unterschiedlichen Halbleiterherstellern werden nicht abgedeckt. &lt;br /&gt;
Wäre auch zu schön, wenn die Prozesorhersteller dem Entwickler dadurch einen fliegenden HW-Wechsel bzw. eine einfache Vergleichbarkeit ermöglichen würden ;-)&lt;br /&gt;
&lt;br /&gt;
Eine komplette CMSIS-Lib (V2.0) &amp;quot;Cortex Microcontroller Software Interface Standard&amp;quot; ist für das &amp;quot;Code Red&amp;quot; Paket verfügbar, inklusive einer &amp;quot;DSP-Library&amp;quot; &lt;br /&gt;
http://support.code-red-tech.com/CodeRedWiki/NewInVersion4&lt;br /&gt;
bzw. für GNU / Keil / IAR unter&lt;br /&gt;
http://ics.nxp.com/support/documents/microcontrollers/?search=CMSIS&amp;amp;type=software&amp;amp;Search.x=8&amp;amp;Search.y=12&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* Wiki&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx_Entwicklungskit_LPCXpresso]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Codebase_f%C3%BCr_LPC1xxx]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx für Umsteiger]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Projekte&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/264089 FreeRTOS auf LPC1768]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/321481 Multithreading auf LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/319537 Python Script zum Flashen des LPC8xx]&lt;br /&gt;
&lt;br /&gt;
* Suche im Forum&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC8* LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC12* LPC12xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC13* LPC13xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC17* LPC17xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC18* LPC18xx]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
(Die Preiswertesten sind &#039;&#039;&#039;fett&#039;&#039;&#039; dargestellt)&lt;br /&gt;
* &#039;&#039;&#039;[http://darisusgmbh.de/shop/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 Darisus]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[http://www.elpro.org/shop/shop.php elpro]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.hbe-shop.de HBE] &lt;br /&gt;
* [http://www.tme.eu/de/katalog#cleanParameters%3D1%26searchClick%3D1%26search%3DLPC1%26bf_szukaj%3D+ TME]&lt;br /&gt;
* [http://www.tn-electronics.de/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 TN]&lt;br /&gt;
* [http://de.mouser.com/_/?Keyword=LPC1&amp;amp;Ns=Pricing|0&amp;amp;FS=True Mouser]&lt;br /&gt;
* [http://www.soselectronic.eu/?searchstring=LPC1&amp;amp;str=378 SOS]&lt;br /&gt;
* [http://de.farnell.com Farnell/Element14]&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
* [http://www.watterott.com/index.php?page=search&amp;amp;page_action=query&amp;amp;desc=off&amp;amp;sdesc=on&amp;amp;keywords=LPCXpresso Watterott (24€ inclusive JTAG-Programmiergerät UND JTAG Debugger für kostenlose &amp;quot;Code-Red&amp;quot; Entwicklungsplattform)], dazu hier die [[LPC1xxx_Entwicklungskit_LPCXpresso|Beschreibung]]&lt;br /&gt;
* [http://www.lpctools.com/evaluationboardskitsforlpc17xx.aspx LPC-Tools]&lt;br /&gt;
* [http://thinkembedded.ch/NXP:::25.html thinkembedded.ch] div. Olimex Boards&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* http://www.nxp.com/#/page/content=[f=/dynamic/applicationnotes/tid-50809_sid-56890/data.xml] Appnotes&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html Projects]&lt;br /&gt;
* [http://mbed.org/handbook/Homepage MBED]&lt;br /&gt;
* [http://forums.nxp.com/forums/viewforum.php?f=1 NXP-WIKI]&lt;br /&gt;
* [http://knowledgebase.nxp.com/forumdisplay.php?s=389a3610c741bca7b18221d32b9c0ce0&amp;amp;f=4 NXP-Forum]&lt;br /&gt;
* [http://ics.nxp.com/lpcxpresso/ LPCXpresso]&lt;br /&gt;
* [http://code.google.com/p/32bitmicro/ 32BitMicro]&lt;br /&gt;
* [http://www.brc-electronics.nl SimpleCortex]&lt;br /&gt;
* [http://www.lpcware.com/ LPCWare NXP MCU community]&lt;br /&gt;
* [http://nanohome.be/nxp/index.html LPC175/6x und LPC23xx pin Configurator]&lt;br /&gt;
* [https://code.google.com/p/lpc-1768-arm-synthesizer/  MIDI controlled monophonic synthesizer based on the LPCXpresso 1768.]&lt;br /&gt;
* [https://code.google.com/p/lpc1343codebase/  An open source software library for NXP&#039;s Cortex-M3 based LPC1300 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc1114codebase/   An open source software library for NXP&#039;s Cortex-M0 based LPC1100 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc-12xx-bootloader/  A flexible bootloader for use with LPC12xx Microcontrollers from NXP, Firmware code is AES128 encrypted to secure your project / source code when giving out public firmware updates. ]&lt;br /&gt;
* [https://code.google.com/p/lpcxpresso-rc/   Read receiver and sensor signals for radio controlled model aircrafts configured for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/olpcx/   Open toolset for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/32bitmicro/   Collection of code and tools for 32 bit microcontrollers]&lt;br /&gt;
* [https://code.google.com/p/my-nxp-lpc1114/   my-nxp-lpc1114 study course]&lt;br /&gt;
* [https://code.google.com/p/nxp-lpc/   nxp-lpc]&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsplattformen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.lpcware.com/lpcxpresso/home LPDXpresso Download (Kostenlos mit Debugger)]&lt;br /&gt;
* [http://www.lpcware.com LPCXpresso Homepage]&lt;br /&gt;
* [http://support.code-red-tech.com/CodeRedWiki/WikiHome CR-WIKI]&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp ARM/Keil MDK-ARM]&lt;br /&gt;
* IAR EWARM&lt;br /&gt;
* Rowley Crossworks&lt;br /&gt;
* Green Hills Software &lt;br /&gt;
* [http://www.coocox.org/CooCox_CoIDE.htm CooCox] (Kostenlos)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:LPC1x]]&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=95434</id>
		<title>LPC-Mikrocontroller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=95434"/>
		<updated>2017-03-06T11:34:02Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* Features eines LPC8xx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:overview_Sep2011.png|thumb|right|850px|Überblick über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
[[Bild:positioning_NXPSep2011.gif|thumb|right|850px|Vergleich über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
Die LPC-Familie von NXP basiert auf 32-Bit Cortex-Kernen von ARM und arbeitet mit bis zu 204MHz. Die verschiedenen Serien basieren auf den Cortex-M0/M0+/M3/M4-Kernen und sind inzwischen auch für Privatnutzer zu Preisen erhältlich, die mit denen von 8-Bit-Mikrocontrollern vergleichbar sind. Eine Auflistung der verschiedenen Typen findet sich in der Tabelle unten.&lt;br /&gt;
&lt;br /&gt;
Von NXP sind preiswerte Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger oder den neuen LPC-Link2, ein reiner Programmer + Debugger) erhältlich z.B. bei [http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]. Siehe dazu auch die Dokumentation von NXP zu den [http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)] und diese [[LPC1xxx Entwicklungskit LPCXpresso]].&lt;br /&gt;
&lt;br /&gt;
== Vergleich aller Typen ==&lt;br /&gt;
&#039;&#039;Stand Feb. 2017&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; class=&amp;quot;unsortable&amp;quot;                               | &lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | CPU&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Max. Frequency&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Flash&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | SRAM&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Voltage&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; class=&amp;quot;unsortable&amp;quot;   | Features&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2&amp;quot;              | Cortex-M0+&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;30&amp;quot;             | 30MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-32kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
SCTimer/PWM,&lt;br /&gt;
Switch Matrix,&lt;br /&gt;
Pattern Match Engine&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC54000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;128&amp;quot;            | 128-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;96&amp;quot;             | 96-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.62&amp;quot;           | 1.62-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
LCD,&lt;br /&gt;
Ethernet,&lt;br /&gt;
FlexComm,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1100&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | Cortex-M0/M0+&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;50&amp;quot; | 50MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-36kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.71&amp;quot;           | 1.71-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
EEPROM&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1200&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;0&amp;quot;              | Cortex-M0&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;32&amp;quot;             | 32-128kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
8 kV protection,&lt;br /&gt;
IEC 60730 Class B certified&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1300&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;3&amp;quot;  | Cortex-M3&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;72&amp;quot; | 72MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-64kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-12kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.0&amp;quot;            | 2.0-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1500&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;12&amp;quot;             | 12-36kB&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.4&amp;quot;| 2.4-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1700&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;                | 32-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;24&amp;quot;             | 24-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4300&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;240&amp;quot;            | 204MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-282kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
SGPIO,&lt;br /&gt;
Security&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;: gibt es auch als Mehrkern-Prozessoren (mit 0/1/2 Cortex-M0(+)-Cores)&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Informationen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Infos + User-Manuals==&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC8xx (Cortex-M0+) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://www.nxp.com/products/microcontrollers/cortex_m0_m0/series/LPC800.html#quickreference LPC8xx]&#039;&#039;&#039; ist nur in Packages mit einer relativ niedrigen Pinanzahl (DIP8, SO20, TSSOP16, TSSOP20) verfügbar, hat zwischen 4-16kB Flash, und 1-4kB RAM. Die zulässige Betriebsspannung liegt zwischen 1,8V und 3,6V.&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features der LPC800-Serie: &lt;br /&gt;
* 1-4 I2C&lt;br /&gt;
* 1-2 SSP&lt;br /&gt;
* 2-3 UART&lt;br /&gt;
* 4 Timer,  1 OS-Timer&lt;br /&gt;
* 1 watch dog&lt;br /&gt;
* 4 PWM-Einheiten&lt;br /&gt;
* 12-bit ADC&lt;br /&gt;
* CRC engine&lt;br /&gt;
* DMA with 18 channels and 9 trigger inputs&lt;br /&gt;
* 1 SCT (state configurable timer)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/download/grouping/11045/user_manual User Manual der LPC8-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC11xx (Cortex-M0) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc11xx/ LPC11xx-Serie]&#039;&#039;&#039; (3,3V) bietet viele Möglichkeiten&lt;br /&gt;
* Der LPC1100L ist derzeit laut NXP (Sep2011) der preisgünstigste ARM auf dem Markt. Der 32Bit ARM mit einer Performance von ca. 45DMIPS @50MHZ benötigt bei dieser Taktfrequenz nur etwa 10mA. (Details siehe NXP-Seite)&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features :&lt;br /&gt;
** LPC1100 Serie: • I2C, SSP, UART, GPIO, • Timers and watch dog timer, • 10-bit ADC, • Flash/SRAM memory, • Weitere Funktionen, siehe &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/LPC1xxx#Features_eines_LPC11xx 2.3 Features]&#039;&#039;&#039;&lt;br /&gt;
** LPC1100L Serie zusätzlich zu LPC1100: • Power Profile mit lower power consumption in Active- und Sleep-mode, • Interne pull-ups auf VDD level, • Programmierbarer pseudo open-drain mode für GPIO Pins, • WWDT mit Clock Source Lock.&lt;br /&gt;
**LPC11C00 Serie zusätzlich zu LPC1100: • CAN controller, • On-chip CAN Treiber, • On-chip CAN Transceiver (LPC11C2x), • WDT (not windowed) mit Clock Source Lock.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10398.pdf User Manual der LPC11-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Besonderes Augenmerk möchte ich auf die neue Serie  &#039;&#039;&#039;[http://www.nxp.com/ps/#/i=71498 LPC111xFD]&#039;&#039;&#039; legen, denn in jetzt gibt es den Cortex-M0 auch im DIL 28 &#039;&#039;&#039;[http://www.nxp.com/redirect/pip/LPC1114FN28.html den LPC1114FN28]&#039;&#039;&#039;&lt;br /&gt;
**Des Weiteren sind damit SO20, sowie TSSOP20 und TSSOP28 Bauformen verfügbar&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC12xx (Cortex-M0) ===&lt;br /&gt;
* Die Low Power &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc12xx/ LPC12xx-Serie]&#039;&#039;&#039; (3,3V) ist laut NXP (Sep2011) ein Cortex-M0 mit 32 bis 128kB Flash, einem 45 CoreMark™ Benchmark-Score bei 30MHz, 2 bis 8kB SRAM, und einem internen 1% genauen 12MHz Oscillator.&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features: fMAX von 30MHz, 1 10-Bit  ADC mit 8 Kanälen, 2 Comparatoren, 2 UARTs, 1 SSP/SPI, 1 I2C, DMA Controller, CRC Engine, 1 32-Bit, 5 Timer (16- und 32-Bit, + RTC), 13 PWM Kanäle, bis zu 55 GPIOs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10441.pdf User Manual der LPC12xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC13xx (Cortex-M3) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc13xx/ LPC13xx-Serie]&#039;&#039;&#039; (3,3V) bietet im LQFP 48 Gehäuse 8..32k Flash, 2..8k SRAM, 5 Timer (mit WD), 11 PWM, 1 UART, 1IIC, 1USB, 1..2 SPI, einen 8-Kanal/10Bit AD-Wandler und eine Taktfrequenz von max. 72MHz. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10375.pdf User Manual der LPC13xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC17xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc17xx/ LPC17xx-Serie]&#039;&#039;&#039; hingegen enthält eine weit größere Peripherie in einem LQFP80/100/144/208 Package.&lt;br /&gt;
32..512k Flash, 8..96k SRAM, 6 Timer (mit WD), 6 zusätzliche PWM-Einheiten, teilweise Ethernet und STN/TFT-LCD-Controller, meist USB (teilw. mit Host+OTG), 4 UART, 2..3IIC, 1..2 CAN, 1 SPI, 2 SSP/SPI einen 6..8-Kanal/12Bit AD-Wandler, einen 10Bit DAC, Motor-Control-Einheiten, einen Encoder-Eingang und eine Taktfrequenz von max. 100MHz(120MHz) und vieles mehr. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10360.pdf User Manual der LPC17xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC18xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc18xx/ LPC18xx-Serie]&#039;&#039;&#039; stellt DIE &amp;quot;High-Performance&amp;quot; Controller aus der Cortex-M3-Serie. Die Taktfrequenz geht bis 150MHz, die Controller enthalten große dual-Bank Flash Speicher bis zu 1MB, ein großes On-Chip SRAM mit bis zu 200KB, zusätzliche Peripherie wie z.B. SPI Flash Interface (SPIFI) und State Configurable Timer (SCT), 2x High Speed USB (1x mit On-Chip HS PHY) und eine MPU.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://ics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc18xx.pdf User Manual der LPC18xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features: &#039;&#039;&#039;[http://ics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc18xx.pdf LPC18xx Flyer von NXP]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungskits ===&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Kostenlose Entwicklungsumgebung für ALLE hier genannten Controller ===&lt;br /&gt;
Für die ganze Prozessorfamilie ist eine &amp;lt;u&amp;gt;kostenlose&amp;lt;/u&amp;gt; Entwicklungsumgebung  erhältlich. Informationen unter &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home  lpcware]&#039;&#039;&#039;: Die auf Eclipse basierende Entwicklungsumgebung ist nach der Installation bis 8k freigeschaltet und nach einer einfachen und kostenlosen Registrierung für 256kB. Die IDE ist auch für &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home Linux und Mac]&#039;&#039;&#039; verfügbar.&lt;br /&gt;
&lt;br /&gt;
Hier die &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== LPC8xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC8xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 06/2016)&lt;br /&gt;
* LPC810FN8 (DIP8): Digikey 1,09 € (bei einem Stuck).&lt;br /&gt;
* LPC812JD20 (SOIC-W 20): Digikey 1,26 € (bei einem Stuck).&lt;br /&gt;
* LPC812JDH20 (TSSOP-20): Digikey 1,44 € (bei einem Stuck).&lt;br /&gt;
* LPC824M201JDH20J (TSSOP-20): Conrad 2,99 € incl. MwSt, (2017/03) &lt;br /&gt;
* LPC812M101JD20FP (SO-20): Conrad 2,49 incl. MwSt, (2017/03) &lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC800_block_diagram_Jan2014.gif|thumb|right|850px|Blockdiagramm des Cortex-M0+, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC8xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC8xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0+ processor, running at frequencies of up to 30 MHz. &lt;br /&gt;
** single cycle multiplier&lt;br /&gt;
** single cycle I/O port&lt;br /&gt;
** ARM Cortex-M0+ built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug, Micro Trace Buffer supported.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32kB (LPC824), 16 kB (LPC812M101JD20/LPC812M101JDH20/LPC812M101JDH16), 8 kB (LPC811M001JDH16) or 4kB (LPC810M021FN8) on-chip flash programming memory. &lt;br /&gt;
**  8kB, 4kB, 2 kB, or 1 kB SRAM.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** ROM support routines for: power profiles, USART, SPI, I2C, ADC, integer division&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 18 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages down to 6.&lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
** &#039;&#039;&#039;Switch matrix for flexible configuration of each I/O pin function.&#039;&#039;&#039;&lt;br /&gt;
** CRC engine&lt;br /&gt;
** DMA with 18 channels and 9 sources&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** Comparator with internal and external references and 31 step voltage divider.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 9.4 kHz to 2.3 MHz.&lt;br /&gt;
** 10 kHz low-power oscillator for the WKT.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Reduced power modes: Sleep mode, Deep-sleep mode, Power-down mode, and Deep power-down mode.&lt;br /&gt;
** Wake-up from Deep-sleep and Power-down modes on activity on USART, SPI, and I2C peripherals.&lt;br /&gt;
** Brownout detect.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available as DIP8, TSSOP16, SO20, and TSSOP20 package.&lt;br /&gt;
&lt;br /&gt;
== LPC11xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC11xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 01/2014):&lt;br /&gt;
&lt;br /&gt;
elpro.org: von 1.61EUR (LPC1111FN33) bis 5.73EUR (LPC11U37) bei einen Stueck. Die Familie ist sehr gross mit sehr unterschiedlichen Ausfuehrungen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC11xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC11xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 50 MHz. &lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32 kB (LPC1114/LPC11C14), 24 kB (LPC1113), 16 kB (LPC1112/LPC11C12), or 8 kB (LPC1111) on-chip flash programming memory.  &lt;br /&gt;
** 8 kB, 4 kB, or 2 kB SRAM. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages and LPC11C22/C24. &lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 13 of the functional pins.&lt;br /&gt;
** Power-On Reset (POR). &lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset. &lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available in the following packages: 16WLCSP, 25WLCSP 20-SOIC, 20-TSSOP, 28-DIP, 28-TSSOP, 48-LQFP, 64-LQFP, 100-LQFP, and others.&lt;br /&gt;
&lt;br /&gt;
== LPC12xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC12xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
[[Bild:block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC12xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC12xx ===&lt;br /&gt;
&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 45 MHz (one wait state from flash) or 30 MHz (zero wait states from flash). The LPC122x have a high score of over 45 in CoreMark CPU performance benchmark testing, equivalent to 1.51/MHz.&lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug (SWD).&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory&lt;br /&gt;
** Up to 8 kB SRAM.&lt;br /&gt;
** Up to 128 kB on-chip flash programming memory. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Includes ROM-based 32-bit integer division routines.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz Internal RC (IRC) oscillator trimmed to 1 % accuracy that can optionally be used as a system clock.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, main clock, and Watchdog clock.&lt;br /&gt;
** Real-Time Clock (RTC).&lt;br /&gt;
* Digital peripherals&lt;br /&gt;
** Micro DMA controller with 21 channels.&lt;br /&gt;
** CRC engine.&lt;br /&gt;
** Two UARTs with fractional baud rate generation and internal FIFO. One UART with RS-485 and modem support and one standard UART with IrDA.&lt;br /&gt;
** SSP/SPI controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. I2C-bus pins have programmable glitch filter.&lt;br /&gt;
** Up to 55 General Purpose I/O (GPIO) pins with programmable pull-up resistor, open-drain mode, programmable digital input glitch filter, and programmable input inverter. &lt;br /&gt;
** Programmable output drive on all GPIO pins. Four pins support high-current output drivers.&lt;br /&gt;
** All GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** Four general purpose counter/timers with four capture inputs and four match outputs (32-bit timers) or two capture inputs and two match outputs (16-bit timers). &lt;br /&gt;
** Windowed WatchDog Timer (WWDT).&lt;br /&gt;
* Analog peripherals&lt;br /&gt;
** One 8-channel, 10-bit ADC.&lt;br /&gt;
** Two highly flexible analog comparators. Comparator outputs can be programmed to trigger a timer match signal or can be used to emulate 555 timer behavior.&lt;br /&gt;
* Power&lt;br /&gt;
** Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Deep-sleep mode via start logic using 12 port pins.&lt;br /&gt;
** Processor wake-up from Deep-power down and Deep-sleep modes via the RTC.&lt;br /&gt;
** Brownout detect with three separate thresholds each for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
** Integrated PMU (Power Management Unit).&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* 3.3 V power supply.&lt;br /&gt;
* Available as 64-pin and 48-pin LQFP package.&lt;br /&gt;
&lt;br /&gt;
== LPC13xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC13xx ===&lt;br /&gt;
[[Bild:LPC13xx_Selection_Guide_Sep2011.png|thumb|left|600px|Selection Guide zur LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1313 mit 32k-Flash mit 72MHz im LQFP 48 Gehäuse. Der LPC1313 ist bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; erhältlich für 3,57 € (Juli 2016), oder elpro.org für 2,29 €.  Entwicklungskit INKLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1343-LPCXpresso-Board Watterott]&#039;&#039;&#039; für 23,80 € (Juli 2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC13xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC13xx Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1313 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 72 MHz.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 32 kB on-chip flash programming memory.&lt;br /&gt;
* 8 kB SRAM.&lt;br /&gt;
* In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* UART with fractional baud rate generation, modem, internal FIFO, and RS-485/EIA-485 support.&lt;br /&gt;
* SSP controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
* Additional SSP controller on LPC1313FBD48/01.&lt;br /&gt;
* I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode.&lt;br /&gt;
* Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors.&lt;br /&gt;
* Four general purpose counter/timers with a total of four capture inputs and 13 match outputs.&lt;br /&gt;
* Programmable Watchdog Timer (WDT) &lt;br /&gt;
* System tick timer.&lt;br /&gt;
* Serial Wire Debug and Serial Wire Trace port.&lt;br /&gt;
* High-current output driver (20 mA) on one pin.&lt;br /&gt;
* High-current sink drivers (20 mA) on two I2C-bus pins in Fast-mode Plus.&lt;br /&gt;
* Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
* Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
* Single power supply (2.0 V to 3.6 V).&lt;br /&gt;
* 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
* Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, or the watchdog clock.&lt;br /&gt;
* Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 40 of the functional pins.&lt;br /&gt;
* Brownout detect with four separate thresholds for interrupt and one thresholds for forced reset.&lt;br /&gt;
* Power-On Reset (POR).&lt;br /&gt;
* Integrated oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 12 MHz internal RC oscillator trimmed to 1 % accuracy over the entire temperature and voltage range that can optionally be used as a system clock.&lt;br /&gt;
* Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz. System PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
* Code Read Protection (CRP) with different security levels.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Available as 48-pin LQFP package and 33-pin HVQFN package.&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1347 ===&lt;br /&gt;
* 64 kB Flash&lt;br /&gt;
* 12 kB SRAM&lt;br /&gt;
* 4 kB EEPROM&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* USB Code in ROM&lt;br /&gt;
* USB Bootloader in ROM, programming via copy to mass storage device&lt;br /&gt;
&lt;br /&gt;
== LPC17xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC17xx ===&lt;br /&gt;
[[Bild:LPC17xx_Selection_Guide_Sep2011.png|thumb|left|680px|Selection Guide zur LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1754 mit 128K Flash im LQFP80, der bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; für 7€74 (Juli/2011) erhältlich ist,[den LPC1751 (32k/8k) schon für 5€95] und bei Digikey für 6€35, den LPC1764FBD100 bei &#039;&#039;&#039;[http://www.tme.eu/de TME]&#039;&#039;&#039;    für 7€ Entwicklungskit INCLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1769-LPCXpresso Watterott]&#039;&#039;&#039; für 23€80 (Juli/2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC17xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC177x_178x Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1754 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 100 MHz &lt;br /&gt;
* A Memory Protection Unit (MPU) supporting eight regions is included.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 128 kB on-chip flash program memory with In-System Programming (ISP) and In-Application Programming (IAP) capabilities. &lt;br /&gt;
* 32 kB of SRAM on the CPU with local code/data bus for high-performance CPU access.&lt;br /&gt;
* Eight channel General Purpose DMA controller &lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
* USB 2.0 full-speed controller that can be configured for either device, Host, or OTG operation with an on-chip PHY for device and Host functions &lt;br /&gt;
* Four UARTs with fractional baud rate generation, internal FIFO, IrDA, and DMA, Einer mit Modem I/Os und RS485 Support&lt;br /&gt;
* 1 CAN controller.&lt;br /&gt;
* 2 SSP controllers &lt;br /&gt;
* 1 SPI controller &lt;br /&gt;
* 2 I2C-bus interfaces with data rates of 1Mbit/s,&lt;br /&gt;
* I2S (Inter-IC Sound) &lt;br /&gt;
* 52  General Purpose I/O (GPIO) pins Any pin of ports 0 and 2 can be used to generate an interrupt.&lt;br /&gt;
* 8x 12-bit Analog-to-Digital Converter (ADC) conversion rates up to 200 kHz&lt;br /&gt;
* 1x 10-bit Digital-to-Analog Converter (DAC) &lt;br /&gt;
* Four general purpose timers/counters, with a total of eight capture inputs and ten compare outputs. &lt;br /&gt;
* One motor control PWM with support for three-phase motor control.&lt;br /&gt;
* Quadrature encoder interface that can monitor one external quadrature encoder.&lt;br /&gt;
* One standard PWM/timer block with external count input.&lt;br /&gt;
* Real-Time Clock (RTC) with a separate power domain including 20 bytes of battery-powered backup registers,  An RTC interrupt can wake up the CPU from any reduced power mode.&lt;br /&gt;
* Watchdog Timer (WDT). &lt;br /&gt;
* Cortex-M3 system tick timer&lt;br /&gt;
* Repetitive interrupt timer &lt;br /&gt;
* Standard JTAG test/debug interface as well as Serial Wire Debug and Serial Wire Trace Port options.&lt;br /&gt;
* Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
* Single 3.3 V power supply (2.4 V to 3.6 V). &lt;br /&gt;
* Four external interrupt inputs configurable as edge/level sensitive. All pins on PORT0 and PORT2 can be used as edge sensitive interrupt sources.&lt;br /&gt;
* Non-maskable Interrupt (NMI) input.&lt;br /&gt;
* Wakeup Interrupt Controller (WIC) &lt;br /&gt;
* Each peripheral has its own clock divider for further power savings.&lt;br /&gt;
* Brownout detect with separate threshold for interrupt and forced reset.&lt;br /&gt;
* On-chip Power-On Reset (POR).&lt;br /&gt;
* On-chip crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 4 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
* An on-chip PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the main oscillator, the internal RC oscillator, or the RTC oscillator.&lt;br /&gt;
* Available as 80-pin LQFP (12 x 12 x 1.4 mm) packages.&lt;br /&gt;
&lt;br /&gt;
== LPC18xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC18xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC18xx Familie ===&lt;br /&gt;
[[Bild:block.diagram_NXP18xx Sep2011.gif|thumb|left|680px|Blockdiagramm der LPC18xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC18xx ===&lt;br /&gt;
DRAFT!&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M3 processor, running at frequencies of up to 180 MHz.&lt;br /&gt;
** ARM Cortex-M3 built-in Memory Protection Unit (MPU) supporting eight regions.&lt;br /&gt;
** ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Non-maskable Interrupt (NMI) input.&lt;br /&gt;
** JTAG and Serial Wire Debug, serial trace, eight breakpoints, and four watch points.&lt;br /&gt;
** ETM and ETB support.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* On-chip memory (flashless parts LPC1850/30/20/10)&lt;br /&gt;
** Up to 200 kB SRAM total for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 64 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* On-chip memory (parts with on-chip flash)&lt;br /&gt;
** Up to 1 MB total dual bank flash memory with flash accelerator.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Up to 136 kB SRAM for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 32 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1 % accuracy.&lt;br /&gt;
** Ultra-low power RTC crystal oscillator.&lt;br /&gt;
** Three PLLs allow CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. The second PLL is dedicated to the High-speed USB, the third PLL can be used as audio PLL.&lt;br /&gt;
** Clock output.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** Quad SPI Flash Interface (SPIFI) with four lanes and data rates of up to 40 MB per second total.&lt;br /&gt;
** 10/100T Ethernet MAC with RMII and MII interfaces and DMA support for high throughput at low CPU load. Support for IEEE 1588 time stamping/advanced time stamping (IEEE 1588-2008 v2).&lt;br /&gt;
** One High-speed USB 2.0 Host/Device/OTG interface with DMA support and on-chip PHY.&lt;br /&gt;
** One High-speed USB 2.0 Host/Device interface with DMA support, on-chip full-speed PHY and ULPI interface to external high-speed PHY.&lt;br /&gt;
** USB interface electrical test software included in ROM USB stack.&lt;br /&gt;
** Four 550 UARTs with DMA support: one UART with full modem interface; one UART with IrDA interface; three USARTs support synchronous mode and a smart card interface conforming to ISO7816 specification.&lt;br /&gt;
** Two C_CAN 2.0B controllers with one channel each.&lt;br /&gt;
** Two SSP controllers with FIFO and multi-protocol support. Both SSPs with DMA support.&lt;br /&gt;
** One Fast-mode Plus I2C-bus interface with monitor mode and with open-drain I/O pins conforming to the full I2C-bus specification. Supports data rates of up to 1 Mbit/s.&lt;br /&gt;
** One standard I2C-bus interface with monitor mode and standard I/O pins.&lt;br /&gt;
** Two I2S interfaces with DMA support, each with one input and one output.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** External Memory Controller (EMC) supporting external SRAM, ROM, NOR flash, and SDRAM devices.&lt;br /&gt;
** LCD controller with DMA support and a programmable display resolution of up to 1024H x 768V. Supports monochrome and color STN panels and TFT color panels; supports 1/2/4/8 bpp CLUT and 16/24-bit direct pixel mapping.&lt;br /&gt;
** SD/MMC card interface.&lt;br /&gt;
** Eight-channel General-Purpose DMA (GPDMA) controller can access all memories on the AHB and all DMA-capable AHB slaves.&lt;br /&gt;
** Up to 80 General-Purpose Input/Output (GPIO) pins with configurable pull-up/pull-down resistors and open-drain modes. &lt;br /&gt;
** GPIO registers are located on the AHB for fast access. GPIO ports have DMA support.&lt;br /&gt;
** State Configurable Timer (SCT) subsystem on AHB.&lt;br /&gt;
** Four general-purpose timer/counters with capture and match capabilities.&lt;br /&gt;
** One motor control PWM for three-phase motor control.&lt;br /&gt;
** One Quadrature Encoder Interface (QEI).&lt;br /&gt;
** Repetitive Interrupt timer (RI timer).&lt;br /&gt;
** Windowed watchdog timer.&lt;br /&gt;
** Ultra-low power Real-Time Clock (RTC) on separate power domain with 256 bytes of battery powered backup registers.&lt;br /&gt;
** Alarm timer; can be battery powered.&lt;br /&gt;
* Digital peripherals available on flash-based parts LPC18xx only:&lt;br /&gt;
** &amp;lt;tbd&amp;gt;&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** One 10-bit DAC with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
** Two 10-bit ADCs with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
* Security:&lt;br /&gt;
** Hardware-based AES security engine programmable through an on-chip API.&lt;br /&gt;
** Two 128-bit secure OTP memories for AES key storage and customer use.&lt;br /&gt;
** Unique ID for each device.&lt;br /&gt;
* Power: &lt;br /&gt;
** Single 3.3 V (2.2 V to 3.6 V) power supply with on-chip internal voltage regulator for the core supply and the RTC power domain.&lt;br /&gt;
** RTC power domain can be powered separately by a 3 V battery supply.&lt;br /&gt;
** Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Sleep mode via wake-up interrupts from various eripherals. &lt;br /&gt;
** Wake-up from Deep-sleep, Power-down, and Deep power-down modes via external interrupts and interrupts generated by battery powered blocks in the RTC power domain.&lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
* Available as 100-pin, 144-pin, and 208-pin LQFP packages and as 100-pin, 180-pin, and 256-pin LBGA packages.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
=== LPCWare (kostenlos) ===&lt;br /&gt;
[[Bild:lpcxpresso-debug_Code-red_3Sep2011.gif|thumb|right|680px|Ansicht der Entwicklungsumgebung, ©code-red-tech.com]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Entwicklungs Tool ====&lt;br /&gt;
(Beschreibung aus der Web-Site:)&lt;br /&gt;
LPCXpresso&#039;s IDE (Ursprünglich von &amp;quot;Code RED&amp;quot; entwickelt, die Firma wurde 2013 von LPC gekauft) ist eine hoch integrierte Entwicklungsumgebung für LPC-Controller, und beinhaltet alle zur Entwicklung erforderlichen Tools um hoch qualitative Software in einer angemessenen Zeit zu schreiben. LPCXpresso basiert auf ein vereinfachtes Eclipse mit vielen LPC-specifischen Erweiterungen.&lt;br /&gt;
Des Weiteren ist eine aktuelle Version der Industrie-Standard GNU Tool-Chain mit einer propritären und optimierten C-Lib mit dabei. Die LPCXpresso IDE stellt ein voll optimiertes Executable zur Verfügung. Die einzige Beschränkung der kostenlosen Version ist eine Limitierung auf 256kB Code nach erfolgter Registrierung.&lt;br /&gt;
Das LPCXpresso Target Board ist eine Gemeinschaftsentwicklung von Embedded Artists, Code Red und NXP.&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
Die LPCXpresso IDE stellt eine C-Umgebung mit Syntax-Colouring, Source-Formatierung, Funktions-Folding, sowie mit Online- und Offline Hilfe und umfangreichen Projekt-Management Funktionen zur Verfügung.  &lt;br /&gt;
Dies beinhaltet:&lt;br /&gt;
* Wizards um Projekte für alle unterstützten Controller zu erstellen &lt;br /&gt;
* Automatische Linker Script Generierung inklusive Memory-Map Unterstützung &lt;br /&gt;
* Programmierung des Controllers&lt;br /&gt;
* On-Line Debugging&lt;br /&gt;
* Datenblatt-Zugriff über eingebauten Browser&lt;br /&gt;
* Support für die NXP LPC Microcontroller Familien, von Cortex-M0, Cortex-M3 bis Cortex-M4 und ARM7 bis ARM9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Peripherie und Register Views im Debugger ====&lt;br /&gt;
Der Peripherie-Viewer im integrierten Debugger zeigt alle Register und Bit-Felder in einer einfachen Baumstruktur.&lt;br /&gt;
Ein Prozessor-Register Viewer erlaubt den Zugriff auf alle Prozessor-Register und stellt eine &amp;quot;Smart-Formatting&amp;quot;  Funktion zur Verfügung um komplexe Register wie Flags oder Status Register übersichtlich darstellen zu können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Unterstützte Familien ====&lt;br /&gt;
Cortex-M0, Cortex-M3, Cortex-M4, Einzelne Controller aus der LPC2000 family, ARM966, ARM926-EJ, ARM926-EJ + VFP&lt;br /&gt;
&lt;br /&gt;
==== Sehr preiswerter USB_JTAG_SWD Debugger ====&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039; und diese &#039;&#039;&#039;[http://www.mikrocontroller.net/wikisoftware/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso Beschreibung]&#039;&#039;&#039;&lt;br /&gt;
Der neue Programmer/Debugger ist hier für ca 18€ +P&amp;amp;P erhältlich &#039;&#039;&#039;[http://www.watterott.com/de/LPC-Link-2 Programmer]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Standard Library ====&lt;br /&gt;
Im Download der &amp;quot;Code Red&amp;quot; Entwicklungsumgebung ist eine relativ umfangreiche Firmwarebibliothek vorhanden.&lt;br /&gt;
&lt;br /&gt;
==== Installationsanleitung zur IDE ====&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Codebase für LPC11xx und LPC13xx ====&lt;br /&gt;
Für die Cortex-M0 und -M3 Familien existieren verschiedene Basispakete die als Startausstattung sehr gut geeignet sind. Auf microbuilder.eu findet man eine sehr interessante Version inklusive Dokumentation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Codebase_f%C3%BCr_LPC1xxx HIER]&#039;&#039;&#039; findet man alle Links zur original Codebase mit allen Dateien (Stand Januar 2012) aber auch eine deutsche Übersetzung zu den Files.&lt;br /&gt;
&lt;br /&gt;
=== CooCox ===&lt;br /&gt;
&lt;br /&gt;
Auf der &#039;&#039;&#039;[http://www.coocox.org/Index.html Homepage]&#039;&#039;&#039; von CooCox - einem chinesischen Open-Source Projekt, auf der eine IDE für Atmel, Energy Micro, Holtek, Nuvoton, ST, TI und NXP verfügbar ist  - findet man die auf Eclipse basierende &amp;quot;CooCox CoIDE&amp;quot;, die sich aus dem &amp;quot;CoBuilder&amp;quot; und dem &amp;quot;CoDebugger&amp;quot; zusammensetzt.&lt;br /&gt;
Des Weiteren bietet man dort ein Echtzeit-Multitasking Betriebssystem, sowie SW-Versionen von zwei unterschiedliche Debugging-Adapter und ein Stand-alone Flash-Tool zum freien Download an.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Controller können damit programmiert und debugged werden:&lt;br /&gt;
    LPC1111x101    LPC1111x201   LPC1112x101   LPC1112x201&lt;br /&gt;
    LPC1113x201    LPC1113x301   LPC1114x201   LPC1114x301&lt;br /&gt;
    LPC11C14x301   LPC11C12x301&lt;br /&gt;
    LPC1224x101    LPC1224x121   LPC1225x301   LPC1225x321   LPC1226x301  LPC1227x301&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    LPC1311   LPC1313   LPC1342   LPC1343&lt;br /&gt;
    LPC1751   LPC1752   LPC1754   LPC1756   LPC1758   LPC1759&lt;br /&gt;
    LPC1763   LPC1764   LPC1765   LPC1766   LPC1767   LPC1768   LPC1769&lt;br /&gt;
&lt;br /&gt;
=== EmBlocks ===&lt;br /&gt;
&#039;&#039;&#039;[http://www.emblocks.org/web/ Emblocks]&#039;&#039;&#039; ist eine kostenlose Entwicklungsumgebung. Sie unterstützt neben NXP uC weitere ARM uC (STM32, EFM32) sowie PIC, AVR und MSP430. Die IDE hat einen eingebauten GDB Debugger welcher System view (Peripherie Register anzeigen) beim Debuggen unterstützt. Ausserdem gibt es einen Project Wizzard für NXP uC &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Unterstützt wird der JLINK mit folgenden NXP uC:&lt;br /&gt;
LPC11Axx, LPC11Exx, LPC11Uxx, LPC11xxLV, LPC12xx, LPC13Uxx, LPC13xx, LPC17xx, LPC18xx, LPC18xx, LPC177x_8x, LPC407x_8x&lt;br /&gt;
&lt;br /&gt;
=== Codebase ===&lt;br /&gt;
Des Weiteren existiert eine umfangreiche Sammlung von &#039;&#039;&#039;[http://www.coocox.org/NXP-Series.php Code-Beispielen]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Keil ===&lt;br /&gt;
[https://www.keil.com/demo/eval/arm.htm KEIL MDK-ARM] (Windows, Free Version auf 32KB begrenzt, mit vielen Beispielen zu div. Evaluation Boards) &lt;br /&gt;
*[http://www.keil.com/arm/chips.asp unterstützte Mikrocontroller]&lt;br /&gt;
=== WinARM ===&lt;br /&gt;
[http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/#winarm WinARM] (wird derzeit nicht gepflegt)&lt;br /&gt;
&lt;br /&gt;
=== GNUARM ===&lt;br /&gt;
[http://gnuarm.com/ GNUARM] (Linux, Windows, wird derzeit nicht gepflegt), &lt;br /&gt;
&lt;br /&gt;
=== Yagarto ===&lt;br /&gt;
[http://www.yagarto.de/ Yagarto] (Windows, mit Eclipse-Integration) &lt;br /&gt;
&lt;br /&gt;
=== CodeSourcery ===&lt;br /&gt;
[http://www.codesourcery.com/gnu_toolchains/arm CodeSourcery CodeBench Lite]&lt;br /&gt;
&lt;br /&gt;
== CMSIS  -  Standard für alle Plattformen ==&lt;br /&gt;
Der Cortex Microcontroller Software Interface Standard (CMSIS) stellt einen &amp;quot;abstraction layer&amp;quot; für alle Cortex-Mx Controller zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
CMSIS stellt einen Schnittstellenstandard von ARM dar, der von vielen Tool-Herstellern unterstützt wird und ist (laut verschiedener Berichte)  kompatibel mit den verschiedensten Compilern (incl GCC). Dies wird erreicht durch einheitliche Definitionen für Adressen und Namen die den Zugriff auf die Register des Cores und der Peripherie ermöglichen.&lt;br /&gt;
Auch Standard-Funktionen für den Start und die Interrupts stehen zur Verfügung.&lt;br /&gt;
Natürlich kann auch weiterhin direkt auf die HW zugegriffen werden, es geht nur um eine Vereinheitlichung von identischen Funktionen. &lt;br /&gt;
Da die Peripherie-Teile zumindest innerhalb eines Halbleiterherstellers für die Cortex-Mx Controller sehr ähnlich oder sogar weitgehend identisch sind kann deutlich mehr SW für verschiedene Derivate innerhalb dieser Prozessorfamilien wiederverwendet werden.  (siehe Google: &amp;quot;CMSIS_Doulos_Tutorial.pdf&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Ein weiterer, interessanter Punkt ist die CMSIS-DSP Lib mit ihren Vektorfunktionen, Matrix-Berechnung sowie komplexen Algorithmen für Filter, &lt;br /&gt;
Regler und Fourietransformation sowie weiterer DSP Algorithmen (insgesamt 61).&lt;br /&gt;
&lt;br /&gt;
Leider hat diese Kompatibilität auch ihre Grenzen, denn Sonderfunktionen bzw. Spezialitäten in der &amp;quot;gleichen&amp;quot; Peripherie zwischen unterschiedlichen Halbleiterherstellern werden nicht abgedeckt. &lt;br /&gt;
Wäre auch zu schön, wenn die Prozesorhersteller dem Entwickler dadurch einen fliegenden HW-Wechsel bzw. eine einfache Vergleichbarkeit ermöglichen würden ;-)&lt;br /&gt;
&lt;br /&gt;
Eine komplette CMSIS-Lib (V2.0) &amp;quot;Cortex Microcontroller Software Interface Standard&amp;quot; ist für das &amp;quot;Code Red&amp;quot; Paket verfügbar, inklusive einer &amp;quot;DSP-Library&amp;quot; &lt;br /&gt;
http://support.code-red-tech.com/CodeRedWiki/NewInVersion4&lt;br /&gt;
bzw. für GNU / Keil / IAR unter&lt;br /&gt;
http://ics.nxp.com/support/documents/microcontrollers/?search=CMSIS&amp;amp;type=software&amp;amp;Search.x=8&amp;amp;Search.y=12&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* Wiki&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx_Entwicklungskit_LPCXpresso]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Codebase_f%C3%BCr_LPC1xxx]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx für Umsteiger]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Projekte&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/264089 FreeRTOS auf LPC1768]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/321481 Multithreading auf LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/319537 Python Script zum Flashen des LPC8xx]&lt;br /&gt;
&lt;br /&gt;
* Suche im Forum&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC8* LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC12* LPC12xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC13* LPC13xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC17* LPC17xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC18* LPC18xx]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
(Die Preiswertesten sind &#039;&#039;&#039;fett&#039;&#039;&#039; dargestellt)&lt;br /&gt;
* &#039;&#039;&#039;[http://darisusgmbh.de/shop/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 Darisus]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[http://www.elpro.org/shop/shop.php elpro]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.hbe-shop.de HBE] &lt;br /&gt;
* [http://www.tme.eu/de/katalog#cleanParameters%3D1%26searchClick%3D1%26search%3DLPC1%26bf_szukaj%3D+ TME]&lt;br /&gt;
* [http://www.tn-electronics.de/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 TN]&lt;br /&gt;
* [http://de.mouser.com/_/?Keyword=LPC1&amp;amp;Ns=Pricing|0&amp;amp;FS=True Mouser]&lt;br /&gt;
* [http://www.soselectronic.eu/?searchstring=LPC1&amp;amp;str=378 SOS]&lt;br /&gt;
* [http://de.farnell.com Farnell/Element14]&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
* [http://www.watterott.com/index.php?page=search&amp;amp;page_action=query&amp;amp;desc=off&amp;amp;sdesc=on&amp;amp;keywords=LPCXpresso Watterott (24€ inclusive JTAG-Programmiergerät UND JTAG Debugger für kostenlose &amp;quot;Code-Red&amp;quot; Entwicklungsplattform)], dazu hier die [[LPC1xxx_Entwicklungskit_LPCXpresso|Beschreibung]]&lt;br /&gt;
* [http://www.lpctools.com/evaluationboardskitsforlpc17xx.aspx LPC-Tools]&lt;br /&gt;
* [http://thinkembedded.ch/NXP:::25.html thinkembedded.ch] div. Olimex Boards&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* http://www.nxp.com/#/page/content=[f=/dynamic/applicationnotes/tid-50809_sid-56890/data.xml] Appnotes&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html Projects]&lt;br /&gt;
* [http://mbed.org/handbook/Homepage MBED]&lt;br /&gt;
* [http://forums.nxp.com/forums/viewforum.php?f=1 NXP-WIKI]&lt;br /&gt;
* [http://knowledgebase.nxp.com/forumdisplay.php?s=389a3610c741bca7b18221d32b9c0ce0&amp;amp;f=4 NXP-Forum]&lt;br /&gt;
* [http://ics.nxp.com/lpcxpresso/ LPCXpresso]&lt;br /&gt;
* [http://code.google.com/p/32bitmicro/ 32BitMicro]&lt;br /&gt;
* [http://www.brc-electronics.nl SimpleCortex]&lt;br /&gt;
* [http://www.lpcware.com/ LPCWare NXP MCU community]&lt;br /&gt;
* [http://nanohome.be/nxp/index.html LPC175/6x und LPC23xx pin Configurator]&lt;br /&gt;
* [https://code.google.com/p/lpc-1768-arm-synthesizer/  MIDI controlled monophonic synthesizer based on the LPCXpresso 1768.]&lt;br /&gt;
* [https://code.google.com/p/lpc1343codebase/  An open source software library for NXP&#039;s Cortex-M3 based LPC1300 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc1114codebase/   An open source software library for NXP&#039;s Cortex-M0 based LPC1100 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc-12xx-bootloader/  A flexible bootloader for use with LPC12xx Microcontrollers from NXP, Firmware code is AES128 encrypted to secure your project / source code when giving out public firmware updates. ]&lt;br /&gt;
* [https://code.google.com/p/lpcxpresso-rc/   Read receiver and sensor signals for radio controlled model aircrafts configured for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/olpcx/   Open toolset for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/32bitmicro/   Collection of code and tools for 32 bit microcontrollers]&lt;br /&gt;
* [https://code.google.com/p/my-nxp-lpc1114/   my-nxp-lpc1114 study course]&lt;br /&gt;
* [https://code.google.com/p/nxp-lpc/   nxp-lpc]&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsplattformen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.lpcware.com/lpcxpresso/home LPDXpresso Download (Kostenlos mit Debugger)]&lt;br /&gt;
* [http://www.lpcware.com LPCXpresso Homepage]&lt;br /&gt;
* [http://support.code-red-tech.com/CodeRedWiki/WikiHome CR-WIKI]&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp ARM/Keil MDK-ARM]&lt;br /&gt;
* IAR EWARM&lt;br /&gt;
* Rowley Crossworks&lt;br /&gt;
* Green Hills Software &lt;br /&gt;
* [http://www.coocox.org/CooCox_CoIDE.htm CooCox] (Kostenlos)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:LPC1x]]&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=95433</id>
		<title>LPC-Mikrocontroller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=95433"/>
		<updated>2017-03-06T11:29:12Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* LPC13xx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:overview_Sep2011.png|thumb|right|850px|Überblick über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
[[Bild:positioning_NXPSep2011.gif|thumb|right|850px|Vergleich über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
Die LPC-Familie von NXP basiert auf 32-Bit Cortex-Kernen von ARM und arbeitet mit bis zu 204MHz. Die verschiedenen Serien basieren auf den Cortex-M0/M0+/M3/M4-Kernen und sind inzwischen auch für Privatnutzer zu Preisen erhältlich, die mit denen von 8-Bit-Mikrocontrollern vergleichbar sind. Eine Auflistung der verschiedenen Typen findet sich in der Tabelle unten.&lt;br /&gt;
&lt;br /&gt;
Von NXP sind preiswerte Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger oder den neuen LPC-Link2, ein reiner Programmer + Debugger) erhältlich z.B. bei [http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]. Siehe dazu auch die Dokumentation von NXP zu den [http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)] und diese [[LPC1xxx Entwicklungskit LPCXpresso]].&lt;br /&gt;
&lt;br /&gt;
== Vergleich aller Typen ==&lt;br /&gt;
&#039;&#039;Stand Feb. 2017&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; class=&amp;quot;unsortable&amp;quot;                               | &lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | CPU&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Max. Frequency&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Flash&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | SRAM&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Voltage&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; class=&amp;quot;unsortable&amp;quot;   | Features&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2&amp;quot;              | Cortex-M0+&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;30&amp;quot;             | 30MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-32kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
SCTimer/PWM,&lt;br /&gt;
Switch Matrix,&lt;br /&gt;
Pattern Match Engine&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC54000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;128&amp;quot;            | 128-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;96&amp;quot;             | 96-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.62&amp;quot;           | 1.62-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
LCD,&lt;br /&gt;
Ethernet,&lt;br /&gt;
FlexComm,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1100&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | Cortex-M0/M0+&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;50&amp;quot; | 50MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-36kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.71&amp;quot;           | 1.71-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
EEPROM&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1200&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;0&amp;quot;              | Cortex-M0&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;32&amp;quot;             | 32-128kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
8 kV protection,&lt;br /&gt;
IEC 60730 Class B certified&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1300&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;3&amp;quot;  | Cortex-M3&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;72&amp;quot; | 72MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-64kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-12kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.0&amp;quot;            | 2.0-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1500&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;12&amp;quot;             | 12-36kB&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.4&amp;quot;| 2.4-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1700&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;                | 32-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;24&amp;quot;             | 24-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4300&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;240&amp;quot;            | 204MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-282kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
SGPIO,&lt;br /&gt;
Security&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;: gibt es auch als Mehrkern-Prozessoren (mit 0/1/2 Cortex-M0(+)-Cores)&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Informationen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Infos + User-Manuals==&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC8xx (Cortex-M0+) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://www.nxp.com/products/microcontrollers/cortex_m0_m0/series/LPC800.html#quickreference LPC8xx]&#039;&#039;&#039; ist nur in Packages mit einer relativ niedrigen Pinanzahl (DIP8, SO20, TSSOP16, TSSOP20) verfügbar, hat zwischen 4-16kB Flash, und 1-4kB RAM. Die zulässige Betriebsspannung liegt zwischen 1,8V und 3,6V.&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features der LPC800-Serie: &lt;br /&gt;
* 1-4 I2C&lt;br /&gt;
* 1-2 SSP&lt;br /&gt;
* 2-3 UART&lt;br /&gt;
* 4 Timer,  1 OS-Timer&lt;br /&gt;
* 1 watch dog&lt;br /&gt;
* 4 PWM-Einheiten&lt;br /&gt;
* 12-bit ADC&lt;br /&gt;
* CRC engine&lt;br /&gt;
* DMA with 18 channels and 9 trigger inputs&lt;br /&gt;
* 1 SCT (state configurable timer)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/download/grouping/11045/user_manual User Manual der LPC8-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC11xx (Cortex-M0) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc11xx/ LPC11xx-Serie]&#039;&#039;&#039; (3,3V) bietet viele Möglichkeiten&lt;br /&gt;
* Der LPC1100L ist derzeit laut NXP (Sep2011) der preisgünstigste ARM auf dem Markt. Der 32Bit ARM mit einer Performance von ca. 45DMIPS @50MHZ benötigt bei dieser Taktfrequenz nur etwa 10mA. (Details siehe NXP-Seite)&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features :&lt;br /&gt;
** LPC1100 Serie: • I2C, SSP, UART, GPIO, • Timers and watch dog timer, • 10-bit ADC, • Flash/SRAM memory, • Weitere Funktionen, siehe &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/LPC1xxx#Features_eines_LPC11xx 2.3 Features]&#039;&#039;&#039;&lt;br /&gt;
** LPC1100L Serie zusätzlich zu LPC1100: • Power Profile mit lower power consumption in Active- und Sleep-mode, • Interne pull-ups auf VDD level, • Programmierbarer pseudo open-drain mode für GPIO Pins, • WWDT mit Clock Source Lock.&lt;br /&gt;
**LPC11C00 Serie zusätzlich zu LPC1100: • CAN controller, • On-chip CAN Treiber, • On-chip CAN Transceiver (LPC11C2x), • WDT (not windowed) mit Clock Source Lock.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10398.pdf User Manual der LPC11-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Besonderes Augenmerk möchte ich auf die neue Serie  &#039;&#039;&#039;[http://www.nxp.com/ps/#/i=71498 LPC111xFD]&#039;&#039;&#039; legen, denn in jetzt gibt es den Cortex-M0 auch im DIL 28 &#039;&#039;&#039;[http://www.nxp.com/redirect/pip/LPC1114FN28.html den LPC1114FN28]&#039;&#039;&#039;&lt;br /&gt;
**Des Weiteren sind damit SO20, sowie TSSOP20 und TSSOP28 Bauformen verfügbar&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC12xx (Cortex-M0) ===&lt;br /&gt;
* Die Low Power &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc12xx/ LPC12xx-Serie]&#039;&#039;&#039; (3,3V) ist laut NXP (Sep2011) ein Cortex-M0 mit 32 bis 128kB Flash, einem 45 CoreMark™ Benchmark-Score bei 30MHz, 2 bis 8kB SRAM, und einem internen 1% genauen 12MHz Oscillator.&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features: fMAX von 30MHz, 1 10-Bit  ADC mit 8 Kanälen, 2 Comparatoren, 2 UARTs, 1 SSP/SPI, 1 I2C, DMA Controller, CRC Engine, 1 32-Bit, 5 Timer (16- und 32-Bit, + RTC), 13 PWM Kanäle, bis zu 55 GPIOs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10441.pdf User Manual der LPC12xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC13xx (Cortex-M3) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc13xx/ LPC13xx-Serie]&#039;&#039;&#039; (3,3V) bietet im LQFP 48 Gehäuse 8..32k Flash, 2..8k SRAM, 5 Timer (mit WD), 11 PWM, 1 UART, 1IIC, 1USB, 1..2 SPI, einen 8-Kanal/10Bit AD-Wandler und eine Taktfrequenz von max. 72MHz. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10375.pdf User Manual der LPC13xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC17xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc17xx/ LPC17xx-Serie]&#039;&#039;&#039; hingegen enthält eine weit größere Peripherie in einem LQFP80/100/144/208 Package.&lt;br /&gt;
32..512k Flash, 8..96k SRAM, 6 Timer (mit WD), 6 zusätzliche PWM-Einheiten, teilweise Ethernet und STN/TFT-LCD-Controller, meist USB (teilw. mit Host+OTG), 4 UART, 2..3IIC, 1..2 CAN, 1 SPI, 2 SSP/SPI einen 6..8-Kanal/12Bit AD-Wandler, einen 10Bit DAC, Motor-Control-Einheiten, einen Encoder-Eingang und eine Taktfrequenz von max. 100MHz(120MHz) und vieles mehr. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10360.pdf User Manual der LPC17xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC18xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc18xx/ LPC18xx-Serie]&#039;&#039;&#039; stellt DIE &amp;quot;High-Performance&amp;quot; Controller aus der Cortex-M3-Serie. Die Taktfrequenz geht bis 150MHz, die Controller enthalten große dual-Bank Flash Speicher bis zu 1MB, ein großes On-Chip SRAM mit bis zu 200KB, zusätzliche Peripherie wie z.B. SPI Flash Interface (SPIFI) und State Configurable Timer (SCT), 2x High Speed USB (1x mit On-Chip HS PHY) und eine MPU.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://ics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc18xx.pdf User Manual der LPC18xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features: &#039;&#039;&#039;[http://ics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc18xx.pdf LPC18xx Flyer von NXP]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungskits ===&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Kostenlose Entwicklungsumgebung für ALLE hier genannten Controller ===&lt;br /&gt;
Für die ganze Prozessorfamilie ist eine &amp;lt;u&amp;gt;kostenlose&amp;lt;/u&amp;gt; Entwicklungsumgebung  erhältlich. Informationen unter &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home  lpcware]&#039;&#039;&#039;: Die auf Eclipse basierende Entwicklungsumgebung ist nach der Installation bis 8k freigeschaltet und nach einer einfachen und kostenlosen Registrierung für 256kB. Die IDE ist auch für &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home Linux und Mac]&#039;&#039;&#039; verfügbar.&lt;br /&gt;
&lt;br /&gt;
Hier die &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== LPC8xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC8xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 06/2016)&lt;br /&gt;
* LPC810FN8 (DIP8): Digikey 1,09 € (bei einem Stuck).&lt;br /&gt;
* LPC812JD20 (SOIC-W 20): Digikey 1,26 € (bei einem Stuck).&lt;br /&gt;
* LPC812JDH20 (TSSOP-20): Digikey 1,44 € (bei einem Stuck).&lt;br /&gt;
* LPC824M201JDH20J (TSSOP-20): Conrad 2,99 € incl. MwSt, (2017/03) &lt;br /&gt;
* LPC812M101JD20FP (SO-20): Conrad 2,49 incl. MwSt, (2017/03) &lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC800_block_diagram_Jan2014.gif|thumb|right|850px|Blockdiagramm des Cortex-M0+, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC8xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC8xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0+ processor, running at frequencies of up to 30 MHz. &lt;br /&gt;
** single cycle multiplier&lt;br /&gt;
** single cycle I/O port&lt;br /&gt;
** ARM Cortex-M0+ built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug, Micro Trace Buffer supported.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32kB (LPC824), 16 kB (LPC812M101JD20/LPC812M101JDH20/LPC812M101JDH16), 8 kB (LPC811M001JDH16) or 4kB (LPC810M021FN8) on-chip flash programming memory. &lt;br /&gt;
**  8kB, 4kB, 2 kB, or 1 kB SRAM.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 18 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages down to 6.&lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
** &#039;&#039;&#039;Switch matrix for flexible configuration of each I/O pin function.&#039;&#039;&#039;&lt;br /&gt;
** CRC engine&lt;br /&gt;
** DMA with 18 channels and 9 sources&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** Comparator with internal and external references and 31 step voltage divider.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 9.4 kHz to 2.3 MHz.&lt;br /&gt;
** 10 kHz low-power oscillator for the WKT.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Reduced power modes: Sleep mode, Deep-sleep mode, Power-down mode, and Deep power-down mode.&lt;br /&gt;
** Wake-up from Deep-sleep and Power-down modes on activity on USART, SPI, and I2C peripherals.&lt;br /&gt;
** Brownout detect.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available as DIP8, TSSOP16, SO20, and TSSOP20 package.&lt;br /&gt;
&lt;br /&gt;
== LPC11xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC11xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 01/2014):&lt;br /&gt;
&lt;br /&gt;
elpro.org: von 1.61EUR (LPC1111FN33) bis 5.73EUR (LPC11U37) bei einen Stueck. Die Familie ist sehr gross mit sehr unterschiedlichen Ausfuehrungen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC11xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC11xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 50 MHz. &lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32 kB (LPC1114/LPC11C14), 24 kB (LPC1113), 16 kB (LPC1112/LPC11C12), or 8 kB (LPC1111) on-chip flash programming memory.  &lt;br /&gt;
** 8 kB, 4 kB, or 2 kB SRAM. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages and LPC11C22/C24. &lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 13 of the functional pins.&lt;br /&gt;
** Power-On Reset (POR). &lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset. &lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available in the following packages: 16WLCSP, 25WLCSP 20-SOIC, 20-TSSOP, 28-DIP, 28-TSSOP, 48-LQFP, 64-LQFP, 100-LQFP, and others.&lt;br /&gt;
&lt;br /&gt;
== LPC12xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC12xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
[[Bild:block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC12xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC12xx ===&lt;br /&gt;
&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 45 MHz (one wait state from flash) or 30 MHz (zero wait states from flash). The LPC122x have a high score of over 45 in CoreMark CPU performance benchmark testing, equivalent to 1.51/MHz.&lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug (SWD).&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory&lt;br /&gt;
** Up to 8 kB SRAM.&lt;br /&gt;
** Up to 128 kB on-chip flash programming memory. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Includes ROM-based 32-bit integer division routines.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz Internal RC (IRC) oscillator trimmed to 1 % accuracy that can optionally be used as a system clock.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, main clock, and Watchdog clock.&lt;br /&gt;
** Real-Time Clock (RTC).&lt;br /&gt;
* Digital peripherals&lt;br /&gt;
** Micro DMA controller with 21 channels.&lt;br /&gt;
** CRC engine.&lt;br /&gt;
** Two UARTs with fractional baud rate generation and internal FIFO. One UART with RS-485 and modem support and one standard UART with IrDA.&lt;br /&gt;
** SSP/SPI controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. I2C-bus pins have programmable glitch filter.&lt;br /&gt;
** Up to 55 General Purpose I/O (GPIO) pins with programmable pull-up resistor, open-drain mode, programmable digital input glitch filter, and programmable input inverter. &lt;br /&gt;
** Programmable output drive on all GPIO pins. Four pins support high-current output drivers.&lt;br /&gt;
** All GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** Four general purpose counter/timers with four capture inputs and four match outputs (32-bit timers) or two capture inputs and two match outputs (16-bit timers). &lt;br /&gt;
** Windowed WatchDog Timer (WWDT).&lt;br /&gt;
* Analog peripherals&lt;br /&gt;
** One 8-channel, 10-bit ADC.&lt;br /&gt;
** Two highly flexible analog comparators. Comparator outputs can be programmed to trigger a timer match signal or can be used to emulate 555 timer behavior.&lt;br /&gt;
* Power&lt;br /&gt;
** Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Deep-sleep mode via start logic using 12 port pins.&lt;br /&gt;
** Processor wake-up from Deep-power down and Deep-sleep modes via the RTC.&lt;br /&gt;
** Brownout detect with three separate thresholds each for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
** Integrated PMU (Power Management Unit).&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* 3.3 V power supply.&lt;br /&gt;
* Available as 64-pin and 48-pin LQFP package.&lt;br /&gt;
&lt;br /&gt;
== LPC13xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC13xx ===&lt;br /&gt;
[[Bild:LPC13xx_Selection_Guide_Sep2011.png|thumb|left|600px|Selection Guide zur LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1313 mit 32k-Flash mit 72MHz im LQFP 48 Gehäuse. Der LPC1313 ist bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; erhältlich für 3,57 € (Juli 2016), oder elpro.org für 2,29 €.  Entwicklungskit INKLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1343-LPCXpresso-Board Watterott]&#039;&#039;&#039; für 23,80 € (Juli 2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC13xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC13xx Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1313 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 72 MHz.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 32 kB on-chip flash programming memory.&lt;br /&gt;
* 8 kB SRAM.&lt;br /&gt;
* In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* UART with fractional baud rate generation, modem, internal FIFO, and RS-485/EIA-485 support.&lt;br /&gt;
* SSP controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
* Additional SSP controller on LPC1313FBD48/01.&lt;br /&gt;
* I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode.&lt;br /&gt;
* Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors.&lt;br /&gt;
* Four general purpose counter/timers with a total of four capture inputs and 13 match outputs.&lt;br /&gt;
* Programmable Watchdog Timer (WDT) &lt;br /&gt;
* System tick timer.&lt;br /&gt;
* Serial Wire Debug and Serial Wire Trace port.&lt;br /&gt;
* High-current output driver (20 mA) on one pin.&lt;br /&gt;
* High-current sink drivers (20 mA) on two I2C-bus pins in Fast-mode Plus.&lt;br /&gt;
* Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
* Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
* Single power supply (2.0 V to 3.6 V).&lt;br /&gt;
* 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
* Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, or the watchdog clock.&lt;br /&gt;
* Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 40 of the functional pins.&lt;br /&gt;
* Brownout detect with four separate thresholds for interrupt and one thresholds for forced reset.&lt;br /&gt;
* Power-On Reset (POR).&lt;br /&gt;
* Integrated oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 12 MHz internal RC oscillator trimmed to 1 % accuracy over the entire temperature and voltage range that can optionally be used as a system clock.&lt;br /&gt;
* Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz. System PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
* Code Read Protection (CRP) with different security levels.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Available as 48-pin LQFP package and 33-pin HVQFN package.&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1347 ===&lt;br /&gt;
* 64 kB Flash&lt;br /&gt;
* 12 kB SRAM&lt;br /&gt;
* 4 kB EEPROM&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* USB Code in ROM&lt;br /&gt;
* USB Bootloader in ROM, programming via copy to mass storage device&lt;br /&gt;
&lt;br /&gt;
== LPC17xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC17xx ===&lt;br /&gt;
[[Bild:LPC17xx_Selection_Guide_Sep2011.png|thumb|left|680px|Selection Guide zur LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1754 mit 128K Flash im LQFP80, der bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; für 7€74 (Juli/2011) erhältlich ist,[den LPC1751 (32k/8k) schon für 5€95] und bei Digikey für 6€35, den LPC1764FBD100 bei &#039;&#039;&#039;[http://www.tme.eu/de TME]&#039;&#039;&#039;    für 7€ Entwicklungskit INCLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1769-LPCXpresso Watterott]&#039;&#039;&#039; für 23€80 (Juli/2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC17xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC177x_178x Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1754 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 100 MHz &lt;br /&gt;
* A Memory Protection Unit (MPU) supporting eight regions is included.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 128 kB on-chip flash program memory with In-System Programming (ISP) and In-Application Programming (IAP) capabilities. &lt;br /&gt;
* 32 kB of SRAM on the CPU with local code/data bus for high-performance CPU access.&lt;br /&gt;
* Eight channel General Purpose DMA controller &lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
* USB 2.0 full-speed controller that can be configured for either device, Host, or OTG operation with an on-chip PHY for device and Host functions &lt;br /&gt;
* Four UARTs with fractional baud rate generation, internal FIFO, IrDA, and DMA, Einer mit Modem I/Os und RS485 Support&lt;br /&gt;
* 1 CAN controller.&lt;br /&gt;
* 2 SSP controllers &lt;br /&gt;
* 1 SPI controller &lt;br /&gt;
* 2 I2C-bus interfaces with data rates of 1Mbit/s,&lt;br /&gt;
* I2S (Inter-IC Sound) &lt;br /&gt;
* 52  General Purpose I/O (GPIO) pins Any pin of ports 0 and 2 can be used to generate an interrupt.&lt;br /&gt;
* 8x 12-bit Analog-to-Digital Converter (ADC) conversion rates up to 200 kHz&lt;br /&gt;
* 1x 10-bit Digital-to-Analog Converter (DAC) &lt;br /&gt;
* Four general purpose timers/counters, with a total of eight capture inputs and ten compare outputs. &lt;br /&gt;
* One motor control PWM with support for three-phase motor control.&lt;br /&gt;
* Quadrature encoder interface that can monitor one external quadrature encoder.&lt;br /&gt;
* One standard PWM/timer block with external count input.&lt;br /&gt;
* Real-Time Clock (RTC) with a separate power domain including 20 bytes of battery-powered backup registers,  An RTC interrupt can wake up the CPU from any reduced power mode.&lt;br /&gt;
* Watchdog Timer (WDT). &lt;br /&gt;
* Cortex-M3 system tick timer&lt;br /&gt;
* Repetitive interrupt timer &lt;br /&gt;
* Standard JTAG test/debug interface as well as Serial Wire Debug and Serial Wire Trace Port options.&lt;br /&gt;
* Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
* Single 3.3 V power supply (2.4 V to 3.6 V). &lt;br /&gt;
* Four external interrupt inputs configurable as edge/level sensitive. All pins on PORT0 and PORT2 can be used as edge sensitive interrupt sources.&lt;br /&gt;
* Non-maskable Interrupt (NMI) input.&lt;br /&gt;
* Wakeup Interrupt Controller (WIC) &lt;br /&gt;
* Each peripheral has its own clock divider for further power savings.&lt;br /&gt;
* Brownout detect with separate threshold for interrupt and forced reset.&lt;br /&gt;
* On-chip Power-On Reset (POR).&lt;br /&gt;
* On-chip crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 4 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
* An on-chip PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the main oscillator, the internal RC oscillator, or the RTC oscillator.&lt;br /&gt;
* Available as 80-pin LQFP (12 x 12 x 1.4 mm) packages.&lt;br /&gt;
&lt;br /&gt;
== LPC18xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC18xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC18xx Familie ===&lt;br /&gt;
[[Bild:block.diagram_NXP18xx Sep2011.gif|thumb|left|680px|Blockdiagramm der LPC18xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC18xx ===&lt;br /&gt;
DRAFT!&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M3 processor, running at frequencies of up to 180 MHz.&lt;br /&gt;
** ARM Cortex-M3 built-in Memory Protection Unit (MPU) supporting eight regions.&lt;br /&gt;
** ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Non-maskable Interrupt (NMI) input.&lt;br /&gt;
** JTAG and Serial Wire Debug, serial trace, eight breakpoints, and four watch points.&lt;br /&gt;
** ETM and ETB support.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* On-chip memory (flashless parts LPC1850/30/20/10)&lt;br /&gt;
** Up to 200 kB SRAM total for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 64 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* On-chip memory (parts with on-chip flash)&lt;br /&gt;
** Up to 1 MB total dual bank flash memory with flash accelerator.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Up to 136 kB SRAM for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 32 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1 % accuracy.&lt;br /&gt;
** Ultra-low power RTC crystal oscillator.&lt;br /&gt;
** Three PLLs allow CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. The second PLL is dedicated to the High-speed USB, the third PLL can be used as audio PLL.&lt;br /&gt;
** Clock output.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** Quad SPI Flash Interface (SPIFI) with four lanes and data rates of up to 40 MB per second total.&lt;br /&gt;
** 10/100T Ethernet MAC with RMII and MII interfaces and DMA support for high throughput at low CPU load. Support for IEEE 1588 time stamping/advanced time stamping (IEEE 1588-2008 v2).&lt;br /&gt;
** One High-speed USB 2.0 Host/Device/OTG interface with DMA support and on-chip PHY.&lt;br /&gt;
** One High-speed USB 2.0 Host/Device interface with DMA support, on-chip full-speed PHY and ULPI interface to external high-speed PHY.&lt;br /&gt;
** USB interface electrical test software included in ROM USB stack.&lt;br /&gt;
** Four 550 UARTs with DMA support: one UART with full modem interface; one UART with IrDA interface; three USARTs support synchronous mode and a smart card interface conforming to ISO7816 specification.&lt;br /&gt;
** Two C_CAN 2.0B controllers with one channel each.&lt;br /&gt;
** Two SSP controllers with FIFO and multi-protocol support. Both SSPs with DMA support.&lt;br /&gt;
** One Fast-mode Plus I2C-bus interface with monitor mode and with open-drain I/O pins conforming to the full I2C-bus specification. Supports data rates of up to 1 Mbit/s.&lt;br /&gt;
** One standard I2C-bus interface with monitor mode and standard I/O pins.&lt;br /&gt;
** Two I2S interfaces with DMA support, each with one input and one output.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** External Memory Controller (EMC) supporting external SRAM, ROM, NOR flash, and SDRAM devices.&lt;br /&gt;
** LCD controller with DMA support and a programmable display resolution of up to 1024H x 768V. Supports monochrome and color STN panels and TFT color panels; supports 1/2/4/8 bpp CLUT and 16/24-bit direct pixel mapping.&lt;br /&gt;
** SD/MMC card interface.&lt;br /&gt;
** Eight-channel General-Purpose DMA (GPDMA) controller can access all memories on the AHB and all DMA-capable AHB slaves.&lt;br /&gt;
** Up to 80 General-Purpose Input/Output (GPIO) pins with configurable pull-up/pull-down resistors and open-drain modes. &lt;br /&gt;
** GPIO registers are located on the AHB for fast access. GPIO ports have DMA support.&lt;br /&gt;
** State Configurable Timer (SCT) subsystem on AHB.&lt;br /&gt;
** Four general-purpose timer/counters with capture and match capabilities.&lt;br /&gt;
** One motor control PWM for three-phase motor control.&lt;br /&gt;
** One Quadrature Encoder Interface (QEI).&lt;br /&gt;
** Repetitive Interrupt timer (RI timer).&lt;br /&gt;
** Windowed watchdog timer.&lt;br /&gt;
** Ultra-low power Real-Time Clock (RTC) on separate power domain with 256 bytes of battery powered backup registers.&lt;br /&gt;
** Alarm timer; can be battery powered.&lt;br /&gt;
* Digital peripherals available on flash-based parts LPC18xx only:&lt;br /&gt;
** &amp;lt;tbd&amp;gt;&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** One 10-bit DAC with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
** Two 10-bit ADCs with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
* Security:&lt;br /&gt;
** Hardware-based AES security engine programmable through an on-chip API.&lt;br /&gt;
** Two 128-bit secure OTP memories for AES key storage and customer use.&lt;br /&gt;
** Unique ID for each device.&lt;br /&gt;
* Power: &lt;br /&gt;
** Single 3.3 V (2.2 V to 3.6 V) power supply with on-chip internal voltage regulator for the core supply and the RTC power domain.&lt;br /&gt;
** RTC power domain can be powered separately by a 3 V battery supply.&lt;br /&gt;
** Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Sleep mode via wake-up interrupts from various eripherals. &lt;br /&gt;
** Wake-up from Deep-sleep, Power-down, and Deep power-down modes via external interrupts and interrupts generated by battery powered blocks in the RTC power domain.&lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
* Available as 100-pin, 144-pin, and 208-pin LQFP packages and as 100-pin, 180-pin, and 256-pin LBGA packages.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
=== LPCWare (kostenlos) ===&lt;br /&gt;
[[Bild:lpcxpresso-debug_Code-red_3Sep2011.gif|thumb|right|680px|Ansicht der Entwicklungsumgebung, ©code-red-tech.com]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Entwicklungs Tool ====&lt;br /&gt;
(Beschreibung aus der Web-Site:)&lt;br /&gt;
LPCXpresso&#039;s IDE (Ursprünglich von &amp;quot;Code RED&amp;quot; entwickelt, die Firma wurde 2013 von LPC gekauft) ist eine hoch integrierte Entwicklungsumgebung für LPC-Controller, und beinhaltet alle zur Entwicklung erforderlichen Tools um hoch qualitative Software in einer angemessenen Zeit zu schreiben. LPCXpresso basiert auf ein vereinfachtes Eclipse mit vielen LPC-specifischen Erweiterungen.&lt;br /&gt;
Des Weiteren ist eine aktuelle Version der Industrie-Standard GNU Tool-Chain mit einer propritären und optimierten C-Lib mit dabei. Die LPCXpresso IDE stellt ein voll optimiertes Executable zur Verfügung. Die einzige Beschränkung der kostenlosen Version ist eine Limitierung auf 256kB Code nach erfolgter Registrierung.&lt;br /&gt;
Das LPCXpresso Target Board ist eine Gemeinschaftsentwicklung von Embedded Artists, Code Red und NXP.&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
Die LPCXpresso IDE stellt eine C-Umgebung mit Syntax-Colouring, Source-Formatierung, Funktions-Folding, sowie mit Online- und Offline Hilfe und umfangreichen Projekt-Management Funktionen zur Verfügung.  &lt;br /&gt;
Dies beinhaltet:&lt;br /&gt;
* Wizards um Projekte für alle unterstützten Controller zu erstellen &lt;br /&gt;
* Automatische Linker Script Generierung inklusive Memory-Map Unterstützung &lt;br /&gt;
* Programmierung des Controllers&lt;br /&gt;
* On-Line Debugging&lt;br /&gt;
* Datenblatt-Zugriff über eingebauten Browser&lt;br /&gt;
* Support für die NXP LPC Microcontroller Familien, von Cortex-M0, Cortex-M3 bis Cortex-M4 und ARM7 bis ARM9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Peripherie und Register Views im Debugger ====&lt;br /&gt;
Der Peripherie-Viewer im integrierten Debugger zeigt alle Register und Bit-Felder in einer einfachen Baumstruktur.&lt;br /&gt;
Ein Prozessor-Register Viewer erlaubt den Zugriff auf alle Prozessor-Register und stellt eine &amp;quot;Smart-Formatting&amp;quot;  Funktion zur Verfügung um komplexe Register wie Flags oder Status Register übersichtlich darstellen zu können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Unterstützte Familien ====&lt;br /&gt;
Cortex-M0, Cortex-M3, Cortex-M4, Einzelne Controller aus der LPC2000 family, ARM966, ARM926-EJ, ARM926-EJ + VFP&lt;br /&gt;
&lt;br /&gt;
==== Sehr preiswerter USB_JTAG_SWD Debugger ====&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039; und diese &#039;&#039;&#039;[http://www.mikrocontroller.net/wikisoftware/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso Beschreibung]&#039;&#039;&#039;&lt;br /&gt;
Der neue Programmer/Debugger ist hier für ca 18€ +P&amp;amp;P erhältlich &#039;&#039;&#039;[http://www.watterott.com/de/LPC-Link-2 Programmer]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Standard Library ====&lt;br /&gt;
Im Download der &amp;quot;Code Red&amp;quot; Entwicklungsumgebung ist eine relativ umfangreiche Firmwarebibliothek vorhanden.&lt;br /&gt;
&lt;br /&gt;
==== Installationsanleitung zur IDE ====&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Codebase für LPC11xx und LPC13xx ====&lt;br /&gt;
Für die Cortex-M0 und -M3 Familien existieren verschiedene Basispakete die als Startausstattung sehr gut geeignet sind. Auf microbuilder.eu findet man eine sehr interessante Version inklusive Dokumentation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Codebase_f%C3%BCr_LPC1xxx HIER]&#039;&#039;&#039; findet man alle Links zur original Codebase mit allen Dateien (Stand Januar 2012) aber auch eine deutsche Übersetzung zu den Files.&lt;br /&gt;
&lt;br /&gt;
=== CooCox ===&lt;br /&gt;
&lt;br /&gt;
Auf der &#039;&#039;&#039;[http://www.coocox.org/Index.html Homepage]&#039;&#039;&#039; von CooCox - einem chinesischen Open-Source Projekt, auf der eine IDE für Atmel, Energy Micro, Holtek, Nuvoton, ST, TI und NXP verfügbar ist  - findet man die auf Eclipse basierende &amp;quot;CooCox CoIDE&amp;quot;, die sich aus dem &amp;quot;CoBuilder&amp;quot; und dem &amp;quot;CoDebugger&amp;quot; zusammensetzt.&lt;br /&gt;
Des Weiteren bietet man dort ein Echtzeit-Multitasking Betriebssystem, sowie SW-Versionen von zwei unterschiedliche Debugging-Adapter und ein Stand-alone Flash-Tool zum freien Download an.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Controller können damit programmiert und debugged werden:&lt;br /&gt;
    LPC1111x101    LPC1111x201   LPC1112x101   LPC1112x201&lt;br /&gt;
    LPC1113x201    LPC1113x301   LPC1114x201   LPC1114x301&lt;br /&gt;
    LPC11C14x301   LPC11C12x301&lt;br /&gt;
    LPC1224x101    LPC1224x121   LPC1225x301   LPC1225x321   LPC1226x301  LPC1227x301&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    LPC1311   LPC1313   LPC1342   LPC1343&lt;br /&gt;
    LPC1751   LPC1752   LPC1754   LPC1756   LPC1758   LPC1759&lt;br /&gt;
    LPC1763   LPC1764   LPC1765   LPC1766   LPC1767   LPC1768   LPC1769&lt;br /&gt;
&lt;br /&gt;
=== EmBlocks ===&lt;br /&gt;
&#039;&#039;&#039;[http://www.emblocks.org/web/ Emblocks]&#039;&#039;&#039; ist eine kostenlose Entwicklungsumgebung. Sie unterstützt neben NXP uC weitere ARM uC (STM32, EFM32) sowie PIC, AVR und MSP430. Die IDE hat einen eingebauten GDB Debugger welcher System view (Peripherie Register anzeigen) beim Debuggen unterstützt. Ausserdem gibt es einen Project Wizzard für NXP uC &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Unterstützt wird der JLINK mit folgenden NXP uC:&lt;br /&gt;
LPC11Axx, LPC11Exx, LPC11Uxx, LPC11xxLV, LPC12xx, LPC13Uxx, LPC13xx, LPC17xx, LPC18xx, LPC18xx, LPC177x_8x, LPC407x_8x&lt;br /&gt;
&lt;br /&gt;
=== Codebase ===&lt;br /&gt;
Des Weiteren existiert eine umfangreiche Sammlung von &#039;&#039;&#039;[http://www.coocox.org/NXP-Series.php Code-Beispielen]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Keil ===&lt;br /&gt;
[https://www.keil.com/demo/eval/arm.htm KEIL MDK-ARM] (Windows, Free Version auf 32KB begrenzt, mit vielen Beispielen zu div. Evaluation Boards) &lt;br /&gt;
*[http://www.keil.com/arm/chips.asp unterstützte Mikrocontroller]&lt;br /&gt;
=== WinARM ===&lt;br /&gt;
[http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/#winarm WinARM] (wird derzeit nicht gepflegt)&lt;br /&gt;
&lt;br /&gt;
=== GNUARM ===&lt;br /&gt;
[http://gnuarm.com/ GNUARM] (Linux, Windows, wird derzeit nicht gepflegt), &lt;br /&gt;
&lt;br /&gt;
=== Yagarto ===&lt;br /&gt;
[http://www.yagarto.de/ Yagarto] (Windows, mit Eclipse-Integration) &lt;br /&gt;
&lt;br /&gt;
=== CodeSourcery ===&lt;br /&gt;
[http://www.codesourcery.com/gnu_toolchains/arm CodeSourcery CodeBench Lite]&lt;br /&gt;
&lt;br /&gt;
== CMSIS  -  Standard für alle Plattformen ==&lt;br /&gt;
Der Cortex Microcontroller Software Interface Standard (CMSIS) stellt einen &amp;quot;abstraction layer&amp;quot; für alle Cortex-Mx Controller zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
CMSIS stellt einen Schnittstellenstandard von ARM dar, der von vielen Tool-Herstellern unterstützt wird und ist (laut verschiedener Berichte)  kompatibel mit den verschiedensten Compilern (incl GCC). Dies wird erreicht durch einheitliche Definitionen für Adressen und Namen die den Zugriff auf die Register des Cores und der Peripherie ermöglichen.&lt;br /&gt;
Auch Standard-Funktionen für den Start und die Interrupts stehen zur Verfügung.&lt;br /&gt;
Natürlich kann auch weiterhin direkt auf die HW zugegriffen werden, es geht nur um eine Vereinheitlichung von identischen Funktionen. &lt;br /&gt;
Da die Peripherie-Teile zumindest innerhalb eines Halbleiterherstellers für die Cortex-Mx Controller sehr ähnlich oder sogar weitgehend identisch sind kann deutlich mehr SW für verschiedene Derivate innerhalb dieser Prozessorfamilien wiederverwendet werden.  (siehe Google: &amp;quot;CMSIS_Doulos_Tutorial.pdf&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Ein weiterer, interessanter Punkt ist die CMSIS-DSP Lib mit ihren Vektorfunktionen, Matrix-Berechnung sowie komplexen Algorithmen für Filter, &lt;br /&gt;
Regler und Fourietransformation sowie weiterer DSP Algorithmen (insgesamt 61).&lt;br /&gt;
&lt;br /&gt;
Leider hat diese Kompatibilität auch ihre Grenzen, denn Sonderfunktionen bzw. Spezialitäten in der &amp;quot;gleichen&amp;quot; Peripherie zwischen unterschiedlichen Halbleiterherstellern werden nicht abgedeckt. &lt;br /&gt;
Wäre auch zu schön, wenn die Prozesorhersteller dem Entwickler dadurch einen fliegenden HW-Wechsel bzw. eine einfache Vergleichbarkeit ermöglichen würden ;-)&lt;br /&gt;
&lt;br /&gt;
Eine komplette CMSIS-Lib (V2.0) &amp;quot;Cortex Microcontroller Software Interface Standard&amp;quot; ist für das &amp;quot;Code Red&amp;quot; Paket verfügbar, inklusive einer &amp;quot;DSP-Library&amp;quot; &lt;br /&gt;
http://support.code-red-tech.com/CodeRedWiki/NewInVersion4&lt;br /&gt;
bzw. für GNU / Keil / IAR unter&lt;br /&gt;
http://ics.nxp.com/support/documents/microcontrollers/?search=CMSIS&amp;amp;type=software&amp;amp;Search.x=8&amp;amp;Search.y=12&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* Wiki&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx_Entwicklungskit_LPCXpresso]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Codebase_f%C3%BCr_LPC1xxx]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx für Umsteiger]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Projekte&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/264089 FreeRTOS auf LPC1768]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/321481 Multithreading auf LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/319537 Python Script zum Flashen des LPC8xx]&lt;br /&gt;
&lt;br /&gt;
* Suche im Forum&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC8* LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC12* LPC12xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC13* LPC13xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC17* LPC17xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC18* LPC18xx]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
(Die Preiswertesten sind &#039;&#039;&#039;fett&#039;&#039;&#039; dargestellt)&lt;br /&gt;
* &#039;&#039;&#039;[http://darisusgmbh.de/shop/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 Darisus]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[http://www.elpro.org/shop/shop.php elpro]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.hbe-shop.de HBE] &lt;br /&gt;
* [http://www.tme.eu/de/katalog#cleanParameters%3D1%26searchClick%3D1%26search%3DLPC1%26bf_szukaj%3D+ TME]&lt;br /&gt;
* [http://www.tn-electronics.de/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 TN]&lt;br /&gt;
* [http://de.mouser.com/_/?Keyword=LPC1&amp;amp;Ns=Pricing|0&amp;amp;FS=True Mouser]&lt;br /&gt;
* [http://www.soselectronic.eu/?searchstring=LPC1&amp;amp;str=378 SOS]&lt;br /&gt;
* [http://de.farnell.com Farnell/Element14]&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
* [http://www.watterott.com/index.php?page=search&amp;amp;page_action=query&amp;amp;desc=off&amp;amp;sdesc=on&amp;amp;keywords=LPCXpresso Watterott (24€ inclusive JTAG-Programmiergerät UND JTAG Debugger für kostenlose &amp;quot;Code-Red&amp;quot; Entwicklungsplattform)], dazu hier die [[LPC1xxx_Entwicklungskit_LPCXpresso|Beschreibung]]&lt;br /&gt;
* [http://www.lpctools.com/evaluationboardskitsforlpc17xx.aspx LPC-Tools]&lt;br /&gt;
* [http://thinkembedded.ch/NXP:::25.html thinkembedded.ch] div. Olimex Boards&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* http://www.nxp.com/#/page/content=[f=/dynamic/applicationnotes/tid-50809_sid-56890/data.xml] Appnotes&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html Projects]&lt;br /&gt;
* [http://mbed.org/handbook/Homepage MBED]&lt;br /&gt;
* [http://forums.nxp.com/forums/viewforum.php?f=1 NXP-WIKI]&lt;br /&gt;
* [http://knowledgebase.nxp.com/forumdisplay.php?s=389a3610c741bca7b18221d32b9c0ce0&amp;amp;f=4 NXP-Forum]&lt;br /&gt;
* [http://ics.nxp.com/lpcxpresso/ LPCXpresso]&lt;br /&gt;
* [http://code.google.com/p/32bitmicro/ 32BitMicro]&lt;br /&gt;
* [http://www.brc-electronics.nl SimpleCortex]&lt;br /&gt;
* [http://www.lpcware.com/ LPCWare NXP MCU community]&lt;br /&gt;
* [http://nanohome.be/nxp/index.html LPC175/6x und LPC23xx pin Configurator]&lt;br /&gt;
* [https://code.google.com/p/lpc-1768-arm-synthesizer/  MIDI controlled monophonic synthesizer based on the LPCXpresso 1768.]&lt;br /&gt;
* [https://code.google.com/p/lpc1343codebase/  An open source software library for NXP&#039;s Cortex-M3 based LPC1300 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc1114codebase/   An open source software library for NXP&#039;s Cortex-M0 based LPC1100 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc-12xx-bootloader/  A flexible bootloader for use with LPC12xx Microcontrollers from NXP, Firmware code is AES128 encrypted to secure your project / source code when giving out public firmware updates. ]&lt;br /&gt;
* [https://code.google.com/p/lpcxpresso-rc/   Read receiver and sensor signals for radio controlled model aircrafts configured for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/olpcx/   Open toolset for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/32bitmicro/   Collection of code and tools for 32 bit microcontrollers]&lt;br /&gt;
* [https://code.google.com/p/my-nxp-lpc1114/   my-nxp-lpc1114 study course]&lt;br /&gt;
* [https://code.google.com/p/nxp-lpc/   nxp-lpc]&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsplattformen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.lpcware.com/lpcxpresso/home LPDXpresso Download (Kostenlos mit Debugger)]&lt;br /&gt;
* [http://www.lpcware.com LPCXpresso Homepage]&lt;br /&gt;
* [http://support.code-red-tech.com/CodeRedWiki/WikiHome CR-WIKI]&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp ARM/Keil MDK-ARM]&lt;br /&gt;
* IAR EWARM&lt;br /&gt;
* Rowley Crossworks&lt;br /&gt;
* Green Hills Software &lt;br /&gt;
* [http://www.coocox.org/CooCox_CoIDE.htm CooCox] (Kostenlos)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:LPC1x]]&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=95432</id>
		<title>LPC-Mikrocontroller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=95432"/>
		<updated>2017-03-06T11:21:58Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* Familienübersicht LPC8xx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:overview_Sep2011.png|thumb|right|850px|Überblick über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
[[Bild:positioning_NXPSep2011.gif|thumb|right|850px|Vergleich über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
Die LPC-Familie von NXP basiert auf 32-Bit Cortex-Kernen von ARM und arbeitet mit bis zu 204MHz. Die verschiedenen Serien basieren auf den Cortex-M0/M0+/M3/M4-Kernen und sind inzwischen auch für Privatnutzer zu Preisen erhältlich, die mit denen von 8-Bit-Mikrocontrollern vergleichbar sind. Eine Auflistung der verschiedenen Typen findet sich in der Tabelle unten.&lt;br /&gt;
&lt;br /&gt;
Von NXP sind preiswerte Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger oder den neuen LPC-Link2, ein reiner Programmer + Debugger) erhältlich z.B. bei [http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]. Siehe dazu auch die Dokumentation von NXP zu den [http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)] und diese [[LPC1xxx Entwicklungskit LPCXpresso]].&lt;br /&gt;
&lt;br /&gt;
== Vergleich aller Typen ==&lt;br /&gt;
&#039;&#039;Stand Feb. 2017&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; class=&amp;quot;unsortable&amp;quot;                               | &lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | CPU&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Max. Frequency&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Flash&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | SRAM&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Voltage&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; class=&amp;quot;unsortable&amp;quot;   | Features&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2&amp;quot;              | Cortex-M0+&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;30&amp;quot;             | 30MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-32kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
SCTimer/PWM,&lt;br /&gt;
Switch Matrix,&lt;br /&gt;
Pattern Match Engine&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC54000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;128&amp;quot;            | 128-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;96&amp;quot;             | 96-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.62&amp;quot;           | 1.62-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
LCD,&lt;br /&gt;
Ethernet,&lt;br /&gt;
FlexComm,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1100&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | Cortex-M0/M0+&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;50&amp;quot; | 50MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-36kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.71&amp;quot;           | 1.71-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
EEPROM&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1200&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;0&amp;quot;              | Cortex-M0&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;32&amp;quot;             | 32-128kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
8 kV protection,&lt;br /&gt;
IEC 60730 Class B certified&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1300&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;3&amp;quot;  | Cortex-M3&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;72&amp;quot; | 72MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-64kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-12kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.0&amp;quot;            | 2.0-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1500&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;12&amp;quot;             | 12-36kB&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.4&amp;quot;| 2.4-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1700&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;                | 32-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;24&amp;quot;             | 24-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4300&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;240&amp;quot;            | 204MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-282kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
SGPIO,&lt;br /&gt;
Security&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;: gibt es auch als Mehrkern-Prozessoren (mit 0/1/2 Cortex-M0(+)-Cores)&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Informationen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Infos + User-Manuals==&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC8xx (Cortex-M0+) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://www.nxp.com/products/microcontrollers/cortex_m0_m0/series/LPC800.html#quickreference LPC8xx]&#039;&#039;&#039; ist nur in Packages mit einer relativ niedrigen Pinanzahl (DIP8, SO20, TSSOP16, TSSOP20) verfügbar, hat zwischen 4-16kB Flash, und 1-4kB RAM. Die zulässige Betriebsspannung liegt zwischen 1,8V und 3,6V.&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features der LPC800-Serie: &lt;br /&gt;
* 1-4 I2C&lt;br /&gt;
* 1-2 SSP&lt;br /&gt;
* 2-3 UART&lt;br /&gt;
* 4 Timer,  1 OS-Timer&lt;br /&gt;
* 1 watch dog&lt;br /&gt;
* 4 PWM-Einheiten&lt;br /&gt;
* 12-bit ADC&lt;br /&gt;
* CRC engine&lt;br /&gt;
* DMA with 18 channels and 9 trigger inputs&lt;br /&gt;
* 1 SCT (state configurable timer)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/download/grouping/11045/user_manual User Manual der LPC8-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC11xx (Cortex-M0) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc11xx/ LPC11xx-Serie]&#039;&#039;&#039; (3,3V) bietet viele Möglichkeiten&lt;br /&gt;
* Der LPC1100L ist derzeit laut NXP (Sep2011) der preisgünstigste ARM auf dem Markt. Der 32Bit ARM mit einer Performance von ca. 45DMIPS @50MHZ benötigt bei dieser Taktfrequenz nur etwa 10mA. (Details siehe NXP-Seite)&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features :&lt;br /&gt;
** LPC1100 Serie: • I2C, SSP, UART, GPIO, • Timers and watch dog timer, • 10-bit ADC, • Flash/SRAM memory, • Weitere Funktionen, siehe &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/LPC1xxx#Features_eines_LPC11xx 2.3 Features]&#039;&#039;&#039;&lt;br /&gt;
** LPC1100L Serie zusätzlich zu LPC1100: • Power Profile mit lower power consumption in Active- und Sleep-mode, • Interne pull-ups auf VDD level, • Programmierbarer pseudo open-drain mode für GPIO Pins, • WWDT mit Clock Source Lock.&lt;br /&gt;
**LPC11C00 Serie zusätzlich zu LPC1100: • CAN controller, • On-chip CAN Treiber, • On-chip CAN Transceiver (LPC11C2x), • WDT (not windowed) mit Clock Source Lock.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10398.pdf User Manual der LPC11-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Besonderes Augenmerk möchte ich auf die neue Serie  &#039;&#039;&#039;[http://www.nxp.com/ps/#/i=71498 LPC111xFD]&#039;&#039;&#039; legen, denn in jetzt gibt es den Cortex-M0 auch im DIL 28 &#039;&#039;&#039;[http://www.nxp.com/redirect/pip/LPC1114FN28.html den LPC1114FN28]&#039;&#039;&#039;&lt;br /&gt;
**Des Weiteren sind damit SO20, sowie TSSOP20 und TSSOP28 Bauformen verfügbar&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC12xx (Cortex-M0) ===&lt;br /&gt;
* Die Low Power &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc12xx/ LPC12xx-Serie]&#039;&#039;&#039; (3,3V) ist laut NXP (Sep2011) ein Cortex-M0 mit 32 bis 128kB Flash, einem 45 CoreMark™ Benchmark-Score bei 30MHz, 2 bis 8kB SRAM, und einem internen 1% genauen 12MHz Oscillator.&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features: fMAX von 30MHz, 1 10-Bit  ADC mit 8 Kanälen, 2 Comparatoren, 2 UARTs, 1 SSP/SPI, 1 I2C, DMA Controller, CRC Engine, 1 32-Bit, 5 Timer (16- und 32-Bit, + RTC), 13 PWM Kanäle, bis zu 55 GPIOs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10441.pdf User Manual der LPC12xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC13xx (Cortex-M3) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc13xx/ LPC13xx-Serie]&#039;&#039;&#039; (3,3V) bietet im LQFP 48 Gehäuse 8..32k Flash, 2..8k SRAM, 5 Timer (mit WD), 11 PWM, 1 UART, 1IIC, 1USB, 1..2 SPI, einen 8-Kanal/10Bit AD-Wandler und eine Taktfrequenz von max. 72MHz. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10375.pdf User Manual der LPC13xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC17xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc17xx/ LPC17xx-Serie]&#039;&#039;&#039; hingegen enthält eine weit größere Peripherie in einem LQFP80/100/144/208 Package.&lt;br /&gt;
32..512k Flash, 8..96k SRAM, 6 Timer (mit WD), 6 zusätzliche PWM-Einheiten, teilweise Ethernet und STN/TFT-LCD-Controller, meist USB (teilw. mit Host+OTG), 4 UART, 2..3IIC, 1..2 CAN, 1 SPI, 2 SSP/SPI einen 6..8-Kanal/12Bit AD-Wandler, einen 10Bit DAC, Motor-Control-Einheiten, einen Encoder-Eingang und eine Taktfrequenz von max. 100MHz(120MHz) und vieles mehr. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10360.pdf User Manual der LPC17xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC18xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc18xx/ LPC18xx-Serie]&#039;&#039;&#039; stellt DIE &amp;quot;High-Performance&amp;quot; Controller aus der Cortex-M3-Serie. Die Taktfrequenz geht bis 150MHz, die Controller enthalten große dual-Bank Flash Speicher bis zu 1MB, ein großes On-Chip SRAM mit bis zu 200KB, zusätzliche Peripherie wie z.B. SPI Flash Interface (SPIFI) und State Configurable Timer (SCT), 2x High Speed USB (1x mit On-Chip HS PHY) und eine MPU.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://ics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc18xx.pdf User Manual der LPC18xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features: &#039;&#039;&#039;[http://ics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc18xx.pdf LPC18xx Flyer von NXP]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungskits ===&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Kostenlose Entwicklungsumgebung für ALLE hier genannten Controller ===&lt;br /&gt;
Für die ganze Prozessorfamilie ist eine &amp;lt;u&amp;gt;kostenlose&amp;lt;/u&amp;gt; Entwicklungsumgebung  erhältlich. Informationen unter &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home  lpcware]&#039;&#039;&#039;: Die auf Eclipse basierende Entwicklungsumgebung ist nach der Installation bis 8k freigeschaltet und nach einer einfachen und kostenlosen Registrierung für 256kB. Die IDE ist auch für &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home Linux und Mac]&#039;&#039;&#039; verfügbar.&lt;br /&gt;
&lt;br /&gt;
Hier die &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== LPC8xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC8xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 06/2016)&lt;br /&gt;
* LPC810FN8 (DIP8): Digikey 1,09 € (bei einem Stuck).&lt;br /&gt;
* LPC812JD20 (SOIC-W 20): Digikey 1,26 € (bei einem Stuck).&lt;br /&gt;
* LPC812JDH20 (TSSOP-20): Digikey 1,44 € (bei einem Stuck).&lt;br /&gt;
* LPC824M201JDH20J (TSSOP-20): Conrad 2,99 € incl. MwSt, (2017/03) &lt;br /&gt;
* LPC812M101JD20FP (SO-20): Conrad 2,49 incl. MwSt, (2017/03) &lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC800_block_diagram_Jan2014.gif|thumb|right|850px|Blockdiagramm des Cortex-M0+, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC8xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC8xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0+ processor, running at frequencies of up to 30 MHz. &lt;br /&gt;
** single cycle multiplier&lt;br /&gt;
** single cycle I/O port&lt;br /&gt;
** ARM Cortex-M0+ built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug, Micro Trace Buffer supported.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32kB (LPC824), 16 kB (LPC812M101JD20/LPC812M101JDH20/LPC812M101JDH16), 8 kB (LPC811M001JDH16) or 4kB (LPC810M021FN8) on-chip flash programming memory. &lt;br /&gt;
**  8kB, 4kB, 2 kB, or 1 kB SRAM.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 18 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages down to 6.&lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
** &#039;&#039;&#039;Switch matrix for flexible configuration of each I/O pin function.&#039;&#039;&#039;&lt;br /&gt;
** CRC engine&lt;br /&gt;
** DMA with 18 channels and 9 sources&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** Comparator with internal and external references and 31 step voltage divider.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 9.4 kHz to 2.3 MHz.&lt;br /&gt;
** 10 kHz low-power oscillator for the WKT.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Reduced power modes: Sleep mode, Deep-sleep mode, Power-down mode, and Deep power-down mode.&lt;br /&gt;
** Wake-up from Deep-sleep and Power-down modes on activity on USART, SPI, and I2C peripherals.&lt;br /&gt;
** Brownout detect.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available as DIP8, TSSOP16, SO20, and TSSOP20 package.&lt;br /&gt;
&lt;br /&gt;
== LPC11xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC11xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 01/2014):&lt;br /&gt;
&lt;br /&gt;
elpro.org: von 1.61EUR (LPC1111FN33) bis 5.73EUR (LPC11U37) bei einen Stueck. Die Familie ist sehr gross mit sehr unterschiedlichen Ausfuehrungen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC11xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC11xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 50 MHz. &lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32 kB (LPC1114/LPC11C14), 24 kB (LPC1113), 16 kB (LPC1112/LPC11C12), or 8 kB (LPC1111) on-chip flash programming memory.  &lt;br /&gt;
** 8 kB, 4 kB, or 2 kB SRAM. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages and LPC11C22/C24. &lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 13 of the functional pins.&lt;br /&gt;
** Power-On Reset (POR). &lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset. &lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available in the following packages: 16WLCSP, 25WLCSP 20-SOIC, 20-TSSOP, 28-DIP, 28-TSSOP, 48-LQFP, 64-LQFP, 100-LQFP, and others.&lt;br /&gt;
&lt;br /&gt;
== LPC12xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC12xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
[[Bild:block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC12xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC12xx ===&lt;br /&gt;
&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 45 MHz (one wait state from flash) or 30 MHz (zero wait states from flash). The LPC122x have a high score of over 45 in CoreMark CPU performance benchmark testing, equivalent to 1.51/MHz.&lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug (SWD).&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory&lt;br /&gt;
** Up to 8 kB SRAM.&lt;br /&gt;
** Up to 128 kB on-chip flash programming memory. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Includes ROM-based 32-bit integer division routines.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz Internal RC (IRC) oscillator trimmed to 1 % accuracy that can optionally be used as a system clock.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, main clock, and Watchdog clock.&lt;br /&gt;
** Real-Time Clock (RTC).&lt;br /&gt;
* Digital peripherals&lt;br /&gt;
** Micro DMA controller with 21 channels.&lt;br /&gt;
** CRC engine.&lt;br /&gt;
** Two UARTs with fractional baud rate generation and internal FIFO. One UART with RS-485 and modem support and one standard UART with IrDA.&lt;br /&gt;
** SSP/SPI controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. I2C-bus pins have programmable glitch filter.&lt;br /&gt;
** Up to 55 General Purpose I/O (GPIO) pins with programmable pull-up resistor, open-drain mode, programmable digital input glitch filter, and programmable input inverter. &lt;br /&gt;
** Programmable output drive on all GPIO pins. Four pins support high-current output drivers.&lt;br /&gt;
** All GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** Four general purpose counter/timers with four capture inputs and four match outputs (32-bit timers) or two capture inputs and two match outputs (16-bit timers). &lt;br /&gt;
** Windowed WatchDog Timer (WWDT).&lt;br /&gt;
* Analog peripherals&lt;br /&gt;
** One 8-channel, 10-bit ADC.&lt;br /&gt;
** Two highly flexible analog comparators. Comparator outputs can be programmed to trigger a timer match signal or can be used to emulate 555 timer behavior.&lt;br /&gt;
* Power&lt;br /&gt;
** Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Deep-sleep mode via start logic using 12 port pins.&lt;br /&gt;
** Processor wake-up from Deep-power down and Deep-sleep modes via the RTC.&lt;br /&gt;
** Brownout detect with three separate thresholds each for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
** Integrated PMU (Power Management Unit).&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* 3.3 V power supply.&lt;br /&gt;
* Available as 64-pin and 48-pin LQFP package.&lt;br /&gt;
&lt;br /&gt;
== LPC13xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC13xx ===&lt;br /&gt;
[[Bild:LPC13xx_Selection_Guide_Sep2011.png|thumb|left|600px|Selection Guide zur LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1313 mit 32k-Flash mit 72MHz im LQFP 48 Gehäuse. Der LPC1313 ist bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; erhältlich für 3,57 € (Juli 2016), oder elpro.org für 2,29 €.  Entwicklungskit INKLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1343-LPCXpresso-Board Watterott]&#039;&#039;&#039; für 23,80 € (Juli 2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC13xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC13xx Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1313 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 72 MHz.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 32 kB on-chip flash programming memory.&lt;br /&gt;
* 8 kB SRAM.&lt;br /&gt;
* In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* UART with fractional baud rate generation, modem, internal FIFO, and RS-485/EIA-485 support.&lt;br /&gt;
* SSP controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
* Additional SSP controller on LPC1313FBD48/01.&lt;br /&gt;
* I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode.&lt;br /&gt;
* Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors.&lt;br /&gt;
* Four general purpose counter/timers with a total of four capture inputs and 13 match outputs.&lt;br /&gt;
* Programmable Watchdog Timer (WDT) &lt;br /&gt;
* System tick timer.&lt;br /&gt;
* Serial Wire Debug and Serial Wire Trace port.&lt;br /&gt;
* High-current output driver (20 mA) on one pin.&lt;br /&gt;
* High-current sink drivers (20 mA) on two I2C-bus pins in Fast-mode Plus.&lt;br /&gt;
* Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
* Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
* Single power supply (2.0 V to 3.6 V).&lt;br /&gt;
* 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
* Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, or the watchdog clock.&lt;br /&gt;
* Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 40 of the functional pins.&lt;br /&gt;
* Brownout detect with four separate thresholds for interrupt and one thresholds for forced reset.&lt;br /&gt;
* Power-On Reset (POR).&lt;br /&gt;
* Integrated oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 12 MHz internal RC oscillator trimmed to 1 % accuracy over the entire temperature and voltage range that can optionally be used as a system clock.&lt;br /&gt;
* Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz. System PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
* Code Read Protection (CRP) with different security levels.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Available as 48-pin LQFP package and 33-pin HVQFN package.&lt;br /&gt;
&lt;br /&gt;
== LPC17xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC17xx ===&lt;br /&gt;
[[Bild:LPC17xx_Selection_Guide_Sep2011.png|thumb|left|680px|Selection Guide zur LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1754 mit 128K Flash im LQFP80, der bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; für 7€74 (Juli/2011) erhältlich ist,[den LPC1751 (32k/8k) schon für 5€95] und bei Digikey für 6€35, den LPC1764FBD100 bei &#039;&#039;&#039;[http://www.tme.eu/de TME]&#039;&#039;&#039;    für 7€ Entwicklungskit INCLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1769-LPCXpresso Watterott]&#039;&#039;&#039; für 23€80 (Juli/2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC17xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC177x_178x Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1754 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 100 MHz &lt;br /&gt;
* A Memory Protection Unit (MPU) supporting eight regions is included.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 128 kB on-chip flash program memory with In-System Programming (ISP) and In-Application Programming (IAP) capabilities. &lt;br /&gt;
* 32 kB of SRAM on the CPU with local code/data bus for high-performance CPU access.&lt;br /&gt;
* Eight channel General Purpose DMA controller &lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
* USB 2.0 full-speed controller that can be configured for either device, Host, or OTG operation with an on-chip PHY for device and Host functions &lt;br /&gt;
* Four UARTs with fractional baud rate generation, internal FIFO, IrDA, and DMA, Einer mit Modem I/Os und RS485 Support&lt;br /&gt;
* 1 CAN controller.&lt;br /&gt;
* 2 SSP controllers &lt;br /&gt;
* 1 SPI controller &lt;br /&gt;
* 2 I2C-bus interfaces with data rates of 1Mbit/s,&lt;br /&gt;
* I2S (Inter-IC Sound) &lt;br /&gt;
* 52  General Purpose I/O (GPIO) pins Any pin of ports 0 and 2 can be used to generate an interrupt.&lt;br /&gt;
* 8x 12-bit Analog-to-Digital Converter (ADC) conversion rates up to 200 kHz&lt;br /&gt;
* 1x 10-bit Digital-to-Analog Converter (DAC) &lt;br /&gt;
* Four general purpose timers/counters, with a total of eight capture inputs and ten compare outputs. &lt;br /&gt;
* One motor control PWM with support for three-phase motor control.&lt;br /&gt;
* Quadrature encoder interface that can monitor one external quadrature encoder.&lt;br /&gt;
* One standard PWM/timer block with external count input.&lt;br /&gt;
* Real-Time Clock (RTC) with a separate power domain including 20 bytes of battery-powered backup registers,  An RTC interrupt can wake up the CPU from any reduced power mode.&lt;br /&gt;
* Watchdog Timer (WDT). &lt;br /&gt;
* Cortex-M3 system tick timer&lt;br /&gt;
* Repetitive interrupt timer &lt;br /&gt;
* Standard JTAG test/debug interface as well as Serial Wire Debug and Serial Wire Trace Port options.&lt;br /&gt;
* Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
* Single 3.3 V power supply (2.4 V to 3.6 V). &lt;br /&gt;
* Four external interrupt inputs configurable as edge/level sensitive. All pins on PORT0 and PORT2 can be used as edge sensitive interrupt sources.&lt;br /&gt;
* Non-maskable Interrupt (NMI) input.&lt;br /&gt;
* Wakeup Interrupt Controller (WIC) &lt;br /&gt;
* Each peripheral has its own clock divider for further power savings.&lt;br /&gt;
* Brownout detect with separate threshold for interrupt and forced reset.&lt;br /&gt;
* On-chip Power-On Reset (POR).&lt;br /&gt;
* On-chip crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 4 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
* An on-chip PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the main oscillator, the internal RC oscillator, or the RTC oscillator.&lt;br /&gt;
* Available as 80-pin LQFP (12 x 12 x 1.4 mm) packages.&lt;br /&gt;
&lt;br /&gt;
== LPC18xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC18xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC18xx Familie ===&lt;br /&gt;
[[Bild:block.diagram_NXP18xx Sep2011.gif|thumb|left|680px|Blockdiagramm der LPC18xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC18xx ===&lt;br /&gt;
DRAFT!&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M3 processor, running at frequencies of up to 180 MHz.&lt;br /&gt;
** ARM Cortex-M3 built-in Memory Protection Unit (MPU) supporting eight regions.&lt;br /&gt;
** ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Non-maskable Interrupt (NMI) input.&lt;br /&gt;
** JTAG and Serial Wire Debug, serial trace, eight breakpoints, and four watch points.&lt;br /&gt;
** ETM and ETB support.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* On-chip memory (flashless parts LPC1850/30/20/10)&lt;br /&gt;
** Up to 200 kB SRAM total for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 64 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* On-chip memory (parts with on-chip flash)&lt;br /&gt;
** Up to 1 MB total dual bank flash memory with flash accelerator.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Up to 136 kB SRAM for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 32 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1 % accuracy.&lt;br /&gt;
** Ultra-low power RTC crystal oscillator.&lt;br /&gt;
** Three PLLs allow CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. The second PLL is dedicated to the High-speed USB, the third PLL can be used as audio PLL.&lt;br /&gt;
** Clock output.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** Quad SPI Flash Interface (SPIFI) with four lanes and data rates of up to 40 MB per second total.&lt;br /&gt;
** 10/100T Ethernet MAC with RMII and MII interfaces and DMA support for high throughput at low CPU load. Support for IEEE 1588 time stamping/advanced time stamping (IEEE 1588-2008 v2).&lt;br /&gt;
** One High-speed USB 2.0 Host/Device/OTG interface with DMA support and on-chip PHY.&lt;br /&gt;
** One High-speed USB 2.0 Host/Device interface with DMA support, on-chip full-speed PHY and ULPI interface to external high-speed PHY.&lt;br /&gt;
** USB interface electrical test software included in ROM USB stack.&lt;br /&gt;
** Four 550 UARTs with DMA support: one UART with full modem interface; one UART with IrDA interface; three USARTs support synchronous mode and a smart card interface conforming to ISO7816 specification.&lt;br /&gt;
** Two C_CAN 2.0B controllers with one channel each.&lt;br /&gt;
** Two SSP controllers with FIFO and multi-protocol support. Both SSPs with DMA support.&lt;br /&gt;
** One Fast-mode Plus I2C-bus interface with monitor mode and with open-drain I/O pins conforming to the full I2C-bus specification. Supports data rates of up to 1 Mbit/s.&lt;br /&gt;
** One standard I2C-bus interface with monitor mode and standard I/O pins.&lt;br /&gt;
** Two I2S interfaces with DMA support, each with one input and one output.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** External Memory Controller (EMC) supporting external SRAM, ROM, NOR flash, and SDRAM devices.&lt;br /&gt;
** LCD controller with DMA support and a programmable display resolution of up to 1024H x 768V. Supports monochrome and color STN panels and TFT color panels; supports 1/2/4/8 bpp CLUT and 16/24-bit direct pixel mapping.&lt;br /&gt;
** SD/MMC card interface.&lt;br /&gt;
** Eight-channel General-Purpose DMA (GPDMA) controller can access all memories on the AHB and all DMA-capable AHB slaves.&lt;br /&gt;
** Up to 80 General-Purpose Input/Output (GPIO) pins with configurable pull-up/pull-down resistors and open-drain modes. &lt;br /&gt;
** GPIO registers are located on the AHB for fast access. GPIO ports have DMA support.&lt;br /&gt;
** State Configurable Timer (SCT) subsystem on AHB.&lt;br /&gt;
** Four general-purpose timer/counters with capture and match capabilities.&lt;br /&gt;
** One motor control PWM for three-phase motor control.&lt;br /&gt;
** One Quadrature Encoder Interface (QEI).&lt;br /&gt;
** Repetitive Interrupt timer (RI timer).&lt;br /&gt;
** Windowed watchdog timer.&lt;br /&gt;
** Ultra-low power Real-Time Clock (RTC) on separate power domain with 256 bytes of battery powered backup registers.&lt;br /&gt;
** Alarm timer; can be battery powered.&lt;br /&gt;
* Digital peripherals available on flash-based parts LPC18xx only:&lt;br /&gt;
** &amp;lt;tbd&amp;gt;&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** One 10-bit DAC with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
** Two 10-bit ADCs with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
* Security:&lt;br /&gt;
** Hardware-based AES security engine programmable through an on-chip API.&lt;br /&gt;
** Two 128-bit secure OTP memories for AES key storage and customer use.&lt;br /&gt;
** Unique ID for each device.&lt;br /&gt;
* Power: &lt;br /&gt;
** Single 3.3 V (2.2 V to 3.6 V) power supply with on-chip internal voltage regulator for the core supply and the RTC power domain.&lt;br /&gt;
** RTC power domain can be powered separately by a 3 V battery supply.&lt;br /&gt;
** Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Sleep mode via wake-up interrupts from various eripherals. &lt;br /&gt;
** Wake-up from Deep-sleep, Power-down, and Deep power-down modes via external interrupts and interrupts generated by battery powered blocks in the RTC power domain.&lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
* Available as 100-pin, 144-pin, and 208-pin LQFP packages and as 100-pin, 180-pin, and 256-pin LBGA packages.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
=== LPCWare (kostenlos) ===&lt;br /&gt;
[[Bild:lpcxpresso-debug_Code-red_3Sep2011.gif|thumb|right|680px|Ansicht der Entwicklungsumgebung, ©code-red-tech.com]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Entwicklungs Tool ====&lt;br /&gt;
(Beschreibung aus der Web-Site:)&lt;br /&gt;
LPCXpresso&#039;s IDE (Ursprünglich von &amp;quot;Code RED&amp;quot; entwickelt, die Firma wurde 2013 von LPC gekauft) ist eine hoch integrierte Entwicklungsumgebung für LPC-Controller, und beinhaltet alle zur Entwicklung erforderlichen Tools um hoch qualitative Software in einer angemessenen Zeit zu schreiben. LPCXpresso basiert auf ein vereinfachtes Eclipse mit vielen LPC-specifischen Erweiterungen.&lt;br /&gt;
Des Weiteren ist eine aktuelle Version der Industrie-Standard GNU Tool-Chain mit einer propritären und optimierten C-Lib mit dabei. Die LPCXpresso IDE stellt ein voll optimiertes Executable zur Verfügung. Die einzige Beschränkung der kostenlosen Version ist eine Limitierung auf 256kB Code nach erfolgter Registrierung.&lt;br /&gt;
Das LPCXpresso Target Board ist eine Gemeinschaftsentwicklung von Embedded Artists, Code Red und NXP.&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
Die LPCXpresso IDE stellt eine C-Umgebung mit Syntax-Colouring, Source-Formatierung, Funktions-Folding, sowie mit Online- und Offline Hilfe und umfangreichen Projekt-Management Funktionen zur Verfügung.  &lt;br /&gt;
Dies beinhaltet:&lt;br /&gt;
* Wizards um Projekte für alle unterstützten Controller zu erstellen &lt;br /&gt;
* Automatische Linker Script Generierung inklusive Memory-Map Unterstützung &lt;br /&gt;
* Programmierung des Controllers&lt;br /&gt;
* On-Line Debugging&lt;br /&gt;
* Datenblatt-Zugriff über eingebauten Browser&lt;br /&gt;
* Support für die NXP LPC Microcontroller Familien, von Cortex-M0, Cortex-M3 bis Cortex-M4 und ARM7 bis ARM9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Peripherie und Register Views im Debugger ====&lt;br /&gt;
Der Peripherie-Viewer im integrierten Debugger zeigt alle Register und Bit-Felder in einer einfachen Baumstruktur.&lt;br /&gt;
Ein Prozessor-Register Viewer erlaubt den Zugriff auf alle Prozessor-Register und stellt eine &amp;quot;Smart-Formatting&amp;quot;  Funktion zur Verfügung um komplexe Register wie Flags oder Status Register übersichtlich darstellen zu können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Unterstützte Familien ====&lt;br /&gt;
Cortex-M0, Cortex-M3, Cortex-M4, Einzelne Controller aus der LPC2000 family, ARM966, ARM926-EJ, ARM926-EJ + VFP&lt;br /&gt;
&lt;br /&gt;
==== Sehr preiswerter USB_JTAG_SWD Debugger ====&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039; und diese &#039;&#039;&#039;[http://www.mikrocontroller.net/wikisoftware/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso Beschreibung]&#039;&#039;&#039;&lt;br /&gt;
Der neue Programmer/Debugger ist hier für ca 18€ +P&amp;amp;P erhältlich &#039;&#039;&#039;[http://www.watterott.com/de/LPC-Link-2 Programmer]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Standard Library ====&lt;br /&gt;
Im Download der &amp;quot;Code Red&amp;quot; Entwicklungsumgebung ist eine relativ umfangreiche Firmwarebibliothek vorhanden.&lt;br /&gt;
&lt;br /&gt;
==== Installationsanleitung zur IDE ====&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Codebase für LPC11xx und LPC13xx ====&lt;br /&gt;
Für die Cortex-M0 und -M3 Familien existieren verschiedene Basispakete die als Startausstattung sehr gut geeignet sind. Auf microbuilder.eu findet man eine sehr interessante Version inklusive Dokumentation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Codebase_f%C3%BCr_LPC1xxx HIER]&#039;&#039;&#039; findet man alle Links zur original Codebase mit allen Dateien (Stand Januar 2012) aber auch eine deutsche Übersetzung zu den Files.&lt;br /&gt;
&lt;br /&gt;
=== CooCox ===&lt;br /&gt;
&lt;br /&gt;
Auf der &#039;&#039;&#039;[http://www.coocox.org/Index.html Homepage]&#039;&#039;&#039; von CooCox - einem chinesischen Open-Source Projekt, auf der eine IDE für Atmel, Energy Micro, Holtek, Nuvoton, ST, TI und NXP verfügbar ist  - findet man die auf Eclipse basierende &amp;quot;CooCox CoIDE&amp;quot;, die sich aus dem &amp;quot;CoBuilder&amp;quot; und dem &amp;quot;CoDebugger&amp;quot; zusammensetzt.&lt;br /&gt;
Des Weiteren bietet man dort ein Echtzeit-Multitasking Betriebssystem, sowie SW-Versionen von zwei unterschiedliche Debugging-Adapter und ein Stand-alone Flash-Tool zum freien Download an.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Controller können damit programmiert und debugged werden:&lt;br /&gt;
    LPC1111x101    LPC1111x201   LPC1112x101   LPC1112x201&lt;br /&gt;
    LPC1113x201    LPC1113x301   LPC1114x201   LPC1114x301&lt;br /&gt;
    LPC11C14x301   LPC11C12x301&lt;br /&gt;
    LPC1224x101    LPC1224x121   LPC1225x301   LPC1225x321   LPC1226x301  LPC1227x301&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    LPC1311   LPC1313   LPC1342   LPC1343&lt;br /&gt;
    LPC1751   LPC1752   LPC1754   LPC1756   LPC1758   LPC1759&lt;br /&gt;
    LPC1763   LPC1764   LPC1765   LPC1766   LPC1767   LPC1768   LPC1769&lt;br /&gt;
&lt;br /&gt;
=== EmBlocks ===&lt;br /&gt;
&#039;&#039;&#039;[http://www.emblocks.org/web/ Emblocks]&#039;&#039;&#039; ist eine kostenlose Entwicklungsumgebung. Sie unterstützt neben NXP uC weitere ARM uC (STM32, EFM32) sowie PIC, AVR und MSP430. Die IDE hat einen eingebauten GDB Debugger welcher System view (Peripherie Register anzeigen) beim Debuggen unterstützt. Ausserdem gibt es einen Project Wizzard für NXP uC &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Unterstützt wird der JLINK mit folgenden NXP uC:&lt;br /&gt;
LPC11Axx, LPC11Exx, LPC11Uxx, LPC11xxLV, LPC12xx, LPC13Uxx, LPC13xx, LPC17xx, LPC18xx, LPC18xx, LPC177x_8x, LPC407x_8x&lt;br /&gt;
&lt;br /&gt;
=== Codebase ===&lt;br /&gt;
Des Weiteren existiert eine umfangreiche Sammlung von &#039;&#039;&#039;[http://www.coocox.org/NXP-Series.php Code-Beispielen]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Keil ===&lt;br /&gt;
[https://www.keil.com/demo/eval/arm.htm KEIL MDK-ARM] (Windows, Free Version auf 32KB begrenzt, mit vielen Beispielen zu div. Evaluation Boards) &lt;br /&gt;
*[http://www.keil.com/arm/chips.asp unterstützte Mikrocontroller]&lt;br /&gt;
=== WinARM ===&lt;br /&gt;
[http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/#winarm WinARM] (wird derzeit nicht gepflegt)&lt;br /&gt;
&lt;br /&gt;
=== GNUARM ===&lt;br /&gt;
[http://gnuarm.com/ GNUARM] (Linux, Windows, wird derzeit nicht gepflegt), &lt;br /&gt;
&lt;br /&gt;
=== Yagarto ===&lt;br /&gt;
[http://www.yagarto.de/ Yagarto] (Windows, mit Eclipse-Integration) &lt;br /&gt;
&lt;br /&gt;
=== CodeSourcery ===&lt;br /&gt;
[http://www.codesourcery.com/gnu_toolchains/arm CodeSourcery CodeBench Lite]&lt;br /&gt;
&lt;br /&gt;
== CMSIS  -  Standard für alle Plattformen ==&lt;br /&gt;
Der Cortex Microcontroller Software Interface Standard (CMSIS) stellt einen &amp;quot;abstraction layer&amp;quot; für alle Cortex-Mx Controller zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
CMSIS stellt einen Schnittstellenstandard von ARM dar, der von vielen Tool-Herstellern unterstützt wird und ist (laut verschiedener Berichte)  kompatibel mit den verschiedensten Compilern (incl GCC). Dies wird erreicht durch einheitliche Definitionen für Adressen und Namen die den Zugriff auf die Register des Cores und der Peripherie ermöglichen.&lt;br /&gt;
Auch Standard-Funktionen für den Start und die Interrupts stehen zur Verfügung.&lt;br /&gt;
Natürlich kann auch weiterhin direkt auf die HW zugegriffen werden, es geht nur um eine Vereinheitlichung von identischen Funktionen. &lt;br /&gt;
Da die Peripherie-Teile zumindest innerhalb eines Halbleiterherstellers für die Cortex-Mx Controller sehr ähnlich oder sogar weitgehend identisch sind kann deutlich mehr SW für verschiedene Derivate innerhalb dieser Prozessorfamilien wiederverwendet werden.  (siehe Google: &amp;quot;CMSIS_Doulos_Tutorial.pdf&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Ein weiterer, interessanter Punkt ist die CMSIS-DSP Lib mit ihren Vektorfunktionen, Matrix-Berechnung sowie komplexen Algorithmen für Filter, &lt;br /&gt;
Regler und Fourietransformation sowie weiterer DSP Algorithmen (insgesamt 61).&lt;br /&gt;
&lt;br /&gt;
Leider hat diese Kompatibilität auch ihre Grenzen, denn Sonderfunktionen bzw. Spezialitäten in der &amp;quot;gleichen&amp;quot; Peripherie zwischen unterschiedlichen Halbleiterherstellern werden nicht abgedeckt. &lt;br /&gt;
Wäre auch zu schön, wenn die Prozesorhersteller dem Entwickler dadurch einen fliegenden HW-Wechsel bzw. eine einfache Vergleichbarkeit ermöglichen würden ;-)&lt;br /&gt;
&lt;br /&gt;
Eine komplette CMSIS-Lib (V2.0) &amp;quot;Cortex Microcontroller Software Interface Standard&amp;quot; ist für das &amp;quot;Code Red&amp;quot; Paket verfügbar, inklusive einer &amp;quot;DSP-Library&amp;quot; &lt;br /&gt;
http://support.code-red-tech.com/CodeRedWiki/NewInVersion4&lt;br /&gt;
bzw. für GNU / Keil / IAR unter&lt;br /&gt;
http://ics.nxp.com/support/documents/microcontrollers/?search=CMSIS&amp;amp;type=software&amp;amp;Search.x=8&amp;amp;Search.y=12&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* Wiki&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx_Entwicklungskit_LPCXpresso]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Codebase_f%C3%BCr_LPC1xxx]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx für Umsteiger]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Projekte&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/264089 FreeRTOS auf LPC1768]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/321481 Multithreading auf LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/319537 Python Script zum Flashen des LPC8xx]&lt;br /&gt;
&lt;br /&gt;
* Suche im Forum&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC8* LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC12* LPC12xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC13* LPC13xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC17* LPC17xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC18* LPC18xx]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
(Die Preiswertesten sind &#039;&#039;&#039;fett&#039;&#039;&#039; dargestellt)&lt;br /&gt;
* &#039;&#039;&#039;[http://darisusgmbh.de/shop/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 Darisus]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[http://www.elpro.org/shop/shop.php elpro]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.hbe-shop.de HBE] &lt;br /&gt;
* [http://www.tme.eu/de/katalog#cleanParameters%3D1%26searchClick%3D1%26search%3DLPC1%26bf_szukaj%3D+ TME]&lt;br /&gt;
* [http://www.tn-electronics.de/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 TN]&lt;br /&gt;
* [http://de.mouser.com/_/?Keyword=LPC1&amp;amp;Ns=Pricing|0&amp;amp;FS=True Mouser]&lt;br /&gt;
* [http://www.soselectronic.eu/?searchstring=LPC1&amp;amp;str=378 SOS]&lt;br /&gt;
* [http://de.farnell.com Farnell/Element14]&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
* [http://www.watterott.com/index.php?page=search&amp;amp;page_action=query&amp;amp;desc=off&amp;amp;sdesc=on&amp;amp;keywords=LPCXpresso Watterott (24€ inclusive JTAG-Programmiergerät UND JTAG Debugger für kostenlose &amp;quot;Code-Red&amp;quot; Entwicklungsplattform)], dazu hier die [[LPC1xxx_Entwicklungskit_LPCXpresso|Beschreibung]]&lt;br /&gt;
* [http://www.lpctools.com/evaluationboardskitsforlpc17xx.aspx LPC-Tools]&lt;br /&gt;
* [http://thinkembedded.ch/NXP:::25.html thinkembedded.ch] div. Olimex Boards&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* http://www.nxp.com/#/page/content=[f=/dynamic/applicationnotes/tid-50809_sid-56890/data.xml] Appnotes&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html Projects]&lt;br /&gt;
* [http://mbed.org/handbook/Homepage MBED]&lt;br /&gt;
* [http://forums.nxp.com/forums/viewforum.php?f=1 NXP-WIKI]&lt;br /&gt;
* [http://knowledgebase.nxp.com/forumdisplay.php?s=389a3610c741bca7b18221d32b9c0ce0&amp;amp;f=4 NXP-Forum]&lt;br /&gt;
* [http://ics.nxp.com/lpcxpresso/ LPCXpresso]&lt;br /&gt;
* [http://code.google.com/p/32bitmicro/ 32BitMicro]&lt;br /&gt;
* [http://www.brc-electronics.nl SimpleCortex]&lt;br /&gt;
* [http://www.lpcware.com/ LPCWare NXP MCU community]&lt;br /&gt;
* [http://nanohome.be/nxp/index.html LPC175/6x und LPC23xx pin Configurator]&lt;br /&gt;
* [https://code.google.com/p/lpc-1768-arm-synthesizer/  MIDI controlled monophonic synthesizer based on the LPCXpresso 1768.]&lt;br /&gt;
* [https://code.google.com/p/lpc1343codebase/  An open source software library for NXP&#039;s Cortex-M3 based LPC1300 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc1114codebase/   An open source software library for NXP&#039;s Cortex-M0 based LPC1100 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc-12xx-bootloader/  A flexible bootloader for use with LPC12xx Microcontrollers from NXP, Firmware code is AES128 encrypted to secure your project / source code when giving out public firmware updates. ]&lt;br /&gt;
* [https://code.google.com/p/lpcxpresso-rc/   Read receiver and sensor signals for radio controlled model aircrafts configured for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/olpcx/   Open toolset for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/32bitmicro/   Collection of code and tools for 32 bit microcontrollers]&lt;br /&gt;
* [https://code.google.com/p/my-nxp-lpc1114/   my-nxp-lpc1114 study course]&lt;br /&gt;
* [https://code.google.com/p/nxp-lpc/   nxp-lpc]&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsplattformen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.lpcware.com/lpcxpresso/home LPDXpresso Download (Kostenlos mit Debugger)]&lt;br /&gt;
* [http://www.lpcware.com LPCXpresso Homepage]&lt;br /&gt;
* [http://support.code-red-tech.com/CodeRedWiki/WikiHome CR-WIKI]&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp ARM/Keil MDK-ARM]&lt;br /&gt;
* IAR EWARM&lt;br /&gt;
* Rowley Crossworks&lt;br /&gt;
* Green Hills Software &lt;br /&gt;
* [http://www.coocox.org/CooCox_CoIDE.htm CooCox] (Kostenlos)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:LPC1x]]&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=95431</id>
		<title>LPC-Mikrocontroller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=95431"/>
		<updated>2017-03-06T11:17:17Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* Features eines LPC8xx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:overview_Sep2011.png|thumb|right|850px|Überblick über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
[[Bild:positioning_NXPSep2011.gif|thumb|right|850px|Vergleich über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
Die LPC-Familie von NXP basiert auf 32-Bit Cortex-Kernen von ARM und arbeitet mit bis zu 204MHz. Die verschiedenen Serien basieren auf den Cortex-M0/M0+/M3/M4-Kernen und sind inzwischen auch für Privatnutzer zu Preisen erhältlich, die mit denen von 8-Bit-Mikrocontrollern vergleichbar sind. Eine Auflistung der verschiedenen Typen findet sich in der Tabelle unten.&lt;br /&gt;
&lt;br /&gt;
Von NXP sind preiswerte Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger oder den neuen LPC-Link2, ein reiner Programmer + Debugger) erhältlich z.B. bei [http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]. Siehe dazu auch die Dokumentation von NXP zu den [http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)] und diese [[LPC1xxx Entwicklungskit LPCXpresso]].&lt;br /&gt;
&lt;br /&gt;
== Vergleich aller Typen ==&lt;br /&gt;
&#039;&#039;Stand Feb. 2017&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; class=&amp;quot;unsortable&amp;quot;                               | &lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | CPU&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Max. Frequency&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Flash&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | SRAM&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Voltage&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; class=&amp;quot;unsortable&amp;quot;   | Features&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2&amp;quot;              | Cortex-M0+&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;30&amp;quot;             | 30MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-32kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
SCTimer/PWM,&lt;br /&gt;
Switch Matrix,&lt;br /&gt;
Pattern Match Engine&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC54000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;128&amp;quot;            | 128-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;96&amp;quot;             | 96-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.62&amp;quot;           | 1.62-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
LCD,&lt;br /&gt;
Ethernet,&lt;br /&gt;
FlexComm,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1100&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | Cortex-M0/M0+&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;50&amp;quot; | 50MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-36kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.71&amp;quot;           | 1.71-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
EEPROM&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1200&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;0&amp;quot;              | Cortex-M0&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;32&amp;quot;             | 32-128kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
8 kV protection,&lt;br /&gt;
IEC 60730 Class B certified&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1300&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;3&amp;quot;  | Cortex-M3&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;72&amp;quot; | 72MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-64kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-12kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.0&amp;quot;            | 2.0-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1500&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;12&amp;quot;             | 12-36kB&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.4&amp;quot;| 2.4-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1700&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;                | 32-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;24&amp;quot;             | 24-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4300&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;240&amp;quot;            | 204MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-282kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
SGPIO,&lt;br /&gt;
Security&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;: gibt es auch als Mehrkern-Prozessoren (mit 0/1/2 Cortex-M0(+)-Cores)&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Informationen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Infos + User-Manuals==&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC8xx (Cortex-M0+) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://www.nxp.com/products/microcontrollers/cortex_m0_m0/series/LPC800.html#quickreference LPC8xx]&#039;&#039;&#039; ist nur in Packages mit einer relativ niedrigen Pinanzahl (DIP8, SO20, TSSOP16, TSSOP20) verfügbar, hat zwischen 4-16kB Flash, und 1-4kB RAM. Die zulässige Betriebsspannung liegt zwischen 1,8V und 3,6V.&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features der LPC800-Serie: &lt;br /&gt;
* 1-4 I2C&lt;br /&gt;
* 1-2 SSP&lt;br /&gt;
* 2-3 UART&lt;br /&gt;
* 4 Timer,  1 OS-Timer&lt;br /&gt;
* 1 watch dog&lt;br /&gt;
* 4 PWM-Einheiten&lt;br /&gt;
* 12-bit ADC&lt;br /&gt;
* CRC engine&lt;br /&gt;
* DMA with 18 channels and 9 trigger inputs&lt;br /&gt;
* 1 SCT (state configurable timer)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/download/grouping/11045/user_manual User Manual der LPC8-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC11xx (Cortex-M0) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc11xx/ LPC11xx-Serie]&#039;&#039;&#039; (3,3V) bietet viele Möglichkeiten&lt;br /&gt;
* Der LPC1100L ist derzeit laut NXP (Sep2011) der preisgünstigste ARM auf dem Markt. Der 32Bit ARM mit einer Performance von ca. 45DMIPS @50MHZ benötigt bei dieser Taktfrequenz nur etwa 10mA. (Details siehe NXP-Seite)&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features :&lt;br /&gt;
** LPC1100 Serie: • I2C, SSP, UART, GPIO, • Timers and watch dog timer, • 10-bit ADC, • Flash/SRAM memory, • Weitere Funktionen, siehe &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/LPC1xxx#Features_eines_LPC11xx 2.3 Features]&#039;&#039;&#039;&lt;br /&gt;
** LPC1100L Serie zusätzlich zu LPC1100: • Power Profile mit lower power consumption in Active- und Sleep-mode, • Interne pull-ups auf VDD level, • Programmierbarer pseudo open-drain mode für GPIO Pins, • WWDT mit Clock Source Lock.&lt;br /&gt;
**LPC11C00 Serie zusätzlich zu LPC1100: • CAN controller, • On-chip CAN Treiber, • On-chip CAN Transceiver (LPC11C2x), • WDT (not windowed) mit Clock Source Lock.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10398.pdf User Manual der LPC11-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Besonderes Augenmerk möchte ich auf die neue Serie  &#039;&#039;&#039;[http://www.nxp.com/ps/#/i=71498 LPC111xFD]&#039;&#039;&#039; legen, denn in jetzt gibt es den Cortex-M0 auch im DIL 28 &#039;&#039;&#039;[http://www.nxp.com/redirect/pip/LPC1114FN28.html den LPC1114FN28]&#039;&#039;&#039;&lt;br /&gt;
**Des Weiteren sind damit SO20, sowie TSSOP20 und TSSOP28 Bauformen verfügbar&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC12xx (Cortex-M0) ===&lt;br /&gt;
* Die Low Power &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc12xx/ LPC12xx-Serie]&#039;&#039;&#039; (3,3V) ist laut NXP (Sep2011) ein Cortex-M0 mit 32 bis 128kB Flash, einem 45 CoreMark™ Benchmark-Score bei 30MHz, 2 bis 8kB SRAM, und einem internen 1% genauen 12MHz Oscillator.&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features: fMAX von 30MHz, 1 10-Bit  ADC mit 8 Kanälen, 2 Comparatoren, 2 UARTs, 1 SSP/SPI, 1 I2C, DMA Controller, CRC Engine, 1 32-Bit, 5 Timer (16- und 32-Bit, + RTC), 13 PWM Kanäle, bis zu 55 GPIOs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10441.pdf User Manual der LPC12xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC13xx (Cortex-M3) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc13xx/ LPC13xx-Serie]&#039;&#039;&#039; (3,3V) bietet im LQFP 48 Gehäuse 8..32k Flash, 2..8k SRAM, 5 Timer (mit WD), 11 PWM, 1 UART, 1IIC, 1USB, 1..2 SPI, einen 8-Kanal/10Bit AD-Wandler und eine Taktfrequenz von max. 72MHz. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10375.pdf User Manual der LPC13xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC17xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc17xx/ LPC17xx-Serie]&#039;&#039;&#039; hingegen enthält eine weit größere Peripherie in einem LQFP80/100/144/208 Package.&lt;br /&gt;
32..512k Flash, 8..96k SRAM, 6 Timer (mit WD), 6 zusätzliche PWM-Einheiten, teilweise Ethernet und STN/TFT-LCD-Controller, meist USB (teilw. mit Host+OTG), 4 UART, 2..3IIC, 1..2 CAN, 1 SPI, 2 SSP/SPI einen 6..8-Kanal/12Bit AD-Wandler, einen 10Bit DAC, Motor-Control-Einheiten, einen Encoder-Eingang und eine Taktfrequenz von max. 100MHz(120MHz) und vieles mehr. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10360.pdf User Manual der LPC17xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC18xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc18xx/ LPC18xx-Serie]&#039;&#039;&#039; stellt DIE &amp;quot;High-Performance&amp;quot; Controller aus der Cortex-M3-Serie. Die Taktfrequenz geht bis 150MHz, die Controller enthalten große dual-Bank Flash Speicher bis zu 1MB, ein großes On-Chip SRAM mit bis zu 200KB, zusätzliche Peripherie wie z.B. SPI Flash Interface (SPIFI) und State Configurable Timer (SCT), 2x High Speed USB (1x mit On-Chip HS PHY) und eine MPU.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://ics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc18xx.pdf User Manual der LPC18xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features: &#039;&#039;&#039;[http://ics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc18xx.pdf LPC18xx Flyer von NXP]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungskits ===&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Kostenlose Entwicklungsumgebung für ALLE hier genannten Controller ===&lt;br /&gt;
Für die ganze Prozessorfamilie ist eine &amp;lt;u&amp;gt;kostenlose&amp;lt;/u&amp;gt; Entwicklungsumgebung  erhältlich. Informationen unter &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home  lpcware]&#039;&#039;&#039;: Die auf Eclipse basierende Entwicklungsumgebung ist nach der Installation bis 8k freigeschaltet und nach einer einfachen und kostenlosen Registrierung für 256kB. Die IDE ist auch für &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home Linux und Mac]&#039;&#039;&#039; verfügbar.&lt;br /&gt;
&lt;br /&gt;
Hier die &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== LPC8xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC8xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 06/2016)&lt;br /&gt;
* LPC810FN8 (DIP8): Digikey 1,09 € (bei einem Stuck).&lt;br /&gt;
* LPC812JD20 (SOIC-W 20): Digikey 1,26 € (bei einem Stuck).&lt;br /&gt;
* LPC812JDH20 (TSSOP-20): Digikey 1,44 € (bei einem Stuck).&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC800_block_diagram_Jan2014.gif|thumb|right|850px|Blockdiagramm des Cortex-M0+, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC8xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC8xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0+ processor, running at frequencies of up to 30 MHz. &lt;br /&gt;
** single cycle multiplier&lt;br /&gt;
** single cycle I/O port&lt;br /&gt;
** ARM Cortex-M0+ built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug, Micro Trace Buffer supported.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32kB (LPC824), 16 kB (LPC812M101JD20/LPC812M101JDH20/LPC812M101JDH16), 8 kB (LPC811M001JDH16) or 4kB (LPC810M021FN8) on-chip flash programming memory. &lt;br /&gt;
**  8kB, 4kB, 2 kB, or 1 kB SRAM.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 18 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages down to 6.&lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
** &#039;&#039;&#039;Switch matrix for flexible configuration of each I/O pin function.&#039;&#039;&#039;&lt;br /&gt;
** CRC engine&lt;br /&gt;
** DMA with 18 channels and 9 sources&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** Comparator with internal and external references and 31 step voltage divider.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 9.4 kHz to 2.3 MHz.&lt;br /&gt;
** 10 kHz low-power oscillator for the WKT.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Reduced power modes: Sleep mode, Deep-sleep mode, Power-down mode, and Deep power-down mode.&lt;br /&gt;
** Wake-up from Deep-sleep and Power-down modes on activity on USART, SPI, and I2C peripherals.&lt;br /&gt;
** Brownout detect.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available as DIP8, TSSOP16, SO20, and TSSOP20 package.&lt;br /&gt;
&lt;br /&gt;
== LPC11xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC11xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 01/2014):&lt;br /&gt;
&lt;br /&gt;
elpro.org: von 1.61EUR (LPC1111FN33) bis 5.73EUR (LPC11U37) bei einen Stueck. Die Familie ist sehr gross mit sehr unterschiedlichen Ausfuehrungen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC11xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC11xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 50 MHz. &lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32 kB (LPC1114/LPC11C14), 24 kB (LPC1113), 16 kB (LPC1112/LPC11C12), or 8 kB (LPC1111) on-chip flash programming memory.  &lt;br /&gt;
** 8 kB, 4 kB, or 2 kB SRAM. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages and LPC11C22/C24. &lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 13 of the functional pins.&lt;br /&gt;
** Power-On Reset (POR). &lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset. &lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available in the following packages: 16WLCSP, 25WLCSP 20-SOIC, 20-TSSOP, 28-DIP, 28-TSSOP, 48-LQFP, 64-LQFP, 100-LQFP, and others.&lt;br /&gt;
&lt;br /&gt;
== LPC12xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC12xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
[[Bild:block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC12xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC12xx ===&lt;br /&gt;
&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 45 MHz (one wait state from flash) or 30 MHz (zero wait states from flash). The LPC122x have a high score of over 45 in CoreMark CPU performance benchmark testing, equivalent to 1.51/MHz.&lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug (SWD).&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory&lt;br /&gt;
** Up to 8 kB SRAM.&lt;br /&gt;
** Up to 128 kB on-chip flash programming memory. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Includes ROM-based 32-bit integer division routines.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz Internal RC (IRC) oscillator trimmed to 1 % accuracy that can optionally be used as a system clock.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, main clock, and Watchdog clock.&lt;br /&gt;
** Real-Time Clock (RTC).&lt;br /&gt;
* Digital peripherals&lt;br /&gt;
** Micro DMA controller with 21 channels.&lt;br /&gt;
** CRC engine.&lt;br /&gt;
** Two UARTs with fractional baud rate generation and internal FIFO. One UART with RS-485 and modem support and one standard UART with IrDA.&lt;br /&gt;
** SSP/SPI controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. I2C-bus pins have programmable glitch filter.&lt;br /&gt;
** Up to 55 General Purpose I/O (GPIO) pins with programmable pull-up resistor, open-drain mode, programmable digital input glitch filter, and programmable input inverter. &lt;br /&gt;
** Programmable output drive on all GPIO pins. Four pins support high-current output drivers.&lt;br /&gt;
** All GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** Four general purpose counter/timers with four capture inputs and four match outputs (32-bit timers) or two capture inputs and two match outputs (16-bit timers). &lt;br /&gt;
** Windowed WatchDog Timer (WWDT).&lt;br /&gt;
* Analog peripherals&lt;br /&gt;
** One 8-channel, 10-bit ADC.&lt;br /&gt;
** Two highly flexible analog comparators. Comparator outputs can be programmed to trigger a timer match signal or can be used to emulate 555 timer behavior.&lt;br /&gt;
* Power&lt;br /&gt;
** Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Deep-sleep mode via start logic using 12 port pins.&lt;br /&gt;
** Processor wake-up from Deep-power down and Deep-sleep modes via the RTC.&lt;br /&gt;
** Brownout detect with three separate thresholds each for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
** Integrated PMU (Power Management Unit).&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* 3.3 V power supply.&lt;br /&gt;
* Available as 64-pin and 48-pin LQFP package.&lt;br /&gt;
&lt;br /&gt;
== LPC13xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC13xx ===&lt;br /&gt;
[[Bild:LPC13xx_Selection_Guide_Sep2011.png|thumb|left|600px|Selection Guide zur LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1313 mit 32k-Flash mit 72MHz im LQFP 48 Gehäuse. Der LPC1313 ist bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; erhältlich für 3,57 € (Juli 2016), oder elpro.org für 2,29 €.  Entwicklungskit INKLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1343-LPCXpresso-Board Watterott]&#039;&#039;&#039; für 23,80 € (Juli 2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC13xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC13xx Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1313 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 72 MHz.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 32 kB on-chip flash programming memory.&lt;br /&gt;
* 8 kB SRAM.&lt;br /&gt;
* In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* UART with fractional baud rate generation, modem, internal FIFO, and RS-485/EIA-485 support.&lt;br /&gt;
* SSP controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
* Additional SSP controller on LPC1313FBD48/01.&lt;br /&gt;
* I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode.&lt;br /&gt;
* Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors.&lt;br /&gt;
* Four general purpose counter/timers with a total of four capture inputs and 13 match outputs.&lt;br /&gt;
* Programmable Watchdog Timer (WDT) &lt;br /&gt;
* System tick timer.&lt;br /&gt;
* Serial Wire Debug and Serial Wire Trace port.&lt;br /&gt;
* High-current output driver (20 mA) on one pin.&lt;br /&gt;
* High-current sink drivers (20 mA) on two I2C-bus pins in Fast-mode Plus.&lt;br /&gt;
* Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
* Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
* Single power supply (2.0 V to 3.6 V).&lt;br /&gt;
* 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
* Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, or the watchdog clock.&lt;br /&gt;
* Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 40 of the functional pins.&lt;br /&gt;
* Brownout detect with four separate thresholds for interrupt and one thresholds for forced reset.&lt;br /&gt;
* Power-On Reset (POR).&lt;br /&gt;
* Integrated oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 12 MHz internal RC oscillator trimmed to 1 % accuracy over the entire temperature and voltage range that can optionally be used as a system clock.&lt;br /&gt;
* Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz. System PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
* Code Read Protection (CRP) with different security levels.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Available as 48-pin LQFP package and 33-pin HVQFN package.&lt;br /&gt;
&lt;br /&gt;
== LPC17xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC17xx ===&lt;br /&gt;
[[Bild:LPC17xx_Selection_Guide_Sep2011.png|thumb|left|680px|Selection Guide zur LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1754 mit 128K Flash im LQFP80, der bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; für 7€74 (Juli/2011) erhältlich ist,[den LPC1751 (32k/8k) schon für 5€95] und bei Digikey für 6€35, den LPC1764FBD100 bei &#039;&#039;&#039;[http://www.tme.eu/de TME]&#039;&#039;&#039;    für 7€ Entwicklungskit INCLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1769-LPCXpresso Watterott]&#039;&#039;&#039; für 23€80 (Juli/2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC17xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC177x_178x Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1754 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 100 MHz &lt;br /&gt;
* A Memory Protection Unit (MPU) supporting eight regions is included.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 128 kB on-chip flash program memory with In-System Programming (ISP) and In-Application Programming (IAP) capabilities. &lt;br /&gt;
* 32 kB of SRAM on the CPU with local code/data bus for high-performance CPU access.&lt;br /&gt;
* Eight channel General Purpose DMA controller &lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
* USB 2.0 full-speed controller that can be configured for either device, Host, or OTG operation with an on-chip PHY for device and Host functions &lt;br /&gt;
* Four UARTs with fractional baud rate generation, internal FIFO, IrDA, and DMA, Einer mit Modem I/Os und RS485 Support&lt;br /&gt;
* 1 CAN controller.&lt;br /&gt;
* 2 SSP controllers &lt;br /&gt;
* 1 SPI controller &lt;br /&gt;
* 2 I2C-bus interfaces with data rates of 1Mbit/s,&lt;br /&gt;
* I2S (Inter-IC Sound) &lt;br /&gt;
* 52  General Purpose I/O (GPIO) pins Any pin of ports 0 and 2 can be used to generate an interrupt.&lt;br /&gt;
* 8x 12-bit Analog-to-Digital Converter (ADC) conversion rates up to 200 kHz&lt;br /&gt;
* 1x 10-bit Digital-to-Analog Converter (DAC) &lt;br /&gt;
* Four general purpose timers/counters, with a total of eight capture inputs and ten compare outputs. &lt;br /&gt;
* One motor control PWM with support for three-phase motor control.&lt;br /&gt;
* Quadrature encoder interface that can monitor one external quadrature encoder.&lt;br /&gt;
* One standard PWM/timer block with external count input.&lt;br /&gt;
* Real-Time Clock (RTC) with a separate power domain including 20 bytes of battery-powered backup registers,  An RTC interrupt can wake up the CPU from any reduced power mode.&lt;br /&gt;
* Watchdog Timer (WDT). &lt;br /&gt;
* Cortex-M3 system tick timer&lt;br /&gt;
* Repetitive interrupt timer &lt;br /&gt;
* Standard JTAG test/debug interface as well as Serial Wire Debug and Serial Wire Trace Port options.&lt;br /&gt;
* Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
* Single 3.3 V power supply (2.4 V to 3.6 V). &lt;br /&gt;
* Four external interrupt inputs configurable as edge/level sensitive. All pins on PORT0 and PORT2 can be used as edge sensitive interrupt sources.&lt;br /&gt;
* Non-maskable Interrupt (NMI) input.&lt;br /&gt;
* Wakeup Interrupt Controller (WIC) &lt;br /&gt;
* Each peripheral has its own clock divider for further power savings.&lt;br /&gt;
* Brownout detect with separate threshold for interrupt and forced reset.&lt;br /&gt;
* On-chip Power-On Reset (POR).&lt;br /&gt;
* On-chip crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 4 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
* An on-chip PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the main oscillator, the internal RC oscillator, or the RTC oscillator.&lt;br /&gt;
* Available as 80-pin LQFP (12 x 12 x 1.4 mm) packages.&lt;br /&gt;
&lt;br /&gt;
== LPC18xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC18xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC18xx Familie ===&lt;br /&gt;
[[Bild:block.diagram_NXP18xx Sep2011.gif|thumb|left|680px|Blockdiagramm der LPC18xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC18xx ===&lt;br /&gt;
DRAFT!&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M3 processor, running at frequencies of up to 180 MHz.&lt;br /&gt;
** ARM Cortex-M3 built-in Memory Protection Unit (MPU) supporting eight regions.&lt;br /&gt;
** ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Non-maskable Interrupt (NMI) input.&lt;br /&gt;
** JTAG and Serial Wire Debug, serial trace, eight breakpoints, and four watch points.&lt;br /&gt;
** ETM and ETB support.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* On-chip memory (flashless parts LPC1850/30/20/10)&lt;br /&gt;
** Up to 200 kB SRAM total for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 64 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* On-chip memory (parts with on-chip flash)&lt;br /&gt;
** Up to 1 MB total dual bank flash memory with flash accelerator.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Up to 136 kB SRAM for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 32 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1 % accuracy.&lt;br /&gt;
** Ultra-low power RTC crystal oscillator.&lt;br /&gt;
** Three PLLs allow CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. The second PLL is dedicated to the High-speed USB, the third PLL can be used as audio PLL.&lt;br /&gt;
** Clock output.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** Quad SPI Flash Interface (SPIFI) with four lanes and data rates of up to 40 MB per second total.&lt;br /&gt;
** 10/100T Ethernet MAC with RMII and MII interfaces and DMA support for high throughput at low CPU load. Support for IEEE 1588 time stamping/advanced time stamping (IEEE 1588-2008 v2).&lt;br /&gt;
** One High-speed USB 2.0 Host/Device/OTG interface with DMA support and on-chip PHY.&lt;br /&gt;
** One High-speed USB 2.0 Host/Device interface with DMA support, on-chip full-speed PHY and ULPI interface to external high-speed PHY.&lt;br /&gt;
** USB interface electrical test software included in ROM USB stack.&lt;br /&gt;
** Four 550 UARTs with DMA support: one UART with full modem interface; one UART with IrDA interface; three USARTs support synchronous mode and a smart card interface conforming to ISO7816 specification.&lt;br /&gt;
** Two C_CAN 2.0B controllers with one channel each.&lt;br /&gt;
** Two SSP controllers with FIFO and multi-protocol support. Both SSPs with DMA support.&lt;br /&gt;
** One Fast-mode Plus I2C-bus interface with monitor mode and with open-drain I/O pins conforming to the full I2C-bus specification. Supports data rates of up to 1 Mbit/s.&lt;br /&gt;
** One standard I2C-bus interface with monitor mode and standard I/O pins.&lt;br /&gt;
** Two I2S interfaces with DMA support, each with one input and one output.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** External Memory Controller (EMC) supporting external SRAM, ROM, NOR flash, and SDRAM devices.&lt;br /&gt;
** LCD controller with DMA support and a programmable display resolution of up to 1024H x 768V. Supports monochrome and color STN panels and TFT color panels; supports 1/2/4/8 bpp CLUT and 16/24-bit direct pixel mapping.&lt;br /&gt;
** SD/MMC card interface.&lt;br /&gt;
** Eight-channel General-Purpose DMA (GPDMA) controller can access all memories on the AHB and all DMA-capable AHB slaves.&lt;br /&gt;
** Up to 80 General-Purpose Input/Output (GPIO) pins with configurable pull-up/pull-down resistors and open-drain modes. &lt;br /&gt;
** GPIO registers are located on the AHB for fast access. GPIO ports have DMA support.&lt;br /&gt;
** State Configurable Timer (SCT) subsystem on AHB.&lt;br /&gt;
** Four general-purpose timer/counters with capture and match capabilities.&lt;br /&gt;
** One motor control PWM for three-phase motor control.&lt;br /&gt;
** One Quadrature Encoder Interface (QEI).&lt;br /&gt;
** Repetitive Interrupt timer (RI timer).&lt;br /&gt;
** Windowed watchdog timer.&lt;br /&gt;
** Ultra-low power Real-Time Clock (RTC) on separate power domain with 256 bytes of battery powered backup registers.&lt;br /&gt;
** Alarm timer; can be battery powered.&lt;br /&gt;
* Digital peripherals available on flash-based parts LPC18xx only:&lt;br /&gt;
** &amp;lt;tbd&amp;gt;&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** One 10-bit DAC with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
** Two 10-bit ADCs with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
* Security:&lt;br /&gt;
** Hardware-based AES security engine programmable through an on-chip API.&lt;br /&gt;
** Two 128-bit secure OTP memories for AES key storage and customer use.&lt;br /&gt;
** Unique ID for each device.&lt;br /&gt;
* Power: &lt;br /&gt;
** Single 3.3 V (2.2 V to 3.6 V) power supply with on-chip internal voltage regulator for the core supply and the RTC power domain.&lt;br /&gt;
** RTC power domain can be powered separately by a 3 V battery supply.&lt;br /&gt;
** Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Sleep mode via wake-up interrupts from various eripherals. &lt;br /&gt;
** Wake-up from Deep-sleep, Power-down, and Deep power-down modes via external interrupts and interrupts generated by battery powered blocks in the RTC power domain.&lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
* Available as 100-pin, 144-pin, and 208-pin LQFP packages and as 100-pin, 180-pin, and 256-pin LBGA packages.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
=== LPCWare (kostenlos) ===&lt;br /&gt;
[[Bild:lpcxpresso-debug_Code-red_3Sep2011.gif|thumb|right|680px|Ansicht der Entwicklungsumgebung, ©code-red-tech.com]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Entwicklungs Tool ====&lt;br /&gt;
(Beschreibung aus der Web-Site:)&lt;br /&gt;
LPCXpresso&#039;s IDE (Ursprünglich von &amp;quot;Code RED&amp;quot; entwickelt, die Firma wurde 2013 von LPC gekauft) ist eine hoch integrierte Entwicklungsumgebung für LPC-Controller, und beinhaltet alle zur Entwicklung erforderlichen Tools um hoch qualitative Software in einer angemessenen Zeit zu schreiben. LPCXpresso basiert auf ein vereinfachtes Eclipse mit vielen LPC-specifischen Erweiterungen.&lt;br /&gt;
Des Weiteren ist eine aktuelle Version der Industrie-Standard GNU Tool-Chain mit einer propritären und optimierten C-Lib mit dabei. Die LPCXpresso IDE stellt ein voll optimiertes Executable zur Verfügung. Die einzige Beschränkung der kostenlosen Version ist eine Limitierung auf 256kB Code nach erfolgter Registrierung.&lt;br /&gt;
Das LPCXpresso Target Board ist eine Gemeinschaftsentwicklung von Embedded Artists, Code Red und NXP.&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
Die LPCXpresso IDE stellt eine C-Umgebung mit Syntax-Colouring, Source-Formatierung, Funktions-Folding, sowie mit Online- und Offline Hilfe und umfangreichen Projekt-Management Funktionen zur Verfügung.  &lt;br /&gt;
Dies beinhaltet:&lt;br /&gt;
* Wizards um Projekte für alle unterstützten Controller zu erstellen &lt;br /&gt;
* Automatische Linker Script Generierung inklusive Memory-Map Unterstützung &lt;br /&gt;
* Programmierung des Controllers&lt;br /&gt;
* On-Line Debugging&lt;br /&gt;
* Datenblatt-Zugriff über eingebauten Browser&lt;br /&gt;
* Support für die NXP LPC Microcontroller Familien, von Cortex-M0, Cortex-M3 bis Cortex-M4 und ARM7 bis ARM9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Peripherie und Register Views im Debugger ====&lt;br /&gt;
Der Peripherie-Viewer im integrierten Debugger zeigt alle Register und Bit-Felder in einer einfachen Baumstruktur.&lt;br /&gt;
Ein Prozessor-Register Viewer erlaubt den Zugriff auf alle Prozessor-Register und stellt eine &amp;quot;Smart-Formatting&amp;quot;  Funktion zur Verfügung um komplexe Register wie Flags oder Status Register übersichtlich darstellen zu können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Unterstützte Familien ====&lt;br /&gt;
Cortex-M0, Cortex-M3, Cortex-M4, Einzelne Controller aus der LPC2000 family, ARM966, ARM926-EJ, ARM926-EJ + VFP&lt;br /&gt;
&lt;br /&gt;
==== Sehr preiswerter USB_JTAG_SWD Debugger ====&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039; und diese &#039;&#039;&#039;[http://www.mikrocontroller.net/wikisoftware/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso Beschreibung]&#039;&#039;&#039;&lt;br /&gt;
Der neue Programmer/Debugger ist hier für ca 18€ +P&amp;amp;P erhältlich &#039;&#039;&#039;[http://www.watterott.com/de/LPC-Link-2 Programmer]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Standard Library ====&lt;br /&gt;
Im Download der &amp;quot;Code Red&amp;quot; Entwicklungsumgebung ist eine relativ umfangreiche Firmwarebibliothek vorhanden.&lt;br /&gt;
&lt;br /&gt;
==== Installationsanleitung zur IDE ====&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Codebase für LPC11xx und LPC13xx ====&lt;br /&gt;
Für die Cortex-M0 und -M3 Familien existieren verschiedene Basispakete die als Startausstattung sehr gut geeignet sind. Auf microbuilder.eu findet man eine sehr interessante Version inklusive Dokumentation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Codebase_f%C3%BCr_LPC1xxx HIER]&#039;&#039;&#039; findet man alle Links zur original Codebase mit allen Dateien (Stand Januar 2012) aber auch eine deutsche Übersetzung zu den Files.&lt;br /&gt;
&lt;br /&gt;
=== CooCox ===&lt;br /&gt;
&lt;br /&gt;
Auf der &#039;&#039;&#039;[http://www.coocox.org/Index.html Homepage]&#039;&#039;&#039; von CooCox - einem chinesischen Open-Source Projekt, auf der eine IDE für Atmel, Energy Micro, Holtek, Nuvoton, ST, TI und NXP verfügbar ist  - findet man die auf Eclipse basierende &amp;quot;CooCox CoIDE&amp;quot;, die sich aus dem &amp;quot;CoBuilder&amp;quot; und dem &amp;quot;CoDebugger&amp;quot; zusammensetzt.&lt;br /&gt;
Des Weiteren bietet man dort ein Echtzeit-Multitasking Betriebssystem, sowie SW-Versionen von zwei unterschiedliche Debugging-Adapter und ein Stand-alone Flash-Tool zum freien Download an.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Controller können damit programmiert und debugged werden:&lt;br /&gt;
    LPC1111x101    LPC1111x201   LPC1112x101   LPC1112x201&lt;br /&gt;
    LPC1113x201    LPC1113x301   LPC1114x201   LPC1114x301&lt;br /&gt;
    LPC11C14x301   LPC11C12x301&lt;br /&gt;
    LPC1224x101    LPC1224x121   LPC1225x301   LPC1225x321   LPC1226x301  LPC1227x301&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    LPC1311   LPC1313   LPC1342   LPC1343&lt;br /&gt;
    LPC1751   LPC1752   LPC1754   LPC1756   LPC1758   LPC1759&lt;br /&gt;
    LPC1763   LPC1764   LPC1765   LPC1766   LPC1767   LPC1768   LPC1769&lt;br /&gt;
&lt;br /&gt;
=== EmBlocks ===&lt;br /&gt;
&#039;&#039;&#039;[http://www.emblocks.org/web/ Emblocks]&#039;&#039;&#039; ist eine kostenlose Entwicklungsumgebung. Sie unterstützt neben NXP uC weitere ARM uC (STM32, EFM32) sowie PIC, AVR und MSP430. Die IDE hat einen eingebauten GDB Debugger welcher System view (Peripherie Register anzeigen) beim Debuggen unterstützt. Ausserdem gibt es einen Project Wizzard für NXP uC &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Unterstützt wird der JLINK mit folgenden NXP uC:&lt;br /&gt;
LPC11Axx, LPC11Exx, LPC11Uxx, LPC11xxLV, LPC12xx, LPC13Uxx, LPC13xx, LPC17xx, LPC18xx, LPC18xx, LPC177x_8x, LPC407x_8x&lt;br /&gt;
&lt;br /&gt;
=== Codebase ===&lt;br /&gt;
Des Weiteren existiert eine umfangreiche Sammlung von &#039;&#039;&#039;[http://www.coocox.org/NXP-Series.php Code-Beispielen]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Keil ===&lt;br /&gt;
[https://www.keil.com/demo/eval/arm.htm KEIL MDK-ARM] (Windows, Free Version auf 32KB begrenzt, mit vielen Beispielen zu div. Evaluation Boards) &lt;br /&gt;
*[http://www.keil.com/arm/chips.asp unterstützte Mikrocontroller]&lt;br /&gt;
=== WinARM ===&lt;br /&gt;
[http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/#winarm WinARM] (wird derzeit nicht gepflegt)&lt;br /&gt;
&lt;br /&gt;
=== GNUARM ===&lt;br /&gt;
[http://gnuarm.com/ GNUARM] (Linux, Windows, wird derzeit nicht gepflegt), &lt;br /&gt;
&lt;br /&gt;
=== Yagarto ===&lt;br /&gt;
[http://www.yagarto.de/ Yagarto] (Windows, mit Eclipse-Integration) &lt;br /&gt;
&lt;br /&gt;
=== CodeSourcery ===&lt;br /&gt;
[http://www.codesourcery.com/gnu_toolchains/arm CodeSourcery CodeBench Lite]&lt;br /&gt;
&lt;br /&gt;
== CMSIS  -  Standard für alle Plattformen ==&lt;br /&gt;
Der Cortex Microcontroller Software Interface Standard (CMSIS) stellt einen &amp;quot;abstraction layer&amp;quot; für alle Cortex-Mx Controller zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
CMSIS stellt einen Schnittstellenstandard von ARM dar, der von vielen Tool-Herstellern unterstützt wird und ist (laut verschiedener Berichte)  kompatibel mit den verschiedensten Compilern (incl GCC). Dies wird erreicht durch einheitliche Definitionen für Adressen und Namen die den Zugriff auf die Register des Cores und der Peripherie ermöglichen.&lt;br /&gt;
Auch Standard-Funktionen für den Start und die Interrupts stehen zur Verfügung.&lt;br /&gt;
Natürlich kann auch weiterhin direkt auf die HW zugegriffen werden, es geht nur um eine Vereinheitlichung von identischen Funktionen. &lt;br /&gt;
Da die Peripherie-Teile zumindest innerhalb eines Halbleiterherstellers für die Cortex-Mx Controller sehr ähnlich oder sogar weitgehend identisch sind kann deutlich mehr SW für verschiedene Derivate innerhalb dieser Prozessorfamilien wiederverwendet werden.  (siehe Google: &amp;quot;CMSIS_Doulos_Tutorial.pdf&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Ein weiterer, interessanter Punkt ist die CMSIS-DSP Lib mit ihren Vektorfunktionen, Matrix-Berechnung sowie komplexen Algorithmen für Filter, &lt;br /&gt;
Regler und Fourietransformation sowie weiterer DSP Algorithmen (insgesamt 61).&lt;br /&gt;
&lt;br /&gt;
Leider hat diese Kompatibilität auch ihre Grenzen, denn Sonderfunktionen bzw. Spezialitäten in der &amp;quot;gleichen&amp;quot; Peripherie zwischen unterschiedlichen Halbleiterherstellern werden nicht abgedeckt. &lt;br /&gt;
Wäre auch zu schön, wenn die Prozesorhersteller dem Entwickler dadurch einen fliegenden HW-Wechsel bzw. eine einfache Vergleichbarkeit ermöglichen würden ;-)&lt;br /&gt;
&lt;br /&gt;
Eine komplette CMSIS-Lib (V2.0) &amp;quot;Cortex Microcontroller Software Interface Standard&amp;quot; ist für das &amp;quot;Code Red&amp;quot; Paket verfügbar, inklusive einer &amp;quot;DSP-Library&amp;quot; &lt;br /&gt;
http://support.code-red-tech.com/CodeRedWiki/NewInVersion4&lt;br /&gt;
bzw. für GNU / Keil / IAR unter&lt;br /&gt;
http://ics.nxp.com/support/documents/microcontrollers/?search=CMSIS&amp;amp;type=software&amp;amp;Search.x=8&amp;amp;Search.y=12&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* Wiki&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx_Entwicklungskit_LPCXpresso]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Codebase_f%C3%BCr_LPC1xxx]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx für Umsteiger]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Projekte&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/264089 FreeRTOS auf LPC1768]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/321481 Multithreading auf LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/319537 Python Script zum Flashen des LPC8xx]&lt;br /&gt;
&lt;br /&gt;
* Suche im Forum&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC8* LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC12* LPC12xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC13* LPC13xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC17* LPC17xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC18* LPC18xx]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
(Die Preiswertesten sind &#039;&#039;&#039;fett&#039;&#039;&#039; dargestellt)&lt;br /&gt;
* &#039;&#039;&#039;[http://darisusgmbh.de/shop/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 Darisus]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[http://www.elpro.org/shop/shop.php elpro]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.hbe-shop.de HBE] &lt;br /&gt;
* [http://www.tme.eu/de/katalog#cleanParameters%3D1%26searchClick%3D1%26search%3DLPC1%26bf_szukaj%3D+ TME]&lt;br /&gt;
* [http://www.tn-electronics.de/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 TN]&lt;br /&gt;
* [http://de.mouser.com/_/?Keyword=LPC1&amp;amp;Ns=Pricing|0&amp;amp;FS=True Mouser]&lt;br /&gt;
* [http://www.soselectronic.eu/?searchstring=LPC1&amp;amp;str=378 SOS]&lt;br /&gt;
* [http://de.farnell.com Farnell/Element14]&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
* [http://www.watterott.com/index.php?page=search&amp;amp;page_action=query&amp;amp;desc=off&amp;amp;sdesc=on&amp;amp;keywords=LPCXpresso Watterott (24€ inclusive JTAG-Programmiergerät UND JTAG Debugger für kostenlose &amp;quot;Code-Red&amp;quot; Entwicklungsplattform)], dazu hier die [[LPC1xxx_Entwicklungskit_LPCXpresso|Beschreibung]]&lt;br /&gt;
* [http://www.lpctools.com/evaluationboardskitsforlpc17xx.aspx LPC-Tools]&lt;br /&gt;
* [http://thinkembedded.ch/NXP:::25.html thinkembedded.ch] div. Olimex Boards&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* http://www.nxp.com/#/page/content=[f=/dynamic/applicationnotes/tid-50809_sid-56890/data.xml] Appnotes&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html Projects]&lt;br /&gt;
* [http://mbed.org/handbook/Homepage MBED]&lt;br /&gt;
* [http://forums.nxp.com/forums/viewforum.php?f=1 NXP-WIKI]&lt;br /&gt;
* [http://knowledgebase.nxp.com/forumdisplay.php?s=389a3610c741bca7b18221d32b9c0ce0&amp;amp;f=4 NXP-Forum]&lt;br /&gt;
* [http://ics.nxp.com/lpcxpresso/ LPCXpresso]&lt;br /&gt;
* [http://code.google.com/p/32bitmicro/ 32BitMicro]&lt;br /&gt;
* [http://www.brc-electronics.nl SimpleCortex]&lt;br /&gt;
* [http://www.lpcware.com/ LPCWare NXP MCU community]&lt;br /&gt;
* [http://nanohome.be/nxp/index.html LPC175/6x und LPC23xx pin Configurator]&lt;br /&gt;
* [https://code.google.com/p/lpc-1768-arm-synthesizer/  MIDI controlled monophonic synthesizer based on the LPCXpresso 1768.]&lt;br /&gt;
* [https://code.google.com/p/lpc1343codebase/  An open source software library for NXP&#039;s Cortex-M3 based LPC1300 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc1114codebase/   An open source software library for NXP&#039;s Cortex-M0 based LPC1100 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc-12xx-bootloader/  A flexible bootloader for use with LPC12xx Microcontrollers from NXP, Firmware code is AES128 encrypted to secure your project / source code when giving out public firmware updates. ]&lt;br /&gt;
* [https://code.google.com/p/lpcxpresso-rc/   Read receiver and sensor signals for radio controlled model aircrafts configured for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/olpcx/   Open toolset for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/32bitmicro/   Collection of code and tools for 32 bit microcontrollers]&lt;br /&gt;
* [https://code.google.com/p/my-nxp-lpc1114/   my-nxp-lpc1114 study course]&lt;br /&gt;
* [https://code.google.com/p/nxp-lpc/   nxp-lpc]&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsplattformen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.lpcware.com/lpcxpresso/home LPDXpresso Download (Kostenlos mit Debugger)]&lt;br /&gt;
* [http://www.lpcware.com LPCXpresso Homepage]&lt;br /&gt;
* [http://support.code-red-tech.com/CodeRedWiki/WikiHome CR-WIKI]&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp ARM/Keil MDK-ARM]&lt;br /&gt;
* IAR EWARM&lt;br /&gt;
* Rowley Crossworks&lt;br /&gt;
* Green Hills Software &lt;br /&gt;
* [http://www.coocox.org/CooCox_CoIDE.htm CooCox] (Kostenlos)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:LPC1x]]&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=95430</id>
		<title>LPC-Mikrocontroller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=95430"/>
		<updated>2017-03-06T11:14:29Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* Eckdaten LPC8xx (Cortex-M0+) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:overview_Sep2011.png|thumb|right|850px|Überblick über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
[[Bild:positioning_NXPSep2011.gif|thumb|right|850px|Vergleich über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
Die LPC-Familie von NXP basiert auf 32-Bit Cortex-Kernen von ARM und arbeitet mit bis zu 204MHz. Die verschiedenen Serien basieren auf den Cortex-M0/M0+/M3/M4-Kernen und sind inzwischen auch für Privatnutzer zu Preisen erhältlich, die mit denen von 8-Bit-Mikrocontrollern vergleichbar sind. Eine Auflistung der verschiedenen Typen findet sich in der Tabelle unten.&lt;br /&gt;
&lt;br /&gt;
Von NXP sind preiswerte Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger oder den neuen LPC-Link2, ein reiner Programmer + Debugger) erhältlich z.B. bei [http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]. Siehe dazu auch die Dokumentation von NXP zu den [http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)] und diese [[LPC1xxx Entwicklungskit LPCXpresso]].&lt;br /&gt;
&lt;br /&gt;
== Vergleich aller Typen ==&lt;br /&gt;
&#039;&#039;Stand Feb. 2017&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; class=&amp;quot;unsortable&amp;quot;                               | &lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | CPU&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Max. Frequency&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Flash&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | SRAM&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;                      | Voltage&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; class=&amp;quot;unsortable&amp;quot;   | Features&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2&amp;quot;              | Cortex-M0+&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;30&amp;quot;             | 30MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-32kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
SCTimer/PWM,&lt;br /&gt;
Switch Matrix,&lt;br /&gt;
Pattern Match Engine&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC54000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;128&amp;quot;            | 128-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;96&amp;quot;             | 96-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.62&amp;quot;           | 1.62-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
LCD,&lt;br /&gt;
Ethernet,&lt;br /&gt;
FlexComm,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1100&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | Cortex-M0/M0+&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;50&amp;quot; | 50MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1&amp;quot;              | 1-36kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.71&amp;quot;           | 1.71-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
EEPROM&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1200&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;0&amp;quot;              | Cortex-M0&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;32&amp;quot;             | 32-128kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-8kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;1.8&amp;quot;            | 1.8-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
8 kV protection,&lt;br /&gt;
IEC 60730 Class B certified&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1300&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;3&amp;quot;  | Cortex-M3&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;72&amp;quot; | 72MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-64kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | 4-12kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.0&amp;quot;            | 2.0-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1500&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-256kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;12&amp;quot;             | 12-36kB&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;2.4&amp;quot;| 2.4-3.6V&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1700&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;                | 32-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;8&amp;quot;              | 8-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
QEI&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC1800&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;180&amp;quot;            | 180MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-200kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
Security&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4000&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;120&amp;quot;            | 120MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;64&amp;quot;             | 64-512kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;24&amp;quot;             | 24-96kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#EAECF0&amp;quot;                                            | LPC4300&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;4&amp;quot;              | Cortex-M4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;240&amp;quot;            | 204MHz&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;512&amp;quot;            | Flashless, &lt;br /&gt;
512kB-1MB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; data-sort-value=&amp;quot;104&amp;quot;            | 104-282kB&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;                                  | &lt;br /&gt;
Dual HS USB,&lt;br /&gt;
CAN,&lt;br /&gt;
Ethernet,&lt;br /&gt;
LCD,&lt;br /&gt;
SGPIO,&lt;br /&gt;
Security&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;: gibt es auch als Mehrkern-Prozessoren (mit 0/1/2 Cortex-M0(+)-Cores)&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Informationen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Infos + User-Manuals==&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC8xx (Cortex-M0+) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://www.nxp.com/products/microcontrollers/cortex_m0_m0/series/LPC800.html#quickreference LPC8xx]&#039;&#039;&#039; ist nur in Packages mit einer relativ niedrigen Pinanzahl (DIP8, SO20, TSSOP16, TSSOP20) verfügbar, hat zwischen 4-16kB Flash, und 1-4kB RAM. Die zulässige Betriebsspannung liegt zwischen 1,8V und 3,6V.&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features der LPC800-Serie: &lt;br /&gt;
* 1-4 I2C&lt;br /&gt;
* 1-2 SSP&lt;br /&gt;
* 2-3 UART&lt;br /&gt;
* 4 Timer,  1 OS-Timer&lt;br /&gt;
* 1 watch dog&lt;br /&gt;
* 4 PWM-Einheiten&lt;br /&gt;
* 12-bit ADC&lt;br /&gt;
* CRC engine&lt;br /&gt;
* DMA with 18 channels and 9 trigger inputs&lt;br /&gt;
* 1 SCT (state configurable timer)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/download/grouping/11045/user_manual User Manual der LPC8-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC11xx (Cortex-M0) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc11xx/ LPC11xx-Serie]&#039;&#039;&#039; (3,3V) bietet viele Möglichkeiten&lt;br /&gt;
* Der LPC1100L ist derzeit laut NXP (Sep2011) der preisgünstigste ARM auf dem Markt. Der 32Bit ARM mit einer Performance von ca. 45DMIPS @50MHZ benötigt bei dieser Taktfrequenz nur etwa 10mA. (Details siehe NXP-Seite)&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features :&lt;br /&gt;
** LPC1100 Serie: • I2C, SSP, UART, GPIO, • Timers and watch dog timer, • 10-bit ADC, • Flash/SRAM memory, • Weitere Funktionen, siehe &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/LPC1xxx#Features_eines_LPC11xx 2.3 Features]&#039;&#039;&#039;&lt;br /&gt;
** LPC1100L Serie zusätzlich zu LPC1100: • Power Profile mit lower power consumption in Active- und Sleep-mode, • Interne pull-ups auf VDD level, • Programmierbarer pseudo open-drain mode für GPIO Pins, • WWDT mit Clock Source Lock.&lt;br /&gt;
**LPC11C00 Serie zusätzlich zu LPC1100: • CAN controller, • On-chip CAN Treiber, • On-chip CAN Transceiver (LPC11C2x), • WDT (not windowed) mit Clock Source Lock.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10398.pdf User Manual der LPC11-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Besonderes Augenmerk möchte ich auf die neue Serie  &#039;&#039;&#039;[http://www.nxp.com/ps/#/i=71498 LPC111xFD]&#039;&#039;&#039; legen, denn in jetzt gibt es den Cortex-M0 auch im DIL 28 &#039;&#039;&#039;[http://www.nxp.com/redirect/pip/LPC1114FN28.html den LPC1114FN28]&#039;&#039;&#039;&lt;br /&gt;
**Des Weiteren sind damit SO20, sowie TSSOP20 und TSSOP28 Bauformen verfügbar&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC12xx (Cortex-M0) ===&lt;br /&gt;
* Die Low Power &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc12xx/ LPC12xx-Serie]&#039;&#039;&#039; (3,3V) ist laut NXP (Sep2011) ein Cortex-M0 mit 32 bis 128kB Flash, einem 45 CoreMark™ Benchmark-Score bei 30MHz, 2 bis 8kB SRAM, und einem internen 1% genauen 12MHz Oscillator.&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features: fMAX von 30MHz, 1 10-Bit  ADC mit 8 Kanälen, 2 Comparatoren, 2 UARTs, 1 SSP/SPI, 1 I2C, DMA Controller, CRC Engine, 1 32-Bit, 5 Timer (16- und 32-Bit, + RTC), 13 PWM Kanäle, bis zu 55 GPIOs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10441.pdf User Manual der LPC12xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC13xx (Cortex-M3) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc13xx/ LPC13xx-Serie]&#039;&#039;&#039; (3,3V) bietet im LQFP 48 Gehäuse 8..32k Flash, 2..8k SRAM, 5 Timer (mit WD), 11 PWM, 1 UART, 1IIC, 1USB, 1..2 SPI, einen 8-Kanal/10Bit AD-Wandler und eine Taktfrequenz von max. 72MHz. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10375.pdf User Manual der LPC13xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC17xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc17xx/ LPC17xx-Serie]&#039;&#039;&#039; hingegen enthält eine weit größere Peripherie in einem LQFP80/100/144/208 Package.&lt;br /&gt;
32..512k Flash, 8..96k SRAM, 6 Timer (mit WD), 6 zusätzliche PWM-Einheiten, teilweise Ethernet und STN/TFT-LCD-Controller, meist USB (teilw. mit Host+OTG), 4 UART, 2..3IIC, 1..2 CAN, 1 SPI, 2 SSP/SPI einen 6..8-Kanal/12Bit AD-Wandler, einen 10Bit DAC, Motor-Control-Einheiten, einen Encoder-Eingang und eine Taktfrequenz von max. 100MHz(120MHz) und vieles mehr. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10360.pdf User Manual der LPC17xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC18xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc18xx/ LPC18xx-Serie]&#039;&#039;&#039; stellt DIE &amp;quot;High-Performance&amp;quot; Controller aus der Cortex-M3-Serie. Die Taktfrequenz geht bis 150MHz, die Controller enthalten große dual-Bank Flash Speicher bis zu 1MB, ein großes On-Chip SRAM mit bis zu 200KB, zusätzliche Peripherie wie z.B. SPI Flash Interface (SPIFI) und State Configurable Timer (SCT), 2x High Speed USB (1x mit On-Chip HS PHY) und eine MPU.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://ics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc18xx.pdf User Manual der LPC18xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features: &#039;&#039;&#039;[http://ics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc18xx.pdf LPC18xx Flyer von NXP]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungskits ===&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Kostenlose Entwicklungsumgebung für ALLE hier genannten Controller ===&lt;br /&gt;
Für die ganze Prozessorfamilie ist eine &amp;lt;u&amp;gt;kostenlose&amp;lt;/u&amp;gt; Entwicklungsumgebung  erhältlich. Informationen unter &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home  lpcware]&#039;&#039;&#039;: Die auf Eclipse basierende Entwicklungsumgebung ist nach der Installation bis 8k freigeschaltet und nach einer einfachen und kostenlosen Registrierung für 256kB. Die IDE ist auch für &#039;&#039;&#039;[http://www.lpcware.com/lpcxpresso/home Linux und Mac]&#039;&#039;&#039; verfügbar.&lt;br /&gt;
&lt;br /&gt;
Hier die &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== LPC8xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC8xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 06/2016)&lt;br /&gt;
* LPC810FN8 (DIP8): Digikey 1,09 € (bei einem Stuck).&lt;br /&gt;
* LPC812JD20 (SOIC-W 20): Digikey 1,26 € (bei einem Stuck).&lt;br /&gt;
* LPC812JDH20 (TSSOP-20): Digikey 1,44 € (bei einem Stuck).&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC800_block_diagram_Jan2014.gif|thumb|right|850px|Blockdiagramm des Cortex-M0+, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC8xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC8xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0+ processor, running at frequencies of up to 30 MHz. &lt;br /&gt;
** single cycle multiplier&lt;br /&gt;
** single cycle I/O port&lt;br /&gt;
** ARM Cortex-M0+ built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug, Micro Trace Buffer supported.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 16 kB (LPC812M101JD20/LPC812M101JDH20/LPC812M101JDH16), 8 kB (LPC811M001JDH16) or 4kB (LPC810M021FN8) on-chip flash programming memory. &lt;br /&gt;
**  4kB, 2 kB, or 1 kB SRAM.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 18 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages down to 6.&lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
** &#039;&#039;&#039;Switch matrix for flexible configuration of each I/O pin function.&#039;&#039;&#039;&lt;br /&gt;
** CRC engine&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** Comparator with internal and external references and 31 step voltage divider.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 9.4 kHz to 2.3 MHz.&lt;br /&gt;
** 10 kHz low-power oscillator for the WKT.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Reduced power modes: Sleep mode, Deep-sleep mode, Power-down mode, and Deep power-down mode.&lt;br /&gt;
** Wake-up from Deep-sleep and Power-down modes on activity on USART, SPI, and I2C peripherals.&lt;br /&gt;
** Brownout detect.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available as DIP8, TSSOP16, SO20, and TSSOP20 package.&lt;br /&gt;
&lt;br /&gt;
== LPC11xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC11xx ===&lt;br /&gt;
Bezugsquellen und Preise (Stand 01/2014):&lt;br /&gt;
&lt;br /&gt;
elpro.org: von 1.61EUR (LPC1111FN33) bis 5.73EUR (LPC11U37) bei einen Stueck. Die Familie ist sehr gross mit sehr unterschiedlichen Ausfuehrungen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC11xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC11xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 50 MHz. &lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32 kB (LPC1114/LPC11C14), 24 kB (LPC1113), 16 kB (LPC1112/LPC11C12), or 8 kB (LPC1111) on-chip flash programming memory.  &lt;br /&gt;
** 8 kB, 4 kB, or 2 kB SRAM. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages and LPC11C22/C24. &lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two open drain pins.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** SPI controllers with SSP features and with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. &lt;br /&gt;
** Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 13 of the functional pins.&lt;br /&gt;
** Power-On Reset (POR). &lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset. &lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available in the following packages: 16WLCSP, 25WLCSP 20-SOIC, 20-TSSOP, 28-DIP, 28-TSSOP, 48-LQFP, 64-LQFP, 100-LQFP, and others.&lt;br /&gt;
&lt;br /&gt;
== LPC12xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC12xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
[[Bild:block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC12xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC12xx ===&lt;br /&gt;
&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 45 MHz (one wait state from flash) or 30 MHz (zero wait states from flash). The LPC122x have a high score of over 45 in CoreMark CPU performance benchmark testing, equivalent to 1.51/MHz.&lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug (SWD).&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory&lt;br /&gt;
** Up to 8 kB SRAM.&lt;br /&gt;
** Up to 128 kB on-chip flash programming memory. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Includes ROM-based 32-bit integer division routines.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz Internal RC (IRC) oscillator trimmed to 1 % accuracy that can optionally be used as a system clock.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, main clock, and Watchdog clock.&lt;br /&gt;
** Real-Time Clock (RTC).&lt;br /&gt;
* Digital peripherals&lt;br /&gt;
** Micro DMA controller with 21 channels.&lt;br /&gt;
** CRC engine.&lt;br /&gt;
** Two UARTs with fractional baud rate generation and internal FIFO. One UART with RS-485 and modem support and one standard UART with IrDA.&lt;br /&gt;
** SSP/SPI controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. I2C-bus pins have programmable glitch filter.&lt;br /&gt;
** Up to 55 General Purpose I/O (GPIO) pins with programmable pull-up resistor, open-drain mode, programmable digital input glitch filter, and programmable input inverter. &lt;br /&gt;
** Programmable output drive on all GPIO pins. Four pins support high-current output drivers.&lt;br /&gt;
** All GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** Four general purpose counter/timers with four capture inputs and four match outputs (32-bit timers) or two capture inputs and two match outputs (16-bit timers). &lt;br /&gt;
** Windowed WatchDog Timer (WWDT).&lt;br /&gt;
* Analog peripherals&lt;br /&gt;
** One 8-channel, 10-bit ADC.&lt;br /&gt;
** Two highly flexible analog comparators. Comparator outputs can be programmed to trigger a timer match signal or can be used to emulate 555 timer behavior.&lt;br /&gt;
* Power&lt;br /&gt;
** Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Deep-sleep mode via start logic using 12 port pins.&lt;br /&gt;
** Processor wake-up from Deep-power down and Deep-sleep modes via the RTC.&lt;br /&gt;
** Brownout detect with three separate thresholds each for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
** Integrated PMU (Power Management Unit).&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* 3.3 V power supply.&lt;br /&gt;
* Available as 64-pin and 48-pin LQFP package.&lt;br /&gt;
&lt;br /&gt;
== LPC13xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC13xx ===&lt;br /&gt;
[[Bild:LPC13xx_Selection_Guide_Sep2011.png|thumb|left|600px|Selection Guide zur LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1313 mit 32k-Flash mit 72MHz im LQFP 48 Gehäuse. Der LPC1313 ist bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; erhältlich für 3,57 € (Juli 2016), oder elpro.org für 2,29 €.  Entwicklungskit INKLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1343-LPCXpresso-Board Watterott]&#039;&#039;&#039; für 23,80 € (Juli 2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC13xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC13xx Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1313 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 72 MHz.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 32 kB on-chip flash programming memory.&lt;br /&gt;
* 8 kB SRAM.&lt;br /&gt;
* In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* UART with fractional baud rate generation, modem, internal FIFO, and RS-485/EIA-485 support.&lt;br /&gt;
* SSP controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
* Additional SSP controller on LPC1313FBD48/01.&lt;br /&gt;
* I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode.&lt;br /&gt;
* Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors.&lt;br /&gt;
* Four general purpose counter/timers with a total of four capture inputs and 13 match outputs.&lt;br /&gt;
* Programmable Watchdog Timer (WDT) &lt;br /&gt;
* System tick timer.&lt;br /&gt;
* Serial Wire Debug and Serial Wire Trace port.&lt;br /&gt;
* High-current output driver (20 mA) on one pin.&lt;br /&gt;
* High-current sink drivers (20 mA) on two I2C-bus pins in Fast-mode Plus.&lt;br /&gt;
* Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
* Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
* Single power supply (2.0 V to 3.6 V).&lt;br /&gt;
* 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
* Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, or the watchdog clock.&lt;br /&gt;
* Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 40 of the functional pins.&lt;br /&gt;
* Brownout detect with four separate thresholds for interrupt and one thresholds for forced reset.&lt;br /&gt;
* Power-On Reset (POR).&lt;br /&gt;
* Integrated oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 12 MHz internal RC oscillator trimmed to 1 % accuracy over the entire temperature and voltage range that can optionally be used as a system clock.&lt;br /&gt;
* Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz. System PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
* Code Read Protection (CRP) with different security levels.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Available as 48-pin LQFP package and 33-pin HVQFN package.&lt;br /&gt;
&lt;br /&gt;
== LPC17xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC17xx ===&lt;br /&gt;
[[Bild:LPC17xx_Selection_Guide_Sep2011.png|thumb|left|680px|Selection Guide zur LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1754 mit 128K Flash im LQFP80, der bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; für 7€74 (Juli/2011) erhältlich ist,[den LPC1751 (32k/8k) schon für 5€95] und bei Digikey für 6€35, den LPC1764FBD100 bei &#039;&#039;&#039;[http://www.tme.eu/de TME]&#039;&#039;&#039;    für 7€ Entwicklungskit INCLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1769-LPCXpresso Watterott]&#039;&#039;&#039; für 23€80 (Juli/2011)&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagram der LPC17xx Familie ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC177x_178x Block Diagram Sep2011.png|thumb|left|680px|Blockdiagramm der LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1754 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 100 MHz &lt;br /&gt;
* A Memory Protection Unit (MPU) supporting eight regions is included.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 128 kB on-chip flash program memory with In-System Programming (ISP) and In-Application Programming (IAP) capabilities. &lt;br /&gt;
* 32 kB of SRAM on the CPU with local code/data bus for high-performance CPU access.&lt;br /&gt;
* Eight channel General Purpose DMA controller &lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
* USB 2.0 full-speed controller that can be configured for either device, Host, or OTG operation with an on-chip PHY for device and Host functions &lt;br /&gt;
* Four UARTs with fractional baud rate generation, internal FIFO, IrDA, and DMA, Einer mit Modem I/Os und RS485 Support&lt;br /&gt;
* 1 CAN controller.&lt;br /&gt;
* 2 SSP controllers &lt;br /&gt;
* 1 SPI controller &lt;br /&gt;
* 2 I2C-bus interfaces with data rates of 1Mbit/s,&lt;br /&gt;
* I2S (Inter-IC Sound) &lt;br /&gt;
* 52  General Purpose I/O (GPIO) pins Any pin of ports 0 and 2 can be used to generate an interrupt.&lt;br /&gt;
* 8x 12-bit Analog-to-Digital Converter (ADC) conversion rates up to 200 kHz&lt;br /&gt;
* 1x 10-bit Digital-to-Analog Converter (DAC) &lt;br /&gt;
* Four general purpose timers/counters, with a total of eight capture inputs and ten compare outputs. &lt;br /&gt;
* One motor control PWM with support for three-phase motor control.&lt;br /&gt;
* Quadrature encoder interface that can monitor one external quadrature encoder.&lt;br /&gt;
* One standard PWM/timer block with external count input.&lt;br /&gt;
* Real-Time Clock (RTC) with a separate power domain including 20 bytes of battery-powered backup registers,  An RTC interrupt can wake up the CPU from any reduced power mode.&lt;br /&gt;
* Watchdog Timer (WDT). &lt;br /&gt;
* Cortex-M3 system tick timer&lt;br /&gt;
* Repetitive interrupt timer &lt;br /&gt;
* Standard JTAG test/debug interface as well as Serial Wire Debug and Serial Wire Trace Port options.&lt;br /&gt;
* Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
* Single 3.3 V power supply (2.4 V to 3.6 V). &lt;br /&gt;
* Four external interrupt inputs configurable as edge/level sensitive. All pins on PORT0 and PORT2 can be used as edge sensitive interrupt sources.&lt;br /&gt;
* Non-maskable Interrupt (NMI) input.&lt;br /&gt;
* Wakeup Interrupt Controller (WIC) &lt;br /&gt;
* Each peripheral has its own clock divider for further power savings.&lt;br /&gt;
* Brownout detect with separate threshold for interrupt and forced reset.&lt;br /&gt;
* On-chip Power-On Reset (POR).&lt;br /&gt;
* On-chip crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 4 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
* An on-chip PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the main oscillator, the internal RC oscillator, or the RTC oscillator.&lt;br /&gt;
* Available as 80-pin LQFP (12 x 12 x 1.4 mm) packages.&lt;br /&gt;
&lt;br /&gt;
== LPC18xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC18xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC18xx Familie ===&lt;br /&gt;
[[Bild:block.diagram_NXP18xx Sep2011.gif|thumb|left|680px|Blockdiagramm der LPC18xx Familie, ©NXP.com]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC18xx ===&lt;br /&gt;
DRAFT!&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M3 processor, running at frequencies of up to 180 MHz.&lt;br /&gt;
** ARM Cortex-M3 built-in Memory Protection Unit (MPU) supporting eight regions.&lt;br /&gt;
** ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Non-maskable Interrupt (NMI) input.&lt;br /&gt;
** JTAG and Serial Wire Debug, serial trace, eight breakpoints, and four watch points.&lt;br /&gt;
** ETM and ETB support.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* On-chip memory (flashless parts LPC1850/30/20/10)&lt;br /&gt;
** Up to 200 kB SRAM total for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 64 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* On-chip memory (parts with on-chip flash)&lt;br /&gt;
** Up to 1 MB total dual bank flash memory with flash accelerator.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Up to 136 kB SRAM for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 32 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1 % accuracy.&lt;br /&gt;
** Ultra-low power RTC crystal oscillator.&lt;br /&gt;
** Three PLLs allow CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. The second PLL is dedicated to the High-speed USB, the third PLL can be used as audio PLL.&lt;br /&gt;
** Clock output.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** Quad SPI Flash Interface (SPIFI) with four lanes and data rates of up to 40 MB per second total.&lt;br /&gt;
** 10/100T Ethernet MAC with RMII and MII interfaces and DMA support for high throughput at low CPU load. Support for IEEE 1588 time stamping/advanced time stamping (IEEE 1588-2008 v2).&lt;br /&gt;
** One High-speed USB 2.0 Host/Device/OTG interface with DMA support and on-chip PHY.&lt;br /&gt;
** One High-speed USB 2.0 Host/Device interface with DMA support, on-chip full-speed PHY and ULPI interface to external high-speed PHY.&lt;br /&gt;
** USB interface electrical test software included in ROM USB stack.&lt;br /&gt;
** Four 550 UARTs with DMA support: one UART with full modem interface; one UART with IrDA interface; three USARTs support synchronous mode and a smart card interface conforming to ISO7816 specification.&lt;br /&gt;
** Two C_CAN 2.0B controllers with one channel each.&lt;br /&gt;
** Two SSP controllers with FIFO and multi-protocol support. Both SSPs with DMA support.&lt;br /&gt;
** One Fast-mode Plus I2C-bus interface with monitor mode and with open-drain I/O pins conforming to the full I2C-bus specification. Supports data rates of up to 1 Mbit/s.&lt;br /&gt;
** One standard I2C-bus interface with monitor mode and standard I/O pins.&lt;br /&gt;
** Two I2S interfaces with DMA support, each with one input and one output.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** External Memory Controller (EMC) supporting external SRAM, ROM, NOR flash, and SDRAM devices.&lt;br /&gt;
** LCD controller with DMA support and a programmable display resolution of up to 1024H x 768V. Supports monochrome and color STN panels and TFT color panels; supports 1/2/4/8 bpp CLUT and 16/24-bit direct pixel mapping.&lt;br /&gt;
** SD/MMC card interface.&lt;br /&gt;
** Eight-channel General-Purpose DMA (GPDMA) controller can access all memories on the AHB and all DMA-capable AHB slaves.&lt;br /&gt;
** Up to 80 General-Purpose Input/Output (GPIO) pins with configurable pull-up/pull-down resistors and open-drain modes. &lt;br /&gt;
** GPIO registers are located on the AHB for fast access. GPIO ports have DMA support.&lt;br /&gt;
** State Configurable Timer (SCT) subsystem on AHB.&lt;br /&gt;
** Four general-purpose timer/counters with capture and match capabilities.&lt;br /&gt;
** One motor control PWM for three-phase motor control.&lt;br /&gt;
** One Quadrature Encoder Interface (QEI).&lt;br /&gt;
** Repetitive Interrupt timer (RI timer).&lt;br /&gt;
** Windowed watchdog timer.&lt;br /&gt;
** Ultra-low power Real-Time Clock (RTC) on separate power domain with 256 bytes of battery powered backup registers.&lt;br /&gt;
** Alarm timer; can be battery powered.&lt;br /&gt;
* Digital peripherals available on flash-based parts LPC18xx only:&lt;br /&gt;
** &amp;lt;tbd&amp;gt;&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** One 10-bit DAC with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
** Two 10-bit ADCs with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
* Security:&lt;br /&gt;
** Hardware-based AES security engine programmable through an on-chip API.&lt;br /&gt;
** Two 128-bit secure OTP memories for AES key storage and customer use.&lt;br /&gt;
** Unique ID for each device.&lt;br /&gt;
* Power: &lt;br /&gt;
** Single 3.3 V (2.2 V to 3.6 V) power supply with on-chip internal voltage regulator for the core supply and the RTC power domain.&lt;br /&gt;
** RTC power domain can be powered separately by a 3 V battery supply.&lt;br /&gt;
** Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Sleep mode via wake-up interrupts from various eripherals. &lt;br /&gt;
** Wake-up from Deep-sleep, Power-down, and Deep power-down modes via external interrupts and interrupts generated by battery powered blocks in the RTC power domain.&lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
* Available as 100-pin, 144-pin, and 208-pin LQFP packages and as 100-pin, 180-pin, and 256-pin LBGA packages.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
=== LPCWare (kostenlos) ===&lt;br /&gt;
[[Bild:lpcxpresso-debug_Code-red_3Sep2011.gif|thumb|right|680px|Ansicht der Entwicklungsumgebung, ©code-red-tech.com]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Entwicklungs Tool ====&lt;br /&gt;
(Beschreibung aus der Web-Site:)&lt;br /&gt;
LPCXpresso&#039;s IDE (Ursprünglich von &amp;quot;Code RED&amp;quot; entwickelt, die Firma wurde 2013 von LPC gekauft) ist eine hoch integrierte Entwicklungsumgebung für LPC-Controller, und beinhaltet alle zur Entwicklung erforderlichen Tools um hoch qualitative Software in einer angemessenen Zeit zu schreiben. LPCXpresso basiert auf ein vereinfachtes Eclipse mit vielen LPC-specifischen Erweiterungen.&lt;br /&gt;
Des Weiteren ist eine aktuelle Version der Industrie-Standard GNU Tool-Chain mit einer propritären und optimierten C-Lib mit dabei. Die LPCXpresso IDE stellt ein voll optimiertes Executable zur Verfügung. Die einzige Beschränkung der kostenlosen Version ist eine Limitierung auf 256kB Code nach erfolgter Registrierung.&lt;br /&gt;
Das LPCXpresso Target Board ist eine Gemeinschaftsentwicklung von Embedded Artists, Code Red und NXP.&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
Die LPCXpresso IDE stellt eine C-Umgebung mit Syntax-Colouring, Source-Formatierung, Funktions-Folding, sowie mit Online- und Offline Hilfe und umfangreichen Projekt-Management Funktionen zur Verfügung.  &lt;br /&gt;
Dies beinhaltet:&lt;br /&gt;
* Wizards um Projekte für alle unterstützten Controller zu erstellen &lt;br /&gt;
* Automatische Linker Script Generierung inklusive Memory-Map Unterstützung &lt;br /&gt;
* Programmierung des Controllers&lt;br /&gt;
* On-Line Debugging&lt;br /&gt;
* Datenblatt-Zugriff über eingebauten Browser&lt;br /&gt;
* Support für die NXP LPC Microcontroller Familien, von Cortex-M0, Cortex-M3 bis Cortex-M4 und ARM7 bis ARM9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Peripherie und Register Views im Debugger ====&lt;br /&gt;
Der Peripherie-Viewer im integrierten Debugger zeigt alle Register und Bit-Felder in einer einfachen Baumstruktur.&lt;br /&gt;
Ein Prozessor-Register Viewer erlaubt den Zugriff auf alle Prozessor-Register und stellt eine &amp;quot;Smart-Formatting&amp;quot;  Funktion zur Verfügung um komplexe Register wie Flags oder Status Register übersichtlich darstellen zu können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Unterstützte Familien ====&lt;br /&gt;
Cortex-M0, Cortex-M3, Cortex-M4, Einzelne Controller aus der LPC2000 family, ARM966, ARM926-EJ, ARM926-EJ + VFP&lt;br /&gt;
&lt;br /&gt;
==== Sehr preiswerter USB_JTAG_SWD Debugger ====&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039; und diese &#039;&#039;&#039;[http://www.mikrocontroller.net/wikisoftware/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso Beschreibung]&#039;&#039;&#039;&lt;br /&gt;
Der neue Programmer/Debugger ist hier für ca 18€ +P&amp;amp;P erhältlich &#039;&#039;&#039;[http://www.watterott.com/de/LPC-Link-2 Programmer]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Standard Library ====&lt;br /&gt;
Im Download der &amp;quot;Code Red&amp;quot; Entwicklungsumgebung ist eine relativ umfangreiche Firmwarebibliothek vorhanden.&lt;br /&gt;
&lt;br /&gt;
==== Installationsanleitung zur IDE ====&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Codebase für LPC11xx und LPC13xx ====&lt;br /&gt;
Für die Cortex-M0 und -M3 Familien existieren verschiedene Basispakete die als Startausstattung sehr gut geeignet sind. Auf microbuilder.eu findet man eine sehr interessante Version inklusive Dokumentation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Codebase_f%C3%BCr_LPC1xxx HIER]&#039;&#039;&#039; findet man alle Links zur original Codebase mit allen Dateien (Stand Januar 2012) aber auch eine deutsche Übersetzung zu den Files.&lt;br /&gt;
&lt;br /&gt;
=== CooCox ===&lt;br /&gt;
&lt;br /&gt;
Auf der &#039;&#039;&#039;[http://www.coocox.org/Index.html Homepage]&#039;&#039;&#039; von CooCox - einem chinesischen Open-Source Projekt, auf der eine IDE für Atmel, Energy Micro, Holtek, Nuvoton, ST, TI und NXP verfügbar ist  - findet man die auf Eclipse basierende &amp;quot;CooCox CoIDE&amp;quot;, die sich aus dem &amp;quot;CoBuilder&amp;quot; und dem &amp;quot;CoDebugger&amp;quot; zusammensetzt.&lt;br /&gt;
Des Weiteren bietet man dort ein Echtzeit-Multitasking Betriebssystem, sowie SW-Versionen von zwei unterschiedliche Debugging-Adapter und ein Stand-alone Flash-Tool zum freien Download an.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Controller können damit programmiert und debugged werden:&lt;br /&gt;
    LPC1111x101    LPC1111x201   LPC1112x101   LPC1112x201&lt;br /&gt;
    LPC1113x201    LPC1113x301   LPC1114x201   LPC1114x301&lt;br /&gt;
    LPC11C14x301   LPC11C12x301&lt;br /&gt;
    LPC1224x101    LPC1224x121   LPC1225x301   LPC1225x321   LPC1226x301  LPC1227x301&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    LPC1311   LPC1313   LPC1342   LPC1343&lt;br /&gt;
    LPC1751   LPC1752   LPC1754   LPC1756   LPC1758   LPC1759&lt;br /&gt;
    LPC1763   LPC1764   LPC1765   LPC1766   LPC1767   LPC1768   LPC1769&lt;br /&gt;
&lt;br /&gt;
=== EmBlocks ===&lt;br /&gt;
&#039;&#039;&#039;[http://www.emblocks.org/web/ Emblocks]&#039;&#039;&#039; ist eine kostenlose Entwicklungsumgebung. Sie unterstützt neben NXP uC weitere ARM uC (STM32, EFM32) sowie PIC, AVR und MSP430. Die IDE hat einen eingebauten GDB Debugger welcher System view (Peripherie Register anzeigen) beim Debuggen unterstützt. Ausserdem gibt es einen Project Wizzard für NXP uC &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Unterstützt wird der JLINK mit folgenden NXP uC:&lt;br /&gt;
LPC11Axx, LPC11Exx, LPC11Uxx, LPC11xxLV, LPC12xx, LPC13Uxx, LPC13xx, LPC17xx, LPC18xx, LPC18xx, LPC177x_8x, LPC407x_8x&lt;br /&gt;
&lt;br /&gt;
=== Codebase ===&lt;br /&gt;
Des Weiteren existiert eine umfangreiche Sammlung von &#039;&#039;&#039;[http://www.coocox.org/NXP-Series.php Code-Beispielen]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Keil ===&lt;br /&gt;
[https://www.keil.com/demo/eval/arm.htm KEIL MDK-ARM] (Windows, Free Version auf 32KB begrenzt, mit vielen Beispielen zu div. Evaluation Boards) &lt;br /&gt;
*[http://www.keil.com/arm/chips.asp unterstützte Mikrocontroller]&lt;br /&gt;
=== WinARM ===&lt;br /&gt;
[http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/#winarm WinARM] (wird derzeit nicht gepflegt)&lt;br /&gt;
&lt;br /&gt;
=== GNUARM ===&lt;br /&gt;
[http://gnuarm.com/ GNUARM] (Linux, Windows, wird derzeit nicht gepflegt), &lt;br /&gt;
&lt;br /&gt;
=== Yagarto ===&lt;br /&gt;
[http://www.yagarto.de/ Yagarto] (Windows, mit Eclipse-Integration) &lt;br /&gt;
&lt;br /&gt;
=== CodeSourcery ===&lt;br /&gt;
[http://www.codesourcery.com/gnu_toolchains/arm CodeSourcery CodeBench Lite]&lt;br /&gt;
&lt;br /&gt;
== CMSIS  -  Standard für alle Plattformen ==&lt;br /&gt;
Der Cortex Microcontroller Software Interface Standard (CMSIS) stellt einen &amp;quot;abstraction layer&amp;quot; für alle Cortex-Mx Controller zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
CMSIS stellt einen Schnittstellenstandard von ARM dar, der von vielen Tool-Herstellern unterstützt wird und ist (laut verschiedener Berichte)  kompatibel mit den verschiedensten Compilern (incl GCC). Dies wird erreicht durch einheitliche Definitionen für Adressen und Namen die den Zugriff auf die Register des Cores und der Peripherie ermöglichen.&lt;br /&gt;
Auch Standard-Funktionen für den Start und die Interrupts stehen zur Verfügung.&lt;br /&gt;
Natürlich kann auch weiterhin direkt auf die HW zugegriffen werden, es geht nur um eine Vereinheitlichung von identischen Funktionen. &lt;br /&gt;
Da die Peripherie-Teile zumindest innerhalb eines Halbleiterherstellers für die Cortex-Mx Controller sehr ähnlich oder sogar weitgehend identisch sind kann deutlich mehr SW für verschiedene Derivate innerhalb dieser Prozessorfamilien wiederverwendet werden.  (siehe Google: &amp;quot;CMSIS_Doulos_Tutorial.pdf&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Ein weiterer, interessanter Punkt ist die CMSIS-DSP Lib mit ihren Vektorfunktionen, Matrix-Berechnung sowie komplexen Algorithmen für Filter, &lt;br /&gt;
Regler und Fourietransformation sowie weiterer DSP Algorithmen (insgesamt 61).&lt;br /&gt;
&lt;br /&gt;
Leider hat diese Kompatibilität auch ihre Grenzen, denn Sonderfunktionen bzw. Spezialitäten in der &amp;quot;gleichen&amp;quot; Peripherie zwischen unterschiedlichen Halbleiterherstellern werden nicht abgedeckt. &lt;br /&gt;
Wäre auch zu schön, wenn die Prozesorhersteller dem Entwickler dadurch einen fliegenden HW-Wechsel bzw. eine einfache Vergleichbarkeit ermöglichen würden ;-)&lt;br /&gt;
&lt;br /&gt;
Eine komplette CMSIS-Lib (V2.0) &amp;quot;Cortex Microcontroller Software Interface Standard&amp;quot; ist für das &amp;quot;Code Red&amp;quot; Paket verfügbar, inklusive einer &amp;quot;DSP-Library&amp;quot; &lt;br /&gt;
http://support.code-red-tech.com/CodeRedWiki/NewInVersion4&lt;br /&gt;
bzw. für GNU / Keil / IAR unter&lt;br /&gt;
http://ics.nxp.com/support/documents/microcontrollers/?search=CMSIS&amp;amp;type=software&amp;amp;Search.x=8&amp;amp;Search.y=12&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* Wiki&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx_Entwicklungskit_LPCXpresso]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Codebase_f%C3%BCr_LPC1xxx]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[LPC1xxx für Umsteiger]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Projekte&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/264089 FreeRTOS auf LPC1768]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/321481 Multithreading auf LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/319537 Python Script zum Flashen des LPC8xx]&lt;br /&gt;
&lt;br /&gt;
* Suche im Forum&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC8* LPC8xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC12* LPC12xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC13* LPC13xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC17* LPC17xx]&lt;br /&gt;
** [http://www.mikrocontroller.net/search?query=LPC18* LPC18xx]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
(Die Preiswertesten sind &#039;&#039;&#039;fett&#039;&#039;&#039; dargestellt)&lt;br /&gt;
* &#039;&#039;&#039;[http://darisusgmbh.de/shop/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 Darisus]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[http://www.elpro.org/shop/shop.php elpro]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.hbe-shop.de HBE] &lt;br /&gt;
* [http://www.tme.eu/de/katalog#cleanParameters%3D1%26searchClick%3D1%26search%3DLPC1%26bf_szukaj%3D+ TME]&lt;br /&gt;
* [http://www.tn-electronics.de/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 TN]&lt;br /&gt;
* [http://de.mouser.com/_/?Keyword=LPC1&amp;amp;Ns=Pricing|0&amp;amp;FS=True Mouser]&lt;br /&gt;
* [http://www.soselectronic.eu/?searchstring=LPC1&amp;amp;str=378 SOS]&lt;br /&gt;
* [http://de.farnell.com Farnell/Element14]&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
* [http://www.watterott.com/index.php?page=search&amp;amp;page_action=query&amp;amp;desc=off&amp;amp;sdesc=on&amp;amp;keywords=LPCXpresso Watterott (24€ inclusive JTAG-Programmiergerät UND JTAG Debugger für kostenlose &amp;quot;Code-Red&amp;quot; Entwicklungsplattform)], dazu hier die [[LPC1xxx_Entwicklungskit_LPCXpresso|Beschreibung]]&lt;br /&gt;
* [http://www.lpctools.com/evaluationboardskitsforlpc17xx.aspx LPC-Tools]&lt;br /&gt;
* [http://thinkembedded.ch/NXP:::25.html thinkembedded.ch] div. Olimex Boards&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* http://www.nxp.com/#/page/content=[f=/dynamic/applicationnotes/tid-50809_sid-56890/data.xml] Appnotes&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html Projects]&lt;br /&gt;
* [http://mbed.org/handbook/Homepage MBED]&lt;br /&gt;
* [http://forums.nxp.com/forums/viewforum.php?f=1 NXP-WIKI]&lt;br /&gt;
* [http://knowledgebase.nxp.com/forumdisplay.php?s=389a3610c741bca7b18221d32b9c0ce0&amp;amp;f=4 NXP-Forum]&lt;br /&gt;
* [http://ics.nxp.com/lpcxpresso/ LPCXpresso]&lt;br /&gt;
* [http://code.google.com/p/32bitmicro/ 32BitMicro]&lt;br /&gt;
* [http://www.brc-electronics.nl SimpleCortex]&lt;br /&gt;
* [http://www.lpcware.com/ LPCWare NXP MCU community]&lt;br /&gt;
* [http://nanohome.be/nxp/index.html LPC175/6x und LPC23xx pin Configurator]&lt;br /&gt;
* [https://code.google.com/p/lpc-1768-arm-synthesizer/  MIDI controlled monophonic synthesizer based on the LPCXpresso 1768.]&lt;br /&gt;
* [https://code.google.com/p/lpc1343codebase/  An open source software library for NXP&#039;s Cortex-M3 based LPC1300 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc1114codebase/   An open source software library for NXP&#039;s Cortex-M0 based LPC1100 microcontroller family]&lt;br /&gt;
* [https://code.google.com/p/lpc-12xx-bootloader/  A flexible bootloader for use with LPC12xx Microcontrollers from NXP, Firmware code is AES128 encrypted to secure your project / source code when giving out public firmware updates. ]&lt;br /&gt;
* [https://code.google.com/p/lpcxpresso-rc/   Read receiver and sensor signals for radio controlled model aircrafts configured for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/olpcx/   Open toolset for LPCXpresso]&lt;br /&gt;
* [https://code.google.com/p/32bitmicro/   Collection of code and tools for 32 bit microcontrollers]&lt;br /&gt;
* [https://code.google.com/p/my-nxp-lpc1114/   my-nxp-lpc1114 study course]&lt;br /&gt;
* [https://code.google.com/p/nxp-lpc/   nxp-lpc]&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsplattformen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.lpcware.com/lpcxpresso/home LPDXpresso Download (Kostenlos mit Debugger)]&lt;br /&gt;
* [http://www.lpcware.com LPCXpresso Homepage]&lt;br /&gt;
* [http://support.code-red-tech.com/CodeRedWiki/WikiHome CR-WIKI]&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp ARM/Keil MDK-ARM]&lt;br /&gt;
* IAR EWARM&lt;br /&gt;
* Rowley Crossworks&lt;br /&gt;
* Green Hills Software &lt;br /&gt;
* [http://www.coocox.org/CooCox_CoIDE.htm CooCox] (Kostenlos)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:LPC1x]]&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91208</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91208"/>
		<updated>2016-01-12T01:37:06Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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;
Here you can select which protocols should be supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]. Standardprotocols are activated by default.&lt;br /&gt;
Would you like to turn on more protocols or turn off some other for memory saving reasons, then the corresponding values in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] must be set.&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;
Each [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported IR protocoll consumes the noted amount of code. Here you can apply optimizations: for example the modulation frequency of 455 kHz for the [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] protocol is far away from the frequencies that are used by other protocols. Maybe you need a different IR receiver, otherwise you could disable these protocols. For example you cannot receive a [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]]-protocol (455kHz) with a TSOP1738 / TSOP 31238.&lt;br /&gt;
&lt;br /&gt;
Furthermore the protocols [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] are only reliable detected at a frequency starting at 15 kHz. For [[IRMP_-_english#LEGO|LEGO]] it is even 20 kHz. When you want to use these protocols, you must adjust [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]]. Otherwise, during compilation you will get a warning and the corresponding protocols are automatically disabled.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
This constant defines the pin where the IR receiver is connected.&lt;br /&gt;
&lt;br /&gt;
Default value is 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;
These two values must match your hardware configuration.&lt;br /&gt;
&lt;br /&gt;
This applies also to STM32 µC&#039;s:&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;
And the corresponding section for STM8 µC&#039;s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PIC controllers there is only the define for &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - depending on 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;
Default value:&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;
When you turn on callbacks, on any level change at the input the callback function is called. This could be use to visualize incomming IR signals by driving another output pin.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&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;
With IRMP_LOGGING the logging of received IR frames can be turned on.&lt;br /&gt;
&lt;br /&gt;
Default value:&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;
Further documentation can be found here: [[IRMP_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported protocols use partly variable, partly fixed bit length from 2 up to 48 bits. These will be described by preprocessor defines.&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] separates these IR frames always into 3 sections:&lt;br /&gt;
&lt;br /&gt;
 1. protocol ID&lt;br /&gt;
 2. address or vendorcode&lt;br /&gt;
 3. command&lt;br /&gt;
&lt;br /&gt;
with this function&lt;br /&gt;
&lt;br /&gt;
   irmp_get_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
you can recall a decoded message. The return value is 1 when a message has been received, otherwise it is 0. In the first case the 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;
contain valid information.&lt;br /&gt;
&lt;br /&gt;
That means: finally you&#039;ll get simply three values (protocol, address and command) that can be checked with an if or switch statement. &lt;br /&gt;
Here is a sample decoder which checks for key 1-9 on a remote:&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;
Here are possible constants for irmp_data.protocol, see also [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL                      1              // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                        2              // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL                    3              // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL                 4              // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL                   5              // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL                     6              // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                        7              // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL                      8              // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                        9              // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL                 10              // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL                     11              // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL                 12              // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL                    13              // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL              14              // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL                   15              // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL                     16              // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL                   17              // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL                       18              // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL                     19              // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL                       20              // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL                      21              // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL                     22              // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL                    23              // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL                      24              // IR60 (SDA2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL                  25              // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL                    26              // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL                     27              // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL                     28              // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL                      29              // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL                   30              // Thomson&lt;br /&gt;
#define IRMP_BOSE_PROTOCOL                      31              // BOSE&lt;br /&gt;
#define IRMP_A1TVBOX_PROTOCOL                   32              // A1 TV Box&lt;br /&gt;
#define IRMP_ORTEK_PROTOCOL                     33              // ORTEK - Hama&lt;br /&gt;
#define IRMP_TELEFUNKEN_PROTOCOL                34              // Telefunken (1560)&lt;br /&gt;
#define IRMP_ROOMBA_PROTOCOL                    35              // iRobot Roomba vacuum cleaner&lt;br /&gt;
#define IRMP_RCMM32_PROTOCOL                    36              // Fujitsu-Siemens (Activy remote control)&lt;br /&gt;
#define IRMP_RCMM24_PROTOCOL                    37              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_RCMM12_PROTOCOL                    38              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_SPEAKER_PROTOCOL                   39              // Another loudspeaker protocol, similar to Nubert&lt;br /&gt;
#define IRMP_LGAIR_PROTOCOL                     40              // LG air conditioner&lt;br /&gt;
#define IRMP_SAMSUNG48_PROTOCOL                 41              // air conditioner with SAMSUNG protocol (48 bits)&lt;br /&gt;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of address and the command code of an unknown remote can be received and printed over UART or LCD. Then these values can be used hard coded in your decoder routine. Or you write a teaching routine, where you need to press a key once to store the code in an EEPROM. A sample for this can be found in [http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP Lernfähige IR-Fernbedienung mit IRMP].&lt;br /&gt;
&lt;br /&gt;
Another [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup Beispiel-Main-Funktion] is include in the zip file, showing also the timer initialization.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Debouncing&amp;quot; of Keys ===&lt;br /&gt;
&lt;br /&gt;
To distinguish between long key press or a single press, the bit IRMP_FLAG_REPETITION exists. This will be set in struct member &#039;&#039;&#039;flags&#039;&#039;&#039; when a key on the remote is pressed for longer time and therefor the same command is repeated in short periods.&lt;br /&gt;
&lt;br /&gt;
Example:&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;
      // long key press&lt;br /&gt;
      // either:&lt;br /&gt;
      //   ignore the (repeated) key&lt;br /&gt;
      // or:&lt;br /&gt;
      //   use this information for a repeat function&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      // key was pressed again&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This could be used to &amp;quot;debounce&amp;quot; the keys 0-9 by ignoring commands with bit IRMP_FLAG_REPETITION set. For keys like &#039; VOLUME+&#039; or &#039;VOLUME-&#039; using the repetition could be useful, maybe to fade a LED [[LED-Fading]fade a LED].&lt;br /&gt;
&lt;br /&gt;
When you want to decode only singe keys, you can reduce the abov if block to:&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;
      // Its a new key&lt;br /&gt;
      // ACTION!&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
The  &amp;quot;Working Horse&amp;quot; from [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is the interrupt service routine irmp_ISR() which should be called 15000 times per second. Is this rate different, the constant [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]] in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] needs to be adjusted.&lt;br /&gt;
&lt;br /&gt;
irmp_ISR() detects first the length and the form of the startbit(s) and determines the used protocols by this information. As soon as the protocol was identified, the further bits are parameterized to read the following bits most efficient until the IR command is complete.&lt;br /&gt;
&lt;br /&gt;
Just to stop slashers:&lt;br /&gt;
&lt;br /&gt;
I know that the ISR is quite large. But as it acts as a state machine, the effective executed code per cycle is relative small. While it is &amp;quot;dark&amp;quot; (and that is the case for the most time ;-)) the spent time is vanishing short. In the WordClock project for example are called 8 ISR&#039;s with the same timer, there is irmp_ISR() only one amongst many others. For at least 8 MHz CPU clock no timing problems occured. Therefor I see really no problem in the length of the ISR.&lt;br /&gt;
&lt;br /&gt;
A crystal is not a neccessary must, it works well with the internal AVR oscillator. Remember to set the correct fuses for the CPU to run at 8 MHz, check [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] for correct values for an ATMEGA88.&lt;br /&gt;
&lt;br /&gt;
== Scanning of unknown IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
Changing in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] in line&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;
the value for [[IRMP_-_english#IRMP_LOGGING|IRMP_LOGGING]] to 1, then in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] a logging will be turned on: the bright- and darkphases will be sent via UART with 9600 bit/s ausgegeben: 1=dark, 0=bright. Maybe the constans in the functions uart_init() and uart_putc() must be adjusted, this depends on the used AVR-µC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remark: for PIC-processors there is an own logging module named [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]. This makes it possible to log via USB. This applies not to the AVR version&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you record these protocol scans with a terminal program and save it as a textfile, you can use these files for analyzing to adjust [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] for the unknown protocol - see next chapter.&lt;br /&gt;
&lt;br /&gt;
If you have a remote that is not supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] you can send me ([http://www.mikrocontroller.net/user/show/ukw ukw]) the scan files. Then I can check if the protocol fits into the IRMP concepts and adapt the sources if applicable.&lt;br /&gt;
&lt;br /&gt;
== IRMP under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be compiled under Linux for testing IR scans in textfiles. In the subdirectory &#039;IR-Data&#039; you will find such files that you can feed to [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]].&lt;br /&gt;
&lt;br /&gt;
The compilation of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is started by:&lt;br /&gt;
&lt;br /&gt;
    make -f makefile.lnx&lt;br /&gt;
&lt;br /&gt;
This will generate 3 IRMP versions:&lt;br /&gt;
&lt;br /&gt;
* irmp-10kHz: Version for 10kHz Scans&lt;br /&gt;
* irmp-15kHz: Version for 15kHz Scans&lt;br /&gt;
* irmp-20kHz: Version for 20kHz Scans&lt;br /&gt;
&lt;br /&gt;
=== Starting IRMP ===&lt;br /&gt;
&lt;br /&gt;
The calling syntax is:&lt;br /&gt;
&lt;br /&gt;
  ./irmp-nnkHz [-l|-p|-a|-v] &amp;lt; scan-file&lt;br /&gt;
&lt;br /&gt;
The given options are exclusive, that means only one option per call is valid:&lt;br /&gt;
&lt;br /&gt;
Option:&lt;br /&gt;
&lt;br /&gt;
   -l  List             print a list with pulses and pauses&lt;br /&gt;
   -a analyze           analyse the puls/pauses and write a &amp;quot;spectrum&amp;quot; in ASCII format&lt;br /&gt;
   -v verbose           verbose output&lt;br /&gt;
   -p  Print Timings    print a timing table for all protocols&lt;br /&gt;
&lt;br /&gt;
Samples:&lt;br /&gt;
&lt;br /&gt;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
Here you see the measured times of all pulses and pauses as (horizontal) bell shaped curves, which of course are not quite ideal displayed due to the ASCII formatting. The smaller the measured channels, the better is the timing of the remote.&lt;br /&gt;
&lt;br /&gt;
The above output can be read as:&lt;br /&gt;
&lt;br /&gt;
* the start bit has a pulse length between 9000 and 9200 µs, in average 9102 µs. The deviation from this average is about 1.1 %&lt;br /&gt;
&lt;br /&gt;
* the start bit has a pause length between 4300 and 4500 µs, the average is 4424 µs. The error is about 2.8 %.&lt;br /&gt;
&lt;br /&gt;
* the pulse length of a databit is between 500 and 700 µs, in average 650 µs, the error is (quite large!) 23.1 %&lt;br /&gt;
&lt;br /&gt;
Further there are two more pauses with different length (for bits 0 and 1). Checking this I leave to the willing reader ;-)&lt;br /&gt;
&lt;br /&gt;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used as well under Windows, like:&lt;br /&gt;
&lt;br /&gt;
* start command line console&lt;br /&gt;
* change to directory &#039;irmp&#039;&lt;br /&gt;
* enter:&lt;br /&gt;
            irmp-10kHz.exe &amp;lt; IR-Data\rc5x.txt&lt;br /&gt;
&lt;br /&gt;
The same options apply as for the Linux version.&lt;br /&gt;
&lt;br /&gt;
=== Long Outputs ===&lt;br /&gt;
&lt;br /&gt;
As some outputs are pretty large, it is recommended to redirect the output to a file or filter for paging:&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports more and more also camera remotes like:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
&lt;br /&gt;
The command variety isn&#039;t really large. Usually the cameras understand only the command:&lt;br /&gt;
&amp;quot;Trigger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Here is a short table for [[IRMP_-_english#PENTAX|PENTAX]] cameras:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Command || Function&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || Trigger&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001 || change Zoomlevel&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Because there is no address designated in the [[IRMP_-_english#PENTAX|PENTAX]]-protocol, this should be set for sending in [[IRSND_-_english|IRSND]] to 0x0000. You should also use a crystal in this case because especially the Nikons are very fussy regarding the timing.&lt;br /&gt;
&lt;br /&gt;
== IR Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-keyboard]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]  supports from version 1.7.0 also IR keyboards, namely the FDC-3402 from www.pollin.de (partno. 711 056) for less than 2 Euro.&lt;br /&gt;
&lt;br /&gt;
On detection of a key press the following data is returned:&lt;br /&gt;
&lt;br /&gt;
 Protocol-Number  (irmp_data.protocol): 18&lt;br /&gt;
 Address          (irmp_data.address) : 0x003F&lt;br /&gt;
&lt;br /&gt;
As command (irmp_data.command) the following values are returned:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   &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;
Special keys left side:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Code || Key   &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;
The above values are for pressing a key. On release,  [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] sets also Bit 8 (0x80) in the command.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F&lt;br /&gt;
      Key &#039;a&#039; released:  0x009F&lt;br /&gt;
&lt;br /&gt;
Exception for the ON / OFF key: This one sends only for key press a code, not for release.&lt;br /&gt;
&lt;br /&gt;
Is a key pressed for a longer time, it will be notified in irmp_data.flag&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
                           command   flag&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x00&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      ....&lt;br /&gt;
      Key &#039;a&#039; released:  0x009F    0x00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When key combinations (like a capital &#039;A&#039;) are pressed, then the return values are a sequence like this:&lt;br /&gt;
&lt;br /&gt;
      Left SHIFT-key pressed:    0x0002&lt;br /&gt;
      Key &#039;a&#039; pressed:           0x001F&lt;br /&gt;
      Key &#039;a&#039; released:          0x009F&lt;br /&gt;
      Left SHIFT-key released:   0x0082&lt;br /&gt;
&lt;br /&gt;
In [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] you will find a function get_fdc_key() for the Linux version, which can be used as a template to convert the FDC keycodes into the corresponding ASCII codes. This function can be used either local on the µC to decode the keycodes, or on the hostsystem (e.g. PC) where the IRMP data structure is sent to. Therefore the function incl. preprocessor constands should be copied to your application code.&lt;br /&gt;
&lt;br /&gt;
Here is an excerpt:&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;
And at least an example for the usage of function 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;
All non-printable characters are coded as:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Key               || Constant                || Value&lt;br /&gt;
|-&lt;br /&gt;
| ESC               || KEY_ESCAPE              || 0x1B&lt;br /&gt;
|-&lt;br /&gt;
| Menu              || KEY_MENUE               || 0x80&lt;br /&gt;
|-&lt;br /&gt;
| Back              || KEY_BACK                || 0x81&lt;br /&gt;
|-&lt;br /&gt;
| Forward           || KEY_FORWARD             || 0x82&lt;br /&gt;
|-&lt;br /&gt;
| Adress            || KEY_ADDRESS             || 0x83&lt;br /&gt;
|-&lt;br /&gt;
| Window            || KEY_WINDOW              || 0x84&lt;br /&gt;
|-&lt;br /&gt;
| 1. Page           || 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;
| New Page          || KEY_NEW_PAGE            || 0x89&lt;br /&gt;
|-&lt;br /&gt;
| Setup             || KEY_SETUP               || 0x8A&lt;br /&gt;
|-&lt;br /&gt;
| Font              || KEY_FONT                || 0x8B&lt;br /&gt;
|-&lt;br /&gt;
| Print             || KEY_PRINT               || 0x8C&lt;br /&gt;
|-&lt;br /&gt;
| On/Off            || 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;
| Insert            || KEY_INSERT              || 0x90&lt;br /&gt;
|-&lt;br /&gt;
| Delete            || KEY_DELETE              || 0x91&lt;br /&gt;
|-&lt;br /&gt;
| Cursor left       || KEY_LEFT                || 0x92&lt;br /&gt;
|-&lt;br /&gt;
| Pos1              || KEY_HOME                || 0x93&lt;br /&gt;
|-&lt;br /&gt;
| End               || KEY_END                 || 0x94&lt;br /&gt;
|-&lt;br /&gt;
| Cursor right      || KEY_UP                  || 0x95&lt;br /&gt;
|-&lt;br /&gt;
| Cursor down       || KEY_DOWN                || 0x96&lt;br /&gt;
|-&lt;br /&gt;
| Page up           || KEY_PAGE_UP             || 0x97&lt;br /&gt;
|-&lt;br /&gt;
| Page down         || KEY_PAGE_DOWN           || 0x98&lt;br /&gt;
|-&lt;br /&gt;
| Cursor left       || KEY_RIGHT               || 0x99&lt;br /&gt;
|-&lt;br /&gt;
| Left Mousebutton  || KEY_MOUSE_1             || 0x9E&lt;br /&gt;
|-&lt;br /&gt;
| Right Mousebutton || KEY_MOUSE_2             || 0x9F&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The function get_fdc_key() considers the holding of key pressed of Shift-, Ctrl- and ALT. For this reason not only the writing of capital letters works, but also the selection of special characters with the key combination ALT + key, e.g. ALT + m -&amp;gt; µ or ALT + q -&amp;gt; @. Also you can send CTRL-A to CTRL-Z by using the Ctrl key. The Caps Lock key is ignored, as I regard this key as the most unnecessary key at all ;-)&lt;br /&gt;
&lt;br /&gt;
= Appendix =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
Das ACP24-Protocol is used by Stiebel-Eltron-Aircons&lt;br /&gt;
&lt;br /&gt;
The structure of the 70 databits is :&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;
These are converted into the following 16 bits from irmp_data.command:&lt;br /&gt;
&lt;br /&gt;
        5432109876543210&lt;br /&gt;
        NAVVvMMMmtxyTTTT&lt;br /&gt;
&lt;br /&gt;
Meaning of the symbols:&lt;br /&gt;
&lt;br /&gt;
    TTTT = Temperature + 15 degree&lt;br /&gt;
            TTTT&lt;br /&gt;
            ----------&lt;br /&gt;
            0000        ???&lt;br /&gt;
            0001        ???&lt;br /&gt;
            0010        ???&lt;br /&gt;
            0011        18 degree&lt;br /&gt;
            0100        19 degree&lt;br /&gt;
            0101        20 degree&lt;br /&gt;
            0110        21 degree&lt;br /&gt;
            ...&lt;br /&gt;
            1111        30 degree&lt;br /&gt;
&lt;br /&gt;
    N    = Nightmode&lt;br /&gt;
            N&lt;br /&gt;
            ----------&lt;br /&gt;
            0           off&lt;br /&gt;
            1           on&lt;br /&gt;
&lt;br /&gt;
    VV   = fan, v must be 1!&lt;br /&gt;
            VV   v&lt;br /&gt;
            ----------&lt;br /&gt;
            00   1      level 1&lt;br /&gt;
            01   1      level 2&lt;br /&gt;
            10   1      level 3&lt;br /&gt;
            11   1      Automatic&lt;br /&gt;
&lt;br /&gt;
    MMM  = Mode&lt;br /&gt;
            MMM  m&lt;br /&gt;
            ----------&lt;br /&gt;
            000  0      turn off&lt;br /&gt;
            001  0      turn on&lt;br /&gt;
            001  1      cooling&lt;br /&gt;
            010  1      fan&lt;br /&gt;
            011  1      demist&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    = Automatic-Programm&lt;br /&gt;
            A&lt;br /&gt;
            ----------&lt;br /&gt;
            0           off&lt;br /&gt;
            1           on&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;
To control the air con via [[IRSND_-_english|IRSND]], the following functions can be used:&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
The LG Air Con is controlled by an &#039;intelligent&#039; remote. These are the encoded data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    Command                 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 Protocol (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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
(was reverse engineered by several protocols (Daewoo or similar), so no direkt link to SAMSUNG documents is available)&lt;br /&gt;
&lt;br /&gt;
Here is a link to the Daewoo-protocol, which uses the same principle of the sync-bits in the center of a frame, but words with different timings:&lt;br /&gt;
&lt;br /&gt;
* http://users.telenet.be/davshomepage/daewoo.htm&lt;br /&gt;
&lt;br /&gt;
=== MATSUHITA Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91207</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91207"/>
		<updated>2016-01-12T01:34:08Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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;
Here you can select which protocols should be supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]. Standardprotocols are activated by default.&lt;br /&gt;
Would you like to turn on more protocols or turn off some other for memory saving reasons, then the corresponding values in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] must be set.&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;
Each [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported IR protocoll consumes the noted amount of code. Here you can apply optimizations: for example the modulation frequency of 455 kHz for the [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] protocol is far away from the frequencies that are used by other protocols. Maybe you need a different IR receiver, otherwise you could disable these protocols. For example you cannot receive a [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]]-protocol (455kHz) with a TSOP1738 / TSOP 31238.&lt;br /&gt;
&lt;br /&gt;
Furthermore the protocols [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] are only reliable detected at a frequency starting at 15 kHz. For [[IRMP_-_english#LEGO|LEGO]] it is even 20 kHz. When you want to use these protocols, you must adjust [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]]. Otherwise, during compilation you will get a warning and the corresponding protocols are automatically disabled.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
This constant defines the pin where the IR receiver is connected.&lt;br /&gt;
&lt;br /&gt;
Default value is 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;
These two values must match your hardware configuration.&lt;br /&gt;
&lt;br /&gt;
This applies also to STM32 µC&#039;s:&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;
And the corresponding section for STM8 µC&#039;s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PIC controllers there is only the define for &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - depending on 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;
Default value:&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;
When you turn on callbacks, on any level change at the input the callback function is called. This could be use to visualize incomming IR signals by driving another output pin.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&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;
With IRMP_LOGGING the logging of received IR frames can be turned on.&lt;br /&gt;
&lt;br /&gt;
Default value:&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;
Further documentation can be found here: [[IRMP_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported protocols use partly variable, partly fixed bit length from 2 up to 48 bits. These will be described by preprocessor defines.&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] separates these IR frames always into 3 sections:&lt;br /&gt;
&lt;br /&gt;
 1. protocol ID&lt;br /&gt;
 2. address or vendorcode&lt;br /&gt;
 3. command&lt;br /&gt;
&lt;br /&gt;
with this function&lt;br /&gt;
&lt;br /&gt;
   irmp_get_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
you can recall a decoded message. The return value is 1 when a message has been received, otherwise it is 0. In the first case the 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;
contain valid information.&lt;br /&gt;
&lt;br /&gt;
That means: finally you&#039;ll get simply three values (protocol, address and command) that can be checked with an if or switch statement. &lt;br /&gt;
Here is a sample decoder which checks for key 1-9 on a remote:&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;
Here are possible constants for irmp_data.protocol, see also [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL                      1              // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                        2              // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL                    3              // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL                 4              // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL                   5              // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL                     6              // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                        7              // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL                      8              // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                        9              // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL                 10              // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL                     11              // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL                 12              // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL                    13              // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL              14              // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL                   15              // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL                     16              // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL                   17              // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL                       18              // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL                     19              // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL                       20              // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL                      21              // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL                     22              // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL                    23              // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL                      24              // IR60 (SDA2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL                  25              // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL                    26              // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL                     27              // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL                     28              // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL                      29              // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL                   30              // Thomson&lt;br /&gt;
#define IRMP_BOSE_PROTOCOL                      31              // BOSE&lt;br /&gt;
#define IRMP_A1TVBOX_PROTOCOL                   32              // A1 TV Box&lt;br /&gt;
#define IRMP_ORTEK_PROTOCOL                     33              // ORTEK - Hama&lt;br /&gt;
#define IRMP_TELEFUNKEN_PROTOCOL                34              // Telefunken (1560)&lt;br /&gt;
#define IRMP_ROOMBA_PROTOCOL                    35              // iRobot Roomba vacuum cleaner&lt;br /&gt;
#define IRMP_RCMM32_PROTOCOL                    36              // Fujitsu-Siemens (Activy remote control)&lt;br /&gt;
#define IRMP_RCMM24_PROTOCOL                    37              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_RCMM12_PROTOCOL                    38              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_SPEAKER_PROTOCOL                   39              // Another loudspeaker protocol, similar to Nubert&lt;br /&gt;
#define IRMP_LGAIR_PROTOCOL                     40              // LG air conditioner&lt;br /&gt;
#define IRMP_SAMSUNG48_PROTOCOL                 41              // air conditioner with SAMSUNG protocol (48 bits)&lt;br /&gt;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of address and the command code of an unknown remote can be received and printed over UART or LCD. Then these values can be used hard coded in your decoder routine. Or you write a teaching routine, where you need to press a key once to store the code in an EEPROM. A sample for this can be found in [http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP Lernfähige IR-Fernbedienung mit IRMP].&lt;br /&gt;
&lt;br /&gt;
Another [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup Beispiel-Main-Funktion] is include in the zip file, showing also the timer initialization.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Debouncing&amp;quot; of Keys ===&lt;br /&gt;
&lt;br /&gt;
To distinguish between long key press or a single press, the bit IRMP_FLAG_REPETITION exists. This will be set in struct member &#039;&#039;&#039;flags&#039;&#039;&#039; when a key on the remote is pressed for longer time and therefor the same command is repeated in short periods.&lt;br /&gt;
&lt;br /&gt;
Example:&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;
      // long key press&lt;br /&gt;
      // either:&lt;br /&gt;
      //   ignore the (repeated) key&lt;br /&gt;
      // or:&lt;br /&gt;
      //   use this information for a repeat function&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      // key was pressed again&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This could be used to &amp;quot;debounce&amp;quot; the keys 0-9 by ignoring commands with bit IRMP_FLAG_REPETITION set. For keys like &#039; VOLUME+&#039; or &#039;VOLUME-&#039; using the repetition could be useful, maybe to fade a LED [[LED-Fading]fade a LED].&lt;br /&gt;
&lt;br /&gt;
When you want to decode only singe keys, you can reduce the abov if block to:&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;
      // Its a new key&lt;br /&gt;
      // ACTION!&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
The  &amp;quot;Working Horse&amp;quot; from [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is the interrupt service routine irmp_ISR() which should be called 15000 times per second. Is this rate different, the constant [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]] in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] needs to be adjusted.&lt;br /&gt;
&lt;br /&gt;
irmp_ISR() detects first the length and the form of the startbit(s) and determines the used protocols by this information. As soon as the protocol was identified, the further bits are parameterized to read the following bits most efficient until the IR command is complete.&lt;br /&gt;
&lt;br /&gt;
Just to stop slashers:&lt;br /&gt;
&lt;br /&gt;
I know that the ISR is quite large. But as it acts as a state machine, the effective executed code per cycle is relative small. While it is &amp;quot;dark&amp;quot; (and that is the case for the most time ;-)) the spent time is vanishing short. In the WordClock project for example are called 8 ISR&#039;s with the same timer, there is irmp_ISR() only one amongst many others. For at least 8 MHz CPU clock no timing problems occured. Therefor I see really no problem in the length of the ISR.&lt;br /&gt;
&lt;br /&gt;
A crystal is not a neccessary must, it works well with the internal AVR oscillator. Remember to set the correct fuses for the CPU to run at 8 MHz, check [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] for correct values for an ATMEGA88.&lt;br /&gt;
&lt;br /&gt;
== Scanning of unknown IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
Changing in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] in line&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;
the value for [[IRMP_-_english#IRMP_LOGGING|IRMP_LOGGING]] to 1, then in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] a logging will be turned on: the bright- and darkphases will be sent via UART with 9600 bit/s ausgegeben: 1=dark, 0=bright. Maybe the constans in the functions uart_init() and uart_putc() must be adjusted, this depends on the used AVR-µC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remark: for PIC-processors there is an own logging module named [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]. This makes it possible to log via USB. This applies not to the AVR version&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you record these protocol scans with a terminal program and save it as a textfile, you can use these files for analyzing to adjust [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] for the unknown protocol - see next chapter.&lt;br /&gt;
&lt;br /&gt;
If you have a remote that is not supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] you can send me ([http://www.mikrocontroller.net/user/show/ukw ukw]) the scan files. Then I can check if the protocol fits into the IRMP concepts and adapt the sources if applicable.&lt;br /&gt;
&lt;br /&gt;
== IRMP under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be compiled under Linux for testing IR scans in textfiles. In the subdirectory &#039;IR-Data&#039; you will find such files that you can feed to [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]].&lt;br /&gt;
&lt;br /&gt;
The compilation of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is started by:&lt;br /&gt;
&lt;br /&gt;
    make -f makefile.lnx&lt;br /&gt;
&lt;br /&gt;
This will generate 3 IRMP versions:&lt;br /&gt;
&lt;br /&gt;
* irmp-10kHz: Version for 10kHz Scans&lt;br /&gt;
* irmp-15kHz: Version for 15kHz Scans&lt;br /&gt;
* irmp-20kHz: Version for 20kHz Scans&lt;br /&gt;
&lt;br /&gt;
=== Starting IRMP ===&lt;br /&gt;
&lt;br /&gt;
The calling syntax is:&lt;br /&gt;
&lt;br /&gt;
  ./irmp-nnkHz [-l|-p|-a|-v] &amp;lt; scan-file&lt;br /&gt;
&lt;br /&gt;
The given options are exclusive, that means only one option per call is valid:&lt;br /&gt;
&lt;br /&gt;
Option:&lt;br /&gt;
&lt;br /&gt;
   -l  List             print a list with pulses and pauses&lt;br /&gt;
   -a analyze           analyse the puls/pauses and write a &amp;quot;spectrum&amp;quot; in ASCII format&lt;br /&gt;
   -v verbose           verbose output&lt;br /&gt;
   -p  Print Timings    print a timing table for all protocols&lt;br /&gt;
&lt;br /&gt;
Samples:&lt;br /&gt;
&lt;br /&gt;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
Here you see the measured times of all pulses and pauses as (horizontal) bell shaped curves, which of course are not quite ideal displayed due to the ASCII formatting. The smaller the measured channels, the better is the timing of the remote.&lt;br /&gt;
&lt;br /&gt;
The above output can be read as:&lt;br /&gt;
&lt;br /&gt;
* the start bit has a pulse length between 9000 and 9200 µs, in average 9102 µs. The deviation from this average is about 1.1 %&lt;br /&gt;
&lt;br /&gt;
* the start bit has a pause length between 4300 and 4500 µs, the average is 4424 µs. The error is about 2.8 %.&lt;br /&gt;
&lt;br /&gt;
* the pulse length of a databit is between 500 and 700 µs, in average 650 µs, the error is (quite large!) 23.1 %&lt;br /&gt;
&lt;br /&gt;
Further there are two more pauses with different length (for bits 0 and 1). Checking this I leave to the willing reader ;-)&lt;br /&gt;
&lt;br /&gt;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used as well under Windows, like:&lt;br /&gt;
&lt;br /&gt;
* start command line console&lt;br /&gt;
* change to directory &#039;irmp&#039;&lt;br /&gt;
* enter:&lt;br /&gt;
            irmp-10kHz.exe &amp;lt; IR-Data\rc5x.txt&lt;br /&gt;
&lt;br /&gt;
The same options apply as for the Linux version.&lt;br /&gt;
&lt;br /&gt;
=== Long Outputs ===&lt;br /&gt;
&lt;br /&gt;
As some outputs are pretty large, it is recommended to redirect the output to a file or filter for paging:&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports more and more also camera remotes like:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
&lt;br /&gt;
The command variety isn&#039;t really large. Usually the cameras understand only the command:&lt;br /&gt;
&amp;quot;Trigger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Here is a short table for [[IRMP_-_english#PENTAX|PENTAX]] cameras:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Command || Function&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || Trigger&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001 || change Zoomlevel&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Because there is no address designated in the [[IRMP_-_english#PENTAX|PENTAX]]-protocol, this should be set for sending in [[IRSND_-_english|IRSND]] to 0x0000. You should also use a crystal in this case because especially the Nikons are very fussy regarding the timing.&lt;br /&gt;
&lt;br /&gt;
== IR Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-keyboard]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]  supports from version 1.7.0 also IR keyboards, namely the FDC-3402 from www.pollin.de (partno. 711 056) for less than 2 Euro.&lt;br /&gt;
&lt;br /&gt;
On detection of a key press the following data is returned:&lt;br /&gt;
&lt;br /&gt;
 Protocol-Number  (irmp_data.protocol): 18&lt;br /&gt;
 Address          (irmp_data.address) : 0x003F&lt;br /&gt;
&lt;br /&gt;
As command (irmp_data.command) the following values are returned:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   &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;
Special keys left side:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Code || Key   &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;
The above values are for pressing a key. On release,  [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] sets also Bit 8 (0x80) in the command.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F&lt;br /&gt;
      Key &#039;a&#039; released:  0x009F&lt;br /&gt;
&lt;br /&gt;
Exception for the ON / OFF key: This one sends only for key press a code, not for release.&lt;br /&gt;
&lt;br /&gt;
Is a key pressed for a longer time, it will be notified in irmp_data.flag&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
                           command   flag&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x00&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      ....&lt;br /&gt;
      Key &#039;a&#039; released:  0x009F    0x00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When key combinations (like a capital &#039;A&#039;) are pressed, then the return values are a sequence like this:&lt;br /&gt;
&lt;br /&gt;
      Left SHIFT-key pressed:    0x0002&lt;br /&gt;
      Key &#039;a&#039; pressed:           0x001F&lt;br /&gt;
      Key &#039;a&#039; released:          0x009F&lt;br /&gt;
      Left SHIFT-key released:   0x0082&lt;br /&gt;
&lt;br /&gt;
In [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] you will find a function get_fdc_key() for the Linux version, which can be used as a template to convert the FDC keycodes into the corresponding ASCII codes. This function can be used either local on the µC to decode the keycodes, or on the hostsystem (e.g. PC) where the IRMP data structure is sent to. Therefore the function incl. preprocessor constands should be copied to your application code.&lt;br /&gt;
&lt;br /&gt;
Here is an excerpt:&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;
And at least an example for the usage of function 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;
All non-printable characters are coded as:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Key               || Constant                || Value&lt;br /&gt;
|-&lt;br /&gt;
| ESC               || KEY_ESCAPE              || 0x1B&lt;br /&gt;
|-&lt;br /&gt;
| Menu              || KEY_MENUE               || 0x80&lt;br /&gt;
|-&lt;br /&gt;
| Back              || KEY_BACK                || 0x81&lt;br /&gt;
|-&lt;br /&gt;
| Forward           || KEY_FORWARD             || 0x82&lt;br /&gt;
|-&lt;br /&gt;
| Adress            || KEY_ADDRESS             || 0x83&lt;br /&gt;
|-&lt;br /&gt;
| Window            || KEY_WINDOW              || 0x84&lt;br /&gt;
|-&lt;br /&gt;
| 1. Page           || 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;
| New Page          || KEY_NEW_PAGE            || 0x89&lt;br /&gt;
|-&lt;br /&gt;
| Setup             || KEY_SETUP               || 0x8A&lt;br /&gt;
|-&lt;br /&gt;
| Font              || KEY_FONT                || 0x8B&lt;br /&gt;
|-&lt;br /&gt;
| Print             || KEY_PRINT               || 0x8C&lt;br /&gt;
|-&lt;br /&gt;
| On/Off            || 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;
| Insert            || KEY_INSERT              || 0x90&lt;br /&gt;
|-&lt;br /&gt;
| Delete            || KEY_DELETE              || 0x91&lt;br /&gt;
|-&lt;br /&gt;
| Cursor left       || KEY_LEFT                || 0x92&lt;br /&gt;
|-&lt;br /&gt;
| Pos1              || KEY_HOME                || 0x93&lt;br /&gt;
|-&lt;br /&gt;
| End               || KEY_END                 || 0x94&lt;br /&gt;
|-&lt;br /&gt;
| Cursor right      || KEY_UP                  || 0x95&lt;br /&gt;
|-&lt;br /&gt;
| Cursor down       || KEY_DOWN                || 0x96&lt;br /&gt;
|-&lt;br /&gt;
| Page up           || KEY_PAGE_UP             || 0x97&lt;br /&gt;
|-&lt;br /&gt;
| Page down         || KEY_PAGE_DOWN           || 0x98&lt;br /&gt;
|-&lt;br /&gt;
| Cursor left       || KEY_RIGHT               || 0x99&lt;br /&gt;
|-&lt;br /&gt;
| Left Mousebutton  || KEY_MOUSE_1             || 0x9E&lt;br /&gt;
|-&lt;br /&gt;
| Right Mousebutton || KEY_MOUSE_2             || 0x9F&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The function get_fdc_key() considers the holding of key pressed of Shift-, Ctrl- and ALT. For this reason not only the writing of capital letters works, but also the selection of special characters with the key combination ALT + key, e.g. ALT + m -&amp;gt; µ or ALT + q -&amp;gt; @. Also you can send CTRL-A to CTRL-Z by using the Ctrl key. The Caps Lock key is ignored, as I regard this key as the most unnecessary key at all ;-)&lt;br /&gt;
&lt;br /&gt;
= Appendix =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
Das ACP24-Protocol is used by Stiebel-Eltron-Aircons&lt;br /&gt;
&lt;br /&gt;
The structure of the 70 databits is :&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;
These are converted into the following 16 bits from irmp_data.command:&lt;br /&gt;
&lt;br /&gt;
        5432109876543210&lt;br /&gt;
        NAVVvMMMmtxyTTTT&lt;br /&gt;
&lt;br /&gt;
Meaning of the symbols:&lt;br /&gt;
&lt;br /&gt;
    TTTT = Temperature + 15 degree&lt;br /&gt;
            TTTT&lt;br /&gt;
            ----------&lt;br /&gt;
            0000        ???&lt;br /&gt;
            0001        ???&lt;br /&gt;
            0010        ???&lt;br /&gt;
            0011        18 degree&lt;br /&gt;
            0100        19 degree&lt;br /&gt;
            0101        20 degree&lt;br /&gt;
            0110        21 degree&lt;br /&gt;
            ...&lt;br /&gt;
            1111        30 degree&lt;br /&gt;
&lt;br /&gt;
    N    = Nightmode&lt;br /&gt;
            N&lt;br /&gt;
            ----------&lt;br /&gt;
            0           off&lt;br /&gt;
            1           on&lt;br /&gt;
&lt;br /&gt;
    VV   = fan, v must be 1!&lt;br /&gt;
            VV   v&lt;br /&gt;
            ----------&lt;br /&gt;
            00   1      level 1&lt;br /&gt;
            01   1      level 2&lt;br /&gt;
            10   1      level 3&lt;br /&gt;
            11   1      Automatic&lt;br /&gt;
&lt;br /&gt;
    MMM  = Mode&lt;br /&gt;
            MMM  m&lt;br /&gt;
            ----------&lt;br /&gt;
            000  0      turn off&lt;br /&gt;
            001  0      turn on&lt;br /&gt;
            001  1      cooling&lt;br /&gt;
            010  1      fan&lt;br /&gt;
            011  1      demist&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    = Automatic-Programm&lt;br /&gt;
            A&lt;br /&gt;
            ----------&lt;br /&gt;
            0           off&lt;br /&gt;
            1           on&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;
To control the air con via [[IRSND_-_english|IRSND]], the following functions can be used:&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
The LG Air Con is controlled by an &#039;intelligent&#039; remote. These are the encoded data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    Command                 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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91206</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91206"/>
		<updated>2016-01-12T01:32:18Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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;
Here you can select which protocols should be supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]. Standardprotocols are activated by default.&lt;br /&gt;
Would you like to turn on more protocols or turn off some other for memory saving reasons, then the corresponding values in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] must be set.&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;
Each [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported IR protocoll consumes the noted amount of code. Here you can apply optimizations: for example the modulation frequency of 455 kHz for the [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] protocol is far away from the frequencies that are used by other protocols. Maybe you need a different IR receiver, otherwise you could disable these protocols. For example you cannot receive a [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]]-protocol (455kHz) with a TSOP1738 / TSOP 31238.&lt;br /&gt;
&lt;br /&gt;
Furthermore the protocols [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] are only reliable detected at a frequency starting at 15 kHz. For [[IRMP_-_english#LEGO|LEGO]] it is even 20 kHz. When you want to use these protocols, you must adjust [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]]. Otherwise, during compilation you will get a warning and the corresponding protocols are automatically disabled.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
This constant defines the pin where the IR receiver is connected.&lt;br /&gt;
&lt;br /&gt;
Default value is 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;
These two values must match your hardware configuration.&lt;br /&gt;
&lt;br /&gt;
This applies also to STM32 µC&#039;s:&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;
And the corresponding section for STM8 µC&#039;s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PIC controllers there is only the define for &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - depending on 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;
Default value:&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;
When you turn on callbacks, on any level change at the input the callback function is called. This could be use to visualize incomming IR signals by driving another output pin.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&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;
With IRMP_LOGGING the logging of received IR frames can be turned on.&lt;br /&gt;
&lt;br /&gt;
Default value:&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;
Further documentation can be found here: [[IRMP_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported protocols use partly variable, partly fixed bit length from 2 up to 48 bits. These will be described by preprocessor defines.&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] separates these IR frames always into 3 sections:&lt;br /&gt;
&lt;br /&gt;
 1. protocol ID&lt;br /&gt;
 2. address or vendorcode&lt;br /&gt;
 3. command&lt;br /&gt;
&lt;br /&gt;
with this function&lt;br /&gt;
&lt;br /&gt;
   irmp_get_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
you can recall a decoded message. The return value is 1 when a message has been received, otherwise it is 0. In the first case the 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;
contain valid information.&lt;br /&gt;
&lt;br /&gt;
That means: finally you&#039;ll get simply three values (protocol, address and command) that can be checked with an if or switch statement. &lt;br /&gt;
Here is a sample decoder which checks for key 1-9 on a remote:&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;
Here are possible constants for irmp_data.protocol, see also [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL                      1              // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                        2              // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL                    3              // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL                 4              // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL                   5              // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL                     6              // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                        7              // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL                      8              // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                        9              // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL                 10              // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL                     11              // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL                 12              // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL                    13              // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL              14              // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL                   15              // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL                     16              // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL                   17              // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL                       18              // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL                     19              // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL                       20              // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL                      21              // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL                     22              // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL                    23              // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL                      24              // IR60 (SDA2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL                  25              // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL                    26              // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL                     27              // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL                     28              // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL                      29              // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL                   30              // Thomson&lt;br /&gt;
#define IRMP_BOSE_PROTOCOL                      31              // BOSE&lt;br /&gt;
#define IRMP_A1TVBOX_PROTOCOL                   32              // A1 TV Box&lt;br /&gt;
#define IRMP_ORTEK_PROTOCOL                     33              // ORTEK - Hama&lt;br /&gt;
#define IRMP_TELEFUNKEN_PROTOCOL                34              // Telefunken (1560)&lt;br /&gt;
#define IRMP_ROOMBA_PROTOCOL                    35              // iRobot Roomba vacuum cleaner&lt;br /&gt;
#define IRMP_RCMM32_PROTOCOL                    36              // Fujitsu-Siemens (Activy remote control)&lt;br /&gt;
#define IRMP_RCMM24_PROTOCOL                    37              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_RCMM12_PROTOCOL                    38              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_SPEAKER_PROTOCOL                   39              // Another loudspeaker protocol, similar to Nubert&lt;br /&gt;
#define IRMP_LGAIR_PROTOCOL                     40              // LG air conditioner&lt;br /&gt;
#define IRMP_SAMSUNG48_PROTOCOL                 41              // air conditioner with SAMSUNG protocol (48 bits)&lt;br /&gt;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of address and the command code of an unknown remote can be received and printed over UART or LCD. Then these values can be used hard coded in your decoder routine. Or you write a teaching routine, where you need to press a key once to store the code in an EEPROM. A sample for this can be found in [http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP Lernfähige IR-Fernbedienung mit IRMP].&lt;br /&gt;
&lt;br /&gt;
Another [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup Beispiel-Main-Funktion] is include in the zip file, showing also the timer initialization.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Debouncing&amp;quot; of Keys ===&lt;br /&gt;
&lt;br /&gt;
To distinguish between long key press or a single press, the bit IRMP_FLAG_REPETITION exists. This will be set in struct member &#039;&#039;&#039;flags&#039;&#039;&#039; when a key on the remote is pressed for longer time and therefor the same command is repeated in short periods.&lt;br /&gt;
&lt;br /&gt;
Example:&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;
      // long key press&lt;br /&gt;
      // either:&lt;br /&gt;
      //   ignore the (repeated) key&lt;br /&gt;
      // or:&lt;br /&gt;
      //   use this information for a repeat function&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      // key was pressed again&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This could be used to &amp;quot;debounce&amp;quot; the keys 0-9 by ignoring commands with bit IRMP_FLAG_REPETITION set. For keys like &#039; VOLUME+&#039; or &#039;VOLUME-&#039; using the repetition could be useful, maybe to fade a LED [[LED-Fading]fade a LED].&lt;br /&gt;
&lt;br /&gt;
When you want to decode only singe keys, you can reduce the abov if block to:&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;
      // Its a new key&lt;br /&gt;
      // ACTION!&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
The  &amp;quot;Working Horse&amp;quot; from [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is the interrupt service routine irmp_ISR() which should be called 15000 times per second. Is this rate different, the constant [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]] in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] needs to be adjusted.&lt;br /&gt;
&lt;br /&gt;
irmp_ISR() detects first the length and the form of the startbit(s) and determines the used protocols by this information. As soon as the protocol was identified, the further bits are parameterized to read the following bits most efficient until the IR command is complete.&lt;br /&gt;
&lt;br /&gt;
Just to stop slashers:&lt;br /&gt;
&lt;br /&gt;
I know that the ISR is quite large. But as it acts as a state machine, the effective executed code per cycle is relative small. While it is &amp;quot;dark&amp;quot; (and that is the case for the most time ;-)) the spent time is vanishing short. In the WordClock project for example are called 8 ISR&#039;s with the same timer, there is irmp_ISR() only one amongst many others. For at least 8 MHz CPU clock no timing problems occured. Therefor I see really no problem in the length of the ISR.&lt;br /&gt;
&lt;br /&gt;
A crystal is not a neccessary must, it works well with the internal AVR oscillator. Remember to set the correct fuses for the CPU to run at 8 MHz, check [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] for correct values for an ATMEGA88.&lt;br /&gt;
&lt;br /&gt;
== Scanning of unknown IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
Changing in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] in line&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;
the value for [[IRMP_-_english#IRMP_LOGGING|IRMP_LOGGING]] to 1, then in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] a logging will be turned on: the bright- and darkphases will be sent via UART with 9600 bit/s ausgegeben: 1=dark, 0=bright. Maybe the constans in the functions uart_init() and uart_putc() must be adjusted, this depends on the used AVR-µC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remark: for PIC-processors there is an own logging module named [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]. This makes it possible to log via USB. This applies not to the AVR version&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you record these protocol scans with a terminal program and save it as a textfile, you can use these files for analyzing to adjust [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] for the unknown protocol - see next chapter.&lt;br /&gt;
&lt;br /&gt;
If you have a remote that is not supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] you can send me ([http://www.mikrocontroller.net/user/show/ukw ukw]) the scan files. Then I can check if the protocol fits into the IRMP concepts and adapt the sources if applicable.&lt;br /&gt;
&lt;br /&gt;
== IRMP under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be compiled under Linux for testing IR scans in textfiles. In the subdirectory &#039;IR-Data&#039; you will find such files that you can feed to [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]].&lt;br /&gt;
&lt;br /&gt;
The compilation of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is started by:&lt;br /&gt;
&lt;br /&gt;
    make -f makefile.lnx&lt;br /&gt;
&lt;br /&gt;
This will generate 3 IRMP versions:&lt;br /&gt;
&lt;br /&gt;
* irmp-10kHz: Version for 10kHz Scans&lt;br /&gt;
* irmp-15kHz: Version for 15kHz Scans&lt;br /&gt;
* irmp-20kHz: Version for 20kHz Scans&lt;br /&gt;
&lt;br /&gt;
=== Starting IRMP ===&lt;br /&gt;
&lt;br /&gt;
The calling syntax is:&lt;br /&gt;
&lt;br /&gt;
  ./irmp-nnkHz [-l|-p|-a|-v] &amp;lt; scan-file&lt;br /&gt;
&lt;br /&gt;
The given options are exclusive, that means only one option per call is valid:&lt;br /&gt;
&lt;br /&gt;
Option:&lt;br /&gt;
&lt;br /&gt;
   -l  List             print a list with pulses and pauses&lt;br /&gt;
   -a analyze           analyse the puls/pauses and write a &amp;quot;spectrum&amp;quot; in ASCII format&lt;br /&gt;
   -v verbose           verbose output&lt;br /&gt;
   -p  Print Timings    print a timing table for all protocols&lt;br /&gt;
&lt;br /&gt;
Samples:&lt;br /&gt;
&lt;br /&gt;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
Here you see the measured times of all pulses and pauses as (horizontal) bell shaped curves, which of course are not quite ideal displayed due to the ASCII formatting. The smaller the measured channels, the better is the timing of the remote.&lt;br /&gt;
&lt;br /&gt;
The above output can be read as:&lt;br /&gt;
&lt;br /&gt;
* the start bit has a pulse length between 9000 and 9200 µs, in average 9102 µs. The deviation from this average is about 1.1 %&lt;br /&gt;
&lt;br /&gt;
* the start bit has a pause length between 4300 and 4500 µs, the average is 4424 µs. The error is about 2.8 %.&lt;br /&gt;
&lt;br /&gt;
* the pulse length of a databit is between 500 and 700 µs, in average 650 µs, the error is (quite large!) 23.1 %&lt;br /&gt;
&lt;br /&gt;
Further there are two more pauses with different length (for bits 0 and 1). Checking this I leave to the willing reader ;-)&lt;br /&gt;
&lt;br /&gt;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used as well under Windows, like:&lt;br /&gt;
&lt;br /&gt;
* start command line console&lt;br /&gt;
* change to directory &#039;irmp&#039;&lt;br /&gt;
* enter:&lt;br /&gt;
            irmp-10kHz.exe &amp;lt; IR-Data\rc5x.txt&lt;br /&gt;
&lt;br /&gt;
The same options apply as for the Linux version.&lt;br /&gt;
&lt;br /&gt;
=== Long Outputs ===&lt;br /&gt;
&lt;br /&gt;
As some outputs are pretty large, it is recommended to redirect the output to a file or filter for paging:&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports more and more also camera remotes like:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
&lt;br /&gt;
The command variety isn&#039;t really large. Usually the cameras understand only the command:&lt;br /&gt;
&amp;quot;Trigger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Here is a short table for [[IRMP_-_english#PENTAX|PENTAX]] cameras:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Command || Function&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || Trigger&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001 || change Zoomlevel&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Because there is no address designated in the [[IRMP_-_english#PENTAX|PENTAX]]-protocol, this should be set for sending in [[IRSND_-_english|IRSND]] to 0x0000. You should also use a crystal in this case because especially the Nikons are very fussy regarding the timing.&lt;br /&gt;
&lt;br /&gt;
== IR Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-keyboard]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]  supports from version 1.7.0 also IR keyboards, namely the FDC-3402 from www.pollin.de (partno. 711 056) for less than 2 Euro.&lt;br /&gt;
&lt;br /&gt;
On detection of a key press the following data is returned:&lt;br /&gt;
&lt;br /&gt;
 Protocol-Number  (irmp_data.protocol): 18&lt;br /&gt;
 Address          (irmp_data.address) : 0x003F&lt;br /&gt;
&lt;br /&gt;
As command (irmp_data.command) the following values are returned:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   &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;
Special keys left side:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Code || Key   &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;
The above values are for pressing a key. On release,  [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] sets also Bit 8 (0x80) in the command.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F&lt;br /&gt;
      Key &#039;a&#039; released:  0x009F&lt;br /&gt;
&lt;br /&gt;
Exception for the ON / OFF key: This one sends only for key press a code, not for release.&lt;br /&gt;
&lt;br /&gt;
Is a key pressed for a longer time, it will be notified in irmp_data.flag&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
                           command   flag&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x00&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      ....&lt;br /&gt;
      Key &#039;a&#039; released:  0x009F    0x00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When key combinations (like a capital &#039;A&#039;) are pressed, then the return values are a sequence like this:&lt;br /&gt;
&lt;br /&gt;
      Left SHIFT-key pressed:    0x0002&lt;br /&gt;
      Key &#039;a&#039; pressed:           0x001F&lt;br /&gt;
      Key &#039;a&#039; released:          0x009F&lt;br /&gt;
      Left SHIFT-key released:   0x0082&lt;br /&gt;
&lt;br /&gt;
In [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] you will find a function get_fdc_key() for the Linux version, which can be used as a template to convert the FDC keycodes into the corresponding ASCII codes. This function can be used either local on the µC to decode the keycodes, or on the hostsystem (e.g. PC) where the IRMP data structure is sent to. Therefore the function incl. preprocessor constands should be copied to your application code.&lt;br /&gt;
&lt;br /&gt;
Here is an excerpt:&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;
And at least an example for the usage of function 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;
All non-printable characters are coded as:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Key               || Constant                || Value&lt;br /&gt;
|-&lt;br /&gt;
| ESC               || KEY_ESCAPE              || 0x1B&lt;br /&gt;
|-&lt;br /&gt;
| Menu              || KEY_MENUE               || 0x80&lt;br /&gt;
|-&lt;br /&gt;
| Back              || KEY_BACK                || 0x81&lt;br /&gt;
|-&lt;br /&gt;
| Forward           || KEY_FORWARD             || 0x82&lt;br /&gt;
|-&lt;br /&gt;
| Adress            || KEY_ADDRESS             || 0x83&lt;br /&gt;
|-&lt;br /&gt;
| Window            || KEY_WINDOW              || 0x84&lt;br /&gt;
|-&lt;br /&gt;
| 1. Page           || 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;
| New Page          || KEY_NEW_PAGE            || 0x89&lt;br /&gt;
|-&lt;br /&gt;
| Setup             || KEY_SETUP               || 0x8A&lt;br /&gt;
|-&lt;br /&gt;
| Font              || KEY_FONT                || 0x8B&lt;br /&gt;
|-&lt;br /&gt;
| Print             || KEY_PRINT               || 0x8C&lt;br /&gt;
|-&lt;br /&gt;
| On/Off            || 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;
| Insert            || KEY_INSERT              || 0x90&lt;br /&gt;
|-&lt;br /&gt;
| Delete            || KEY_DELETE              || 0x91&lt;br /&gt;
|-&lt;br /&gt;
| Cursor left       || KEY_LEFT                || 0x92&lt;br /&gt;
|-&lt;br /&gt;
| Pos1              || KEY_HOME                || 0x93&lt;br /&gt;
|-&lt;br /&gt;
| End               || KEY_END                 || 0x94&lt;br /&gt;
|-&lt;br /&gt;
| Cursor right      || KEY_UP                  || 0x95&lt;br /&gt;
|-&lt;br /&gt;
| Cursor down       || KEY_DOWN                || 0x96&lt;br /&gt;
|-&lt;br /&gt;
| Page up           || KEY_PAGE_UP             || 0x97&lt;br /&gt;
|-&lt;br /&gt;
| Page down         || KEY_PAGE_DOWN           || 0x98&lt;br /&gt;
|-&lt;br /&gt;
| Cursor left       || KEY_RIGHT               || 0x99&lt;br /&gt;
|-&lt;br /&gt;
| Left Mousebutton  || KEY_MOUSE_1             || 0x9E&lt;br /&gt;
|-&lt;br /&gt;
| Right Mousebutton || KEY_MOUSE_2             || 0x9F&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The function get_fdc_key() considers the holding of key pressed of Shift-, Ctrl- and ALT. For this reason not only the writing of capital letters works, but also the selection of special characters with the key combination ALT + key, e.g. ALT + m -&amp;gt; µ or ALT + q -&amp;gt; @. Also you can send CTRL-A to CTRL-Z by using the Ctrl key. The Caps Lock key is ignored, as I regard this key as the most unnecessary key at all ;-)&lt;br /&gt;
&lt;br /&gt;
= Appendix =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
Das ACP24-Protocol is used by Stiebel-Eltron-Aircons&lt;br /&gt;
&lt;br /&gt;
The structure of the 70 databits is :&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;
These are converted into the following 16 bits from irmp_data.command:&lt;br /&gt;
&lt;br /&gt;
        5432109876543210&lt;br /&gt;
        NAVVvMMMmtxyTTTT&lt;br /&gt;
&lt;br /&gt;
Meaning of the symbols:&lt;br /&gt;
&lt;br /&gt;
    TTTT = Temperature + 15 degree&lt;br /&gt;
            TTTT&lt;br /&gt;
            ----------&lt;br /&gt;
            0000        ???&lt;br /&gt;
            0001        ???&lt;br /&gt;
            0010        ???&lt;br /&gt;
            0011        18 degree&lt;br /&gt;
            0100        19 degree&lt;br /&gt;
            0101        20 degree&lt;br /&gt;
            0110        21 degree&lt;br /&gt;
            ...&lt;br /&gt;
            1111        30 degree&lt;br /&gt;
&lt;br /&gt;
    N    = Nightmode&lt;br /&gt;
            N&lt;br /&gt;
            ----------&lt;br /&gt;
            0           off&lt;br /&gt;
            1           on&lt;br /&gt;
&lt;br /&gt;
    VV   = fan, v must be 1!&lt;br /&gt;
            VV   v&lt;br /&gt;
            ----------&lt;br /&gt;
            00   1      level 1&lt;br /&gt;
            01   1      level 2&lt;br /&gt;
            10   1      level 3&lt;br /&gt;
            11   1      Automatic&lt;br /&gt;
&lt;br /&gt;
    MMM  = Mode&lt;br /&gt;
            MMM  m&lt;br /&gt;
            ----------&lt;br /&gt;
            000  0      turn off&lt;br /&gt;
            001  0      turn on&lt;br /&gt;
            001  1      cooling&lt;br /&gt;
            010  1      fan&lt;br /&gt;
            011  1      demist&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    = Automatic-Programm&lt;br /&gt;
            A&lt;br /&gt;
            ----------&lt;br /&gt;
            0           off&lt;br /&gt;
            1           on&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;
To control the air con via [[IRSND_-_english|IRSND]], the following functions can be used:&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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91205</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91205"/>
		<updated>2016-01-12T01:26:12Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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;
Here you can select which protocols should be supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]. Standardprotocols are activated by default.&lt;br /&gt;
Would you like to turn on more protocols or turn off some other for memory saving reasons, then the corresponding values in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] must be set.&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;
Each [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported IR protocoll consumes the noted amount of code. Here you can apply optimizations: for example the modulation frequency of 455 kHz for the [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] protocol is far away from the frequencies that are used by other protocols. Maybe you need a different IR receiver, otherwise you could disable these protocols. For example you cannot receive a [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]]-protocol (455kHz) with a TSOP1738 / TSOP 31238.&lt;br /&gt;
&lt;br /&gt;
Furthermore the protocols [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] are only reliable detected at a frequency starting at 15 kHz. For [[IRMP_-_english#LEGO|LEGO]] it is even 20 kHz. When you want to use these protocols, you must adjust [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]]. Otherwise, during compilation you will get a warning and the corresponding protocols are automatically disabled.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
This constant defines the pin where the IR receiver is connected.&lt;br /&gt;
&lt;br /&gt;
Default value is 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;
These two values must match your hardware configuration.&lt;br /&gt;
&lt;br /&gt;
This applies also to STM32 µC&#039;s:&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;
And the corresponding section for STM8 µC&#039;s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PIC controllers there is only the define for &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - depending on 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;
Default value:&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;
When you turn on callbacks, on any level change at the input the callback function is called. This could be use to visualize incomming IR signals by driving another output pin.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&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;
With IRMP_LOGGING the logging of received IR frames can be turned on.&lt;br /&gt;
&lt;br /&gt;
Default value:&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;
Further documentation can be found here: [[IRMP_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported protocols use partly variable, partly fixed bit length from 2 up to 48 bits. These will be described by preprocessor defines.&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] separates these IR frames always into 3 sections:&lt;br /&gt;
&lt;br /&gt;
 1. protocol ID&lt;br /&gt;
 2. address or vendorcode&lt;br /&gt;
 3. command&lt;br /&gt;
&lt;br /&gt;
with this function&lt;br /&gt;
&lt;br /&gt;
   irmp_get_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
you can recall a decoded message. The return value is 1 when a message has been received, otherwise it is 0. In the first case the 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;
contain valid information.&lt;br /&gt;
&lt;br /&gt;
That means: finally you&#039;ll get simply three values (protocol, address and command) that can be checked with an if or switch statement. &lt;br /&gt;
Here is a sample decoder which checks for key 1-9 on a remote:&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;
Here are possible constants for irmp_data.protocol, see also [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL                      1              // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                        2              // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL                    3              // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL                 4              // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL                   5              // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL                     6              // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                        7              // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL                      8              // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                        9              // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL                 10              // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL                     11              // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL                 12              // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL                    13              // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL              14              // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL                   15              // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL                     16              // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL                   17              // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL                       18              // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL                     19              // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL                       20              // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL                      21              // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL                     22              // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL                    23              // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL                      24              // IR60 (SDA2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL                  25              // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL                    26              // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL                     27              // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL                     28              // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL                      29              // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL                   30              // Thomson&lt;br /&gt;
#define IRMP_BOSE_PROTOCOL                      31              // BOSE&lt;br /&gt;
#define IRMP_A1TVBOX_PROTOCOL                   32              // A1 TV Box&lt;br /&gt;
#define IRMP_ORTEK_PROTOCOL                     33              // ORTEK - Hama&lt;br /&gt;
#define IRMP_TELEFUNKEN_PROTOCOL                34              // Telefunken (1560)&lt;br /&gt;
#define IRMP_ROOMBA_PROTOCOL                    35              // iRobot Roomba vacuum cleaner&lt;br /&gt;
#define IRMP_RCMM32_PROTOCOL                    36              // Fujitsu-Siemens (Activy remote control)&lt;br /&gt;
#define IRMP_RCMM24_PROTOCOL                    37              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_RCMM12_PROTOCOL                    38              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_SPEAKER_PROTOCOL                   39              // Another loudspeaker protocol, similar to Nubert&lt;br /&gt;
#define IRMP_LGAIR_PROTOCOL                     40              // LG air conditioner&lt;br /&gt;
#define IRMP_SAMSUNG48_PROTOCOL                 41              // air conditioner with SAMSUNG protocol (48 bits)&lt;br /&gt;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of address and the command code of an unknown remote can be received and printed over UART or LCD. Then these values can be used hard coded in your decoder routine. Or you write a teaching routine, where you need to press a key once to store the code in an EEPROM. A sample for this can be found in [http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP Lernfähige IR-Fernbedienung mit IRMP].&lt;br /&gt;
&lt;br /&gt;
Another [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup Beispiel-Main-Funktion] is include in the zip file, showing also the timer initialization.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Debouncing&amp;quot; of Keys ===&lt;br /&gt;
&lt;br /&gt;
To distinguish between long key press or a single press, the bit IRMP_FLAG_REPETITION exists. This will be set in struct member &#039;&#039;&#039;flags&#039;&#039;&#039; when a key on the remote is pressed for longer time and therefor the same command is repeated in short periods.&lt;br /&gt;
&lt;br /&gt;
Example:&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;
      // long key press&lt;br /&gt;
      // either:&lt;br /&gt;
      //   ignore the (repeated) key&lt;br /&gt;
      // or:&lt;br /&gt;
      //   use this information for a repeat function&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      // key was pressed again&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This could be used to &amp;quot;debounce&amp;quot; the keys 0-9 by ignoring commands with bit IRMP_FLAG_REPETITION set. For keys like &#039; VOLUME+&#039; or &#039;VOLUME-&#039; using the repetition could be useful, maybe to fade a LED [[LED-Fading]fade a LED].&lt;br /&gt;
&lt;br /&gt;
When you want to decode only singe keys, you can reduce the abov if block to:&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;
      // Its a new key&lt;br /&gt;
      // ACTION!&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
The  &amp;quot;Working Horse&amp;quot; from [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is the interrupt service routine irmp_ISR() which should be called 15000 times per second. Is this rate different, the constant [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]] in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] needs to be adjusted.&lt;br /&gt;
&lt;br /&gt;
irmp_ISR() detects first the length and the form of the startbit(s) and determines the used protocols by this information. As soon as the protocol was identified, the further bits are parameterized to read the following bits most efficient until the IR command is complete.&lt;br /&gt;
&lt;br /&gt;
Just to stop slashers:&lt;br /&gt;
&lt;br /&gt;
I know that the ISR is quite large. But as it acts as a state machine, the effective executed code per cycle is relative small. While it is &amp;quot;dark&amp;quot; (and that is the case for the most time ;-)) the spent time is vanishing short. In the WordClock project for example are called 8 ISR&#039;s with the same timer, there is irmp_ISR() only one amongst many others. For at least 8 MHz CPU clock no timing problems occured. Therefor I see really no problem in the length of the ISR.&lt;br /&gt;
&lt;br /&gt;
A crystal is not a neccessary must, it works well with the internal AVR oscillator. Remember to set the correct fuses for the CPU to run at 8 MHz, check [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] for correct values for an ATMEGA88.&lt;br /&gt;
&lt;br /&gt;
== Scanning of unknown IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
Changing in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] in line&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;
the value for [[IRMP_-_english#IRMP_LOGGING|IRMP_LOGGING]] to 1, then in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] a logging will be turned on: the bright- and darkphases will be sent via UART with 9600 bit/s ausgegeben: 1=dark, 0=bright. Maybe the constans in the functions uart_init() and uart_putc() must be adjusted, this depends on the used AVR-µC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remark: for PIC-processors there is an own logging module named [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]. This makes it possible to log via USB. This applies not to the AVR version&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you record these protocol scans with a terminal program and save it as a textfile, you can use these files for analyzing to adjust [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] for the unknown protocol - see next chapter.&lt;br /&gt;
&lt;br /&gt;
If you have a remote that is not supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] you can send me ([http://www.mikrocontroller.net/user/show/ukw ukw]) the scan files. Then I can check if the protocol fits into the IRMP concepts and adapt the sources if applicable.&lt;br /&gt;
&lt;br /&gt;
== IRMP under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be compiled under Linux for testing IR scans in textfiles. In the subdirectory &#039;IR-Data&#039; you will find such files that you can feed to [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]].&lt;br /&gt;
&lt;br /&gt;
The compilation of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is started by:&lt;br /&gt;
&lt;br /&gt;
    make -f makefile.lnx&lt;br /&gt;
&lt;br /&gt;
This will generate 3 IRMP versions:&lt;br /&gt;
&lt;br /&gt;
* irmp-10kHz: Version for 10kHz Scans&lt;br /&gt;
* irmp-15kHz: Version for 15kHz Scans&lt;br /&gt;
* irmp-20kHz: Version for 20kHz Scans&lt;br /&gt;
&lt;br /&gt;
=== Starting IRMP ===&lt;br /&gt;
&lt;br /&gt;
The calling syntax is:&lt;br /&gt;
&lt;br /&gt;
  ./irmp-nnkHz [-l|-p|-a|-v] &amp;lt; scan-file&lt;br /&gt;
&lt;br /&gt;
The given options are exclusive, that means only one option per call is valid:&lt;br /&gt;
&lt;br /&gt;
Option:&lt;br /&gt;
&lt;br /&gt;
   -l  List             print a list with pulses and pauses&lt;br /&gt;
   -a analyze           analyse the puls/pauses and write a &amp;quot;spectrum&amp;quot; in ASCII format&lt;br /&gt;
   -v verbose           verbose output&lt;br /&gt;
   -p  Print Timings    print a timing table for all protocols&lt;br /&gt;
&lt;br /&gt;
Samples:&lt;br /&gt;
&lt;br /&gt;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
Here you see the measured times of all pulses and pauses as (horizontal) bell shaped curves, which of course are not quite ideal displayed due to the ASCII formatting. The smaller the measured channels, the better is the timing of the remote.&lt;br /&gt;
&lt;br /&gt;
The above output can be read as:&lt;br /&gt;
&lt;br /&gt;
* the start bit has a pulse length between 9000 and 9200 µs, in average 9102 µs. The deviation from this average is about 1.1 %&lt;br /&gt;
&lt;br /&gt;
* the start bit has a pause length between 4300 and 4500 µs, the average is 4424 µs. The error is about 2.8 %.&lt;br /&gt;
&lt;br /&gt;
* the pulse length of a databit is between 500 and 700 µs, in average 650 µs, the error is (quite large!) 23.1 %&lt;br /&gt;
&lt;br /&gt;
Further there are two more pauses with different length (for bits 0 and 1). Checking this I leave to the willing reader ;-)&lt;br /&gt;
&lt;br /&gt;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used as well under Windows, like:&lt;br /&gt;
&lt;br /&gt;
* start command line console&lt;br /&gt;
* change to directory &#039;irmp&#039;&lt;br /&gt;
* enter:&lt;br /&gt;
            irmp-10kHz.exe &amp;lt; IR-Data\rc5x.txt&lt;br /&gt;
&lt;br /&gt;
The same options apply as for the Linux version.&lt;br /&gt;
&lt;br /&gt;
=== Long Outputs ===&lt;br /&gt;
&lt;br /&gt;
As some outputs are pretty large, it is recommended to redirect the output to a file or filter for paging:&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports more and more also camera remotes like:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
&lt;br /&gt;
The command variety isn&#039;t really large. Usually the cameras understand only the command:&lt;br /&gt;
&amp;quot;Trigger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Here is a short table for [[IRMP_-_english#PENTAX|PENTAX]] cameras:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Command || Function&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || Trigger&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001 || change Zoomlevel&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Because there is no address designated in the [[IRMP_-_english#PENTAX|PENTAX]]-protocol, this should be set for sending in [[IRSND_-_english|IRSND]] to 0x0000. You should also use a crystal in this case because especially the Nikons are very fussy regarding the timing.&lt;br /&gt;
&lt;br /&gt;
== IR Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-keyboard]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]  supports from version 1.7.0 also IR keyboards, namely the FDC-3402 from www.pollin.de (partno. 711 056) for less than 2 Euro.&lt;br /&gt;
&lt;br /&gt;
On detection of a key press the following data is returned:&lt;br /&gt;
&lt;br /&gt;
 Protocol-Number  (irmp_data.protocol): 18&lt;br /&gt;
 Address          (irmp_data.address) : 0x003F&lt;br /&gt;
&lt;br /&gt;
As command (irmp_data.command) the following values are returned:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   &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;
Special keys left side:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Code || Key   &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;
The above values are for pressing a key. On release,  [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] sets also Bit 8 (0x80) in the command.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F&lt;br /&gt;
      Key &#039;a&#039; released:  0x009F&lt;br /&gt;
&lt;br /&gt;
Exception for the ON / OFF key: This one sends only for key press a code, not for release.&lt;br /&gt;
&lt;br /&gt;
Is a key pressed for a longer time, it will be notified in irmp_data.flag&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
                           command   flag&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x00&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      ....&lt;br /&gt;
      Key &#039;a&#039; released:  0x009F    0x00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When key combinations (like a capital &#039;A&#039;) are pressed, then the return values are a sequence like this:&lt;br /&gt;
&lt;br /&gt;
      Left SHIFT-key pressed:    0x0002&lt;br /&gt;
      Key &#039;a&#039; pressed:           0x001F&lt;br /&gt;
      Key &#039;a&#039; released:          0x009F&lt;br /&gt;
      Left SHIFT-key released:   0x0082&lt;br /&gt;
&lt;br /&gt;
In [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] you will find a function get_fdc_key() for the Linux version, which can be used as a template to convert the FDC keycodes into the corresponding ASCII codes. This function can be used either local on the µC to decode the keycodes, or on the hostsystem (e.g. PC) where the IRMP data structure is sent to. Therefore the function incl. preprocessor constands should be copied to your application code.&lt;br /&gt;
&lt;br /&gt;
Here is an excerpt:&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;
And at least an example for the usage of function 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;
All non-printable characters are coded as:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Key               || Constant                || Value&lt;br /&gt;
|-&lt;br /&gt;
| ESC               || KEY_ESCAPE              || 0x1B&lt;br /&gt;
|-&lt;br /&gt;
| Menu              || KEY_MENUE               || 0x80&lt;br /&gt;
|-&lt;br /&gt;
| Back              || KEY_BACK                || 0x81&lt;br /&gt;
|-&lt;br /&gt;
| Forward           || KEY_FORWARD             || 0x82&lt;br /&gt;
|-&lt;br /&gt;
| Adress            || KEY_ADDRESS             || 0x83&lt;br /&gt;
|-&lt;br /&gt;
| Window            || KEY_WINDOW              || 0x84&lt;br /&gt;
|-&lt;br /&gt;
| 1. Page           || 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;
| New Page          || KEY_NEW_PAGE            || 0x89&lt;br /&gt;
|-&lt;br /&gt;
| Setup             || KEY_SETUP               || 0x8A&lt;br /&gt;
|-&lt;br /&gt;
| Font              || KEY_FONT                || 0x8B&lt;br /&gt;
|-&lt;br /&gt;
| Print             || KEY_PRINT               || 0x8C&lt;br /&gt;
|-&lt;br /&gt;
| On/Off            || 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;
| Insert            || KEY_INSERT              || 0x90&lt;br /&gt;
|-&lt;br /&gt;
| Delete            || KEY_DELETE              || 0x91&lt;br /&gt;
|-&lt;br /&gt;
| Cursor left       || KEY_LEFT                || 0x92&lt;br /&gt;
|-&lt;br /&gt;
| Pos1              || KEY_HOME                || 0x93&lt;br /&gt;
|-&lt;br /&gt;
| End               || KEY_END                 || 0x94&lt;br /&gt;
|-&lt;br /&gt;
| Cursor right      || KEY_UP                  || 0x95&lt;br /&gt;
|-&lt;br /&gt;
| Cursor down       || KEY_DOWN                || 0x96&lt;br /&gt;
|-&lt;br /&gt;
| Page up           || KEY_PAGE_UP             || 0x97&lt;br /&gt;
|-&lt;br /&gt;
| Page down         || KEY_PAGE_DOWN           || 0x98&lt;br /&gt;
|-&lt;br /&gt;
| Cursor left       || KEY_RIGHT               || 0x99&lt;br /&gt;
|-&lt;br /&gt;
| Left Mousebutton  || KEY_MOUSE_1             || 0x9E&lt;br /&gt;
|-&lt;br /&gt;
| Right Mousebutton || KEY_MOUSE_2             || 0x9F&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The function get_fdc_key() considers the holding of key pressed of Shift-, Ctrl- and ALT. For this reason not only the writing of capital letters works, but also the selection of special characters with the key combination ALT + key, e.g. ALT + m -&amp;gt; µ or ALT + q -&amp;gt; @. Also you can send CTRL-A to CTRL-Z by using the Ctrl key. The Caps Lock key is ignored, as I regard this key as the most unnecessary key at all ;-)&lt;br /&gt;
&lt;br /&gt;
= Appendix =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91204</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91204"/>
		<updated>2016-01-12T01:25:25Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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;
Here you can select which protocols should be supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]. Standardprotocols are activated by default.&lt;br /&gt;
Would you like to turn on more protocols or turn off some other for memory saving reasons, then the corresponding values in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] must be set.&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;
Each [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported IR protocoll consumes the noted amount of code. Here you can apply optimizations: for example the modulation frequency of 455 kHz for the [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] protocol is far away from the frequencies that are used by other protocols. Maybe you need a different IR receiver, otherwise you could disable these protocols. For example you cannot receive a [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]]-protocol (455kHz) with a TSOP1738 / TSOP 31238.&lt;br /&gt;
&lt;br /&gt;
Furthermore the protocols [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] are only reliable detected at a frequency starting at 15 kHz. For [[IRMP_-_english#LEGO|LEGO]] it is even 20 kHz. When you want to use these protocols, you must adjust [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]]. Otherwise, during compilation you will get a warning and the corresponding protocols are automatically disabled.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
This constant defines the pin where the IR receiver is connected.&lt;br /&gt;
&lt;br /&gt;
Default value is 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;
These two values must match your hardware configuration.&lt;br /&gt;
&lt;br /&gt;
This applies also to STM32 µC&#039;s:&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;
And the corresponding section for STM8 µC&#039;s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PIC controllers there is only the define for &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - depending on 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;
Default value:&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;
When you turn on callbacks, on any level change at the input the callback function is called. This could be use to visualize incomming IR signals by driving another output pin.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&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;
With IRMP_LOGGING the logging of received IR frames can be turned on.&lt;br /&gt;
&lt;br /&gt;
Default value:&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;
Further documentation can be found here: [[IRMP_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported protocols use partly variable, partly fixed bit length from 2 up to 48 bits. These will be described by preprocessor defines.&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] separates these IR frames always into 3 sections:&lt;br /&gt;
&lt;br /&gt;
 1. protocol ID&lt;br /&gt;
 2. address or vendorcode&lt;br /&gt;
 3. command&lt;br /&gt;
&lt;br /&gt;
with this function&lt;br /&gt;
&lt;br /&gt;
   irmp_get_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
you can recall a decoded message. The return value is 1 when a message has been received, otherwise it is 0. In the first case the 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;
contain valid information.&lt;br /&gt;
&lt;br /&gt;
That means: finally you&#039;ll get simply three values (protocol, address and command) that can be checked with an if or switch statement. &lt;br /&gt;
Here is a sample decoder which checks for key 1-9 on a remote:&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;
Here are possible constants for irmp_data.protocol, see also [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL                      1              // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                        2              // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL                    3              // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL                 4              // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL                   5              // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL                     6              // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                        7              // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL                      8              // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                        9              // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL                 10              // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL                     11              // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL                 12              // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL                    13              // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL              14              // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL                   15              // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL                     16              // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL                   17              // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL                       18              // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL                     19              // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL                       20              // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL                      21              // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL                     22              // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL                    23              // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL                      24              // IR60 (SDA2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL                  25              // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL                    26              // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL                     27              // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL                     28              // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL                      29              // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL                   30              // Thomson&lt;br /&gt;
#define IRMP_BOSE_PROTOCOL                      31              // BOSE&lt;br /&gt;
#define IRMP_A1TVBOX_PROTOCOL                   32              // A1 TV Box&lt;br /&gt;
#define IRMP_ORTEK_PROTOCOL                     33              // ORTEK - Hama&lt;br /&gt;
#define IRMP_TELEFUNKEN_PROTOCOL                34              // Telefunken (1560)&lt;br /&gt;
#define IRMP_ROOMBA_PROTOCOL                    35              // iRobot Roomba vacuum cleaner&lt;br /&gt;
#define IRMP_RCMM32_PROTOCOL                    36              // Fujitsu-Siemens (Activy remote control)&lt;br /&gt;
#define IRMP_RCMM24_PROTOCOL                    37              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_RCMM12_PROTOCOL                    38              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_SPEAKER_PROTOCOL                   39              // Another loudspeaker protocol, similar to Nubert&lt;br /&gt;
#define IRMP_LGAIR_PROTOCOL                     40              // LG air conditioner&lt;br /&gt;
#define IRMP_SAMSUNG48_PROTOCOL                 41              // air conditioner with SAMSUNG protocol (48 bits)&lt;br /&gt;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of address and the command code of an unknown remote can be received and printed over UART or LCD. Then these values can be used hard coded in your decoder routine. Or you write a teaching routine, where you need to press a key once to store the code in an EEPROM. A sample for this can be found in [http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP Lernfähige IR-Fernbedienung mit IRMP].&lt;br /&gt;
&lt;br /&gt;
Another [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup Beispiel-Main-Funktion] is include in the zip file, showing also the timer initialization.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Debouncing&amp;quot; of Keys ===&lt;br /&gt;
&lt;br /&gt;
To distinguish between long key press or a single press, the bit IRMP_FLAG_REPETITION exists. This will be set in struct member &#039;&#039;&#039;flags&#039;&#039;&#039; when a key on the remote is pressed for longer time and therefor the same command is repeated in short periods.&lt;br /&gt;
&lt;br /&gt;
Example:&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;
      // long key press&lt;br /&gt;
      // either:&lt;br /&gt;
      //   ignore the (repeated) key&lt;br /&gt;
      // or:&lt;br /&gt;
      //   use this information for a repeat function&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      // key was pressed again&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This could be used to &amp;quot;debounce&amp;quot; the keys 0-9 by ignoring commands with bit IRMP_FLAG_REPETITION set. For keys like &#039; VOLUME+&#039; or &#039;VOLUME-&#039; using the repetition could be useful, maybe to fade a LED [[LED-Fading]fade a LED].&lt;br /&gt;
&lt;br /&gt;
When you want to decode only singe keys, you can reduce the abov if block to:&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;
      // Its a new key&lt;br /&gt;
      // ACTION!&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
The  &amp;quot;Working Horse&amp;quot; from [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is the interrupt service routine irmp_ISR() which should be called 15000 times per second. Is this rate different, the constant [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]] in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] needs to be adjusted.&lt;br /&gt;
&lt;br /&gt;
irmp_ISR() detects first the length and the form of the startbit(s) and determines the used protocols by this information. As soon as the protocol was identified, the further bits are parameterized to read the following bits most efficient until the IR command is complete.&lt;br /&gt;
&lt;br /&gt;
Just to stop slashers:&lt;br /&gt;
&lt;br /&gt;
I know that the ISR is quite large. But as it acts as a state machine, the effective executed code per cycle is relative small. While it is &amp;quot;dark&amp;quot; (and that is the case for the most time ;-)) the spent time is vanishing short. In the WordClock project for example are called 8 ISR&#039;s with the same timer, there is irmp_ISR() only one amongst many others. For at least 8 MHz CPU clock no timing problems occured. Therefor I see really no problem in the length of the ISR.&lt;br /&gt;
&lt;br /&gt;
A crystal is not a neccessary must, it works well with the internal AVR oscillator. Remember to set the correct fuses for the CPU to run at 8 MHz, check [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] for correct values for an ATMEGA88.&lt;br /&gt;
&lt;br /&gt;
== Scanning of unknown IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
Changing in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] in line&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;
the value for [[IRMP_-_english#IRMP_LOGGING|IRMP_LOGGING]] to 1, then in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] a logging will be turned on: the bright- and darkphases will be sent via UART with 9600 bit/s ausgegeben: 1=dark, 0=bright. Maybe the constans in the functions uart_init() and uart_putc() must be adjusted, this depends on the used AVR-µC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remark: for PIC-processors there is an own logging module named [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]. This makes it possible to log via USB. This applies not to the AVR version&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you record these protocol scans with a terminal program and save it as a textfile, you can use these files for analyzing to adjust [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] for the unknown protocol - see next chapter.&lt;br /&gt;
&lt;br /&gt;
If you have a remote that is not supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] you can send me ([http://www.mikrocontroller.net/user/show/ukw ukw]) the scan files. Then I can check if the protocol fits into the IRMP concepts and adapt the sources if applicable.&lt;br /&gt;
&lt;br /&gt;
== IRMP under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be compiled under Linux for testing IR scans in textfiles. In the subdirectory &#039;IR-Data&#039; you will find such files that you can feed to [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]].&lt;br /&gt;
&lt;br /&gt;
The compilation of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is started by:&lt;br /&gt;
&lt;br /&gt;
    make -f makefile.lnx&lt;br /&gt;
&lt;br /&gt;
This will generate 3 IRMP versions:&lt;br /&gt;
&lt;br /&gt;
* irmp-10kHz: Version for 10kHz Scans&lt;br /&gt;
* irmp-15kHz: Version for 15kHz Scans&lt;br /&gt;
* irmp-20kHz: Version for 20kHz Scans&lt;br /&gt;
&lt;br /&gt;
=== Starting IRMP ===&lt;br /&gt;
&lt;br /&gt;
The calling syntax is:&lt;br /&gt;
&lt;br /&gt;
  ./irmp-nnkHz [-l|-p|-a|-v] &amp;lt; scan-file&lt;br /&gt;
&lt;br /&gt;
The given options are exclusive, that means only one option per call is valid:&lt;br /&gt;
&lt;br /&gt;
Option:&lt;br /&gt;
&lt;br /&gt;
   -l  List             print a list with pulses and pauses&lt;br /&gt;
   -a analyze           analyse the puls/pauses and write a &amp;quot;spectrum&amp;quot; in ASCII format&lt;br /&gt;
   -v verbose           verbose output&lt;br /&gt;
   -p  Print Timings    print a timing table for all protocols&lt;br /&gt;
&lt;br /&gt;
Samples:&lt;br /&gt;
&lt;br /&gt;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
Here you see the measured times of all pulses and pauses as (horizontal) bell shaped curves, which of course are not quite ideal displayed due to the ASCII formatting. The smaller the measured channels, the better is the timing of the remote.&lt;br /&gt;
&lt;br /&gt;
The above output can be read as:&lt;br /&gt;
&lt;br /&gt;
* the start bit has a pulse length between 9000 and 9200 µs, in average 9102 µs. The deviation from this average is about 1.1 %&lt;br /&gt;
&lt;br /&gt;
* the start bit has a pause length between 4300 and 4500 µs, the average is 4424 µs. The error is about 2.8 %.&lt;br /&gt;
&lt;br /&gt;
* the pulse length of a databit is between 500 and 700 µs, in average 650 µs, the error is (quite large!) 23.1 %&lt;br /&gt;
&lt;br /&gt;
Further there are two more pauses with different length (for bits 0 and 1). Checking this I leave to the willing reader ;-)&lt;br /&gt;
&lt;br /&gt;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used as well under Windows, like:&lt;br /&gt;
&lt;br /&gt;
* start command line console&lt;br /&gt;
* change to directory &#039;irmp&#039;&lt;br /&gt;
* enter:&lt;br /&gt;
            irmp-10kHz.exe &amp;lt; IR-Data\rc5x.txt&lt;br /&gt;
&lt;br /&gt;
The same options apply as for the Linux version.&lt;br /&gt;
&lt;br /&gt;
=== Long Outputs ===&lt;br /&gt;
&lt;br /&gt;
As some outputs are pretty large, it is recommended to redirect the output to a file or filter for paging:&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports more and more also camera remotes like:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
&lt;br /&gt;
The command variety isn&#039;t really large. Usually the cameras understand only the command:&lt;br /&gt;
&amp;quot;Trigger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Here is a short table for [[IRMP_-_english#PENTAX|PENTAX]] cameras:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Command || Function&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || Trigger&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001 || change Zoomlevel&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Because there is no address designated in the [[IRMP_-_english#PENTAX|PENTAX]]-protocol, this should be set for sending in [[IRSND_-_english|IRSND]] to 0x0000. You should also use a crystal in this case because especially the Nikons are very fussy regarding the timing.&lt;br /&gt;
&lt;br /&gt;
== IR Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-keyboard]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]  supports from version 1.7.0 also IR keyboards, namely the FDC-3402 from www.pollin.de (partno. 711 056) for less than 2 Euro.&lt;br /&gt;
&lt;br /&gt;
On detection of a key press the following data is returned:&lt;br /&gt;
&lt;br /&gt;
 Protocol-Number  (irmp_data.protocol): 18&lt;br /&gt;
 Address          (irmp_data.address) : 0x003F&lt;br /&gt;
&lt;br /&gt;
As command (irmp_data.command) the following values are returned:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   &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;
Special keys left side:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Code || Key   &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;
The above values are for pressing a key. On release,  [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] sets also Bit 8 (0x80) in the command.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F&lt;br /&gt;
      Key &#039;a&#039; released:  0x009F&lt;br /&gt;
&lt;br /&gt;
Exception for the ON / OFF key: This one sends only for key press a code, not for release.&lt;br /&gt;
&lt;br /&gt;
Is a key pressed for a longer time, it will be notified in irmp_data.flag&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
                           command   flag&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x00&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      ....&lt;br /&gt;
      Key &#039;a&#039; released:  0x009F    0x00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When key combinations (like a capital &#039;A&#039;) are pressed, then the return values are a sequence like this:&lt;br /&gt;
&lt;br /&gt;
      Left SHIFT-key pressed:    0x0002&lt;br /&gt;
      Key &#039;a&#039; pressed:           0x001F&lt;br /&gt;
      Key &#039;a&#039; released:          0x009F&lt;br /&gt;
      Left SHIFT-key released:   0x0082&lt;br /&gt;
&lt;br /&gt;
In [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] you will find a function get_fdc_key() for the Linux version, which can be used as a template to convert the FDC keycodes into the corresponding ASCII codes. This function can be used either local on the µC to decode the keycodes, or on the hostsystem (e.g. PC) where the IRMP data structure is sent to. Therefore the function incl. preprocessor constands should be copied to your application code.&lt;br /&gt;
&lt;br /&gt;
Here is an excerpt:&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;
And at least an example for the usage of function 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;
All non-printable characters are coded as:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Key               || Constant                || Value&lt;br /&gt;
|-&lt;br /&gt;
| ESC               || KEY_ESCAPE              || 0x1B&lt;br /&gt;
|-&lt;br /&gt;
| Menu              || KEY_MENUE               || 0x80&lt;br /&gt;
|-&lt;br /&gt;
| Back              || KEY_BACK                || 0x81&lt;br /&gt;
|-&lt;br /&gt;
| Forward           || KEY_FORWARD             || 0x82&lt;br /&gt;
|-&lt;br /&gt;
| Adress            || KEY_ADDRESS             || 0x83&lt;br /&gt;
|-&lt;br /&gt;
| Window            || KEY_WINDOW              || 0x84&lt;br /&gt;
|-&lt;br /&gt;
| 1. Page           || 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;
| New Page          || KEY_NEW_PAGE            || 0x89&lt;br /&gt;
|-&lt;br /&gt;
| Setup             || KEY_SETUP               || 0x8A&lt;br /&gt;
|-&lt;br /&gt;
| Font              || KEY_FONT                || 0x8B&lt;br /&gt;
|-&lt;br /&gt;
| Print             || KEY_PRINT               || 0x8C&lt;br /&gt;
|-&lt;br /&gt;
| On/Off            || 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;
| Insert            || KEY_INSERT              || 0x90&lt;br /&gt;
|-&lt;br /&gt;
| Delete            || KEY_DELETE              || 0x91&lt;br /&gt;
|-&lt;br /&gt;
| Cursor left       || KEY_LEFT                || 0x92&lt;br /&gt;
|-&lt;br /&gt;
| Pos1              || KEY_HOME                || 0x93&lt;br /&gt;
|-&lt;br /&gt;
| End               || KEY_END                 || 0x94&lt;br /&gt;
|-&lt;br /&gt;
| Cursor right      || KEY_UP                  || 0x95&lt;br /&gt;
|-&lt;br /&gt;
| Cursor down       || KEY_DOWN                || 0x96&lt;br /&gt;
|-&lt;br /&gt;
| Page up           || KEY_PAGE_UP             || 0x97&lt;br /&gt;
|-&lt;br /&gt;
| Page down         || KEY_PAGE_DOWN           || 0x98&lt;br /&gt;
|-&lt;br /&gt;
| Cursor left       || KEY_RIGHT               || 0x99&lt;br /&gt;
|-&lt;br /&gt;
| Left Mousebutton  || KEY_MOUSE_1             || 0x9E&lt;br /&gt;
|-&lt;br /&gt;
| Right Mousebutton || KEY_MOUSE_2             || 0x9F&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The function get_fdc_key() considers the holding of key pressed of Shift-, Ctrl- and ALT. For this reason not only the writing of capital letters works, but also the selection of special characters with the key combination ALT + key, e.g. ALT + m -&amp;gt; µ or ALT + q -&amp;gt; @. Also you can send CTRL-A to CTRL-Z by using the Ctrl key. The Caps Lock key is ignored, as I regard this key as the most unnecessary key at all ;-)&lt;br /&gt;
&lt;br /&gt;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91203</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91203"/>
		<updated>2016-01-12T01:24:25Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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;
Here you can select which protocols should be supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]. Standardprotocols are activated by default.&lt;br /&gt;
Would you like to turn on more protocols or turn off some other for memory saving reasons, then the corresponding values in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] must be set.&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;
Each [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported IR protocoll consumes the noted amount of code. Here you can apply optimizations: for example the modulation frequency of 455 kHz for the [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] protocol is far away from the frequencies that are used by other protocols. Maybe you need a different IR receiver, otherwise you could disable these protocols. For example you cannot receive a [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]]-protocol (455kHz) with a TSOP1738 / TSOP 31238.&lt;br /&gt;
&lt;br /&gt;
Furthermore the protocols [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] are only reliable detected at a frequency starting at 15 kHz. For [[IRMP_-_english#LEGO|LEGO]] it is even 20 kHz. When you want to use these protocols, you must adjust [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]]. Otherwise, during compilation you will get a warning and the corresponding protocols are automatically disabled.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
This constant defines the pin where the IR receiver is connected.&lt;br /&gt;
&lt;br /&gt;
Default value is 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;
These two values must match your hardware configuration.&lt;br /&gt;
&lt;br /&gt;
This applies also to STM32 µC&#039;s:&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;
And the corresponding section for STM8 µC&#039;s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PIC controllers there is only the define for &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - depending on 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;
Default value:&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;
When you turn on callbacks, on any level change at the input the callback function is called. This could be use to visualize incomming IR signals by driving another output pin.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&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;
With IRMP_LOGGING the logging of received IR frames can be turned on.&lt;br /&gt;
&lt;br /&gt;
Default value:&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;
Further documentation can be found here: [[IRMP_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported protocols use partly variable, partly fixed bit length from 2 up to 48 bits. These will be described by preprocessor defines.&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] separates these IR frames always into 3 sections:&lt;br /&gt;
&lt;br /&gt;
 1. protocol ID&lt;br /&gt;
 2. address or vendorcode&lt;br /&gt;
 3. command&lt;br /&gt;
&lt;br /&gt;
with this function&lt;br /&gt;
&lt;br /&gt;
   irmp_get_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
you can recall a decoded message. The return value is 1 when a message has been received, otherwise it is 0. In the first case the 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;
contain valid information.&lt;br /&gt;
&lt;br /&gt;
That means: finally you&#039;ll get simply three values (protocol, address and command) that can be checked with an if or switch statement. &lt;br /&gt;
Here is a sample decoder which checks for key 1-9 on a remote:&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;
Here are possible constants for irmp_data.protocol, see also [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL                      1              // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                        2              // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL                    3              // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL                 4              // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL                   5              // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL                     6              // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                        7              // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL                      8              // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                        9              // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL                 10              // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL                     11              // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL                 12              // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL                    13              // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL              14              // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL                   15              // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL                     16              // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL                   17              // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL                       18              // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL                     19              // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL                       20              // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL                      21              // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL                     22              // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL                    23              // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL                      24              // IR60 (SDA2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL                  25              // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL                    26              // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL                     27              // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL                     28              // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL                      29              // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL                   30              // Thomson&lt;br /&gt;
#define IRMP_BOSE_PROTOCOL                      31              // BOSE&lt;br /&gt;
#define IRMP_A1TVBOX_PROTOCOL                   32              // A1 TV Box&lt;br /&gt;
#define IRMP_ORTEK_PROTOCOL                     33              // ORTEK - Hama&lt;br /&gt;
#define IRMP_TELEFUNKEN_PROTOCOL                34              // Telefunken (1560)&lt;br /&gt;
#define IRMP_ROOMBA_PROTOCOL                    35              // iRobot Roomba vacuum cleaner&lt;br /&gt;
#define IRMP_RCMM32_PROTOCOL                    36              // Fujitsu-Siemens (Activy remote control)&lt;br /&gt;
#define IRMP_RCMM24_PROTOCOL                    37              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_RCMM12_PROTOCOL                    38              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_SPEAKER_PROTOCOL                   39              // Another loudspeaker protocol, similar to Nubert&lt;br /&gt;
#define IRMP_LGAIR_PROTOCOL                     40              // LG air conditioner&lt;br /&gt;
#define IRMP_SAMSUNG48_PROTOCOL                 41              // air conditioner with SAMSUNG protocol (48 bits)&lt;br /&gt;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of address and the command code of an unknown remote can be received and printed over UART or LCD. Then these values can be used hard coded in your decoder routine. Or you write a teaching routine, where you need to press a key once to store the code in an EEPROM. A sample for this can be found in [http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP Lernfähige IR-Fernbedienung mit IRMP].&lt;br /&gt;
&lt;br /&gt;
Another [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup Beispiel-Main-Funktion] is include in the zip file, showing also the timer initialization.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Debouncing&amp;quot; of Keys ===&lt;br /&gt;
&lt;br /&gt;
To distinguish between long key press or a single press, the bit IRMP_FLAG_REPETITION exists. This will be set in struct member &#039;&#039;&#039;flags&#039;&#039;&#039; when a key on the remote is pressed for longer time and therefor the same command is repeated in short periods.&lt;br /&gt;
&lt;br /&gt;
Example:&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;
      // long key press&lt;br /&gt;
      // either:&lt;br /&gt;
      //   ignore the (repeated) key&lt;br /&gt;
      // or:&lt;br /&gt;
      //   use this information for a repeat function&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      // key was pressed again&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This could be used to &amp;quot;debounce&amp;quot; the keys 0-9 by ignoring commands with bit IRMP_FLAG_REPETITION set. For keys like &#039; VOLUME+&#039; or &#039;VOLUME-&#039; using the repetition could be useful, maybe to fade a LED [[LED-Fading]fade a LED].&lt;br /&gt;
&lt;br /&gt;
When you want to decode only singe keys, you can reduce the abov if block to:&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;
      // Its a new key&lt;br /&gt;
      // ACTION!&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
The  &amp;quot;Working Horse&amp;quot; from [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is the interrupt service routine irmp_ISR() which should be called 15000 times per second. Is this rate different, the constant [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]] in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] needs to be adjusted.&lt;br /&gt;
&lt;br /&gt;
irmp_ISR() detects first the length and the form of the startbit(s) and determines the used protocols by this information. As soon as the protocol was identified, the further bits are parameterized to read the following bits most efficient until the IR command is complete.&lt;br /&gt;
&lt;br /&gt;
Just to stop slashers:&lt;br /&gt;
&lt;br /&gt;
I know that the ISR is quite large. But as it acts as a state machine, the effective executed code per cycle is relative small. While it is &amp;quot;dark&amp;quot; (and that is the case for the most time ;-)) the spent time is vanishing short. In the WordClock project for example are called 8 ISR&#039;s with the same timer, there is irmp_ISR() only one amongst many others. For at least 8 MHz CPU clock no timing problems occured. Therefor I see really no problem in the length of the ISR.&lt;br /&gt;
&lt;br /&gt;
A crystal is not a neccessary must, it works well with the internal AVR oscillator. Remember to set the correct fuses for the CPU to run at 8 MHz, check [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] for correct values for an ATMEGA88.&lt;br /&gt;
&lt;br /&gt;
== Scanning of unknown IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
Changing in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] in line&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;
the value for [[IRMP_-_english#IRMP_LOGGING|IRMP_LOGGING]] to 1, then in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] a logging will be turned on: the bright- and darkphases will be sent via UART with 9600 bit/s ausgegeben: 1=dark, 0=bright. Maybe the constans in the functions uart_init() and uart_putc() must be adjusted, this depends on the used AVR-µC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remark: for PIC-processors there is an own logging module named [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]. This makes it possible to log via USB. This applies not to the AVR version&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you record these protocol scans with a terminal program and save it as a textfile, you can use these files for analyzing to adjust [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] for the unknown protocol - see next chapter.&lt;br /&gt;
&lt;br /&gt;
If you have a remote that is not supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] you can send me ([http://www.mikrocontroller.net/user/show/ukw ukw]) the scan files. Then I can check if the protocol fits into the IRMP concepts and adapt the sources if applicable.&lt;br /&gt;
&lt;br /&gt;
== IRMP under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be compiled under Linux for testing IR scans in textfiles. In the subdirectory &#039;IR-Data&#039; you will find such files that you can feed to [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]].&lt;br /&gt;
&lt;br /&gt;
The compilation of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is started by:&lt;br /&gt;
&lt;br /&gt;
    make -f makefile.lnx&lt;br /&gt;
&lt;br /&gt;
This will generate 3 IRMP versions:&lt;br /&gt;
&lt;br /&gt;
* irmp-10kHz: Version for 10kHz Scans&lt;br /&gt;
* irmp-15kHz: Version for 15kHz Scans&lt;br /&gt;
* irmp-20kHz: Version for 20kHz Scans&lt;br /&gt;
&lt;br /&gt;
=== Starting IRMP ===&lt;br /&gt;
&lt;br /&gt;
The calling syntax is:&lt;br /&gt;
&lt;br /&gt;
  ./irmp-nnkHz [-l|-p|-a|-v] &amp;lt; scan-file&lt;br /&gt;
&lt;br /&gt;
The given options are exclusive, that means only one option per call is valid:&lt;br /&gt;
&lt;br /&gt;
Option:&lt;br /&gt;
&lt;br /&gt;
   -l  List             print a list with pulses and pauses&lt;br /&gt;
   -a analyze           analyse the puls/pauses and write a &amp;quot;spectrum&amp;quot; in ASCII format&lt;br /&gt;
   -v verbose           verbose output&lt;br /&gt;
   -p  Print Timings    print a timing table for all protocols&lt;br /&gt;
&lt;br /&gt;
Samples:&lt;br /&gt;
&lt;br /&gt;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
Here you see the measured times of all pulses and pauses as (horizontal) bell shaped curves, which of course are not quite ideal displayed due to the ASCII formatting. The smaller the measured channels, the better is the timing of the remote.&lt;br /&gt;
&lt;br /&gt;
The above output can be read as:&lt;br /&gt;
&lt;br /&gt;
* the start bit has a pulse length between 9000 and 9200 µs, in average 9102 µs. The deviation from this average is about 1.1 %&lt;br /&gt;
&lt;br /&gt;
* the start bit has a pause length between 4300 and 4500 µs, the average is 4424 µs. The error is about 2.8 %.&lt;br /&gt;
&lt;br /&gt;
* the pulse length of a databit is between 500 and 700 µs, in average 650 µs, the error is (quite large!) 23.1 %&lt;br /&gt;
&lt;br /&gt;
Further there are two more pauses with different length (for bits 0 and 1). Checking this I leave to the willing reader ;-)&lt;br /&gt;
&lt;br /&gt;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used as well under Windows, like:&lt;br /&gt;
&lt;br /&gt;
* start command line console&lt;br /&gt;
* change to directory &#039;irmp&#039;&lt;br /&gt;
* enter:&lt;br /&gt;
            irmp-10kHz.exe &amp;lt; IR-Data\rc5x.txt&lt;br /&gt;
&lt;br /&gt;
The same options apply as for the Linux version.&lt;br /&gt;
&lt;br /&gt;
=== Long Outputs ===&lt;br /&gt;
&lt;br /&gt;
As some outputs are pretty large, it is recommended to redirect the output to a file or filter for paging:&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports more and more also camera remotes like:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
&lt;br /&gt;
The command variety isn&#039;t really large. Usually the cameras understand only the command:&lt;br /&gt;
&amp;quot;Trigger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Here is a short table for [[IRMP_-_english#PENTAX|PENTAX]] cameras:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Command || Function&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || Trigger&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001 || change Zoomlevel&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Because there is no address designated in the [[IRMP_-_english#PENTAX|PENTAX]]-protocol, this should be set for sending in [[IRSND_-_english|IRSND]] to 0x0000. You should also use a crystal in this case because especially the Nikons are very fussy regarding the timing.&lt;br /&gt;
&lt;br /&gt;
== IR Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-keyboard]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]  supports from version 1.7.0 also IR keyboards, namely the FDC-3402 from www.pollin.de (partno. 711 056) for less than 2 Euro.&lt;br /&gt;
&lt;br /&gt;
On detection of a key press the following data is returned:&lt;br /&gt;
&lt;br /&gt;
 Protocol-Number  (irmp_data.protocol): 18&lt;br /&gt;
 Address          (irmp_data.address) : 0x003F&lt;br /&gt;
&lt;br /&gt;
As command (irmp_data.command) the following values are returned:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   || Code || Key   &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;
Special keys left side:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Code || Key   &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;
The above values are for pressing a key. On release,  [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] sets also Bit 8 (0x80) in the command.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F&lt;br /&gt;
      Key &#039;a&#039; released:  0x009F&lt;br /&gt;
&lt;br /&gt;
Exception for the ON / OFF key: This one sends only for key press a code, not for release.&lt;br /&gt;
&lt;br /&gt;
Is a key pressed for a longer time, it will be notified in irmp_data.flag&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
                           command   flag&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x00&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      Key &#039;a&#039; pressed:   0x001F    0x01&lt;br /&gt;
      ....&lt;br /&gt;
      Key &#039;a&#039; released:  0x009F    0x00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When key combinations (like a capital &#039;A&#039;) are pressed, then the return values are a sequence like this:&lt;br /&gt;
&lt;br /&gt;
      Left SHIFT-key pressed:    0x0002&lt;br /&gt;
      Key &#039;a&#039; pressed:           0x001F&lt;br /&gt;
      Key &#039;a&#039; released:          0x009F&lt;br /&gt;
      Left SHIFT-key released:   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-&lt;br /&gt;
Quelltext kopieren.&lt;br /&gt;
In [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] you will find a function get_fdc_key() for the Linux version, which can be used as a template to convert the FDC keycodes into the corresponding ASCII codes. This function can be used either local on the µC to decode the keycodes, or on the hostsystem (e.g. PC) where the IRMP data structure is sent to. Therefore the function incl. preprocessor constands should be copied to your application code.&lt;br /&gt;
&lt;br /&gt;
Here is an excerpt:&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;
And at least an example for the usage of function 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;
All non-printable characters are coded as:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Key               || Constant                || Value&lt;br /&gt;
|-&lt;br /&gt;
| ESC               || KEY_ESCAPE              || 0x1B&lt;br /&gt;
|-&lt;br /&gt;
| Menu              || KEY_MENUE               || 0x80&lt;br /&gt;
|-&lt;br /&gt;
| Back              || KEY_BACK                || 0x81&lt;br /&gt;
|-&lt;br /&gt;
| Forward           || KEY_FORWARD             || 0x82&lt;br /&gt;
|-&lt;br /&gt;
| Adress            || KEY_ADDRESS             || 0x83&lt;br /&gt;
|-&lt;br /&gt;
| Window            || KEY_WINDOW              || 0x84&lt;br /&gt;
|-&lt;br /&gt;
| 1. Page           || 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;
| New Page          || KEY_NEW_PAGE            || 0x89&lt;br /&gt;
|-&lt;br /&gt;
| Setup             || KEY_SETUP               || 0x8A&lt;br /&gt;
|-&lt;br /&gt;
| Font              || KEY_FONT                || 0x8B&lt;br /&gt;
|-&lt;br /&gt;
| Print             || KEY_PRINT               || 0x8C&lt;br /&gt;
|-&lt;br /&gt;
| On/Off            || 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;
| Insert            || KEY_INSERT              || 0x90&lt;br /&gt;
|-&lt;br /&gt;
| Delete            || KEY_DELETE              || 0x91&lt;br /&gt;
|-&lt;br /&gt;
| Cursor left       || KEY_LEFT                || 0x92&lt;br /&gt;
|-&lt;br /&gt;
| Pos1              || KEY_HOME                || 0x93&lt;br /&gt;
|-&lt;br /&gt;
| End               || KEY_END                 || 0x94&lt;br /&gt;
|-&lt;br /&gt;
| Cursor right      || KEY_UP                  || 0x95&lt;br /&gt;
|-&lt;br /&gt;
| Cursor down       || KEY_DOWN                || 0x96&lt;br /&gt;
|-&lt;br /&gt;
| Page up           || KEY_PAGE_UP             || 0x97&lt;br /&gt;
|-&lt;br /&gt;
| Page down         || KEY_PAGE_DOWN           || 0x98&lt;br /&gt;
|-&lt;br /&gt;
| Cursor left       || KEY_RIGHT               || 0x99&lt;br /&gt;
|-&lt;br /&gt;
| Left Mousebutton  || KEY_MOUSE_1             || 0x9E&lt;br /&gt;
|-&lt;br /&gt;
| Right Mousebutton || KEY_MOUSE_2             || 0x9F&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The function get_fdc_key() considers the holding of key pressed of Shift-, Ctrl- and ALT. For this reason not only the writing of capital letters works, but also the selection of special characters with the key combination ALT + key, e.g. ALT + m -&amp;gt; µ or ALT + q -&amp;gt; @. Also you can send CTRL-A to CTRL-Z by using the Ctrl key. The Caps Lock key is ignored, as I regard this key as the most unnecessary key at all ;-)&lt;br /&gt;
&lt;br /&gt;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91202</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91202"/>
		<updated>2016-01-12T00:53:16Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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;
Here you can select which protocols should be supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]. Standardprotocols are activated by default.&lt;br /&gt;
Would you like to turn on more protocols or turn off some other for memory saving reasons, then the corresponding values in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] must be set.&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;
Each [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported IR protocoll consumes the noted amount of code. Here you can apply optimizations: for example the modulation frequency of 455 kHz for the [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] protocol is far away from the frequencies that are used by other protocols. Maybe you need a different IR receiver, otherwise you could disable these protocols. For example you cannot receive a [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]]-protocol (455kHz) with a TSOP1738 / TSOP 31238.&lt;br /&gt;
&lt;br /&gt;
Furthermore the protocols [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] are only reliable detected at a frequency starting at 15 kHz. For [[IRMP_-_english#LEGO|LEGO]] it is even 20 kHz. When you want to use these protocols, you must adjust [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]]. Otherwise, during compilation you will get a warning and the corresponding protocols are automatically disabled.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
This constant defines the pin where the IR receiver is connected.&lt;br /&gt;
&lt;br /&gt;
Default value is 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;
These two values must match your hardware configuration.&lt;br /&gt;
&lt;br /&gt;
This applies also to STM32 µC&#039;s:&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;
And the corresponding section for STM8 µC&#039;s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PIC controllers there is only the define for &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - depending on 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;
Default value:&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;
When you turn on callbacks, on any level change at the input the callback function is called. This could be use to visualize incomming IR signals by driving another output pin.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&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;
With IRMP_LOGGING the logging of received IR frames can be turned on.&lt;br /&gt;
&lt;br /&gt;
Default value:&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;
Further documentation can be found here: [[IRMP_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported protocols use partly variable, partly fixed bit length from 2 up to 48 bits. These will be described by preprocessor defines.&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] separates these IR frames always into 3 sections:&lt;br /&gt;
&lt;br /&gt;
 1. protocol ID&lt;br /&gt;
 2. address or vendorcode&lt;br /&gt;
 3. command&lt;br /&gt;
&lt;br /&gt;
with this function&lt;br /&gt;
&lt;br /&gt;
   irmp_get_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
you can recall a decoded message. The return value is 1 when a message has been received, otherwise it is 0. In the first case the 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;
contain valid information.&lt;br /&gt;
&lt;br /&gt;
That means: finally you&#039;ll get simply three values (protocol, address and command) that can be checked with an if or switch statement. &lt;br /&gt;
Here is a sample decoder which checks for key 1-9 on a remote:&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;
Here are possible constants for irmp_data.protocol, see also [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL                      1              // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                        2              // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL                    3              // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL                 4              // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL                   5              // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL                     6              // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                        7              // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL                      8              // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                        9              // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL                 10              // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL                     11              // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL                 12              // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL                    13              // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL              14              // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL                   15              // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL                     16              // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL                   17              // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL                       18              // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL                     19              // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL                       20              // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL                      21              // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL                     22              // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL                    23              // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL                      24              // IR60 (SDA2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL                  25              // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL                    26              // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL                     27              // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL                     28              // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL                      29              // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL                   30              // Thomson&lt;br /&gt;
#define IRMP_BOSE_PROTOCOL                      31              // BOSE&lt;br /&gt;
#define IRMP_A1TVBOX_PROTOCOL                   32              // A1 TV Box&lt;br /&gt;
#define IRMP_ORTEK_PROTOCOL                     33              // ORTEK - Hama&lt;br /&gt;
#define IRMP_TELEFUNKEN_PROTOCOL                34              // Telefunken (1560)&lt;br /&gt;
#define IRMP_ROOMBA_PROTOCOL                    35              // iRobot Roomba vacuum cleaner&lt;br /&gt;
#define IRMP_RCMM32_PROTOCOL                    36              // Fujitsu-Siemens (Activy remote control)&lt;br /&gt;
#define IRMP_RCMM24_PROTOCOL                    37              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_RCMM12_PROTOCOL                    38              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_SPEAKER_PROTOCOL                   39              // Another loudspeaker protocol, similar to Nubert&lt;br /&gt;
#define IRMP_LGAIR_PROTOCOL                     40              // LG air conditioner&lt;br /&gt;
#define IRMP_SAMSUNG48_PROTOCOL                 41              // air conditioner with SAMSUNG protocol (48 bits)&lt;br /&gt;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of address and the command code of an unknown remote can be received and printed over UART or LCD. Then these values can be used hard coded in your decoder routine. Or you write a teaching routine, where you need to press a key once to store the code in an EEPROM. A sample for this can be found in [http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP Lernfähige IR-Fernbedienung mit IRMP].&lt;br /&gt;
&lt;br /&gt;
Another [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup Beispiel-Main-Funktion] is include in the zip file, showing also the timer initialization.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Debouncing&amp;quot; of Keys ===&lt;br /&gt;
&lt;br /&gt;
To distinguish between long key press or a single press, the bit IRMP_FLAG_REPETITION exists. This will be set in struct member &#039;&#039;&#039;flags&#039;&#039;&#039; when a key on the remote is pressed for longer time and therefor the same command is repeated in short periods.&lt;br /&gt;
&lt;br /&gt;
Example:&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;
      // long key press&lt;br /&gt;
      // either:&lt;br /&gt;
      //   ignore the (repeated) key&lt;br /&gt;
      // or:&lt;br /&gt;
      //   use this information for a repeat function&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      // key was pressed again&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This could be used to &amp;quot;debounce&amp;quot; the keys 0-9 by ignoring commands with bit IRMP_FLAG_REPETITION set. For keys like &#039; VOLUME+&#039; or &#039;VOLUME-&#039; using the repetition could be useful, maybe to fade a LED [[LED-Fading]fade a LED].&lt;br /&gt;
&lt;br /&gt;
When you want to decode only singe keys, you can reduce the abov if block to:&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;
      // Its a new key&lt;br /&gt;
      // ACTION!&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
The  &amp;quot;Working Horse&amp;quot; from [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is the interrupt service routine irmp_ISR() which should be called 15000 times per second. Is this rate different, the constant [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]] in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] needs to be adjusted.&lt;br /&gt;
&lt;br /&gt;
irmp_ISR() detects first the length and the form of the startbit(s) and determines the used protocols by this information. As soon as the protocol was identified, the further bits are parameterized to read the following bits most efficient until the IR command is complete.&lt;br /&gt;
&lt;br /&gt;
Just to stop slashers:&lt;br /&gt;
&lt;br /&gt;
I know that the ISR is quite large. But as it acts as a state machine, the effective executed code per cycle is relative small. While it is &amp;quot;dark&amp;quot; (and that is the case for the most time ;-)) the spent time is vanishing short. In the WordClock project for example are called 8 ISR&#039;s with the same timer, there is irmp_ISR() only one amongst many others. For at least 8 MHz CPU clock no timing problems occured. Therefor I see really no problem in the length of the ISR.&lt;br /&gt;
&lt;br /&gt;
A crystal is not a neccessary must, it works well with the internal AVR oscillator. Remember to set the correct fuses for the CPU to run at 8 MHz, check [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] for correct values for an ATMEGA88.&lt;br /&gt;
&lt;br /&gt;
== Scanning of unknown IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
Changing in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] in line&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;
the value for [[IRMP_-_english#IRMP_LOGGING|IRMP_LOGGING]] to 1, then in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] a logging will be turned on: the bright- and darkphases will be sent via UART with 9600 bit/s ausgegeben: 1=dark, 0=bright. Maybe the constans in the functions uart_init() and uart_putc() must be adjusted, this depends on the used AVR-µC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remark: for PIC-processors there is an own logging module named [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]. This makes it possible to log via USB. This applies not to the AVR version&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you record these protocol scans with a terminal program and save it as a textfile, you can use these files for analyzing to adjust [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] for the unknown protocol - see next chapter.&lt;br /&gt;
&lt;br /&gt;
If you have a remote that is not supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] you can send me ([http://www.mikrocontroller.net/user/show/ukw ukw]) the scan files. Then I can check if the protocol fits into the IRMP concepts and adapt the sources if applicable.&lt;br /&gt;
&lt;br /&gt;
== IRMP under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be compiled under Linux for testing IR scans in textfiles. In the subdirectory &#039;IR-Data&#039; you will find such files that you can feed to [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]].&lt;br /&gt;
&lt;br /&gt;
The compilation of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is started by:&lt;br /&gt;
&lt;br /&gt;
    make -f makefile.lnx&lt;br /&gt;
&lt;br /&gt;
This will generate 3 IRMP versions:&lt;br /&gt;
&lt;br /&gt;
* irmp-10kHz: Version for 10kHz Scans&lt;br /&gt;
* irmp-15kHz: Version for 15kHz Scans&lt;br /&gt;
* irmp-20kHz: Version for 20kHz Scans&lt;br /&gt;
&lt;br /&gt;
=== Starting IRMP ===&lt;br /&gt;
&lt;br /&gt;
The calling syntax is:&lt;br /&gt;
&lt;br /&gt;
  ./irmp-nnkHz [-l|-p|-a|-v] &amp;lt; scan-file&lt;br /&gt;
&lt;br /&gt;
The given options are exclusive, that means only one option per call is valid:&lt;br /&gt;
&lt;br /&gt;
Option:&lt;br /&gt;
&lt;br /&gt;
   -l  List             print a list with pulses and pauses&lt;br /&gt;
   -a analyze           analyse the puls/pauses and write a &amp;quot;spectrum&amp;quot; in ASCII format&lt;br /&gt;
   -v verbose           verbose output&lt;br /&gt;
   -p  Print Timings    print a timing table for all protocols&lt;br /&gt;
&lt;br /&gt;
Samples:&lt;br /&gt;
&lt;br /&gt;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
Here you see the measured times of all pulses and pauses as (horizontal) bell shaped curves, which of course are not quite ideal displayed due to the ASCII formatting. The smaller the measured channels, the better is the timing of the remote.&lt;br /&gt;
&lt;br /&gt;
The above output can be read as:&lt;br /&gt;
&lt;br /&gt;
* the start bit has a pulse length between 9000 and 9200 µs, in average 9102 µs. The deviation from this average is about 1.1 %&lt;br /&gt;
&lt;br /&gt;
* the start bit has a pause length between 4300 and 4500 µs, the average is 4424 µs. The error is about 2.8 %.&lt;br /&gt;
&lt;br /&gt;
* the pulse length of a databit is between 500 and 700 µs, in average 650 µs, the error is (quite large!) 23.1 %&lt;br /&gt;
&lt;br /&gt;
Further there are two more pauses with different length (for bits 0 and 1). Checking this I leave to the willing reader ;-)&lt;br /&gt;
&lt;br /&gt;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used as well under Windows, like:&lt;br /&gt;
&lt;br /&gt;
* start command line console&lt;br /&gt;
* change to directory &#039;irmp&#039;&lt;br /&gt;
* enter:&lt;br /&gt;
            irmp-10kHz.exe &amp;lt; IR-Data\rc5x.txt&lt;br /&gt;
&lt;br /&gt;
The same options apply as for the Linux version.&lt;br /&gt;
&lt;br /&gt;
=== Long Outputs ===&lt;br /&gt;
&lt;br /&gt;
As some outputs are pretty large, it is recommended to redirect the output to a file or filter for paging:&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports more and more also camera remotes like:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
&lt;br /&gt;
The command variety isn&#039;t really large. Usually the cameras understand only the command:&lt;br /&gt;
&amp;quot;Trigger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Here is a short table for [[IRMP_-_english#PENTAX|PENTAX]] cameras:&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Command || Function&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || Trigger&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001 || change Zoomlevel&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Because there is no address designated in the [[IRMP_-_english#PENTAX|PENTAX]]-protocol, this should be set for sending in [[IRSND_-_english|IRSND]] to 0x0000. You should also use a crystal in this case because especially the Nikons are very fussy regarding the timing.&lt;br /&gt;
&lt;br /&gt;
== IR Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91201</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91201"/>
		<updated>2016-01-12T00:45:33Z</updated>

		<summary type="html">&lt;p&gt;Jojos: und nochn Meter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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;
Here you can select which protocols should be supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]. Standardprotocols are activated by default.&lt;br /&gt;
Would you like to turn on more protocols or turn off some other for memory saving reasons, then the corresponding values in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] must be set.&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;
Each [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported IR protocoll consumes the noted amount of code. Here you can apply optimizations: for example the modulation frequency of 455 kHz for the [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] protocol is far away from the frequencies that are used by other protocols. Maybe you need a different IR receiver, otherwise you could disable these protocols. For example you cannot receive a [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]]-protocol (455kHz) with a TSOP1738 / TSOP 31238.&lt;br /&gt;
&lt;br /&gt;
Furthermore the protocols [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] are only reliable detected at a frequency starting at 15 kHz. For [[IRMP_-_english#LEGO|LEGO]] it is even 20 kHz. When you want to use these protocols, you must adjust [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]]. Otherwise, during compilation you will get a warning and the corresponding protocols are automatically disabled.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
This constant defines the pin where the IR receiver is connected.&lt;br /&gt;
&lt;br /&gt;
Default value is 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;
These two values must match your hardware configuration.&lt;br /&gt;
&lt;br /&gt;
This applies also to STM32 µC&#039;s:&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;
And the corresponding section for STM8 µC&#039;s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PIC controllers there is only the define for &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - depending on 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;
Default value:&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;
When you turn on callbacks, on any level change at the input the callback function is called. This could be use to visualize incomming IR signals by driving another output pin.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&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;
With IRMP_LOGGING the logging of received IR frames can be turned on.&lt;br /&gt;
&lt;br /&gt;
Default value:&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;
Further documentation can be found here: [[IRMP_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported protocols use partly variable, partly fixed bit length from 2 up to 48 bits. These will be described by preprocessor defines.&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] separates these IR frames always into 3 sections:&lt;br /&gt;
&lt;br /&gt;
 1. protocol ID&lt;br /&gt;
 2. address or vendorcode&lt;br /&gt;
 3. command&lt;br /&gt;
&lt;br /&gt;
with this function&lt;br /&gt;
&lt;br /&gt;
   irmp_get_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
you can recall a decoded message. The return value is 1 when a message has been received, otherwise it is 0. In the first case the 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;
contain valid information.&lt;br /&gt;
&lt;br /&gt;
That means: finally you&#039;ll get simply three values (protocol, address and command) that can be checked with an if or switch statement. &lt;br /&gt;
Here is a sample decoder which checks for key 1-9 on a remote:&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;
Here are possible constants for irmp_data.protocol, see also [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL                      1              // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                        2              // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL                    3              // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL                 4              // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL                   5              // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL                     6              // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                        7              // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL                      8              // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                        9              // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL                 10              // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL                     11              // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL                 12              // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL                    13              // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL              14              // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL                   15              // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL                     16              // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL                   17              // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL                       18              // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL                     19              // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL                       20              // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL                      21              // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL                     22              // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL                    23              // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL                      24              // IR60 (SDA2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL                  25              // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL                    26              // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL                     27              // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL                     28              // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL                      29              // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL                   30              // Thomson&lt;br /&gt;
#define IRMP_BOSE_PROTOCOL                      31              // BOSE&lt;br /&gt;
#define IRMP_A1TVBOX_PROTOCOL                   32              // A1 TV Box&lt;br /&gt;
#define IRMP_ORTEK_PROTOCOL                     33              // ORTEK - Hama&lt;br /&gt;
#define IRMP_TELEFUNKEN_PROTOCOL                34              // Telefunken (1560)&lt;br /&gt;
#define IRMP_ROOMBA_PROTOCOL                    35              // iRobot Roomba vacuum cleaner&lt;br /&gt;
#define IRMP_RCMM32_PROTOCOL                    36              // Fujitsu-Siemens (Activy remote control)&lt;br /&gt;
#define IRMP_RCMM24_PROTOCOL                    37              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_RCMM12_PROTOCOL                    38              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_SPEAKER_PROTOCOL                   39              // Another loudspeaker protocol, similar to Nubert&lt;br /&gt;
#define IRMP_LGAIR_PROTOCOL                     40              // LG air conditioner&lt;br /&gt;
#define IRMP_SAMSUNG48_PROTOCOL                 41              // air conditioner with SAMSUNG protocol (48 bits)&lt;br /&gt;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of address and the command code of an unknown remote can be received and printed over UART or LCD. Then these values can be used hard coded in your decoder routine. Or you write a teaching routine, where you need to press a key once to store the code in an EEPROM. A sample for this can be found in [http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP Lernfähige IR-Fernbedienung mit IRMP].&lt;br /&gt;
&lt;br /&gt;
Another [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup Beispiel-Main-Funktion] is include in the zip file, showing also the timer initialization.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Debouncing&amp;quot; of Keys ===&lt;br /&gt;
&lt;br /&gt;
To distinguish between long key press or a single press, the bit IRMP_FLAG_REPETITION exists. This will be set in struct member &#039;&#039;&#039;flags&#039;&#039;&#039; when a key on the remote is pressed for longer time and therefor the same command is repeated in short periods.&lt;br /&gt;
&lt;br /&gt;
Example:&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;
      // long key press&lt;br /&gt;
      // either:&lt;br /&gt;
      //   ignore the (repeated) key&lt;br /&gt;
      // or:&lt;br /&gt;
      //   use this information for a repeat function&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      // key was pressed again&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This could be used to &amp;quot;debounce&amp;quot; the keys 0-9 by ignoring commands with bit IRMP_FLAG_REPETITION set. For keys like &#039; VOLUME+&#039; or &#039;VOLUME-&#039; using the repetition could be useful, maybe to fade a LED [[LED-Fading]fade a LED].&lt;br /&gt;
&lt;br /&gt;
When you want to decode only singe keys, you can reduce the abov if block to:&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;
      // Its a new key&lt;br /&gt;
      // ACTION!&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
The  &amp;quot;Working Horse&amp;quot; from [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is the interrupt service routine irmp_ISR() which should be called 15000 times per second. Is this rate different, the constant [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]] in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] needs to be adjusted.&lt;br /&gt;
&lt;br /&gt;
irmp_ISR() detects first the length and the form of the startbit(s) and determines the used protocols by this information. As soon as the protocol was identified, the further bits are parameterized to read the following bits most efficient until the IR command is complete.&lt;br /&gt;
&lt;br /&gt;
Just to stop slashers:&lt;br /&gt;
&lt;br /&gt;
I know that the ISR is quite large. But as it acts as a state machine, the effective executed code per cycle is relative small. While it is &amp;quot;dark&amp;quot; (and that is the case for the most time ;-)) the spent time is vanishing short. In the WordClock project for example are called 8 ISR&#039;s with the same timer, there is irmp_ISR() only one amongst many others. For at least 8 MHz CPU clock no timing problems occured. Therefor I see really no problem in the length of the ISR.&lt;br /&gt;
&lt;br /&gt;
A crystal is not a neccessary must, it works well with the internal AVR oscillator. Remember to set the correct fuses for the CPU to run at 8 MHz, check [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] for correct values for an ATMEGA88.&lt;br /&gt;
&lt;br /&gt;
== Scanning of unknown IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
Changing in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] in line&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;
the value for [[IRMP_-_english#IRMP_LOGGING|IRMP_LOGGING]] to 1, then in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] a logging will be turned on: the bright- and darkphases will be sent via UART with 9600 bit/s ausgegeben: 1=dark, 0=bright. Maybe the constans in the functions uart_init() and uart_putc() must be adjusted, this depends on the used AVR-µC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remark: for PIC-processors there is an own logging module named [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]. This makes it possible to log via USB. This applies not to the AVR version&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you record these protocol scans with a terminal program and save it as a textfile, you can use these files for analyzing to adjust [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] for the unknown protocol - see next chapter.&lt;br /&gt;
&lt;br /&gt;
If you have a remote that is not supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] you can send me ([http://www.mikrocontroller.net/user/show/ukw ukw]) the scan files. Then I can check if the protocol fits into the IRMP concepts and adapt the sources if applicable.&lt;br /&gt;
&lt;br /&gt;
== IRMP under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be compiled under Linux for testing IR scans in textfiles. In the subdirectory &#039;IR-Data&#039; you will find such files that you can feed to [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]].&lt;br /&gt;
&lt;br /&gt;
The compilation of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is started by:&lt;br /&gt;
&lt;br /&gt;
    make -f makefile.lnx&lt;br /&gt;
&lt;br /&gt;
This will generate 3 IRMP versions:&lt;br /&gt;
&lt;br /&gt;
* irmp-10kHz: Version for 10kHz Scans&lt;br /&gt;
* irmp-15kHz: Version for 15kHz Scans&lt;br /&gt;
* irmp-20kHz: Version for 20kHz Scans&lt;br /&gt;
&lt;br /&gt;
=== Starting IRMP ===&lt;br /&gt;
&lt;br /&gt;
The calling syntax is:&lt;br /&gt;
&lt;br /&gt;
  ./irmp-nnkHz [-l|-p|-a|-v] &amp;lt; scan-file&lt;br /&gt;
&lt;br /&gt;
The given options are exclusive, that means only one option per call is valid:&lt;br /&gt;
&lt;br /&gt;
Option:&lt;br /&gt;
&lt;br /&gt;
   -l  List             print a list with pulses and pauses&lt;br /&gt;
   -a analyze           analyse the puls/pauses and write a &amp;quot;spectrum&amp;quot; in ASCII format&lt;br /&gt;
   -v verbose           verbose output&lt;br /&gt;
   -p  Print Timings    print a timing table for all protocols&lt;br /&gt;
&lt;br /&gt;
Samples:&lt;br /&gt;
&lt;br /&gt;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
Here you see the measured times of all pulses and pauses as (horizontal) bell shaped curves, which of course are not quite ideal displayed due to the ASCII formatting. The smaller the measured channels, the better is the timing of the remote.&lt;br /&gt;
&lt;br /&gt;
The above output can be read as:&lt;br /&gt;
&lt;br /&gt;
* the start bit has a pulse length between 9000 and 9200 µs, in average 9102 µs. The deviation from this average is about 1.1 %&lt;br /&gt;
&lt;br /&gt;
* the start bit has a pause length between 4300 and 4500 µs, the average is 4424 µs. The error is about 2.8 %.&lt;br /&gt;
&lt;br /&gt;
* the pulse length of a databit is between 500 and 700 µs, in average 650 µs, the error is (quite large!) 23.1 %&lt;br /&gt;
&lt;br /&gt;
Further there are two more pauses with different length (for bits 0 and 1). Checking this I leave to the willing reader ;-)&lt;br /&gt;
&lt;br /&gt;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used as well under Windows, like:&lt;br /&gt;
&lt;br /&gt;
* start command line console&lt;br /&gt;
* change to directory &#039;irmp&#039;&lt;br /&gt;
* enter:&lt;br /&gt;
            irmp-10kHz.exe &amp;lt; IR-Data\rc5x.txt&lt;br /&gt;
&lt;br /&gt;
The same options apply as for the Linux version.&lt;br /&gt;
&lt;br /&gt;
=== Long Outputs ===&lt;br /&gt;
&lt;br /&gt;
As some outputs are pretty large, it is recommended to redirect the output to a file or filter for paging:&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english|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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91200</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91200"/>
		<updated>2016-01-12T00:22:04Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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;
Here you can select which protocols should be supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]. Standardprotocols are activated by default.&lt;br /&gt;
Would you like to turn on more protocols or turn off some other for memory saving reasons, then the corresponding values in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] must be set.&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;
Each [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported IR protocoll consumes the noted amount of code. Here you can apply optimizations: for example the modulation frequency of 455 kHz for the [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] protocol is far away from the frequencies that are used by other protocols. Maybe you need a different IR receiver, otherwise you could disable these protocols. For example you cannot receive a [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]]-protocol (455kHz) with a TSOP1738 / TSOP 31238.&lt;br /&gt;
&lt;br /&gt;
Furthermore the protocols [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] are only reliable detected at a frequency starting at 15 kHz. For [[IRMP_-_english#LEGO|LEGO]] it is even 20 kHz. When you want to use these protocols, you must adjust [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]]. Otherwise, during compilation you will get a warning and the corresponding protocols are automatically disabled.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
This constant defines the pin where the IR receiver is connected.&lt;br /&gt;
&lt;br /&gt;
Default value is 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;
These two values must match your hardware configuration.&lt;br /&gt;
&lt;br /&gt;
This applies also to STM32 µC&#039;s:&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;
And the corresponding section for STM8 µC&#039;s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PIC controllers there is only the define for &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - depending on 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;
Default value:&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;
When you turn on callbacks, on any level change at the input the callback function is called. This could be use to visualize incomming IR signals by driving another output pin.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&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;
With IRMP_LOGGING the logging of received IR frames can be turned on.&lt;br /&gt;
&lt;br /&gt;
Default value:&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;
Further documentation can be found here: [[IRMP_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported protocols use partly variable, partly fixed bit length from 2 up to 48 bits. These will be described by preprocessor defines.&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] separates these IR frames always into 3 sections:&lt;br /&gt;
&lt;br /&gt;
 1. protocol ID&lt;br /&gt;
 2. address or vendorcode&lt;br /&gt;
 3. command&lt;br /&gt;
&lt;br /&gt;
with this function&lt;br /&gt;
&lt;br /&gt;
   irmp_get_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
you can recall a decoded message. The return value is 1 when a message has been received, otherwise it is 0. In the first case the 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;
contain valid information.&lt;br /&gt;
&lt;br /&gt;
That means: finally you&#039;ll get simply three values (protocol, address and command) that can be checked with an if or switch statement. &lt;br /&gt;
Here is a sample decoder which checks for key 1-9 on a remote:&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;
Here are possible constants for irmp_data.protocol, see also [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL                      1              // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                        2              // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL                    3              // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL                 4              // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL                   5              // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL                     6              // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                        7              // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL                      8              // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                        9              // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL                 10              // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL                     11              // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL                 12              // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL                    13              // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL              14              // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL                   15              // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL                     16              // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL                   17              // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL                       18              // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL                     19              // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL                       20              // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL                      21              // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL                     22              // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL                    23              // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL                      24              // IR60 (SDA2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL                  25              // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL                    26              // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL                     27              // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL                     28              // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL                      29              // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL                   30              // Thomson&lt;br /&gt;
#define IRMP_BOSE_PROTOCOL                      31              // BOSE&lt;br /&gt;
#define IRMP_A1TVBOX_PROTOCOL                   32              // A1 TV Box&lt;br /&gt;
#define IRMP_ORTEK_PROTOCOL                     33              // ORTEK - Hama&lt;br /&gt;
#define IRMP_TELEFUNKEN_PROTOCOL                34              // Telefunken (1560)&lt;br /&gt;
#define IRMP_ROOMBA_PROTOCOL                    35              // iRobot Roomba vacuum cleaner&lt;br /&gt;
#define IRMP_RCMM32_PROTOCOL                    36              // Fujitsu-Siemens (Activy remote control)&lt;br /&gt;
#define IRMP_RCMM24_PROTOCOL                    37              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_RCMM12_PROTOCOL                    38              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_SPEAKER_PROTOCOL                   39              // Another loudspeaker protocol, similar to Nubert&lt;br /&gt;
#define IRMP_LGAIR_PROTOCOL                     40              // LG air conditioner&lt;br /&gt;
#define IRMP_SAMSUNG48_PROTOCOL                 41              // air conditioner with SAMSUNG protocol (48 bits)&lt;br /&gt;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of address and the command code of an unknown remote can be received and printed over UART or LCD. Then these values can be used hard coded in your decoder routine. Or you write a teaching routine, where you need to press a key once to store the code in an EEPROM. A sample for this can be found in [http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP Lernfähige IR-Fernbedienung mit IRMP].&lt;br /&gt;
&lt;br /&gt;
Another [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup Beispiel-Main-Funktion] is include in the zip file, showing also the timer initialization.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Debouncing&amp;quot; of Keys ===&lt;br /&gt;
&lt;br /&gt;
To distinguish between long key press or a single press, the bit IRMP_FLAG_REPETITION exists. This will be set in struct member &#039;&#039;&#039;flags&#039;&#039;&#039; when a key on the remote is pressed for longer time and therefor the same command is repeated in short periods.&lt;br /&gt;
&lt;br /&gt;
Example:&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;
      // long key press&lt;br /&gt;
      // either:&lt;br /&gt;
      //   ignore the (repeated) key&lt;br /&gt;
      // or:&lt;br /&gt;
      //   use this information for a repeat function&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      // key was pressed again&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This could be used to &amp;quot;debounce&amp;quot; the keys 0-9 by ignoring commands with bit IRMP_FLAG_REPETITION set. For keys like &#039; VOLUME+&#039; or &#039;VOLUME-&#039; using the repetition could be useful, maybe to fade a LED [[LED-Fading]fade a LED].&lt;br /&gt;
&lt;br /&gt;
When you want to decode only singe keys, you can reduce the abov if block to:&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;
      // Its a new key&lt;br /&gt;
      // ACTION!&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
The  &amp;quot;Working Horse&amp;quot; from [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is the interrupt service routine irmp_ISR() which should be called 15000 times per second. Is this rate different, the constant [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]] in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] needs to be adjusted.&lt;br /&gt;
&lt;br /&gt;
irmp_ISR() detects first the length and the form of the startbit(s) and determines the used protocols by this information. As soon as the protocol was identified, the further bits are parameterized to read the following bits most efficient until the IR command is complete.&lt;br /&gt;
&lt;br /&gt;
Just to stop slashers:&lt;br /&gt;
&lt;br /&gt;
I know that the ISR is quite large. But as it acts as a state machine, the effective executed code per cycle is relative small. While it is &amp;quot;dark&amp;quot; (and that is the case for the most time ;-)) the spent time is vanishing short. In the WordClock project for example are called 8 ISR&#039;s with the same timer, there is irmp_ISR() only one amongst many others. For at least 8 MHz CPU clock no timing problems occured. Therefor I see really no problem in the length of the ISR.&lt;br /&gt;
&lt;br /&gt;
A crystal is not a neccessary must, it works well with the internal AVR oscillator. Remember to set the correct fuses for the CPU to run at 8 MHz, check [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] for correct values for an ATMEGA88.&lt;br /&gt;
&lt;br /&gt;
== Scanning of unknown IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
Changing in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] in line&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;
the value for [[IRMP_-_english#IRMP_LOGGING|IRMP_LOGGING]] to 1, then in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] a logging will be turned on: the bright- and darkphases will be sent via UART with 9600 bit/s ausgegeben: 1=dark, 0=bright. Maybe the constans in the functions uart_init() and uart_putc() must be adjusted, this depends on the used AVR-µC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remark: for PIC-processors there is an own logging module named [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]. This makes it possible to log via USB. This applies not to the AVR version&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you record these protocol scans with a terminal program and save it as a textfile, you can use these files for analyzing to adjust [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] for the unknown protocol - see next chapter.&lt;br /&gt;
&lt;br /&gt;
If you have a remote that is not supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] you can send me ([http://www.mikrocontroller.net/user/show/ukw ukw]) the scan files. Then I can check if the protocol fits into the IRMP concepts and adapt the sources if applicable.&lt;br /&gt;
&lt;br /&gt;
== IRMP under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Starting 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;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Long Outputs ===&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english|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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91199</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91199"/>
		<updated>2016-01-12T00:07:19Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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;
Here you can select which protocols should be supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]. Standardprotocols are activated by default.&lt;br /&gt;
Would you like to turn on more protocols or turn off some other for memory saving reasons, then the corresponding values in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] must be set.&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;
Each [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported IR protocoll consumes the noted amount of code. Here you can apply optimizations: for example the modulation frequency of 455 kHz for the [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] protocol is far away from the frequencies that are used by other protocols. Maybe you need a different IR receiver, otherwise you could disable these protocols. For example you cannot receive a [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]]-protocol (455kHz) with a TSOP1738 / TSOP 31238.&lt;br /&gt;
&lt;br /&gt;
Furthermore the protocols [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] are only reliable detected at a frequency starting at 15 kHz. For [[IRMP_-_english#LEGO|LEGO]] it is even 20 kHz. When you want to use these protocols, you must adjust [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]]. Otherwise, during compilation you will get a warning and the corresponding protocols are automatically disabled.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
This constant defines the pin where the IR receiver is connected.&lt;br /&gt;
&lt;br /&gt;
Default value is 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;
These two values must match your hardware configuration.&lt;br /&gt;
&lt;br /&gt;
This applies also to STM32 µC&#039;s:&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;
And the corresponding section for STM8 µC&#039;s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PIC controllers there is only the define for &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - depending on 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;
Default value:&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;
When you turn on callbacks, on any level change at the input the callback function is called. This could be use to visualize incomming IR signals by driving another output pin.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&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;
With IRMP_LOGGING the logging of received IR frames can be turned on.&lt;br /&gt;
&lt;br /&gt;
Default value:&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;
Further documentation can be found here: [[IRMP_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported protocols use partly variable, partly fixed bit length from 2 up to 48 bits. These will be described by preprocessor defines.&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] separates these IR frames always into 3 sections:&lt;br /&gt;
&lt;br /&gt;
 1. protocol ID&lt;br /&gt;
 2. address or vendorcode&lt;br /&gt;
 3. command&lt;br /&gt;
&lt;br /&gt;
with this function&lt;br /&gt;
&lt;br /&gt;
   irmp_get_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
you can recall a decoded message. The return value is 1 when a message has been received, otherwise it is 0. In the first case the 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;
contain valid information.&lt;br /&gt;
&lt;br /&gt;
That means: finally you&#039;ll get simply three values (protocol, address and command) that can be checked with an if or switch statement. &lt;br /&gt;
Here is a sample decoder which checks for key 1-9 on a remote:&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;
Here are possible constants for irmp_data.protocol, see also [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL                      1              // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                        2              // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL                    3              // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL                 4              // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL                   5              // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL                     6              // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                        7              // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL                      8              // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                        9              // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL                 10              // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL                     11              // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL                 12              // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL                    13              // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL              14              // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL                   15              // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL                     16              // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL                   17              // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL                       18              // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL                     19              // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL                       20              // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL                      21              // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL                     22              // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL                    23              // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL                      24              // IR60 (SDA2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL                  25              // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL                    26              // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL                     27              // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL                     28              // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL                      29              // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL                   30              // Thomson&lt;br /&gt;
#define IRMP_BOSE_PROTOCOL                      31              // BOSE&lt;br /&gt;
#define IRMP_A1TVBOX_PROTOCOL                   32              // A1 TV Box&lt;br /&gt;
#define IRMP_ORTEK_PROTOCOL                     33              // ORTEK - Hama&lt;br /&gt;
#define IRMP_TELEFUNKEN_PROTOCOL                34              // Telefunken (1560)&lt;br /&gt;
#define IRMP_ROOMBA_PROTOCOL                    35              // iRobot Roomba vacuum cleaner&lt;br /&gt;
#define IRMP_RCMM32_PROTOCOL                    36              // Fujitsu-Siemens (Activy remote control)&lt;br /&gt;
#define IRMP_RCMM24_PROTOCOL                    37              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_RCMM12_PROTOCOL                    38              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_SPEAKER_PROTOCOL                   39              // Another loudspeaker protocol, similar to Nubert&lt;br /&gt;
#define IRMP_LGAIR_PROTOCOL                     40              // LG air conditioner&lt;br /&gt;
#define IRMP_SAMSUNG48_PROTOCOL                 41              // air conditioner with SAMSUNG protocol (48 bits)&lt;br /&gt;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of address and the command code of an unknown remote can be received and printed over UART or LCD. Then these values can be used hard coded in your decoder routine. Or you write a teaching routine, where you need to press a key once to store the code in an EEPROM. A sample for this can be found in [http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP Lernfähige IR-Fernbedienung mit IRMP].&lt;br /&gt;
&lt;br /&gt;
Another [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup Beispiel-Main-Funktion] is include in the zip file, showing also the timer initialization.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Debouncing&amp;quot; of Keys ===&lt;br /&gt;
&lt;br /&gt;
To distinguish between long key press or a single press, the bit IRMP_FLAG_REPETITION exists. This will be set in struct member &#039;&#039;&#039;flags&#039;&#039;&#039; when a key on the remote is pressed for longer time and therefor the same command is repeated in short periods.&lt;br /&gt;
&lt;br /&gt;
Example:&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;
      // long key press&lt;br /&gt;
      // either:&lt;br /&gt;
      //   ignore the (repeated) key&lt;br /&gt;
      // or:&lt;br /&gt;
      //   use this information for a repeat function&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      // key was pressed again&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This could be used to &amp;quot;debounce&amp;quot; the keys 0-9 by ignoring commands with bit IRMP_FLAG_REPETITION set. For keys like &#039; VOLUME+&#039; or &#039;VOLUME-&#039; using the repetition could be useful, maybe to fade a LED [[LED-Fading]fade a LED].&lt;br /&gt;
&lt;br /&gt;
When you want to decode only singe keys, you can reduce the abov if block to:&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;
      // Its a new key&lt;br /&gt;
      // ACTION!&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
The  &amp;quot;Working Horse&amp;quot; from [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is the interrupt service routine irmp_ISR() which should be called 15000 times per second. Is this rate different, the constant [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]] in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] needs to be adjusted.&lt;br /&gt;
&lt;br /&gt;
irmp_ISR() detects first the length and the form of the startbit(s) and determines the used protocols by this information. As soon as the protocol was identified, the further bits are parameterized to read the following bits most efficient until the IR command is complete.&lt;br /&gt;
&lt;br /&gt;
Just to stop slashers:&lt;br /&gt;
&lt;br /&gt;
I know that the ISR is quite large. But as it acts as a state machine, the effective executed code per cycle is relative small. While it is &amp;quot;dark&amp;quot; (and that is the case for the most time ;-)) the spent time is vanishing short. In the WordClock project for example are called 8 ISR&#039;s with the same timer, there is irmp_ISR() only one amongst many others. For at least 8 MHz CPU clock no timing problems occured. Therefor I see really no problem in the length of the ISR.&lt;br /&gt;
&lt;br /&gt;
A crystal is not a neccessary must, it works well with the internal AVR oscillator. Remember to set the correct fuses for the CPU to run at 8 MHz, check [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] for correct values for an ATMEGA88.&lt;br /&gt;
&lt;br /&gt;
== Scanning of unknown IR Protocols ==&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_-_english#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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 under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Starting 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;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Long Outputs ===&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english|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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91198</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91198"/>
		<updated>2016-01-11T23:48:45Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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;
Here you can select which protocols should be supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]. Standardprotocols are activated by default.&lt;br /&gt;
Would you like to turn on more protocols or turn off some other for memory saving reasons, then the corresponding values in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] must be set.&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;
Each [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported IR protocoll consumes the noted amount of code. Here you can apply optimizations: for example the modulation frequency of 455 kHz for the [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] protocol is far away from the frequencies that are used by other protocols. Maybe you need a different IR receiver, otherwise you could disable these protocols. For example you cannot receive a [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]]-protocol (455kHz) with a TSOP1738 / TSOP 31238.&lt;br /&gt;
&lt;br /&gt;
Furthermore the protocols [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] are only reliable detected at a frequency starting at 15 kHz. For [[IRMP_-_english#LEGO|LEGO]] it is even 20 kHz. When you want to use these protocols, you must adjust [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]]. Otherwise, during compilation you will get a warning and the corresponding protocols are automatically disabled.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
This constant defines the pin where the IR receiver is connected.&lt;br /&gt;
&lt;br /&gt;
Default value is 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;
These two values must match your hardware configuration.&lt;br /&gt;
&lt;br /&gt;
This applies also to STM32 µC&#039;s:&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;
And the corresponding section for STM8 µC&#039;s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PIC controllers there is only the define for &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - depending on 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;
Default value:&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;
When you turn on callbacks, on any level change at the input the callback function is called. This could be use to visualize incomming IR signals by driving another output pin.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&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;
With IRMP_LOGGING the logging of received IR frames can be turned on.&lt;br /&gt;
&lt;br /&gt;
Default value:&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;
Further documentation can be found here: [[IRMP_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported protocols use partly variable, partly fixed bit length from 2 up to 48 bits. These will be described by preprocessor defines.&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] separates these IR frames always into 3 sections:&lt;br /&gt;
&lt;br /&gt;
 1. protocol ID&lt;br /&gt;
 2. address or vendorcode&lt;br /&gt;
 3. command&lt;br /&gt;
&lt;br /&gt;
with this function&lt;br /&gt;
&lt;br /&gt;
   irmp_get_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
you can recall a decoded message. The return value is 1 when a message has been received, otherwise it is 0. In the first case the 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;
contain valid information.&lt;br /&gt;
&lt;br /&gt;
That means: finally you&#039;ll get simply three values (protocol, address and command) that can be checked with an if or switch statement. &lt;br /&gt;
Here is a sample decoder which checks for key 1-9 on a remote:&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;
Here are possible constants for irmp_data.protocol, see also [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL                      1              // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                        2              // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL                    3              // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL                 4              // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL                   5              // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL                     6              // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                        7              // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL                      8              // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                        9              // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL                 10              // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL                     11              // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL                 12              // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL                    13              // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL              14              // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL                   15              // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL                     16              // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL                   17              // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL                       18              // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL                     19              // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL                       20              // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL                      21              // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL                     22              // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL                    23              // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL                      24              // IR60 (SDA2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL                  25              // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL                    26              // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL                     27              // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL                     28              // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL                      29              // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL                   30              // Thomson&lt;br /&gt;
#define IRMP_BOSE_PROTOCOL                      31              // BOSE&lt;br /&gt;
#define IRMP_A1TVBOX_PROTOCOL                   32              // A1 TV Box&lt;br /&gt;
#define IRMP_ORTEK_PROTOCOL                     33              // ORTEK - Hama&lt;br /&gt;
#define IRMP_TELEFUNKEN_PROTOCOL                34              // Telefunken (1560)&lt;br /&gt;
#define IRMP_ROOMBA_PROTOCOL                    35              // iRobot Roomba vacuum cleaner&lt;br /&gt;
#define IRMP_RCMM32_PROTOCOL                    36              // Fujitsu-Siemens (Activy remote control)&lt;br /&gt;
#define IRMP_RCMM24_PROTOCOL                    37              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_RCMM12_PROTOCOL                    38              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_SPEAKER_PROTOCOL                   39              // Another loudspeaker protocol, similar to Nubert&lt;br /&gt;
#define IRMP_LGAIR_PROTOCOL                     40              // LG air conditioner&lt;br /&gt;
#define IRMP_SAMSUNG48_PROTOCOL                 41              // air conditioner with SAMSUNG protocol (48 bits)&lt;br /&gt;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of address and the command code of an unknown remote can be received and printed over UART or LCD. Then these values can be used hard coded in your decoder routine. Or you write a teaching routine, where you need to press a key once to store the code in an EEPROM. A sample for this can be found in [http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP Lernfähige IR-Fernbedienung mit IRMP].&lt;br /&gt;
&lt;br /&gt;
Another [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup Beispiel-Main-Funktion] is include in the zip file, showing also the timer initialization.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Debouncing&amp;quot; of Keys ===&lt;br /&gt;
&lt;br /&gt;
To distinguish between long key press or a single press, the bit IRMP_FLAG_REPETITION exists. This will be set in struct member &#039;&#039;&#039;flags&#039;&#039;&#039; when a key on the remote is pressed for longer time and therefor the same command is repeated in short periods.&lt;br /&gt;
&lt;br /&gt;
Example:&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;
      // long key press&lt;br /&gt;
      // either:&lt;br /&gt;
      //   ignore the (repeated) key&lt;br /&gt;
      // or:&lt;br /&gt;
      //   use this information for a repeat function&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      // key was pressed again&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This could be used to &amp;quot;debounce&amp;quot; the keys 0-9 by ignoring commands with bit IRMP_FLAG_REPETITION set. For keys like &#039; VOLUME+&#039; or &#039;VOLUME-&#039; using the repetition could be useful, maybe to fade a LED [[LED-Fading]fade a LED].&lt;br /&gt;
&lt;br /&gt;
When you want to decode only singe keys, you can reduce the abov if block to:&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;
      // Its a new key&lt;br /&gt;
      // ACTION!&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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;
== Scanning of unknown IR Protocols ==&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_-_english#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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 under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Starting 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;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Long Outputs ===&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english|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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91197</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91197"/>
		<updated>2016-01-11T23:48:07Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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;
Here you can select which protocols should be supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]. Standardprotocols are activated by default.&lt;br /&gt;
Would you like to turn on more protocols or turn off some other for memory saving reasons, then the corresponding values in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] must be set.&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;
Each [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported IR protocoll consumes the noted amount of code. Here you can apply optimizations: for example the modulation frequency of 455 kHz for the [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] protocol is far away from the frequencies that are used by other protocols. Maybe you need a different IR receiver, otherwise you could disable these protocols. For example you cannot receive a [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]]-protocol (455kHz) with a TSOP1738 / TSOP 31238.&lt;br /&gt;
&lt;br /&gt;
Furthermore the protocols [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] are only reliable detected at a frequency starting at 15 kHz. For [[IRMP_-_english#LEGO|LEGO]] it is even 20 kHz. When you want to use these protocols, you must adjust [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]]. Otherwise, during compilation you will get a warning and the corresponding protocols are automatically disabled.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
This constant defines the pin where the IR receiver is connected.&lt;br /&gt;
&lt;br /&gt;
Default value is 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;
These two values must match your hardware configuration.&lt;br /&gt;
&lt;br /&gt;
This applies also to STM32 µC&#039;s:&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;
And the corresponding section for STM8 µC&#039;s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PIC controllers there is only the define for &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - depending on 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;
Default value:&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;
When you turn on callbacks, on any level change at the input the callback function is called. This could be use to visualize incomming IR signals by driving another output pin.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&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;
With IRMP_LOGGING the logging of received IR frames can be turned on.&lt;br /&gt;
&lt;br /&gt;
Default value:&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;
Further documentation can be found here: [[IRMP_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported protocols use partly variable, partly fixed bit length from 2 up to 48 bits. These will be described by preprocessor defines.&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] separates these IR frames always into 3 sections:&lt;br /&gt;
&lt;br /&gt;
 1. protocol ID&lt;br /&gt;
 2. address or vendorcode&lt;br /&gt;
 3. command&lt;br /&gt;
&lt;br /&gt;
with this function&lt;br /&gt;
&lt;br /&gt;
   irmp_get_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
you can recall a decoded message. The return value is 1 when a message has been received, otherwise it is 0. In the first case the 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;
contain valid information.&lt;br /&gt;
&lt;br /&gt;
That means: finally you&#039;ll get simply three values (protocol, address and command) that can be checked with an if or switch statement. &lt;br /&gt;
Here is a sample decoder which checks for key 1-9 on a remote:&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;
Here are possible constants for irmp_data.protocol, see also [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL                      1              // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                        2              // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL                    3              // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL                 4              // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL                   5              // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL                     6              // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                        7              // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL                      8              // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                        9              // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL                 10              // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL                     11              // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL                 12              // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL                    13              // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL              14              // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL                   15              // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL                     16              // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL                   17              // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL                       18              // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL                     19              // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL                       20              // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL                      21              // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL                     22              // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL                    23              // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL                      24              // IR60 (SDA2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL                  25              // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL                    26              // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL                     27              // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL                     28              // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL                      29              // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL                   30              // Thomson&lt;br /&gt;
#define IRMP_BOSE_PROTOCOL                      31              // BOSE&lt;br /&gt;
#define IRMP_A1TVBOX_PROTOCOL                   32              // A1 TV Box&lt;br /&gt;
#define IRMP_ORTEK_PROTOCOL                     33              // ORTEK - Hama&lt;br /&gt;
#define IRMP_TELEFUNKEN_PROTOCOL                34              // Telefunken (1560)&lt;br /&gt;
#define IRMP_ROOMBA_PROTOCOL                    35              // iRobot Roomba vacuum cleaner&lt;br /&gt;
#define IRMP_RCMM32_PROTOCOL                    36              // Fujitsu-Siemens (Activy remote control)&lt;br /&gt;
#define IRMP_RCMM24_PROTOCOL                    37              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_RCMM12_PROTOCOL                    38              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_SPEAKER_PROTOCOL                   39              // Another loudspeaker protocol, similar to Nubert&lt;br /&gt;
#define IRMP_LGAIR_PROTOCOL                     40              // LG air conditioner&lt;br /&gt;
#define IRMP_SAMSUNG48_PROTOCOL                 41              // air conditioner with SAMSUNG protocol (48 bits)&lt;br /&gt;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of address and the command code of an unknown remote can be received and printed over UART or LCD. Then these values can be used hard coded in your decoder routine. Or you write a teaching routine, where you need to press a key once to store the code in an EEPROM. A sample for this can be found in [http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP Lernfähige IR-Fernbedienung mit IRMP].&lt;br /&gt;
&lt;br /&gt;
Another [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup Beispiel-Main-Funktion] is include in the zip file, showing also the timer initialization.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Debouncing&amp;quot; of Keys ===&lt;br /&gt;
&lt;br /&gt;
To distinguish between long key press or a single press, the bit IRMP_FLAG_REPETITION exists. This will be set in struct member &#039;&#039;&#039;flags&#039;&#039;&#039; when a key on the remote is pressed for longer time and therefor the same command is repeated in short periods.&lt;br /&gt;
&lt;br /&gt;
Example:&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;
      // long key press&lt;br /&gt;
      // either:&lt;br /&gt;
      //   ignore the (repeated) key&lt;br /&gt;
      // or:&lt;br /&gt;
      //   use this information for a repeat function&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      // key was pressed again&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This could be used to &amp;quot;debounce&amp;quot; the keys 0-9 by ignoring commands with bit IRMP_FLAG_REPETITION set. For keys like &#039; VOLUME+&#039; or &#039;VOLUME-&#039; using the repetion could be useful, maybe to fade a LED [[LED-Fading]fade a LED].&lt;br /&gt;
&lt;br /&gt;
When you want to decode only singe keys, you can reduce the abov if block to:&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;
      // Its a new key&lt;br /&gt;
      // ACTION!&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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;
== Scanning of unknown IR Protocols ==&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_-_english#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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 under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Starting 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;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Long Outputs ===&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english|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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91196</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91196"/>
		<updated>2016-01-11T23:36:10Z</updated>

		<summary type="html">&lt;p&gt;Jojos: noch ein Stück übersetzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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;
Here you can select which protocols should be supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]. Standardprotocols are activated by default.&lt;br /&gt;
Would you like to turn on more protocols or turn off some other for memory saving reasons, then the corresponding values in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] must be set.&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;
Each [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported IR protocoll consumes the noted amount of code. Here you can apply optimizations: for example the modulation frequency of 455 kHz for the [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] protocol is far away from the frequencies that are used by other protocols. Maybe you need a different IR receiver, otherwise you could disable these protocols. For example you cannot receive a [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]]-protocol (455kHz) with a TSOP1738 / TSOP 31238.&lt;br /&gt;
&lt;br /&gt;
Furthermore the protocols [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] are only reliable detected at a frequency starting at 15 kHz. For [[IRMP_-_english#LEGO|LEGO]] it is even 20 kHz. When you want to use these protocols, you must adjust [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]]. Otherwise, during compilation you will get a warning and the corresponding protocols are automatically disabled.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
This constant defines the pin where the IR receiver is connected.&lt;br /&gt;
&lt;br /&gt;
Default value is 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;
These two values must match your hardware configuration.&lt;br /&gt;
&lt;br /&gt;
This applies also to STM32 µC&#039;s:&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;
And the corresponding section for STM8 µC&#039;s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PIC controllers there is only the define for &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - depending on 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;
Default value:&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;
When you turn on callbacks, on any level change at the input the callback function is called. This could be use to visualize incomming IR signals by driving another output pin.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&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;
With IRMP_LOGGING the logging of received IR frames can be turned on.&lt;br /&gt;
&lt;br /&gt;
Default value:&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;
Further documentation can be found here: [[IRMP_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported protocols use partly variable, partly fixed bit length from 2 up to 48 bits. These will be described by preprocessor defines.&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] separates these IR frames always into 3 sections:&lt;br /&gt;
&lt;br /&gt;
 1. protocol ID&lt;br /&gt;
 2. address or vendorcode&lt;br /&gt;
 3. command&lt;br /&gt;
&lt;br /&gt;
with this function&lt;br /&gt;
&lt;br /&gt;
   irmp_get_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
you can recall a decoded message. The return value is 1 when a message has been received, otherwise it is 0. In the first case the 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;
contain valid information.&lt;br /&gt;
&lt;br /&gt;
That means: finally you&#039;ll get simply three values (protocol, address and command) that can be checked with an if or switch statement. &lt;br /&gt;
Here is a sample decoder which checks for key 1-9 on a remote:&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;
Here are possible constants for irmp_data.protocol, see also [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL                      1              // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                        2              // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL                    3              // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL                 4              // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL                   5              // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL                     6              // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                        7              // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL                      8              // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                        9              // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL                 10              // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL                     11              // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL                 12              // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL                    13              // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL              14              // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL                   15              // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL                     16              // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL                   17              // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL                       18              // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL                     19              // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL                       20              // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL                      21              // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL                     22              // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL                    23              // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL                      24              // IR60 (SDA2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL                  25              // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL                    26              // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL                     27              // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL                     28              // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL                      29              // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL                   30              // Thomson&lt;br /&gt;
#define IRMP_BOSE_PROTOCOL                      31              // BOSE&lt;br /&gt;
#define IRMP_A1TVBOX_PROTOCOL                   32              // A1 TV Box&lt;br /&gt;
#define IRMP_ORTEK_PROTOCOL                     33              // ORTEK - Hama&lt;br /&gt;
#define IRMP_TELEFUNKEN_PROTOCOL                34              // Telefunken (1560)&lt;br /&gt;
#define IRMP_ROOMBA_PROTOCOL                    35              // iRobot Roomba vacuum cleaner&lt;br /&gt;
#define IRMP_RCMM32_PROTOCOL                    36              // Fujitsu-Siemens (Activy remote control)&lt;br /&gt;
#define IRMP_RCMM24_PROTOCOL                    37              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_RCMM12_PROTOCOL                    38              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_SPEAKER_PROTOCOL                   39              // Another loudspeaker protocol, similar to Nubert&lt;br /&gt;
#define IRMP_LGAIR_PROTOCOL                     40              // LG air conditioner&lt;br /&gt;
#define IRMP_SAMSUNG48_PROTOCOL                 41              // air conditioner with SAMSUNG protocol (48 bits)&lt;br /&gt;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of address and the command code of an unknown remote can be received and printed over UART or LCD. Then these values can be used hard coded in your decoder routine. Or you write a teaching routine, where you need to press a key once to store the code in an EEPROM. A sample for this can be found in [http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP Lernfähige IR-Fernbedienung mit IRMP].&lt;br /&gt;
&lt;br /&gt;
Another [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup Beispiel-Main-Funktion] is include in the zip file, showing also the timer initialization.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Debouncing&amp;quot; of Keys ===&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;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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;
== Scanning of unknown IR Protocols ==&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_-_english#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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 under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Starting 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;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Long Outputs ===&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english|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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91195</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91195"/>
		<updated>2016-01-11T23:19:09Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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;
Here you can select which protocols should be supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]. Standardprotocols are activated by default.&lt;br /&gt;
Would you like to turn on more protocols or turn off some other for memory saving reasons, then the corresponding values in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] must be set.&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;
Each [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported IR protocoll consumes the noted amount of code. Here you can apply optimizations: for example the modulation frequency of 455 kHz for the [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] protocol is far away from the frequencies that are used by other protocols. Maybe you need a different IR receiver, otherwise you could disable these protocols. For example you cannot receive a [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]]-protocol (455kHz) with a TSOP1738 / TSOP 31238.&lt;br /&gt;
&lt;br /&gt;
Furthermore the protocols [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] are only reliable detected at a frequency starting at 15 kHz. For [[IRMP_-_english#LEGO|LEGO]] it is even 20 kHz. When you want to use these protocols, you must adjust [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]]. Otherwise, during compilation you will get a warning and the corresponding protocols are automatically disabled.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
This constant defines the pin where the IR receiver is connected.&lt;br /&gt;
&lt;br /&gt;
Default value is 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;
These two values must match your hardware configuration.&lt;br /&gt;
&lt;br /&gt;
This applies also to STM32 µC&#039;s:&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;
And the corresponding section for STM8 µC&#039;s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PIC controllers there is only the define for &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - depending on 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;
Default value:&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;
When you turn on callbacks, on any level change at the input the callback function is called. This could be use to visualize incomming IR signals by driving another output pin.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&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;
With IRMP_LOGGING the logging of received IR frames can be turned on.&lt;br /&gt;
&lt;br /&gt;
Default value:&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;
Further documentation can be found here: [[IRMP_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
Die von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&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;Debouncing&amp;quot; of Keys ===&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;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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;
== Scanning of unknown IR Protocols ==&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_-_english#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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 under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Starting 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;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Long Outputs ===&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english|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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91194</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91194"/>
		<updated>2016-01-11T23:17:40Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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;
Here you can select which protocols should be supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]. Standardprotocols are activated by default.&lt;br /&gt;
Would you like to turn on more protocols or turn off some other for memory saving reasons, then the corresponding values in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] must be set.&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;
Each [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported IR protocoll consumes the noted amount of code. Here you can apply optimizations: for example the modulation frequency of 455 kHz for the [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] protocol is far away from the frequencies that are used by other protocols. Maybe you need a different IR receiver, otherwise you could disable these protocols. For example you cannot receive a [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]]-protocol (455kHz) with a TSOP1738 / TSOP 31238.&lt;br /&gt;
&lt;br /&gt;
Furthermore the protocols [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] are only reliable detected at a frequency starting at 15 kHz. For [[IRMP_-_english#LEGO|LEGO]] it is even 20 kHz. When you want to use these protocols, you must adjust [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]]. Otherwise, during compilation you will get a warning and the corresponding protocols are automatically disabled.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
This constant defines the pin where the IR receiver is connected.&lt;br /&gt;
&lt;br /&gt;
Default value is 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;
These two values must match your hardware configuration.&lt;br /&gt;
&lt;br /&gt;
This applies also to STM32 µC&#039;s:&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;
And the corresponding section for STM8 µC&#039;s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PIC controllers there is only the define for &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - depending on 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;
Default value:&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;
When you turn on callbacks, on any level change at the input the callback function is called. This could be use to visualize incomming IR signals by driving another output pin.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&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_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
Die von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&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;Debouncing&amp;quot; of Keys ===&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;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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;
== Scanning of unknown IR Protocols ==&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_-_english#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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 under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Starting 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;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Long Outputs ===&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english|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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91193</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91193"/>
		<updated>2016-01-11T23:15:17Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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;
Here you can select which protocols should be supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]. Standardprotocols are activated by default.&lt;br /&gt;
Would you like to turn on more protocols or turn off some other for memory saving reasons, then the corresponding values in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] must be set.&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;
Each [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported IR protocoll consumes the noted amount of code. Here you can apply optimizations: for example the modulation frequency of 455 kHz for the [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] protocol is far away from the frequencies that are used by other protocols. Maybe you need a different IR receiver, otherwise you could disable these protocols. For example you cannot receive a [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]]-protocol (455kHz) with a TSOP1738 / TSOP 31238.&lt;br /&gt;
&lt;br /&gt;
Furthermore the protocols [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] are only reliable detected at a frequency starting at 15 kHz. For [[IRMP_-_english#LEGO|LEGO]] it is even 20 kHz. When you want to use these protocols, you must adjust [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]]. Otherwise, during compilation you will get a warning and the corresponding protocols are automatically disabled.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
This constant defines the pin where the IR receiver is connected.&lt;br /&gt;
&lt;br /&gt;
Default value is 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;
These two values must match your hardware configuration.&lt;br /&gt;
&lt;br /&gt;
This applies also to STM32 µC&#039;s:&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;
And the corresponding section for STM8 µC&#039;s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PIC controllers there is only the define for &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - depending on 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_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
Die von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&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;Debouncing&amp;quot; of Keys ===&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;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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;
== Scanning of unknown IR Protocols ==&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_-_english#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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 under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Starting 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;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Long Outputs ===&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english|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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91192</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91192"/>
		<updated>2016-01-11T23:10:34Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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;
Here you can select which protocols should be supported by [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]]. Standardprotocols are activated by default.&lt;br /&gt;
Would you like to turn on more protocols or turn off some other for memory saving reasons, then the corresponding values in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] must be set.&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;
Each [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supported IR protocoll consumes the noted amount of code. Here you can apply optimizations: for example the modulation frequency of 455 kHz for the [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] protocol is far away from the frequencies that are used by other protocols. Maybe you need a different IR receiver, otherwise you could disable these protocols. For example you cannot receive a [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]]-protocol (455kHz) with a TSOP1738 / TSOP 31238.&lt;br /&gt;
&lt;br /&gt;
Furthermore the protocols [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] are only reliable detected at a frequency starting at 15 kHz. For [[IRMP_-_english#LEGO|LEGO]] it is even 20 kHz. When you want to use these protocols, you must adjust [[IRMP_-_english#F_INTERRUPTS|F_INTERRUPTS]]. Otherwise, during compilation you will get a warning and the corresponding protocols are automatically disabled.&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;
Hier der entsprechende Abschnitt für STM8-µCs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei den PIC-Prozessoren gibt es lediglich die anzupassende Konstante &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - je nach Compiler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC C18 compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_C18)                         // use RB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PORTBbits.RB4&lt;br /&gt;
&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC CCS compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_CCS)                         // use PB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PIN_B4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 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_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
Die von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&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;Debouncing&amp;quot; of Keys ===&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;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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;
== Scanning of unknown IR Protocols ==&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_-_english#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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 under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Starting 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;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Long Outputs ===&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english|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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91191</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91191"/>
		<updated>2016-01-11T22:54:59Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] will decode all protocols listed above in one ISR. For this, there are some settings necessary. These are set in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Number of interrupts per second. Should be set to a value from 10000 to 20000. The higher the value, the better the resolution and therefore the quality of detection. But a higher interrupt rate means also higher CPU load. The value of 15000 is in most cases a good compromise.&lt;br /&gt;
&lt;br /&gt;
Standardvalues:&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;
On AVR controllers is a timer1 with 16 bit resolution used in the example [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. If for any reasons timer1 is not available, you can also use timer2 with 8 bit resolution.&lt;br /&gt;
&lt;br /&gt;
In this case timer2 will be configured as:&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;
The above example is valid for ATmega88/ATmega168/ATmega328. For other AVR-µC&#039;s check the datasheet.&lt;br /&gt;
&lt;br /&gt;
You must not forget to adjust the ISR for timer2 as well:&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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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_-_english#B&amp;amp;O|B&amp;amp;O]]-Protokoll (455kHz) mehr empfangen. &lt;br /&gt;
&lt;br /&gt;
Ausserdem werden die Protokolle [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] erst ab einer Scan-Frequenz von ca. 15kHz zuverlässig erkannt. Bei [[IRMP_-_english#LEGO|LEGO]] sind es sogar 20kHz. Wenn man also diese Protokolle nutzen will, muss man [[IRMP_-_english#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;
Hier der entsprechende Abschnitt für STM8-µCs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei den PIC-Prozessoren gibt es lediglich die anzupassende Konstante &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - je nach Compiler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC C18 compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_C18)                         // use RB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PORTBbits.RB4&lt;br /&gt;
&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC CCS compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_CCS)                         // use PB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PIN_B4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 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_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
Die von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&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;Debouncing&amp;quot; of Keys ===&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;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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;
== Scanning of unknown IR Protocols ==&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_-_english#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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 under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Starting 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;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Long Outputs ===&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english|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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91190</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91190"/>
		<updated>2016-01-11T22:44:51Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The configuration of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is done by settings in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] :&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#F_INTERRUPTS|number of interrupts per second]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|supported IR protocols]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|hardware pin for IR receiver]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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_-_english#B&amp;amp;O|B&amp;amp;O]]-Protokoll (455kHz) mehr empfangen. &lt;br /&gt;
&lt;br /&gt;
Ausserdem werden die Protokolle [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] erst ab einer Scan-Frequenz von ca. 15kHz zuverlässig erkannt. Bei [[IRMP_-_english#LEGO|LEGO]] sind es sogar 20kHz. Wenn man also diese Protokolle nutzen will, muss man [[IRMP_-_english#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;
Hier der entsprechende Abschnitt für STM8-µCs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei den PIC-Prozessoren gibt es lediglich die anzupassende Konstante &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - je nach Compiler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC C18 compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_C18)                         // use RB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PORTBbits.RB4&lt;br /&gt;
&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC CCS compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_CCS)                         // use PB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PIN_B4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 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_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
Die von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&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;Debouncing&amp;quot; of Keys ===&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;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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;
== Scanning of unknown IR Protocols ==&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_-_english#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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 under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Starting 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;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Long Outputs ===&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english|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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91171</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91171"/>
		<updated>2016-01-11T17:46:06Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#F_INTERRUPTS|Anzahl Interrupts pro Sekunde]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|Unterstützte IR-Protokolle]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|Hardware-Pin zum IR-Empfänger]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR-Logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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_-_english#B&amp;amp;O|B&amp;amp;O]]-Protokoll (455kHz) mehr empfangen. &lt;br /&gt;
&lt;br /&gt;
Ausserdem werden die Protokolle [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] erst ab einer Scan-Frequenz von ca. 15kHz zuverlässig erkannt. Bei [[IRMP_-_english#LEGO|LEGO]] sind es sogar 20kHz. Wenn man also diese Protokolle nutzen will, muss man [[IRMP_-_english#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;
Hier der entsprechende Abschnitt für STM8-µCs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei den PIC-Prozessoren gibt es lediglich die anzupassende Konstante &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - je nach Compiler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC C18 compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_C18)                         // use RB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PORTBbits.RB4&lt;br /&gt;
&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC CCS compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_CCS)                         // use PB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PIN_B4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 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_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
Die von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&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;Debouncing&amp;quot; of Keys ===&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;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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;
== Scanning of unknown IR Protocols ==&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_-_english#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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 under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Starting 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;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Long Outputs ===&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english|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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91170</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91170"/>
		<updated>2016-01-11T17:39:46Z</updated>

		<summary type="html">&lt;p&gt;Jojos: Kapitel avr-gcc Optimizations übersetzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&lt;br /&gt;
&lt;br /&gt;
From version avr-gcc 4.7.x the option [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] can be used to make the call of the external function irmp_ISR() from the main ISR more efficent. This improves the performance of the ISR a little.&lt;br /&gt;
&lt;br /&gt;
Add the following compiler- and linker options:&lt;br /&gt;
&lt;br /&gt;
* additional compiler option: -flto&lt;br /&gt;
* additional linker options: -flto -Os&lt;br /&gt;
&lt;br /&gt;
If you forget (under Windows?) the additional linker option -Os, the binary will be significant larger as it will no be optimized further. Also the option -flto must be passed to the linker, otherwise the link time optimization will not work.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#F_INTERRUPTS|Anzahl Interrupts pro Sekunde]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|Unterstützte IR-Protokolle]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|Hardware-Pin zum IR-Empfänger]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR-Logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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_-_english#B&amp;amp;O|B&amp;amp;O]]-Protokoll (455kHz) mehr empfangen. &lt;br /&gt;
&lt;br /&gt;
Ausserdem werden die Protokolle [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] erst ab einer Scan-Frequenz von ca. 15kHz zuverlässig erkannt. Bei [[IRMP_-_english#LEGO|LEGO]] sind es sogar 20kHz. Wenn man also diese Protokolle nutzen will, muss man [[IRMP_-_english#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;
Hier der entsprechende Abschnitt für STM8-µCs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei den PIC-Prozessoren gibt es lediglich die anzupassende Konstante &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - je nach Compiler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC C18 compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_C18)                         // use RB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PORTBbits.RB4&lt;br /&gt;
&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC CCS compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_CCS)                         // use PB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PIN_B4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 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_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
Die von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&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;Debouncing&amp;quot; of Keys ===&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;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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;
== Scanning of unknown IR Protocols ==&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_-_english#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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 under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Starting 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;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Long Outputs ===&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english|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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91169</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91169"/>
		<updated>2016-01-11T17:33:10Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
;Important: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&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;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#F_INTERRUPTS|Anzahl Interrupts pro Sekunde]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|Unterstützte IR-Protokolle]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|Hardware-Pin zum IR-Empfänger]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR-Logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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_-_english#B&amp;amp;O|B&amp;amp;O]]-Protokoll (455kHz) mehr empfangen. &lt;br /&gt;
&lt;br /&gt;
Ausserdem werden die Protokolle [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] erst ab einer Scan-Frequenz von ca. 15kHz zuverlässig erkannt. Bei [[IRMP_-_english#LEGO|LEGO]] sind es sogar 20kHz. Wenn man also diese Protokolle nutzen will, muss man [[IRMP_-_english#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;
Hier der entsprechende Abschnitt für STM8-µCs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei den PIC-Prozessoren gibt es lediglich die anzupassende Konstante &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - je nach Compiler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC C18 compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_C18)                         // use RB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PORTBbits.RB4&lt;br /&gt;
&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC CCS compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_CCS)                         // use PB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PIN_B4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 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_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
Die von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&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;Debouncing&amp;quot; of Keys ===&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;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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;
== Scanning of unknown IR Protocols ==&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_-_english#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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 under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Starting 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;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Long Outputs ===&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english|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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91168</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91168"/>
		<updated>2016-01-11T17:30:53Z</updated>

		<summary type="html">&lt;p&gt;Jojos: Kapitel Source code übersetzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, [[IRSND_-_english|IRSND]] as IR-Encoder can be found in this [[IRSND_-_english|document]].&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrared Multiprotocol Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-empfaenger.png|miniatur|Connection of a IR receiver module to µC]]&lt;br /&gt;
&lt;br /&gt;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] - the infrared remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separately. If you want, you can activate all protocols. If you need only one protocol, you can disable all others. It will only be compiled the code that has been selected by the user.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] source for the AVR- and PIC-µCs has been created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
Intention for an own IRMP article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 IRMP - Infrared Multi Protocol Decoder] (in german language).&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC protocol, RGB remote control, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause lengths&#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;
A Pulse Width Coding can be discovered by the following rule: &lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse lengths&#039;&#039;&#039; and &#039;&#039;&#039;two different pause lengths.&#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;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal shape is symmetric. But IRMP knows also protocols which use different puls/pause lengths. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#IR_Protocols_in_Detail|IR Protocols in Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as a [[Statemachine|state machine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine|state machine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine|state machine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine|state machine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in [[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Date: 2015-11-17&lt;br /&gt;
&lt;br /&gt;
Download of stable version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]] is also available by SVN: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP in SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball], Git: [https://github.com/svn2github/irmp IRMP on GitHub]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The version in the SVN can be a newer version than the stable version stored in Irmp.zip. In doubt, use the download link of Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can see the history of the software changes here: [[IRMP_-_english#Software_History|Software History]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
The source code can be easily compiled for AVR-µCs by loading the project file irmp.aps in AVR Studio 4.&lt;br /&gt;
&lt;br /&gt;
For other development environments it is simple to create a project or makefile. The source includes:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - IR-decoder core&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - all protocoll definitions&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - target independant definitions for AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include file for the application&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - user configuration&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Sample application&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
;WICHTIG: include only irmp.h to your application:&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;
All other include file are included within irmp.h. See also the sample application main.c.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the preprocessor constant &#039;&#039;&#039;F_CPU in project or makefile&#039;&#039;&#039; must be defined. This should have at least the value of 8000000UL, processor speed should be at least 8 MHz. This applies to AVR targets and not for CPU&#039;s with PLL. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] is also running on PIC processors. For the PIC-CCS compiler are already the necessary preprocessor defines set, so that [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] can be directly used in the CCS environment. Only a short interrupt service routine like &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;
must be added. The Interrupt period time must be set to 66 µs (15 kHz).&lt;br /&gt;
&lt;br /&gt;
For AVR processors you will find an example for the usage of [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c]. The main things are the [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]] initializing of the timer and the processing of received IR commands. The received protocoll, the device address and the command will be output on the HW-UART.&lt;br /&gt;
&lt;br /&gt;
For the Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) is a propriate timer init function already integrated in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] can be used also with STM32 microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Another new implementation is available on the mbed platform.&lt;br /&gt;
=== avr-gcc Optimizations ===&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;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#F_INTERRUPTS|Anzahl Interrupts pro Sekunde]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|Unterstützte IR-Protokolle]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|Hardware-Pin zum IR-Empfänger]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR-Logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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_-_english#B&amp;amp;O|B&amp;amp;O]]-Protokoll (455kHz) mehr empfangen. &lt;br /&gt;
&lt;br /&gt;
Ausserdem werden die Protokolle [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] erst ab einer Scan-Frequenz von ca. 15kHz zuverlässig erkannt. Bei [[IRMP_-_english#LEGO|LEGO]] sind es sogar 20kHz. Wenn man also diese Protokolle nutzen will, muss man [[IRMP_-_english#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;
Hier der entsprechende Abschnitt für STM8-µCs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei den PIC-Prozessoren gibt es lediglich die anzupassende Konstante &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - je nach Compiler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC C18 compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_C18)                         // use RB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PORTBbits.RB4&lt;br /&gt;
&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC CCS compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_CCS)                         // use PB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PIN_B4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 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_-_english#Scanning_of_unknown_IR_Protocols|Scanning of unknown IR Protocols]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP in Practice ===&lt;br /&gt;
&lt;br /&gt;
Die von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&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;Debouncing&amp;quot; of Keys ===&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;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#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;
== Scanning of unknown IR Protocols ==&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_-_english#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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 under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Starting 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;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
=== Long Outputs ===&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english|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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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_-_english#IRMP_-_Infrared_Multiprotocol_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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC Protocol|NEC + extended NEC]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data NEC || 8 address bits + 8 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data ext. NEC || 16 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 9000µs pulse, 2250µs pause, 560µs pulse, ~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_-_english#NEC16 Protocol (JVC)|JVC]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 12 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause, 6000µs pause if keyboard repetition&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 8 address bits + 1 sync bit + 8 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 560µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 42 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 address bits + 13 inverted address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 110ms (beginning from start bit), 9000µs pulse, 2250µs pause, 560µs pulse&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_-_english#ACP24 Protocol|ACP24]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 70 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 70 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 390µs pulse, 950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 390µs pulse,  950µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 390µs pulse, 13000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 390µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#LGAIR Protocol|LGAIR]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 28 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 16 command bits + 4 checksum bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 9000µs pulse, 4500µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 560µs pulse,  560µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 560µs pulse, 1690µs pause (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 560µs pulse (identical with [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first (&#039;&#039;&#039;differing&#039;&#039;&#039; to [[IRMP_-_english#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_-_english#SAMSUNG Protocol|SAMSUNG]]&#039;&#039;&#039; || Value&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;
| Frequency || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data(1) bits + 1 sync bit + 20 data(2)-bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data(1) || 16 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data(2) || 4 ID bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| sync bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || repetition after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || Repetition after approx. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 32 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 8 Bits + 8 inverted Bits + 8 Bits + 8 inverted Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 4500µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1650µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || one after approx. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 45 msec&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_-_english#MATSUHITA Protocol|MATSUSHITA]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 customer bits + 6 command bits + 12 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance, Timing identisch mit [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 22 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 11 command bits + 11 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3488µs pulse, 3488µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 872µs pulse,  872µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 872µs pulse, 2616µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 872µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#KASEIKYO_Protocol_.28.22Japan Protocol.22.29|KASEIKYO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 48 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 customer bits + 4 parity bits + 4 genre1 bits + 4 genre2 bits + 10 command bits + 2 ID bits + 8 parity bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3380µs pulse, 1690µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 423µs pulse,  423µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 423µs pulse, 1269µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 423µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start Bits + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 3 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RECS80 and RECS80 Extended Protocol|RECS80EXT]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 toggle bit + 4 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 3637µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse, 4902µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 7432µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Denon Protocol|DENON]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (in practice, theoretically: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 5 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Command || 6 data bits + 2 extension bits + 2 data construction bits (normal: 00, inverted: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || no Start Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse, 775µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 310µs pulse, 1780µs pause (in practice, theoretically: 275µs pulse, 1900µs pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 310µs pulse (310µs pulse, 745µs pause (in practice, theoretically: 275µs pulse)&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || after 65ms with inverted command bits (data construction bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || both frames after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 address bits + 11100000 + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || see [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1060µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  437µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 1425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Value&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;
| Frequency || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 start bits + 16 data bits + 1 trailer bit + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 1 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 2 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 3 || 200µs pulse, 15425µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit 4 || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 200µs pulse, 2925µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 200µs pulse, 9175µs pause&lt;br /&gt;
|-&lt;br /&gt;
| R Bit || 200µs pulse, 6050µs pause, repeats the last bit&lt;br /&gt;
|-&lt;br /&gt;
| Trailer Bit || 200µs pulse, 12300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 200µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 40 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 12 x 0 Bits + 4 press/release bits + 8 command bits + 8 inverted command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2085µs pulse, 966µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 300µs pulse,  220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 300µs pulse, 715µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 300µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Press Key || press/release bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Release Key || press/release bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after pause of approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 2 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 2 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse,  1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 3500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 56 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 24 bits (010000000000010000000001) + 16 address bits + 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 3600µs pulse, 1600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 565µs pulse,  316µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 565µs pulse, 1140µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 565µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 6 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2200µs pulse, 27100µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 1000µs pulse,  1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1000µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 1000µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 210µs pulse, 6218µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pulse,  1400µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 3000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 16 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 158µs pulse, 1026µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 158µs pulse,  263µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 158µs pulse, 553µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 158µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 33 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start Bits + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 4 address bits + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 550µs pulse,  2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 550µs pulse, 4500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 550µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 15 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 1500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 13 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 2000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse,  900µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 600µs pulse, 450µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 600µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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_-_english#RCMM_Protocol|RCMM]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 start bit + 32 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 start bit + 24 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 start bit + 12 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM32 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 15 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM24 || 16 address bits (= 4 mode bits + 12 device bits) + 1 toggle bit + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RCMM12 || 4 address bits (= 2 mode bits + 2 device bits) + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 500µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 00 Bits || 230µs pulse, 220µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 01 Bits || 230µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 10 Bits || 230µs pulse, 550µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 11 Bits || 230µs pulse, 720µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 230µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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 Protocols ===&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_-_english#SIRCS_Protocol|SIRCS]]&#039;&#039;&#039; || Value&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;
|Frequency ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 12-20 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 7 command bits + 5 address bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 600µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1200µs pulse, 600µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || twice after approx. 25ms, that means: 2nd und 3rd Frame&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || starting with 4th identical frame, distance approx. 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 Protocols ===&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; || Value&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;
| Frequency || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pulse, 1300µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1340µs pulse, 340µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th etc. indentical 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;
This protocol is very similar to [[IRMP_-_english#NUBERT|NUBERT]], but here it will be sent only one frame. Additionally there are 11 instead of 10 data bits and no stop bit. The pause time between frame repetitions is substantial lower.&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; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 11 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 11 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 380µs pulse, 1280µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1280µs pulse, 380µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 10 data bits + 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 10 command bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 440µs pulse, 1250µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 1250µs pulse, 440µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || 440µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once after approx. 38ms&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || 3rd, 5th, 7th ... identical 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 7 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 930µs pulse, 2790µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 2790µs pulse, 930µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 3 times after 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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 Protocols ===&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_-_english#RC5 and RC5x Protocol|RC5 + RC5X]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start Bits + 12 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5 || 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 start bit + 13 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data RC5X || 1 inverteds command bit + 1 toggle bit + 5 address bits + 6 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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 data 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; || Value&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;
| Frequency || 56 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 14 data bits + 0 Stop Bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 1 inverteds command bit + 1 toggle bit + 5 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#RC6 and RC6A Protocol|RC6 + RC6A]]&#039;&#039;&#039; || Value&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;
| Frequency || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data 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 data bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6 || 8 address bits + 8 Command Bits&lt;br /&gt;
|-&lt;br /&gt;
| Data RC6A || &amp;quot;1&amp;quot; + 14 customer bits + 8 system bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Data 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 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2666µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0 Bit || 889µs pause, 889µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1 Bit || 889µs pulse, 889µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 444µs pause, 444µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 444µs pulse, 444µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#Grundig Protocol|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Value&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;
| Frequency || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 pre bit + 1 start bit + 9 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 pre bit + 1 start bit + 9 data bits (all 1) + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Grundig || 9 command bits + 0 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Nokia || 8 command bits + 8 address bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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_-_english#IR60_.28SDA2008_and_MC14497P.29|IR60]]&#039;&#039;&#039; || Value&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;
| Frequency || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Coding || 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;
| Data Frame || 1 start bit + 7 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 0 address bits + 7 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 528µs pulse, 2639µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 528µs pause, 528µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 528µs pulse, 528µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 36 kHz? (Merlin-Tastatur mit Ruwido protocol: 56 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 start bit + 22 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 start bit + 17 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data Siemens || 11 address bits + 10 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Data Ruwido || 9 address bits + 7 command bits + 1 inverteds Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 275µs pause, 275µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 275µs pulse, 275µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || once with repeat bit set (?)&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 16 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 8 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 250µs pulse, 150µs + 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 150µs pause, 250µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 250µs pulse, 150µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) asymmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 8 address bits + 10 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bits || &amp;quot;10&amp;quot;, also 210µs pulse, 210µs + 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 210µs pause, 210µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 210µs pulse, 210µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || unknown&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || Biphase (Manchester) symmetrisch&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start Bits + 18 data bits + 0 stop bits&lt;br /&gt;
|-&lt;br /&gt;
| Data || 6 address bits + 2 special bits +  6 command bits + 4 special bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2000µs pulse, 1000µs pause&lt;br /&gt;
|-&lt;br /&gt;
| 0 Bit || 500µs pause, 500µs pulse&lt;br /&gt;
|-&lt;br /&gt;
| 1 Bit || 500µs pulse, 500µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop Bit || no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || 2 additinal frames with special bits set&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || only repetition of the 2nd frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position Protocols ===&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; || Value&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;
| Frequency || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Coding || pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 start bit + 16 data bits, no stop bit&lt;br /&gt;
|-&lt;br /&gt;
| Data || 3 address bits + 13 command bits&lt;br /&gt;
|-&lt;br /&gt;
| Start Bit || 2400µs pulse, 800µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit Length || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Repetition || none&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard Repetition || after approx. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software History ==&lt;br /&gt;
&lt;br /&gt;
=== Changes of IRMP in 2.9.x ===&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 2015-11-17: Port to ESP8266&lt;br /&gt;
* 2015-11-17: Port to Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 2015-11-10: Added support for STM8 microcontroller&lt;br /&gt;
&lt;br /&gt;
Version 2.9.5:&lt;br /&gt;
&lt;br /&gt;
* 2015-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TECHNICS|TECHNICS]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.4:&lt;br /&gt;
&lt;br /&gt;
* 2015-06-15: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ACP24|ACP24]]&lt;br /&gt;
&lt;br /&gt;
Version 2.9.2:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#S100|S100]]&lt;br /&gt;
* 2015-05-29: Some smaller corrections&lt;br /&gt;
&lt;br /&gt;
Version 2.9.1:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-28: Added Logging for XMega&lt;br /&gt;
* 2015-05-28: Timing corrections  for FAN protocol&lt;br /&gt;
&lt;br /&gt;
Version 2.9.0:&lt;br /&gt;
&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 2015-05-27: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FAN|FAN]]&lt;br /&gt;
&lt;br /&gt;
=== Older Versions ===&lt;br /&gt;
&lt;br /&gt;
* 2015-05-18: Added F_CPU macro for STM32L1XX&lt;br /&gt;
* 2015-05-18: Some corrections for XMega port&lt;br /&gt;
* 2015-04-23: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* 2015-04-23: Port to AVR XMega&lt;br /&gt;
* 2014-09-19: Bugfix: added missing newline before #else&lt;br /&gt;
* 2014-09-18: Added logging for ARM STM32F10X&lt;br /&gt;
* 2014-09-17: Corrected PROGMEM access to array irmp_protocol_names[].&lt;br /&gt;
* 2014-09-15: Changed timing tolerances for [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol&lt;br /&gt;
* 2014-09-15: Moved  irmp_protocol_names to flash, additional UART routines in main.c&lt;br /&gt;
* 2014-07-21: Port to PIC 12F1840&lt;br /&gt;
* 2014-07-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 2014-07-09: Some small corrections&lt;br /&gt;
* 2014-07-01: Added logging for ARM_STM32F4XX&lt;br /&gt;
* 2014-07-01: IRMP port for PIC XC8 compiler, removed variadic macros because of stupid XC8 compiler :-(&lt;br /&gt;
* 2014-06-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 2014-05-30: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 2014-05-30: Optimized timings for [[IRMP_-_english#SAMSUNG|SAMSUNG]] protocol&lt;br /&gt;
* 2014-02-20: Corrected decoding of [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2014-02-19: &#039;&#039;&#039;New protocols&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 and RCMM12]]&lt;br /&gt;
* 2014-09-17: Optimized timing for [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 2013-04-09: Optimized detection of [[IRMP_-_english#ORTEK|ORTEK (Hama)]] frames&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 2013-03-19: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 2013-03-12: Changed timing tolerancies for [[IRMP_-_english#RECS80|RECS80]]- and  [[IRMP_-_english#RECS80EXT|RECS80EXT]] protocol&lt;br /&gt;
* 2013-01-21: Corrected detection of repetition frame beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2013-01-17: Corrected frame detection beim [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-12-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 2012-12-07: Improved detection von [[IRMP_-_english#DENON|DENON]] repetition frame&lt;br /&gt;
* 2012-11-19: Port to Stellaris LM4F120 TI Launchpad (ARM Cortex M4)&lt;br /&gt;
* 2012-11-06: Corrected [[IRMP_-_english#DENON|DENON]] frame detection&lt;br /&gt;
* 2012-10-26: Some timer corrections and adaptations for Arduino&lt;br /&gt;
* 2012-07-11: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#BOSE|BOSE]]&lt;br /&gt;
* 2012-06-18: Added support for ATtiny87/167&lt;br /&gt;
* 2012-06-05: Some smaller corrections of port to ARM STM32&lt;br /&gt;
* 2012-06-05: Correction of include in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 2012-06-05: Bugfix, if only [[IRMP_-_english#NEC_+_extended_NEC|NEC]] and [[IRMP_-_english#NEC42|NEC42]] activated&lt;br /&gt;
* 2012-05-23: Port to ARM STM32&lt;br /&gt;
* 2012-05-23: Bugfix frame detection for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2012-02-27: Bugfix in IR60-Decoder&lt;br /&gt;
* 2012-02-27: Bugfix in CRC calculation of  [[IRMP_-_english#KASEIKYO|KASEIKYO]] frames&lt;br /&gt;
* 2012-02-27: Port to C18 Compiler for PIC microcontrollers&lt;br /&gt;
* 2012-02-13: Bugfix: most significant bit in Address wrong in [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol, if [[IRMP_-_english#NEC42|NEC42]] protocol activated, too&lt;br /&gt;
* 2012-02-13: Corrected timing of [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol&lt;br /&gt;
* 2012-02-13: [[IRMP_-_english#KASEIKYO|KASEIKYO]]: Genre2 bits will be now stored in upper nibble of flags&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 2011-09-20: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 2011-09-20: Port to ATtiny84 and ATtiny85&lt;br /&gt;
* 2011-09-20: Improved key repetition detection in [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
* 2011-09-20: Improved decoding of [[IRMP_-_english#Biphase|Biphase]] protocols&lt;br /&gt;
* 2011-09-20: Fixed some smaller bugs in [[IRMP_-_english#RECS80|RECS80]] decoder&lt;br /&gt;
* 2011-09-20: Corrected detection of additional bits in SIRCS protocol&lt;br /&gt;
* 2011-01-18: Some corrections for [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] protocol&lt;br /&gt;
* 2011-01-18: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 2011-01-18: [[IRMP_-_english#SIRCS|SIRCS]]: additional bits (&amp;gt;12) will be stored in address&lt;br /&gt;
* 2011-01-18: Some timing corrections for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-09-04: Bugfix for F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 2010-09-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 2010-08-29: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: genre bits will be now stored&lt;br /&gt;
* 2010-08-29: [[IRMP_-_english#KASEIKYO|KASEIKYO]] protocol: Improved handling of repetition frames&lt;br /&gt;
* 2010-08-29: Improved support of [[IRMP_-_english#APPLE|APPLE]] protocols.&lt;br /&gt;
&lt;br /&gt;
* 2010-07-01: Bugfix: added a timeout for [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames. This avoids &#039;ghost commands&#039;.&lt;br /&gt;
&lt;br /&gt;
* 2010-06-26: Bugfix: deactivated [[IRMP_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] if interrupts frequency is low&lt;br /&gt;
&lt;br /&gt;
* 2010-06-25: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 2010-06-25: Extended keyboard detection for [[IRMP_-_english#FDC|FDC]] protocol (IR keyboard)&lt;br /&gt;
* 2010-06-25: Interrupt frequency now up to 20kHz possible&lt;br /&gt;
&lt;br /&gt;
* 2010-06-09: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 2010-06-09: Corrected timing for [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-06-02: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 2010-05-26: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 2010-05-26: Bugfix: detection of long keyboard press for [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-05-17: Bugfix [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] protocol: corrected command bit mask&lt;br /&gt;
&lt;br /&gt;
* 2010-05-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 2010-05-16: Improved handling of automatic frame repetitions for [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-, and [[IRMP_-_english#NUBERT|NUBERT]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-04-28: Only some cosmetic code optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-04-16: Improved all timing tolerancies&lt;br /&gt;
&lt;br /&gt;
* 2010-04-12: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-29: Bugfix: detection of multiple [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
* 2010-03-29: Moved configuration data to  [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h]&lt;br /&gt;
* 2010-03-29: Introduced a program version in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 2010-03-17: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-16: Correction of RECS80 start bit timings&lt;br /&gt;
* 2010-03-16: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-15: Some optimizations&lt;br /&gt;
&lt;br /&gt;
* 2010-03-14: Port to PIC&lt;br /&gt;
&lt;br /&gt;
* 2010-03-11: Some adjustements for some ATMegas&lt;br /&gt;
&lt;br /&gt;
* 2010-03-07: Bugfix: Reset of state machine after a incomplete [[IRMP_-_english#RC5_+_RC5X|RC5]] frame&lt;br /&gt;
&lt;br /&gt;
* 2010-03-05: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#APPLE|APPLE]]&lt;br /&gt;
* 2010-03-05: Data  irmp_data.addr + irmp_data.command will be now stored in the bit order of the appropriate protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-03-04: &#039;&#039;&#039;New protocol&#039;&#039;&#039;: [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol)&lt;br /&gt;
* 2010-03-04: Changed some timer tolerances changes of [[IRMP_-_english#SIRCS|SIRCS]]- and [[IRMP_-_english#KASEIKYO|KASEIKYO]]&lt;br /&gt;
&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: corrected detection and suppression of automatic frame repetitions&lt;br /&gt;
* 2010-03-02: [[IRMP_-_english#SIRCS|SIRCS]]: device ID bits will be now stored in irmp_data.command (not irmp_data.address anymore)&lt;br /&gt;
* 2010-03-02: Enlargement of scan buffers (for logging)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-24: New variable flags in IRMP_DATA for detection of long key press&lt;br /&gt;
&lt;br /&gt;
* 2010-02-20: Bugfix [[IRMP_-_english#DENON|DENON]] protocol: repetition frame is now basically inverted&lt;br /&gt;
&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 2010-02-19: Detection of [[IRMP_-_english#RC6_+_RC6A|RC6]]- and [[IRMP_-_english#DENON|DENON]] protocol&lt;br /&gt;
* 2010-02-19: Some improvements for [[IRMP_-_english#RC5_+_RC5X|RC5]] decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 2010-02-13: Bugfix: Puls/Pause counters were 1 too low, now better detection of protokols with very short pulses&lt;br /&gt;
* 2010-02-13: Improved detection of [[IRMP_-_english#NEC_+_extended_NEC|NEC]] repetition frames&lt;br /&gt;
&lt;br /&gt;
* 2010-02-12: New: [[IRMP_-_english#RC5_+_RC5X|RC5]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-02-05: Eliminated a conflict between [[IRMP_-_english#SAMSUNG|SAMSUNG]]- and [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] protocol&lt;br /&gt;
&lt;br /&gt;
* 2010-01-07: First version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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 Protocol ===&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 Protocol ===&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 Protocol ===&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_-_english|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 Protocol ===&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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan Protocol&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 and RECS80 Extended Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5 and RC5x Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#IRMP_-_Infrared_Multiprotocol_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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] und [[IRSND_-_english|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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrared_Multiprotocol_Decoder|IRMP]] &amp;amp; [[IRSND_-_english|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4). Danke an Matthias Frank für die Portierung auf XMega. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english|IRSND]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english|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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91110</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91110"/>
		<updated>2016-01-11T01:27:40Z</updated>

		<summary type="html">&lt;p&gt;Jojos: Anfang der englischen Übersetzung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and because more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, IRSND als IR-Encoder can be found in this ... document.&lt;br /&gt;
= IRMP - Infrared Multiprotocol 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;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] is already implemented on this 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;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] - the infrared-remote decoder, which can decode several protocols at once, is capable of decoding the following protocols (in alphabetic order):&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;supported protocols&#039;&#039;&#039;&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Protocol || Vendor&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, remote for fans&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, e.g. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || various european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon and other japanese vendors which are members of the  &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN remote (Pollin article number: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName and many more asian vendors.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, e.g. Subwoofer Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein and others, e.g. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips and other european vendors&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR remote for RC toys &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens e.g. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba vacuum cleaner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || similar to RC5, but 14 instead of 13 Bits and 56kHz modulation. vendor unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || various air conditions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (e.g. T-Home-Mediareceiver, MERLIN-keyboard(Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Speaker Systems like X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(New!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of these protocols can be activated separate. Who wants, can activate all protocols. Who needs only one protocol, can disable all others. It will we only be compiled what is selected.&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The [[IRMP_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] source for the AVR- and PIC-µCs was created as part of the [[Word Clock]] project.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Intention for an own [[IRMP_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]]-article is the following thread in Projects&amp;amp;Code [http://www.mikrocontroller.net/topic/162119 Beitrag: IRMP - Infrared Multi Protocol Decoder]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== IR Protocols ==&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;
Some vendors use their own proprietary protocol, such as Sony, Samsung and Matsuhita. Philips has developed [[IRMP_-_english#RC5 + RC5X|RC5]] and of course used for own purposes.&lt;br /&gt;
[[IRMP_-_english#RC5 + RC5X|RC5]] was seen in Europe as &#039;&#039;that&#039;&#039; standard IR-protocol which was adopted by many european vendors. Nowadays is [[IRMP_-_english#RC5 + RC5X|RC5]] nearly nowhere used - it can be ticked as &amp;quot;dead&amp;quot;. Although the successor [[IRMP_-_english#RC6_+_RC6A|RC6]] is used in actual european hardware, it is also used rarely.&lt;br /&gt;
&lt;br /&gt;
Also japanese vendors tried to establish an own standard, the so called [[IRMP_-_english#KASEIKYO|Kaseikyo]]- (or also &amp;quot;Japan-&amp;quot;) protocol. This is with a bitlength of 48 bits more versatile. But it has no general acceptance until today - even if you find it in some appliances.&lt;br /&gt;
&lt;br /&gt;
Nowadays the [[IRMP_-_english#NEC_+_extended_NEC|NEC]] protocol is used (also mainly in japanese devices) - indeed in various premium and NoName products. I estimate the market share to 80 % for the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-protocol. Nearly all remotes in my daily use utilize the [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-IR-Code. This starts at the TV-set, goes over the DVD-player to the Notebook remote and reaches up to NoName-Multimedaia-Harddrive, just to mention a few samples.&lt;br /&gt;
&lt;br /&gt;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] supports the following IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Example: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Example: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Example: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Example: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Example: [[IRMP_-_english#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
The pulses are modulated - usually with 36 kHz or 38 kHz - to reduce environment influences such as Indoorlightning or sunlight.&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;
A Pulse Distance Coding can be discovered by the following rule:&lt;br /&gt;
&lt;br /&gt;
* there is only &#039;&#039;&#039;one pulse length&#039;&#039;&#039; and there are &#039;&#039;&#039;two different pause length&#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;
* ther are &#039;&#039;&#039;two different pulse length&#039;&#039;&#039; and &#039;&#039;&#039;only one pause length&#039;&#039;&#039;&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;
This is a mix from Pulse Distance and Pulse Width Coding, so:&lt;br /&gt;
&lt;br /&gt;
* there are &#039;&#039;&#039;two different pulse length&#039;&#039;&#039; and &#039;&#039;&#039;two different pause length.&#039;&#039;&#039;&lt;br /&gt;
=== Biphase ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Biphase-Coding.png|miniatur|Biphase Coding]]&lt;br /&gt;
&lt;br /&gt;
In Biphase Coding the order of pulse and pause gives the bit value.&lt;br /&gt;
Therefore a Biphase-Coding can be discovered by this criteria:&lt;br /&gt;
&lt;br /&gt;
* there is exactly &#039;&#039;&#039;one&#039;&#039;&#039; pause- and one pulse length, as well as the &#039;&#039;&#039;double&#039;&#039;&#039; pulse/pause length&lt;br /&gt;
&lt;br /&gt;
Usually the length for the pulse and pause are equal, that means the signal ahape is symmetric. But IRMP knows also protocols thare use different puls/pause length. This case is for example the [[IRMP_-_english#A1TVBOX|A1TVBOX]]-protocol.&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;
The pulse position coding is known from usual UART&#039;s. Every bit has a fixed length here. Depending on the value (0 or 1), it is a pulse or a pause.&lt;br /&gt;
&lt;br /&gt;
Typical criteria for a &#039;&#039;&#039;pulse position protocol&#039;&#039;&#039; is:&lt;br /&gt;
* there are &#039;&#039;&#039;multiples&#039;&#039;&#039; of a basic pulse/pause length&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A tabular listing of different IR-protocols can be found here: [[IRMP_-_english#Die_IR-Protokolle_im_Detail|Die IR-Protokolle im Detail]].&#039;&#039;&#039;&lt;br /&gt;
The specified timings are typical values. In some remotes they differ up to 40 % in real life. Therefore [[IRMP_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] uses minimum/maximum limits to be tolerant with the timing.&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
The most of the [[IRMP_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] decoded protocols have something in common: they show a start bit which is unique for their timing.&lt;br /&gt;
According to this start bit timing the most protocols are discriminated. [[IRMP_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] measures the timing of the start bit and reorders its timing tables &amp;quot;on-the-fly&amp;quot; for the discovered protocol. So the following bits can be read sequential without the need of storing a complete frame.&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] does not wait for reading a complete frame to analyze, it starts decoding after the first pulse detection.&lt;br /&gt;
If the first read start bit is not unique, [[IRMP_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] follows multiple possible protocols. If for plausible reasons one protocol is no more possible this track will be dropped.&lt;br /&gt;
&lt;br /&gt;
The detection is implemented as [[Statemachine]], which is called interrupt driven with an frequency of typically 15.000 per second. the [[Statemachine]] knows the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the first pulse length of the start bit&lt;br /&gt;
* detect the pause length of the start bit&lt;br /&gt;
* detect the pulse length of the first data bit&lt;br /&gt;
&lt;br /&gt;
After that, the pulse/pause length of the start bit are known. Now all enabled protocols are searched for this length. If a protocol matches, the timing table for this protocol is loaded and the following bits are checked if the pulse/pause timing still fit to the limis.&lt;br /&gt;
&lt;br /&gt;
So the [[Statemachine]] continues with the following states:&lt;br /&gt;
&lt;br /&gt;
* detect the pauses of the data bits&lt;br /&gt;
* detect the pulse length of the data bits&lt;br /&gt;
* check timing. If different, switch back to another valid IR protocol, otherwise return&lt;br /&gt;
* detect the sop bit if present in the protocol&lt;br /&gt;
* check data for plausibility, like CRC or other redundant data bits&lt;br /&gt;
* convert data to device address and command&lt;br /&gt;
* detect code repetition by long key press, set according flag&lt;br /&gt;
&lt;br /&gt;
Indeed the [[Statemachine]] is even more complex because some protocols have no start bit (e.g. [[IRMP_-_english#DENON|Denon]]) or have multiple start bits (4 in[[IRMP_-_english#B.26O|B&amp;amp;O]]) or have within the frame another sync bit (z.B. [[IRMP_-_english#SAMSUNG|Samsung]]). These extra conditions are caught in the code by protocol specific &amp;quot;special cases&amp;quot;.&lt;br /&gt;
Switching to an other protocol can happen multiple times during receiving of a frame, f.e. from [[IRMP_-_english#NEC42|NEC42]] (42 Bit) to [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), when a premature sync bit was detected. Or from [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) to [[IRMP_-_english#JVC|JVC]] (16 Bit) when the stop bit premature occured. It is getting difficult when two possible protocols after the detection of the start bit use different codings, e.g. when the one protocol uses a [[IRMP_-_english#Pulse Distance|Pulse Distance Coding]] and the other uses a [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]]. In this case [[IRMP_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] stores the necessary bits for both codings and releases later the one ore the other.&lt;br /&gt;
&lt;br /&gt;
Furthermore some remotes are transmitting in particular protocols for redundance reasons (error detection) or for long key presses repetition frames. These will be discriminated by IRMP: the necessary frames for error detection are checked by IRMP, but not passed to the application. The other will be detected as long key press and flagged by IRMP.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7, Stand vom 17.11.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_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] &amp;amp; [[IRSND_-_english#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_-_english#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_-_english#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_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] auf STM32-Mikroprozessoren eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== avr-gcc Optimizations ===&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;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration von [[IRMP_-_english#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_-_english#F_INTERRUPTS|Anzahl Interrupts pro Sekunde]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|Unterstützte IR-Protokolle]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|Hardware-Pin zum IR-Empfänger]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR-Logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#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_-_english#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_-_english#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_-_english#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_-_english#B&amp;amp;O|B&amp;amp;O]]-Protokoll (455kHz) mehr empfangen. &lt;br /&gt;
&lt;br /&gt;
Ausserdem werden die Protokolle [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] erst ab einer Scan-Frequenz von ca. 15kHz zuverlässig erkannt. Bei [[IRMP_-_english#LEGO|LEGO]] sind es sogar 20kHz. Wenn man also diese Protokolle nutzen will, muss man [[IRMP_-_english#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;
Hier der entsprechende Abschnitt für STM8-µCs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei den PIC-Prozessoren gibt es lediglich die anzupassende Konstante &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - je nach Compiler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC C18 compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_C18)                         // use RB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PORTBbits.RB4&lt;br /&gt;
&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC CCS compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_CCS)                         // use PB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PIN_B4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 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_-_english#Scannen_von_unbekannten_IR-Protokollen|Scannen von unbekannten IR-Protokollen]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP Practice ===&lt;br /&gt;
&lt;br /&gt;
Die von [[IRMP_-_english#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_-_english#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;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&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;Debouncing&amp;quot; of Keys ===&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;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP_-_english#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_-_english#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;
== Scanning of unknown IR Protocols ==&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_-_english#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP_-_english#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_-_english#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_-_english#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 under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&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_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP_-_english#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;
=== Starting 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;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#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;
=== Long Outputs ===&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english]] 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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#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_-_english#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_-_english#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_-_english#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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC-Protokoll|NEC + extended NEC]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten NEC || 8 Adress-Bits + 8 invertierte Adress-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten ext. NEC || 16 Adress-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 9000µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 560µs Puls,  560µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 560µs Puls, 1690µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 560µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || 9000µs Puls, 2250µs Pause, 560µs Puls, ~100ms Pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 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_-_english#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_-_english#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_-_english#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_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 560µs Puls,  560µs Pause (identisch mit [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 560µs Puls, 1690µs Pause (identisch mit [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 560µs Puls (identisch mit [[IRMP_-_english#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_-_english#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_-_english#SAMSUNG-Protokoll|SAMSUNG]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 16 Daten(1)-Bits + 1 Sync-Bit + 20 Daten(2)-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten(1) || 16 Adress-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten(2) || 4 ID-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 4500µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 550µs Puls,  550µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 550µs Puls, 1650µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Sync-Bit || 550µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 550µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG32 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG32&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Adress-Bits + 16 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 4500µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 550µs Puls,  550µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 550µs Puls, 1650µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 550µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || Wiederholung nach ca. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 48 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Adress-Bits + 32 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Kommando || 8 Bits + 8 invertierte Bits + 8 Bits + 8 invertierte Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 4500µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 550µs Puls,  550µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 550µs Puls, 1650µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 550µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || eine nach ca. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || dritter, fünfter, siebter usw. identischer Frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== MATSUSHITA ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP_-_english#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_-_english#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_-_english#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_-_english#KASEIKYO-Protokoll (auch &amp;quot;Japan-Protokoll&amp;quot;)|KASEIKYO]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 48 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Hersteller-Bits + 4 Parity-Bits + 4 Genre1-Bits + 4 Genre2-Bits + 10 Kommando-Bits + 2 ID-Bits + 8 Parity-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 3380µs Puls, 1690µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 423µs Puls,  423µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 423µs Puls, 1269µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 423µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames nach ca. 80ms Pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RECS80 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP_-_english#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_-_english#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_-_english#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_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || siehe [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || siehe [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || siehe [[IRMP_-_english#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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 Start-Bits + 16 Daten-Bits + 1 Trailer-Bit + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 0 Adress-Bits + 16 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 1 || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 2 || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 3 || 200µs Puls, 15425µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 4 || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 200µs Puls, 9175µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| R-Bit || 200µs Puls, 6050µs Pause, wiederholt das letzte Bit (repetition)&lt;br /&gt;
|-&lt;br /&gt;
| Trailer-Bit || 200µs Puls, 12300µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 200µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FDC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;FDC&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 40 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 8 Adress-Bits + 12 x 0-Bits + 4 Press/Release-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2085µs Puls, 966µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 300µs Puls,  220µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 300µs Puls, 715µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 300µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Drücken || Press/Release-Bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Loslassen || Press/Release-Bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || Wiederholung nach Pause von 60ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NIKON ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;NIKON&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 2 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 2 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2200µs Puls, 27100µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 500µs Puls,  1500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 500µs Puls, 3500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 500µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 56 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 24 Bits (010000000000010000000001) + 16 Adress-Bits + 16 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 3600µs Puls, 1600µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 565µs Puls,  316µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 565µs Puls, 1140µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 565µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 6 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 6 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2200µs Puls, 27100µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 1000µs Puls,  1000µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 1000µs Puls, 3000µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 1000µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== KATHREIN ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;KATHREIN&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 11 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 4 Adress-Bits + 7 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 210µs Puls, 6218µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 210µs Puls,  1400µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 210µs Puls, 3000µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 210µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || nach 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== LEGO ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP_-_english#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_-_english#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 Protocols ===&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_-_english#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 Protocols ===&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_-_english#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 Protocols ===&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_-_english#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_-_english#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_-_english#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_-_english#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 History ==&lt;br /&gt;
&lt;br /&gt;
Änderungen IRMP in 2.9.x:&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 17.11.2015: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 17.11.2015: Portierung auf ESP8266&lt;br /&gt;
* 17.11.2015: Portierung auf Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 10.11.2015: Unterstützung für STM8 Mikrcontroller&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_-_english#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_-_english#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_-_english#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_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 27.05.2015: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#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_-_english#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_-_english#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_-_english#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_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 30.05.2014: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 30.05.2014: Timings für [[IRMP_-_english#SAMSUNG|SAMSUNG]]-Protokolle optimiert&lt;br /&gt;
* 20.02.2014: Fehlerhaftes Decodieren des [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]-Protokolls korrigiert&lt;br /&gt;
* 19.02.2014: &#039;&#039;&#039;Neue Protokolle&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 und RCMM12]]&lt;br /&gt;
* 17.09.2014: Timing für [[IRMP_-_english#ROOMBA|ROOMBA]] verbessert&lt;br /&gt;
* 09.04.2013: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 09.04.2013: Verbesserte Frame-Erkennung für [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 19.03.2013: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 19.03.2013: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 12.03.2013: Geänderte Timing-Toleranzen für [[IRMP_-_english#RECS80|RECS80]]- und  [[IRMP_-_english#RECS80EXT|RECS80EXT]]-Protokoll&lt;br /&gt;
* 21.01.2013: Korrekturen Erkennung des Wiederholungsframes beim [[IRMP_-_english#DENON|DENON]]-Protokoll&lt;br /&gt;
* 17.01.2013: Korrekturen Frame-Erkennung beim [[IRMP_-_english#DENON|DENON]]-Protokoll&lt;br /&gt;
* 11.12.2012: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 07.12.2012: Verbesserte Erkennung von [[IRMP_-_english#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_-_english#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_-_english#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_-_english#NEC_+_extended_NEC|NEC]] und [[IRMP_-_english#NEC42|NEC42]] aktiviert&lt;br /&gt;
* 23.05.2012: Portierung auf ARM STM32&lt;br /&gt;
* 23.05.2012: Bugfix Frame-Erkennung beim [[IRMP_-_english#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_-_english#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_-_english#NEC_+_extended_NEC|NEC]]-Protokoll, wenn auch [[IRMP_-_english#NEC42|NEC42]]-Protokoll eingeschaltet ist.&lt;br /&gt;
* 13.02.2012: Timing von [[IRMP_-_english#SAMSUNG|SAMSUNG]]- und [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-Protokoll korrigiert&lt;br /&gt;
* 13.02.2012: [[IRMP_-_english#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_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 20.09.2011: Portierung auf ATtiny84 und ATtiny85&lt;br /&gt;
* 20.09.2011: Verbesserung von Tastenwiederholungen bei [[IRMP_-_english#RC5_+_RC5X|RC5]]&lt;br /&gt;
* 20.09.2011: Verbessertes Decodieren von [[IRMP_-_english#Biphase|Biphase]]-Protokollen&lt;br /&gt;
* 20.09.2011: Korrekturen am [[IRMP_-_english#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_-_english#SIEMENS_+_RUWIDO|SIEMENS]]-Protokoll&lt;br /&gt;
* 18.01.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 18.01.2011: Speichern der zusätzlichen Bits (&amp;gt;12) im [[IRMP_-_english#SIRCS|SIRCS]]-Protokoll in der Adresse&lt;br /&gt;
* 18.01.2011: Timing-Korrekturen für [[IRMP_-_english#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_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 29.08.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 29.08.2010: [[IRMP_-_english#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_-_english#KASEIKYO|KASEIKYO]]-Protokoll: Verbesserte Behandlung von Wiederholungs-Frames&lt;br /&gt;
* 29.08.2010: Verbesserte Unterstützung des [[IRMP_-_english#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_-_english#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_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#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_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 25.06.2010: Tastenerkennung für [[IRMP_-_english#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_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 09.06.2010: Timing für [[IRMP_-_english#DENON|DENON]]-Protokoll korrigiert&lt;br /&gt;
&lt;br /&gt;
* 02.06.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 26.05.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 26.05.2010: Bugfix Auswertung von langen Tastendrücken bei [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]-Protokoll&lt;br /&gt;
&lt;br /&gt;
* 17.05.2010: Bugfix [[IRMP_-_english#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_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 16.05.2010: Behandlung von automatischen Frame-Wiederholungen beim [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]- und [[IRMP_-_english#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_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 29.03.2010: Bugfix beim Erkennen von mehrfachen [[IRMP_-_english#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_-_english#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_-_english#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_-_english#RC5_+_RC5X|RC5]]-Frame&lt;br /&gt;
&lt;br /&gt;
* 05.03.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#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_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-Protokoll)&lt;br /&gt;
* 04.03.2010: Änderung der [[IRMP_-_english#SIRCS|SIRCS]]- und [[IRMP_-_english#KASEIKYO|KASEIKYO]]-Toleranzen&lt;br /&gt;
&lt;br /&gt;
* 02.03.2010: [[IRMP_-_english#SIRCS|SIRCS]]: Korrekte Erkennung und Unterdrückung von automatischen Frame-Wiederholungen&lt;br /&gt;
* 02.03.2010: [[IRMP_-_english#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_-_english#DENON|DENON]]-Protokoll: Wiederholungsframe grundsätzlich invertiert&lt;br /&gt;
&lt;br /&gt;
* 19.02.2010: Erkennung von [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-Protokoll-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 19.02.2010: Erkennung von [[IRMP_-_english#RC6_+_RC6A|RC6]]- und [[IRMP_-_english#DENON|DENON]]-Protokoll&lt;br /&gt;
* 19.02.2010: Verbesserung des [[IRMP_-_english#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_-_english#NEC_+_extended_NEC|NEC]]-Wiederholungssequenz&lt;br /&gt;
&lt;br /&gt;
* 12.02.2010: [[IRMP_-_english#RC5_+_RC5X|RC5]]-Protokoll-Decoder hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* 05.02.2010: Konflikt zwischen [[IRMP_-_english#SAMSUNG|SAMSUNG]]- und [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]-Protokoll beseitigt&lt;br /&gt;
&lt;br /&gt;
* 07.01.2010: Erste Version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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-Protocol ===&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-Protocol ===&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-Protocol ===&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_-_english]] 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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan-Protocol&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- and RECS80-Extended-Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5- and RC5x-Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] und [[IRSND_-_english#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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] &amp;amp; [[IRSND_-_english#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. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english]]-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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91108</id>
		<title>IRMP - english</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP_-_english&amp;diff=91108"/>
		<updated>2016-01-10T23:45:30Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This will be the english translation of the [[IRMP_-_english|IRMP]] documentation in the future.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This work is in progress yet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Project Intention:&lt;br /&gt;
Because RC5 isn&#039;t only outdated, today its already obsolete and more and more electronic devices in consumer electronics around us are used, it is time to develop an IR-decoder that can &#039;understand&#039; about 90 % of IR-remotes that are used in our daily life.&lt;br /&gt;
&lt;br /&gt;
This article indroduces &#039;IRMP&#039; as &amp;quot;Infrared-Multiprotocol-Decoder&amp;quot; in all details. The counterpart, IRSND als IR-Encoder can be found in this ... document.&lt;br /&gt;
= IRMP - Infrared Multiprotocol 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;
=== Supported µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] is already implemented on this 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_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] mittlerweile auf AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;NEU!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;NEU!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;NEU!&#039;&#039;&#039;) und Stellaris LM4F120 Launchpad von TI (ARM Cortex M4) lauffähig.&lt;br /&gt;
&lt;br /&gt;
Additionally, there is already a number of portings to various PIC microcontrollers - for CCS- and C18 compiler. IRMP is also adapted to AVR XMega, ARM STM32, STM8 (&#039;&#039;&#039;New!&#039;&#039;&#039;), ESP8266 (&#039;&#039;&#039;New!&#039;&#039;&#039;), TEENSY (&#039;&#039;&#039;New!&#039;&#039;&#039;), Stellaris LM4F120 Launchpad from TI (ARM Cortex M4) and the mbed platform(&#039;&#039;&#039;New!&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Supported IR Protocols ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#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_-_english#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#APPLE|APPLE]] || Apple&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ACP24|ACP24]] || Stiebel Eltron&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#BOSE|BOSE]] || Bose&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#DENON|DENON]] || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FAN|FAN]] || FAN, Fernsteuerung für Ventilatoren&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#FDC|FDC]] || FDC Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, z.B. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]] || Diverse europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#JVC|JVC]] || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#KATHREIN|KATHREIN]]  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LEGO|LEGO]]   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#LGAIR|LGAIR]]   || LG Air Conditioner&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MATSUSHITA|MATSUSHITA]] || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC16|NEC16]]  || JVC, Daewoo&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NEC42|NEC42]]  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#MERLIN|MERLIN]]  || MERLIN Fernbedienung (Pollin Bestellnummer: 620 185)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#NETBOX|NETBOX]]  || Netbox&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NIKON|NIKON]] || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#NUBERT|NUBERT]] || Nubert, z.B. Subwoofer System&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ORTEK|ORTEK]] || Ortek, Hama&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PANASONIC|PANASONIC]] || PANASONIC Beamer (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#PENTAX|PENTAX]] || PENTAX (&#039;&#039;&#039;NEU!&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC5_+_RC5X|RC5]] || Philips und andere europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6A]] || Philips, Kathrein und andere Hersteller, z.B. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips und andere europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCCAR|RCCAR]] || RC Car: IR Fernbedienung für Modellfahrzeuge &lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RCMM|RCMM]] || Fujitsu-Siemens z.B. Activy keyboard&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#ROOMBA|ROOMBA]] || iRobot Roomba Staubsauger&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#S100|S100]] || Ähnlich zu RC5, aber 14 statt 13 Bits und 56kHz Modulation. Hersteller unbekannt.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG32|SAMSUNG32]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG48|SAMSUNG48]] || Div. Klimaanlagen Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SAMSUNG|SAMSUNG]] || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (z.B. T-Home-Mediareceiver, MERLIN-Tastatur (Pollin))&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SPEAKER|SPEAKER]] || Lautsprecher Systeme wie z.B. X-Tensions&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TECHNICS|TECHNICS]] || Technics &#039;&#039;&#039;(NEU!)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]] || Telefunken&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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;
=== History ===&lt;br /&gt;
&lt;br /&gt;
Der auf AVR- und PIC-µCs einsetzbare Source zu [[IRMP_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] entstand im Rahmen des [[Word Clock]] Projektes.&lt;br /&gt;
&lt;br /&gt;
=== Thread in Forum ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anlass für einen eigenen [[IRMP_-_english#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 Protocols ==&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_-_english#RC5 + RC5X|RC5]] entwickelt und natürlich auch selbst benutzt. [[IRMP_-_english#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_-_english#RC5 + RC5X|RC5]] fast gar nicht mehr anzutreffen - man kann es eigentlich als &amp;quot;ausgestorben&amp;quot; abhaken. Der Nachfolger [[IRMP_-_english#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_-_english#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_-_english#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_-_english#NEC_+_extended_NEC|NEC]]-Protokoll. Fast alle Fernbedienungen im alltäglichen Einsatz verwenden bei mir den [[IRMP_-_english#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;
== Codings ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] unterstützt folgende IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance|Pulse Distance]], typ. Beispiel: [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Width|Pulse Width]], typ. Beispiel: [[IRMP_-_english#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP_-_english#Biphase|Biphase (Manchester)]], typ. Beispiel: Philips [[IRMP_-_english#RC5_+_RC5X|RC5]], [[IRMP_-_english#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Position|Pulse Position (NRZ)]], typ. Beispiel: [[IRMP_-_english#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP_-_english#Pulse Distance Width|Pulse Distance Width]], typ. Beispiel: [[IRMP_-_english#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_-_english#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_-_english#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_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] mit Minimum-/Maximumsgrenzen, um bzgl. des Zeitverhaltens tolerabel zu sein.&lt;br /&gt;
&lt;br /&gt;
== Protocol Detection ==&lt;br /&gt;
&lt;br /&gt;
Die meisten der von [[IRMP_-_english#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_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] misst also das Timing des Start-Bits und stellt dann &amp;quot;on-the-fly&amp;quot; seine Timingtabellen auf das erkannte Protokoll um, damit die nach dem Start-Bit gesandten Daten in einem Rutsch eingelesen werden können, ohne das komplette Telegramm (Frame) erst speichern zu müssen. [[IRMP_-_english#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_-_english#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_-_english#DENON|Denon]]) bzw. mehrere Start-Bits (z.B. 4 bei [[IRMP_-_english#B.26O|B&amp;amp;O]]) haben bzw. mitten im Frame ein weiteres Synchronisierungs-Bit (z.B. [[IRMP_-_english#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_-_english#NEC42|NEC42]] (42 Bit) auf [[IRMP_-_english#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), wenn vorzeitig ein zusätzliches Synchronisierungsbit erkannt wurde, oder von [[IRMP_-_english#NEC + extended NEC|NEC]]/[[IRMP_-_english#NEC42|NEC42]] (32/42 Bit) auf [[IRMP_-_english#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_-_english#Pulse Distance|Pulse Distance Coding]] und das andere ein [[IRMP_-_english#Biphase|Biphase Coding (Manchester)]] benutzt. Hier speichert [[IRMP_-_english#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.7, Stand vom 17.11.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_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] &amp;amp; [[IRSND_-_english#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_-_english#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_-_english#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_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] auf STM32-Mikroprozessoren eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== avr-gcc Optimizations ===&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;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration von [[IRMP_-_english#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_-_english#F_INTERRUPTS|Anzahl Interrupts pro Sekunde]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_SUPPORT_xxx_PROTOCOL|Unterstützte IR-Protokolle]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|Hardware-Pin zum IR-Empfänger]]&lt;br /&gt;
* [[IRMP_-_english#IRMP_LOGGING|IR-Logging]]&lt;br /&gt;
&lt;br /&gt;
=== Adjustments in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#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_-_english#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_-_english#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_-_english#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_-_english#B&amp;amp;O|B&amp;amp;O]]-Protokoll (455kHz) mehr empfangen. &lt;br /&gt;
&lt;br /&gt;
Ausserdem werden die Protokolle [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP_-_english#FDC|FDC]]/[[IRMP_-_english#RCCAR|RCCAR]] erst ab einer Scan-Frequenz von ca. 15kHz zuverlässig erkannt. Bei [[IRMP_-_english#LEGO|LEGO]] sind es sogar 20kHz. Wenn man also diese Protokolle nutzen will, muss man [[IRMP_-_english#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;
Hier der entsprechende Abschnitt für STM8-µCs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for STM8&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (SDCC_STM8)                       // use PA1 as IR input on STM8&lt;br /&gt;
#  define IRMP_PORT_LETTER                      A&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei den PIC-Prozessoren gibt es lediglich die anzupassende Konstante &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - je nach Compiler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC C18 compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_C18)                         // use RB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PORTBbits.RB4&lt;br /&gt;
&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC CCS compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_CCS)                         // use PB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PIN_B4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 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_-_english#Scannen_von_unbekannten_IR-Protokollen|Scannen von unbekannten IR-Protokollen]].&lt;br /&gt;
&lt;br /&gt;
=== IRMP Practice ===&lt;br /&gt;
&lt;br /&gt;
Die von [[IRMP_-_english#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_-_english#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;
#define IRMP_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)&lt;br /&gt;
#define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera&lt;br /&gt;
#define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit&lt;br /&gt;
#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits&lt;br /&gt;
#define IRMP_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner&lt;br /&gt;
#define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits&lt;br /&gt;
&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;Debouncing&amp;quot; of Keys ===&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;
== Mode of Operation ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP_-_english#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_-_english#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;
== Scanning of unknown IR Protocols ==&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_-_english#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP_-_english#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_-_english#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_-_english#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 under Linux and Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&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_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP_-_english#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;
=== Starting 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;
=== Normal Output ===&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;
=== Output Lists ===&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;
=== Analysing ===&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;
=== Verbose Output ===&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;
=== Starting under Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#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;
=== Long Outputs ===&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;
== Remote Controls ==&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_-_english#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_-_english#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP_-_english#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_-_english#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_-_english#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;
== Cameras ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Irmp-pentax.png|miniatur|Pentax-Protokoll]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] unterstützt zunehmend auch die Fernsteuerung von Kameras, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP_-_english#PENTAX|PENTAX]]&lt;br /&gt;
* [[IRMP_-_english#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_-_english#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_-_english#PENTAX|PENTAX]]-Protokoll vorgesehen ist, sollte man am diese beim Senden mittels [[IRSND_-_english]] 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 Keyboards ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP_-_english#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_-_english#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_-_english#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_-_english#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;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== IR Protocols in Detail ==&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protocols ===&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_-_english#NEC-Protokoll|NEC + extended NEC]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten NEC || 8 Adress-Bits + 8 invertierte Adress-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten ext. NEC || 16 Adress-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 9000µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 560µs Puls,  560µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 560µs Puls, 1690µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 560µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || 9000µs Puls, 2250µs Pause, 560µs Puls, ~100ms Pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 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_-_english#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_-_english#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_-_english#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_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 560µs Puls,  560µs Pause (identisch mit [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 560µs Puls, 1690µs Pause (identisch mit [[IRMP_-_english#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 560µs Puls (identisch mit [[IRMP_-_english#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_-_english#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_-_english#SAMSUNG-Protokoll|SAMSUNG]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 16 Daten(1)-Bits + 1 Sync-Bit + 20 Daten(2)-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten(1) || 16 Adress-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten(2) || 4 ID-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 4500µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 550µs Puls,  550µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 550µs Puls, 1650µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Sync-Bit || 550µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 550µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG32 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG32&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Adress-Bits + 16 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 4500µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 550µs Puls,  550µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 550µs Puls, 1650µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 550µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || Wiederholung nach ca. 47msec&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG48&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 48 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Adress-Bits + 32 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Kommando || 8 Bits + 8 invertierte Bits + 8 Bits + 8 invertierte Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 4500µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 550µs Puls,  550µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 550µs Puls, 1650µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 550µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || eine nach ca. 5 msec&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || dritter, fünfter, siebter usw. identischer Frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== MATSUSHITA ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP_-_english#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_-_english#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_-_english#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_-_english#KASEIKYO-Protokoll (auch &amp;quot;Japan-Protokoll&amp;quot;)|KASEIKYO]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 48 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Hersteller-Bits + 4 Parity-Bits + 4 Genre1-Bits + 4 Genre2-Bits + 10 Kommando-Bits + 2 ID-Bits + 8 Parity-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 3380µs Puls, 1690µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 423µs Puls,  423µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 423µs Puls, 1269µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 423µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames nach ca. 80ms Pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RECS80 ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP_-_english#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_-_english#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_-_english#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_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || siehe [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || siehe [[IRMP_-_english#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || siehe [[IRMP_-_english#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_-_english#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 Start-Bits + 16 Daten-Bits + 1 Trailer-Bit + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 0 Adress-Bits + 16 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 1 || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 2 || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 3 || 200µs Puls, 15425µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 4 || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 200µs Puls, 9175µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| R-Bit || 200µs Puls, 6050µs Pause, wiederholt das letzte Bit (repetition)&lt;br /&gt;
|-&lt;br /&gt;
| Trailer-Bit || 200µs Puls, 12300µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 200µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FDC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;FDC&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 40 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 8 Adress-Bits + 12 x 0-Bits + 4 Press/Release-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2085µs Puls, 966µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 300µs Puls,  220µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 300µs Puls, 715µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 300µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Drücken || Press/Release-Bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Loslassen || Press/Release-Bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || Wiederholung nach Pause von 60ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NIKON ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;NIKON&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 2 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 2 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2200µs Puls, 27100µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 500µs Puls,  1500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 500µs Puls, 3500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 500µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PANASONIC ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PANASONIC&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 56 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 24 Bits (010000000000010000000001) + 16 Adress-Bits + 16 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 3600µs Puls, 1600µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 565µs Puls,  316µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 565µs Puls, 1140µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 565µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PENTAX ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;PENTAX&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 6 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 6 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2200µs Puls, 27100µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 1000µs Puls,  1000µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 1000µs Puls, 3000µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 1000µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== KATHREIN ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;KATHREIN&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 11 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 4 Adress-Bits + 7 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 210µs Puls, 6218µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 210µs Puls,  1400µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 210µs Puls, 3000µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 210µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || nach 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== LEGO ====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP_-_english#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_-_english#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 Protocols ===&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_-_english#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 Protocols ===&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_-_english#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 Protocols ===&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_-_english#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_-_english#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_-_english#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_-_english#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 History ==&lt;br /&gt;
&lt;br /&gt;
Änderungen IRMP in 2.9.x:&lt;br /&gt;
&lt;br /&gt;
Version 2.9.7:&lt;br /&gt;
&lt;br /&gt;
* 17.11.2015: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#PANASONIC|PANASONIC (Beamer)]]&lt;br /&gt;
* 17.11.2015: Portierung auf ESP8266&lt;br /&gt;
* 17.11.2015: Portierung auf Teensy (3.x)&lt;br /&gt;
&lt;br /&gt;
Version 2.9.6:&lt;br /&gt;
&lt;br /&gt;
* 10.11.2015: Unterstützung für STM8 Mikrcontroller&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_-_english#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_-_english#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_-_english#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_-_english#MERLIN|MERLIN]]&lt;br /&gt;
* 27.05.2015: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#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_-_english#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_-_english#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_-_english#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_-_english#LGAIR|LGAIR]]&lt;br /&gt;
* 30.05.2014: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#SPEAKER|SPEAKER]]&lt;br /&gt;
* 30.05.2014: Timings für [[IRMP_-_english#SAMSUNG|SAMSUNG]]-Protokolle optimiert&lt;br /&gt;
* 20.02.2014: Fehlerhaftes Decodieren des [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]]-Protokolls korrigiert&lt;br /&gt;
* 19.02.2014: &#039;&#039;&#039;Neue Protokolle&#039;&#039;&#039;: [[IRMP_-_english#RCMM|RCMM32, RCMM24 und RCMM12]]&lt;br /&gt;
* 17.09.2014: Timing für [[IRMP_-_english#ROOMBA|ROOMBA]] verbessert&lt;br /&gt;
* 09.04.2013: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#ROOMBA|ROOMBA]]&lt;br /&gt;
* 09.04.2013: Verbesserte Frame-Erkennung für [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 19.03.2013: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 19.03.2013: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 12.03.2013: Geänderte Timing-Toleranzen für [[IRMP_-_english#RECS80|RECS80]]- und  [[IRMP_-_english#RECS80EXT|RECS80EXT]]-Protokoll&lt;br /&gt;
* 21.01.2013: Korrekturen Erkennung des Wiederholungsframes beim [[IRMP_-_english#DENON|DENON]]-Protokoll&lt;br /&gt;
* 17.01.2013: Korrekturen Frame-Erkennung beim [[IRMP_-_english#DENON|DENON]]-Protokoll&lt;br /&gt;
* 11.12.2012: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 07.12.2012: Verbesserte Erkennung von [[IRMP_-_english#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_-_english#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_-_english#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_-_english#NEC_+_extended_NEC|NEC]] und [[IRMP_-_english#NEC42|NEC42]] aktiviert&lt;br /&gt;
* 23.05.2012: Portierung auf ARM STM32&lt;br /&gt;
* 23.05.2012: Bugfix Frame-Erkennung beim [[IRMP_-_english#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_-_english#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_-_english#NEC_+_extended_NEC|NEC]]-Protokoll, wenn auch [[IRMP_-_english#NEC42|NEC42]]-Protokoll eingeschaltet ist.&lt;br /&gt;
* 13.02.2012: Timing von [[IRMP_-_english#SAMSUNG|SAMSUNG]]- und [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]-Protokoll korrigiert&lt;br /&gt;
* 13.02.2012: [[IRMP_-_english#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_-_english#KATHREIN|KATHREIN]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#THOMSON|THOMSON]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#LEGO|LEGO]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#NEC16|NEC16]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#NEC42|NEC42]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#NETBOX|NETBOX]]&lt;br /&gt;
* 20.09.2011: Portierung auf ATtiny84 und ATtiny85&lt;br /&gt;
* 20.09.2011: Verbesserung von Tastenwiederholungen bei [[IRMP_-_english#RC5_+_RC5X|RC5]]&lt;br /&gt;
* 20.09.2011: Verbessertes Decodieren von [[IRMP_-_english#Biphase|Biphase]]-Protokollen&lt;br /&gt;
* 20.09.2011: Korrekturen am [[IRMP_-_english#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_-_english#SIEMENS_+_RUWIDO|SIEMENS]]-Protokoll&lt;br /&gt;
* 18.01.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#NIKON|NIKON]]&lt;br /&gt;
* 18.01.2011: Speichern der zusätzlichen Bits (&amp;gt;12) im [[IRMP_-_english#SIRCS|SIRCS]]-Protokoll in der Adresse&lt;br /&gt;
* 18.01.2011: Timing-Korrekturen für [[IRMP_-_english#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_-_english#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 29.08.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#JVC|JVC]]&lt;br /&gt;
* 29.08.2010: [[IRMP_-_english#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_-_english#KASEIKYO|KASEIKYO]]-Protokoll: Verbesserte Behandlung von Wiederholungs-Frames&lt;br /&gt;
* 29.08.2010: Verbesserte Unterstützung des [[IRMP_-_english#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_-_english#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_-_english#RECS80|RECS80]], [[IRMP_-_english#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP_-_english#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_-_english#RCCAR|RCCAR]]&lt;br /&gt;
* 25.06.2010: Tastenerkennung für [[IRMP_-_english#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_-_english#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 09.06.2010: Timing für [[IRMP_-_english#DENON|DENON]]-Protokoll korrigiert&lt;br /&gt;
&lt;br /&gt;
* 02.06.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 26.05.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 26.05.2010: Bugfix Auswertung von langen Tastendrücken bei [[IRMP_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]-Protokoll&lt;br /&gt;
&lt;br /&gt;
* 17.05.2010: Bugfix [[IRMP_-_english#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_-_english#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 16.05.2010: Behandlung von automatischen Frame-Wiederholungen beim [[IRMP_-_english#SIRCS|SIRCS]]-, [[IRMP_-_english#SAMSUNG32|SAMSUNG32]]- und [[IRMP_-_english#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_-_english#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 29.03.2010: Bugfix beim Erkennen von mehrfachen [[IRMP_-_english#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_-_english#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_-_english#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_-_english#RC5_+_RC5X|RC5]]-Frame&lt;br /&gt;
&lt;br /&gt;
* 05.03.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP_-_english#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_-_english#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP_-_english#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-Protokoll)&lt;br /&gt;
* 04.03.2010: Änderung der [[IRMP_-_english#SIRCS|SIRCS]]- und [[IRMP_-_english#KASEIKYO|KASEIKYO]]-Toleranzen&lt;br /&gt;
&lt;br /&gt;
* 02.03.2010: [[IRMP_-_english#SIRCS|SIRCS]]: Korrekte Erkennung und Unterdrückung von automatischen Frame-Wiederholungen&lt;br /&gt;
* 02.03.2010: [[IRMP_-_english#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_-_english#DENON|DENON]]-Protokoll: Wiederholungsframe grundsätzlich invertiert&lt;br /&gt;
&lt;br /&gt;
* 19.02.2010: Erkennung von [[IRMP_-_english#NEC_+_extended_NEC|NEC]]-Protokoll-Varianten, z.&amp;amp;nbsp;B. [[IRMP_-_english#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 19.02.2010: Erkennung von [[IRMP_-_english#RC6_+_RC6A|RC6]]- und [[IRMP_-_english#DENON|DENON]]-Protokoll&lt;br /&gt;
* 19.02.2010: Verbesserung des [[IRMP_-_english#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_-_english#NEC_+_extended_NEC|NEC]]-Wiederholungssequenz&lt;br /&gt;
&lt;br /&gt;
* 12.02.2010: [[IRMP_-_english#RC5_+_RC5X|RC5]]-Protokoll-Decoder hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* 05.02.2010: Konflikt zwischen [[IRMP_-_english#SAMSUNG|SAMSUNG]]- und [[IRMP_-_english#MATSUSHITA|MATSUSHITA]]-Protokoll beseitigt&lt;br /&gt;
&lt;br /&gt;
* 07.01.2010: Erste Version&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
&lt;br /&gt;
=== IR Abstract ===&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-Protocol ===&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-Protocol ===&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-Protocol ===&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_-_english]] 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 Protocol (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 Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO Protocol (&amp;quot;Japan-Protocol&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- and RECS80-Extended-Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5- and RC5x-Protocol ===&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 Protocol ===&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 and RC6A Protocol ===&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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 and 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 Protocol ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Other Protocols ===&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 on Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP_-_english#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;
== Other Artikels ==&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 Projects ==&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_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] und [[IRSND_-_english#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 with 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 controlled 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;
=== Adaptive IR Remote Control ===&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 Ceiling Lamp ===&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;
=== Cinema Control ===&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_-_english#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] &amp;amp; [[IRSND_-_english#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. Vielen Dank auch an Wolfgang S. für die Portierung auf ESP8266, Achill Hasler für die Portierung auf Teensy. Und zuletzt noch Dank an Axel Schwenke für den Port auf STM8.&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den [[IRSND_-_english]] eingebaut hat. Danke auch hier an Ulrich v.d. Kammer für die [[IRSND_-_english]]-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>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso&amp;diff=80627</id>
		<title>LPC1xxx Entwicklungskit LPCXpresso</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso&amp;diff=80627"/>
		<updated>2014-01-04T14:44:42Z</updated>

		<summary type="html">&lt;p&gt;Jojos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:LPCXpresso_board_NXP.jpg|thumb|right|550px|LPCXpresso ©NXP.com]]&lt;br /&gt;
==LPCXpresso ==&lt;br /&gt;
&lt;br /&gt;
NXP hat das hier beschriebene Entwicklungskit zusammen mit Embedded Artists entwickelt. Dazu wurde von Code-Red - im Auftrag von NXP - eine passende Entwicklungsumgebung erstellt, die kostenlos erhältlich ist. Hier eine &#039;&#039;&#039;[http://ics.nxp.com/support/documents/microcontrollers/pdf/lpcxpresso.getting.started.pdf erste Einführung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das preiswerte Board (ca. 25€) ist z.B. hier erhältlich &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Hier die &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf Dokumentation]&#039;&#039;&#039; (PDF) von NXP.&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
&lt;br /&gt;
===Aufbau des Boards===&lt;br /&gt;
&lt;br /&gt;
Das Board ist als teilbare Platine ausgeführt. Der obere Teil - der LPC-Link - hat sowohl die Funktion eines USB-Programmers, als auch die eines USB-Debuggers. &lt;br /&gt;
&lt;br /&gt;
Der untere Teil ist ein reines Eval-Board, das - je nach Wunsch - mit einem LPC1114, LPC1343, oder LPC1769 ausgestattet ist.&lt;br /&gt;
&lt;br /&gt;
LPC-Link und Eval-Buard können an der markierten Stelle zwischen dem 2x8-Poligen Stecker getrennt, und separat eingesetzt werden. Über einen 8x Jumper ist jederzeit wieder eine Verbindung möglich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Der LPC-Link===&lt;br /&gt;
[[Bild:LPC_Xpresso_lpc-link_NXP.jpg|thumb|right|550px|LPC-Link ©NXP.com]]&lt;br /&gt;
Der LPC-Link enthält den Programmer und Debugger. Die PCB enthält einen LPC3154, eine USB-Schnittstelle, ein JTAG/SWD-Interface und ein paar LEDs.  &lt;br /&gt;
Das Programmier-Interface ist sowohl im 2,54mm Raster (8-polige Lochreihe an der schmalen Seite zum Target, &amp;quot;J4&amp;quot;), als auch im 1,27mm Raster (2x5-polig, als SMD-Stiftleiste &amp;quot;J5&amp;quot;) vorhanden. Pin 1 ist jeweils deutlich gekennzeichnet.&lt;br /&gt;
Hier die Pinbelegung:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Steckerbelegung&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Pin Nummer ||J5 (2x5-polig) || J4 (1x8-polig)&lt;br /&gt;
|-&lt;br /&gt;
| Pin  1|| V_Target || V_Target&lt;br /&gt;
|-&lt;br /&gt;
| Pin  2|| SWDIO/TMS|| SWDIO/TMS&lt;br /&gt;
|-&lt;br /&gt;
| Pin  3|| GND|| SWDCLK/TCLK&lt;br /&gt;
|-&lt;br /&gt;
| Pin  4|| SWDCLK/TCLK|| SWO/TDO&lt;br /&gt;
|-&lt;br /&gt;
| Pin  5|| GND|| nc/TDI&lt;br /&gt;
|-&lt;br /&gt;
| Pin  6|| SWO/TDO|| nRESET&lt;br /&gt;
|-&lt;br /&gt;
| Pin  7|| nc|| EXT Power&lt;br /&gt;
|-&lt;br /&gt;
| Pin  8|| nc/TDI|| GND&lt;br /&gt;
|-&lt;br /&gt;
| Pin  9|| GND|| -&lt;br /&gt;
|-&lt;br /&gt;
| Pin 10|| nRESET|| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Achtung: die Pinnummer für J4 entspricht dem GETRENNTEN Zustand der PCB. Die Nummerierung auf der Platine beginnt aber bei 1, und endet bei 15 (siehe auch Foto rechts).&lt;br /&gt;
&lt;br /&gt;
===Eine passende Entwicklungsumgebung===&lt;br /&gt;
Code-Red hat einen speziell angepaßten C-Compiler entwickelt. &lt;br /&gt;
Die IDE basiert auf Eclipse und ist ohne Registrierung bis 8kB freigeschaltet. Nach einer kostenlosen Registrierung erhält man eine eingeschränkte Lizenz die auch für den kommerziellen Einsatz zugelassen ist. Aktuell ist die Version 6.x, die Freie Version hat den vollen Funktionsumfang, ist aber auf Codegröße von 256 kB limitiert. In älteren Versionen gab es keinen C++ Support, keine Library Projekte und eine eingeschränkte CPU Auswahl, das wurde in der 6.x aufgehoben. Das Codelimit kann durch ein kostenpflichtiges Upgrade auf die &#039;Pro&#039; Version aufgehoben werden.&lt;br /&gt;
Hier die &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;.&lt;br /&gt;
Weitere Compiler sind verfügbar, hier eine &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/LPC1xxx#Entwicklungsumgebungen Übersicht]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [[LPC1xxx]]&lt;br /&gt;
* [[Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red]]&lt;br /&gt;
* [[Codebase_f%C3%BCr_LPC1xxx]]&lt;br /&gt;
&lt;br /&gt;
Suche im Forum nach&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=LPC12* LPC12xx]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=LPC13* LPC13xx]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=LPC17* LPC17xx]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=LPC18* LPC18xx]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.elpro.org/shop/shop.php?p=32BitMicrocontroller elpro]&lt;br /&gt;
* [http://darisusgmbh.de/shop/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 Darisus]&lt;br /&gt;
* [http://www.hbe-shop.de HBE] &lt;br /&gt;
* [http://www.tme.eu/de/katalog#cleanParameters%3D1%26searchClick%3D1%26search%3DLPC1%26bf_szukaj%3D+ TME]&lt;br /&gt;
* [http://de.mouser.com/_/?Keyword=LPC1&amp;amp;Ns=Pricing|0&amp;amp;FS=True Mouser]&lt;br /&gt;
* [http://www.soselectronic.eu/?searchstring=LPC1&amp;amp;str=378 SOS]&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
* [http://www.watterott.com/index.php?page=search&amp;amp;page_action=query&amp;amp;desc=off&amp;amp;sdesc=on&amp;amp;keywords=LPCXpresso Watterott (24€ inclusive JTAG-Programmiergerät UND JTAG Debugger für kostenlose &amp;quot;LPCWare&amp;quot; Entwicklungsplattform)], dazu hier die &#039;&#039;&#039;[http://www.mikrocontroller.net/wikisoftware/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso Beschreibung]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.lpctools.com/evaluationboardskitsforlpc17xx.aspx LPC-Tools]&lt;br /&gt;
* [http://thinkembedded.ch/NXP:::25.html thinkembedded.ch] div. Olimex NXP Boards&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungsplattformen ===&lt;br /&gt;
* [http://www.lpcware.com/lpcxpresso/home LPDXpresso Download (Kostenlos mit Debugger)]&lt;br /&gt;
* [http://www.lpcware.com LPCXpresso Homepage]&lt;br /&gt;
* [http://support.code-red-tech.com/CodeRedWiki/WikiHome CR-WIKI]&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp ARM/Keil MDK-ARM]&lt;br /&gt;
* IAR EWARM&lt;br /&gt;
* [http://www.rowley.co.uk/arm/index.htm Rowley Crossworks]&lt;br /&gt;
* Green Hills Software &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:LPC1x]]&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=65414</id>
		<title>LPC-Mikrocontroller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=65414"/>
		<updated>2012-04-01T13:27:51Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* Weblinks, Foren, Communities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:overview_Sep2011.png|thumb|right|850px|Überblick über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
[[Bild:positioning_NXPSep2011.gif|thumb|right|850px|Vergleich über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
Die LPC1000-Familie von NXP basiert auf 32-Bit Cortex-Kernen von ARM und arbeitet mit bis zu 150MHz. Die LPC11xx-Serie basiert auf dem Cortex-M0-Kern, die Serien LPC13xx, 17xx und 18xx auf dem Cortex-M3. Mikrocontroller aus der LPC13xx-Serie mit 72MHz und der LPC17xx-Serie mit 100MHz (120MHz) sind inzwischen auch für Privatnutzer zu Preisen erhältlich, die mit denen von 8-Bit-Mikrocontrollern vergleichbar sind. Eine Auflistung der verschiedenen Typen findet sich im Dokument &#039;&#039;&#039;[http://www.nxp.com/documents/line_card/line_card.pdf &amp;quot;The ARM selection guide&amp;quot; (PDF)]&#039;&#039;&#039; von NXP (Seite 2f). &lt;br /&gt;
&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039; und diese &#039;&#039;&#039;[http://www.mikrocontroller.net/wikisoftware/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso&amp;amp;action=edit Beschreibung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Infos + User-Manuals==&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC11xx (Cortex-M0) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc11xx/ LPC11xx-Serie]&#039;&#039;&#039; (3,3V) bietet viele Möglichkeiten&lt;br /&gt;
* Der LPC1100L ist derzeit laut NXP (Sep2011) der preisgünstigste ARM auf dem Markt. Der 32Bit ARM mit einer Performance von ca. 45DMIPS @50MHZ benötigt bei dieser Taktfrequenz nur etwa 10mA. (Details siehe NXP-Seite)&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features :&lt;br /&gt;
** LPC1100 Serie: • I2C, SSP, UART, GPIO, • Timers and watch dog timer, • 10-bit ADC, • Flash/SRAM memory, • Weitere Funktionen, siehe &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/LPC1xxx#Features_eines_LPC11xx 2.3 Features]&#039;&#039;&#039;&lt;br /&gt;
** LPC1100L Serie zusätzlich zu LPC1100: • Power Profile mit lower power consumption in Active- und Sleep-mode, • Interne pull-ups auf VDD level, • Programmierbarer pseudo open-drain mode für GPIO Pins, • WWDT mit Clock Source Lock.&lt;br /&gt;
**LPC11C00 Serie zusätzlich zu LPC1100: • CAN controller, • On-chip CAN Treiber, • On-chip CAN Transceiver (LPC11C2x), • WDT (not windowed) mit Clock Source Lock .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10398.pdf User Manual der LPC11-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC12xx (Cortex-M0) ===&lt;br /&gt;
* Die Low Power &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc12xx/ LPC12xx-Serie]&#039;&#039;&#039; (3,3V) ist laut NXP (Sep2011) ein Cortex-M0 mit 32 bis 128kB Flash, einem 45 CoreMark™ Benchmark-Score bei 30MHz, 2 bis 8kB SRAM, und einem internen 1% genauen 12MHz Oscillator.&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features: fMAX von 30MHz, 1 10-Bit  ADC mit 8 Kanälen, 2 Comparatoren, 2 UARTs, 1 SSP/SPI, 1 I2C, DMA Controller, CRC Engine, 1 32-Bit, 5 Timer (16- und 32-Bit, + RTC), 13 PWM Kanäle, bis zu 55 GPIOs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10441.pdf User Manual der LPC12xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC13xx (Cortex-M3) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc13xx/ LPC13xx-Serie]&#039;&#039;&#039; (3,3V) bietet im LQFP 48 Gehäuse 8..32k Flash, 2..8k SRAM, 5 Timer (mit WD), 11 PWM, 1 UART, 1IIC, 1USB, 1..2 SPI, einen 8-Kanal/10Bit AD-Wandler und eine Taktfrequenz von max. 72MHz. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10375.pdf User Manual der LPC13xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC17xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc17xx/ LPC17xx-Serie]&#039;&#039;&#039; hingegen enthält eine weit größere Peripherie in einem LQFP80 bzw. LQFP100 Package.&lt;br /&gt;
32..512k Flash, 8..64k SRAM, 6 Timer (mit WD), 6 zusätzliche PWM-Einheiten, teilweise Ethernet, meist USB, 4 UART, 2..3IIC, 1..2 CAN, 1 SPI, 2 SSP/SPI einen 6..8-Kanal/12Bit AD-Wandler, einen 10Bit DAC, Motor-Control-Einheiten, einen Encoder-Eingang und eine Taktfrequenz von max. 100MHz(120MHz) und vieles mehr. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10360.pdf User Manual der LPC17xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC18xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc18xx/ LPC18xx-Serie]&#039;&#039;&#039; stellt DIE &amp;quot;High-Performance&amp;quot; Controller aus der Cortex-M3-Serie. Die Taktfrequenz geht bis 150MHz, die Controller enthalten große dual-Bank Flash Speicher bis zu 1MB, ein großes On-Chip SRAM mit bis zu 200KB, zusätzliche Peripherie wie z.B. SPI Flash Interface (SPIFI) und State Configurable Timer (SCT), 2x High Speed USB (1x mit On-Chip HS PHY) und eine MPU.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://ics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc18xx.pdf User Manual der LPC18xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features: &#039;&#039;&#039;[http://ics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc18xx.pdf LPC18xx Flyer von NXP]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungskits ===&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Kostenlose Entwicklungsumgebung für ALLE hier genannten Controller ===&lt;br /&gt;
Für die ganze Prozessorfamilie ist eine &amp;lt;u&amp;gt;kostenlose&amp;lt;/u&amp;gt; Entwicklungsumgebung  erhältlich. Informationen unter &#039;&#039;&#039;[http://www.code-red-tech.com/lpcxpresso.php  code-red]&#039;&#039;&#039;: Die auf Eclipse basierende Entwicklungsumgebung ist nach der Installation bis 8k freigeschaltet und nach einer einfachen und kostenlosen Registrierung für 128kB. Die IDE ist auch für &#039;&#039;&#039;[http://support.code-red-tech.com/CodeRedWiki/redlib_v2_notes Linux]&#039;&#039;&#039; verfügbar.&lt;br /&gt;
&lt;br /&gt;
Hier die &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== LPC11xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC11xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
[[Bild:block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-N0, ©NXP.com]]&lt;br /&gt;
=== Blockdiagramm der LPC11xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC11xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 50 MHz. &lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32 kB (LPC1114/LPC11C14), 24 kB (LPC1113), 16 kB (LPC1112/LPC11C12), or 8 kB (LPC1111) on-chip flash programming memory. &lt;br /&gt;
** 8 kB, 4 kB, or 2 kB SRAM.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages and LPC11C22/C24.&lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two I2C-bus pins in Fast-mode Plus.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** Two SPI controllers with SSP features and with FIFO and multi-protocol capabilities (second SPI on LQFP48 and PLCC44 packages only).&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
** C_CAN controller (LPC11Cxx only). On-chip CAN and CANopen drivers included.&lt;br /&gt;
** On-chip, high-speed CAN transceiver (parts LPC11C22/C24 only).&lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. (On LPC111x/102/202/302 only.)&lt;br /&gt;
** Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 13 of the functional pins.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available as 48-pin LQFP package, 33-pin HVQFN package, and 44-pin PLCC package.&lt;br /&gt;
&lt;br /&gt;
== LPC12xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC12xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
[[Bild:block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC12xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC12xx ===&lt;br /&gt;
&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 45 MHz (one wait state from flash) or 30 MHz (zero wait states from flash). The LPC122x have a high score of over 45 in CoreMark CPU performance benchmark testing, equivalent to 1.51/MHz.&lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug (SWD).&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory&lt;br /&gt;
** Up to 8 kB SRAM.&lt;br /&gt;
** Up to 128 kB on-chip flash programming memory. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Includes ROM-based 32-bit integer division routines.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz Internal RC (IRC) oscillator trimmed to 1 % accuracy that can optionally be used as a system clock.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, main clock, and Watchdog clock.&lt;br /&gt;
** Real-Time Clock (RTC).&lt;br /&gt;
* Digital peripherals&lt;br /&gt;
** Micro DMA controller with 21 channels.&lt;br /&gt;
** CRC engine.&lt;br /&gt;
** Two UARTs with fractional baud rate generation and internal FIFO. One UART with RS-485 and modem support and one standard UART with IrDA.&lt;br /&gt;
** SSP/SPI controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. I2C-bus pins have programmable glitch filter.&lt;br /&gt;
** Up to 55 General Purpose I/O (GPIO) pins with programmable pull-up resistor, open-drain mode, programmable digital input glitch filter, and programmable input inverter. &lt;br /&gt;
** Programmable output drive on all GPIO pins. Four pins support high-current output drivers.&lt;br /&gt;
** All GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** Four general purpose counter/timers with four capture inputs and four match outputs (32-bit timers) or two capture inputs and two match outputs (16-bit timers). &lt;br /&gt;
** Windowed WatchDog Timer (WWDT).&lt;br /&gt;
* Analog peripherals&lt;br /&gt;
** One 8-channel, 10-bit ADC.&lt;br /&gt;
** Two highly flexible analog comparators. Comparator outputs can be programmed to trigger a timer match signal or can be used to emulate 555 timer behavior.&lt;br /&gt;
* Power&lt;br /&gt;
** Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Deep-sleep mode via start logic using 12 port pins.&lt;br /&gt;
** Processor wake-up from Deep-power down and Deep-sleep modes via the RTC.&lt;br /&gt;
** Brownout detect with three separate thresholds each for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
** Integrated PMU (Power Management Unit).&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* 3.3 V power supply.&lt;br /&gt;
* Available as 64-pin and 48-pin LQFP package.&lt;br /&gt;
&lt;br /&gt;
== LPC13xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC13xx ===&lt;br /&gt;
[[Bild:LPC13xx_Selection_Guide_Sep2011.png|thumb|right|600px|Selection Guide zur LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1313 mit 32k-Flash mit 72MHz im LQFP 48 Gehäuse. Der LPC1313 ist bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; erhältlich für 3€57 (Juli/2011), oder digikey für2€70.  (Für den &amp;quot;/1&amp;quot; suche ich noch eine Bezugsquelle.) Entwicklungskit INCLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1343-LPCXpresso-Board Watterott]&#039;&#039;&#039; für 23€80 (Juli/2011)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC13xx Block Diagram Sep2011.png|thumb|right|680px|Blockdiagramm der LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
=== Blockdiagram der LPC13xx Familie ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1313 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 72 MHz.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 32 kB on-chip flash programming memory.&lt;br /&gt;
* 8 kB SRAM.&lt;br /&gt;
* In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* UART with fractional baud rate generation, modem, internal FIFO, and RS-485/EIA-485 support.&lt;br /&gt;
* SSP controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
* Additional SSP controller on LPC1313FBD48/01.&lt;br /&gt;
* I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode.&lt;br /&gt;
* Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors.&lt;br /&gt;
* Four general purpose counter/timers with a total of four capture inputs and 13 match outputs.&lt;br /&gt;
* Programmable Watchdog Timer (WDT) &lt;br /&gt;
* System tick timer.&lt;br /&gt;
* Serial Wire Debug and Serial Wire Trace port.&lt;br /&gt;
* High-current output driver (20 mA) on one pin.&lt;br /&gt;
* High-current sink drivers (20 mA) on two I2C-bus pins in Fast-mode Plus.&lt;br /&gt;
* Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
* Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
* Single power supply (2.0 V to 3.6 V).&lt;br /&gt;
* 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
* Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, or the watchdog clock.&lt;br /&gt;
* Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 40 of the functional pins.&lt;br /&gt;
* Brownout detect with four separate thresholds for interrupt and one thresholds for forced reset.&lt;br /&gt;
* Power-On Reset (POR).&lt;br /&gt;
* Integrated oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 12 MHz internal RC oscillator trimmed to 1 % accuracy over the entire temperature and voltage range that can optionally be used as a system clock.&lt;br /&gt;
* Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz. System PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
* Code Read Protection (CRP) with different security levels.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Available as 48-pin LQFP package and 33-pin HVQFN package.&lt;br /&gt;
&lt;br /&gt;
== LPC17xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC17xx ===&lt;br /&gt;
[[Bild:LPC17xx_Selection_Guide_Sep2011.png|thumb|right|1200px|Selection Guide zur LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1754 mit 128K Flash im LQFP80, der bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; für 7€74 (Juli/2011) erhältlich ist,[den LPC1751 (32k/8k) schon für 5€95] und bei Digikey für 6€35, den LPC1764FBD100 bei &#039;&#039;&#039;[http://www.tme.eu/de TME]&#039;&#039;&#039;    für 7€ Entwicklungskit INCLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1769-LPCXpresso Watterott]&#039;&#039;&#039; für 23€80 (Juli/2011)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC177x_178x Block Diagram Sep2011.png|thumb|right|680px|Blockdiagramm der LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
=== Blockdiagram der LPC17xx Familie ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1754 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 100 MHz &lt;br /&gt;
* A Memory Protection Unit (MPU) supporting eight regions is included.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 128 kB on-chip flash program memory with In-System Programming (ISP) and In-Application Programming (IAP) capabilities. &lt;br /&gt;
* 32 kB of SRAM on the CPU with local code/data bus for high-performance CPU access.&lt;br /&gt;
* Eight channel General Purpose DMA controller &lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
* USB 2.0 full-speed controller that can be configured for either device, Host, or OTG operation with an on-chip PHY for device and Host functions &lt;br /&gt;
* Four UARTs with fractional baud rate generation, internal FIFO, IrDA, and DMA, Einer mit Modem I/Os und RS485 Support&lt;br /&gt;
* 1 CAN controller.&lt;br /&gt;
* 2 SSP controllers &lt;br /&gt;
* 1 SPI controller &lt;br /&gt;
* 2 I2C-bus interfaces with data rates of 1Mbit/s,&lt;br /&gt;
* I2S (Inter-IC Sound) &lt;br /&gt;
* 52  General Purpose I/O (GPIO) pins Any pin of ports 0 and 2 can be used to generate an interrupt.&lt;br /&gt;
* 8x 12-bit Analog-to-Digital Converter (ADC) conversion rates up to 200 kHz&lt;br /&gt;
* 1x 10-bit Digital-to-Analog Converter (DAC) &lt;br /&gt;
* Four general purpose timers/counters, with a total of eight capture inputs and ten compare outputs. &lt;br /&gt;
* One motor control PWM with support for three-phase motor control.&lt;br /&gt;
* Quadrature encoder interface that can monitor one external quadrature encoder.&lt;br /&gt;
* One standard PWM/timer block with external count input.&lt;br /&gt;
* Real-Time Clock (RTC) with a separate power domain including 20 bytes of battery-powered backup registers,  An RTC interrupt can wake up the CPU from any reduced power mode.&lt;br /&gt;
* Watchdog Timer (WDT). &lt;br /&gt;
* Cortex-M3 system tick timer&lt;br /&gt;
* Repetitive interrupt timer &lt;br /&gt;
* Standard JTAG test/debug interface as well as Serial Wire Debug and Serial Wire Trace Port options.&lt;br /&gt;
* Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
* Single 3.3 V power supply (2.4 V to 3.6 V). &lt;br /&gt;
* Four external interrupt inputs configurable as edge/level sensitive. All pins on PORT0 and PORT2 can be used as edge sensitive interrupt sources.&lt;br /&gt;
* Non-maskable Interrupt (NMI) input.&lt;br /&gt;
* Wakeup Interrupt Controller (WIC) &lt;br /&gt;
* Each peripheral has its own clock divider for further power savings.&lt;br /&gt;
* Brownout detect with separate threshold for interrupt and forced reset.&lt;br /&gt;
* On-chip Power-On Reset (POR).&lt;br /&gt;
* On-chip crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 4 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
* An on-chip PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the main oscillator, the internal RC oscillator, or the RTC oscillator.&lt;br /&gt;
* Available as 80-pin LQFP (12 x 12 x 1.4 mm) packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LPC18xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC18xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:block.diagram_NXP18xx Sep2011.gif|thumb|right|680px|Blockdiagramm der LPC18xx Familie, ©NXP.com]]&lt;br /&gt;
=== Blockdiagramm der LPC18xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC18xx ===&lt;br /&gt;
DRAFT!&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M3 processor, running at frequencies of up to 150 MHz.&lt;br /&gt;
** ARM Cortex-M3 built-in Memory Protection Unit (MPU) supporting eight regions.&lt;br /&gt;
** ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Non-maskable Interrupt (NMI) input.&lt;br /&gt;
** JTAG and Serial Wire Debug, serial trace, eight breakpoints, and four watch points.&lt;br /&gt;
** ETM and ETB support.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* On-chip memory (flashless parts LPC1850/30/20/10)&lt;br /&gt;
** Up to 200 kB SRAM total for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 64 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* On-chip memory (parts with on-chip flash)&lt;br /&gt;
** Up to 1 MB total dual bank flash memory with flash accelerator.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Up to 136 kB SRAM for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 32 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1 % accuracy.&lt;br /&gt;
** Ultra-low power RTC crystal oscillator.&lt;br /&gt;
** Three PLLs allow CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. The second PLL is dedicated to the High-speed USB, the third PLL can be used as audio PLL.&lt;br /&gt;
** Clock output.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** Quad SPI Flash Interface (SPIFI) with four lanes and data rates of up to 40 MB per second total.&lt;br /&gt;
** 10/100T Ethernet MAC with RMII and MII interfaces and DMA support for high throughput at low CPU load. Support for IEEE 1588 time stamping/advanced time stamping (IEEE 1588-2008 v2).&lt;br /&gt;
** One High-speed USB 2.0 Host/Device/OTG interface with DMA support and on-chip PHY.&lt;br /&gt;
** One High-speed USB 2.0 Host/Device interface with DMA support, on-chip full-speed PHY and ULPI interface to external high-speed PHY.&lt;br /&gt;
** USB interface electrical test software included in ROM USB stack.&lt;br /&gt;
** Four 550 UARTs with DMA support: one UART with full modem interface; one UART with IrDA interface; three USARTs support synchronous mode and a smart card interface conforming to ISO7816 specification.&lt;br /&gt;
** Two C_CAN 2.0B controllers with one channel each.&lt;br /&gt;
** Two SSP controllers with FIFO and multi-protocol support. Both SSPs with DMA support.&lt;br /&gt;
** One Fast-mode Plus I2C-bus interface with monitor mode and with open-drain I/O pins conforming to the full I2C-bus specification. Supports data rates of up to 1 Mbit/s.&lt;br /&gt;
** One standard I2C-bus interface with monitor mode and standard I/O pins.&lt;br /&gt;
** Two I2S interfaces with DMA support, each with one input and one output.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** External Memory Controller (EMC) supporting external SRAM, ROM, NOR flash, and SDRAM devices.&lt;br /&gt;
** LCD controller with DMA support and a programmable display resolution of up to 1024H x 768V. Supports monochrome and color STN panels and TFT color panels; supports 1/2/4/8 bpp CLUT and 16/24-bit direct pixel mapping.&lt;br /&gt;
** SD/MMC card interface.&lt;br /&gt;
** Eight-channel General-Purpose DMA (GPDMA) controller can access all memories on the AHB and all DMA-capable AHB slaves.&lt;br /&gt;
** Up to 80 General-Purpose Input/Output (GPIO) pins with configurable pull-up/pull-down resistors and open-drain modes. &lt;br /&gt;
** GPIO registers are located on the AHB for fast access. GPIO ports have DMA support.&lt;br /&gt;
** State Configurable Timer (SCT) subsystem on AHB.&lt;br /&gt;
** Four general-purpose timer/counters with capture and match capabilities.&lt;br /&gt;
** One motor control PWM for three-phase motor control.&lt;br /&gt;
** One Quadrature Encoder Interface (QEI).&lt;br /&gt;
** Repetitive Interrupt timer (RI timer).&lt;br /&gt;
** Windowed watchdog timer.&lt;br /&gt;
** Ultra-low power Real-Time Clock (RTC) on separate power domain with 256 bytes of battery powered backup registers.&lt;br /&gt;
** Alarm timer; can be battery powered.&lt;br /&gt;
* Digital peripherals available on flash-based parts LPC18xx only:&lt;br /&gt;
** &amp;lt;tbd&amp;gt;&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** One 10-bit DAC with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
** Two 10-bit ADCs with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
* Security:&lt;br /&gt;
** Hardware-based AES security engine programmable through an on-chip API.&lt;br /&gt;
** Two 128-bit secure OTP memories for AES key storage and customer use.&lt;br /&gt;
** Unique ID for each device.&lt;br /&gt;
* Power: &lt;br /&gt;
** Single 3.3 V (2.2 V to 3.6 V) power supply with on-chip internal voltage regulator for the core supply and the RTC power domain.&lt;br /&gt;
** RTC power domain can be powered separately by a 3 V battery supply.&lt;br /&gt;
** Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Sleep mode via wake-up interrupts from various eripherals. &lt;br /&gt;
** Wake-up from Deep-sleep, Power-down, and Deep power-down modes via external interrupts and interrupts generated by battery powered blocks in the RTC power domain.&lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
* Available as 100-pin, 144-pin, and 208-pin LQFP packages and as 100-pin, 180-pin, and 256-pin LBGA packages.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
=== Code Red ===&lt;br /&gt;
[[Bild:lpcxpresso-debug_Code-red_3Sep2011.gif|thumb|right|680px|Ansicht der Entwicklungsumgebung, ©code-red-tech.com]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Entwicklungs Tool ====&lt;br /&gt;
(Beschreibung aus der Web-Site:)&lt;br /&gt;
LPCXpresso&#039;s IDE (powered by Code Red) ist eine hoch integrierte Entwicklungsumgebung für LPC-Controller, und beinhaltet alle zur Entwicklung erforderlichen Tools um hoch qualitative Software in einer angemessenen Zeit zu schreiben. LPCXpresso basiert auf ein vereinfachtes Eclipse mit vielen LPC-specifischen Erweiterungen.&lt;br /&gt;
Des Weiteren ist eine aktuelle Version der Industrie-Standard GNU Tool-Chain mit einer propritären und optimierten C-Lib mit dabei. Die LPCXpresso IDE stellt ein voll optimiertes Executable zur Verfügung stellen. Die einzige Beschränkung der kostenlosen Version ist eine Limitierung auf 128kB Code nach erfolgter Registrierung.&lt;br /&gt;
Das LPCXpresso Target Board ist eine Gemeinschaftsentwicklung von Embedded Artists, Code Red, NXP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
Die LPCXpresso IDE stellt eine C-Umgebung mit Syntax-Colouring, Source-Formatierung, Funktions-Folding, sowie mit Online- und Offline Hilfe und umfangreichen Projekt-Management Funktionen zur Verfügung.  &lt;br /&gt;
Dies beinhaltet:&lt;br /&gt;
* Wizards um Projekte für alle unterstützten Controller zu erstellen &lt;br /&gt;
* Automatische Linker Script Generierung inklusive Memory-Map Unterstützung &lt;br /&gt;
* Programmierung des Controllers&lt;br /&gt;
* On-Line Debugging&lt;br /&gt;
* Datenblatt-Zugriff über eingebauten Browser&lt;br /&gt;
* Support für die NXP LPC Microcontroller Familien, von Cortex-M0, Cortex-M3 bis Cortex-M4 und ARM7 bis ARM9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Peripherie und Register Views im Debugger ====&lt;br /&gt;
Der Peripherie-Viewer im integrierten Debugger zeigt alle Register und Bit-Felder in einer einfachen Baumstruktur.&lt;br /&gt;
Ein Prozessor-Register Viewer erlaubt den Zugriff auf alle Prozessor-Register und stellt eine &amp;quot;Smart-Formatting&amp;quot;  Funktion zur Verfügung um komplexe Register wie Flags oder Status Register übersichtlich darstellen zu können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Unterstützte Familien ====&lt;br /&gt;
Cortex-M0, Cortex-M3, Cortex-M4, Einzelne Controller aus der LPC2000 family, ARM966, ARM926-EJ, ARM926-EJ + VFP &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Standard Library ====&lt;br /&gt;
Im Download der &amp;quot;Code Red&amp;quot; Entwicklungsumgebung ist eine relativ umfangreiche Firmwarebibliothek vorhanden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Installationsanleitung zur IDE ====&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
==== Codebase für LPC11xx und LPC13xx ====&lt;br /&gt;
Für die Cortex-M0 und -M3 Familien existieren verschiedene Basispakete die als Startausstattung sehr gut geeignet sind. Auf microbuilder.eu findet man eine sehr interessante Version inklusive Dokumentation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Codebase_f%C3%BCr_LPC1xxx HIER]&#039;&#039;&#039; findet man alle Links zur original Codebase mit allen Dateien (Stand Januar 2012) aber auch eine deutsche Übersetzung zu den Files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CooCox ===&lt;br /&gt;
&lt;br /&gt;
Auf der &#039;&#039;&#039;[http://www.coocox.org/Index.html Homepage]&#039;&#039;&#039; von CooCox - einem chinesischen Open-Source Projekt, auf der eine IDE für Atmel, Energy Micro, Holtek, Nuvoton, ST, TI und NXP verfügbar ist  - findet man die auf Eclipse basierende &amp;quot;CooCox CoIDE&amp;quot;, die sich aus dem &amp;quot;CoBuilder&amp;quot; und dem &amp;quot;CoDebugger&amp;quot; zusammensetzt.&lt;br /&gt;
Des Weiteren bietet man dort ein Echtzeit-Multitasking Betriebssystem, sowie SW-Versionen von zwei unterschiedliche Debugging-Adapter und ein Stand-alone Flash-Tool zum freien Download an.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Controller können damit programmiert und debugged werden:&lt;br /&gt;
    LPC1111x101    LPC1111x201   LPC1112x101   LPC1112x201&lt;br /&gt;
    LPC1113x201    LPC1113x301   LPC1114x201   LPC1114x301&lt;br /&gt;
    LPC11C14x301   LPC11C12x301&lt;br /&gt;
    LPC1224x101    LPC1224x121   LPC1225x301   LPC1225x321   LPC1226x301  LPC1227x301&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    LPC1311   LPC1313   LPC1342   LPC1343&lt;br /&gt;
    LPC1751   LPC1752   LPC1754   LPC1756   LPC1758   LPC1759&lt;br /&gt;
    LPC1763   LPC1764   LPC1765   LPC1766   LPC1767   LPC1768   LPC1769&lt;br /&gt;
&lt;br /&gt;
=== Codebase ===&lt;br /&gt;
Des Weiteren existiert eine umfangreiche Sammlung von &#039;&#039;&#039;[http://www.coocox.org/NXP-Series.php Code-Beispielen]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== WinARM ===&lt;br /&gt;
[http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/#winarm WinARM] (wird derzeit nicht gepflegt)&lt;br /&gt;
&lt;br /&gt;
=== GNUARM ===&lt;br /&gt;
[http://gnuarm.com/ GNUARM] (Linux, Windows, wird derzeit nicht gepflegt), &lt;br /&gt;
&lt;br /&gt;
=== Yagarto ===&lt;br /&gt;
[http://www.yagarto.de/ Yagarto] (Windows, mit Eclipse-Integration) &lt;br /&gt;
&lt;br /&gt;
=== CodeSourcery ===&lt;br /&gt;
[http://www.codesourcery.com/gnu_toolchains/arm CodeSourcery CodeBench Lite]&lt;br /&gt;
&lt;br /&gt;
== CMSIS  -  Standard für alle Platformen ==&lt;br /&gt;
Der Cortex Microcontroller Software Interface Standard (CMSIS) stellt einen &amp;quot;abstraction layer&amp;quot; für alle Cortex-Mx Controller zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
CMSIS stellt einen Schnittstellenstandard von ARM dar, der von vielen Tool-Herstellern unterstützt wird und ist (laut verschiedener Berichte)  kompatibel mit den verschiedensten Compilern (incl GCC). Dies wird erreicht durch einheitliche Definitionen für Adressen und Namen die den Zugriff auf die Register des Cores und der Peripherie ermöglichen.&lt;br /&gt;
Auch Standard-Funktionen für den Start und die Interrupts stehen zur Verfügung.&lt;br /&gt;
Natürlich kann auch weiterhin direkt auf die HW zugegriffen werden, es geht nur um eine Vereinheitlichung von identischen Funktionen. &lt;br /&gt;
Da die Peripherie-Teile zumindest innerhalb eines Halbleiterherstellers für die Cortex-Mx Controller sehr ähnlich oder sogar weitgehend identisch sind kann deutlich mehr SW für verschiedene Derivate innerhalb dieser Prozessorfamilien wiederverwendet werden.  (siehe Google: &amp;quot;CMSIS_Doulos_Tutorial.pdf&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Ein weiterer, interessanter Punkt ist die CMSIS-DSP Lib mit ihren Vektorfunktionen, Matrix-Berechnung sowie komplexen Algorithmen für Filter, &lt;br /&gt;
Regler und Fourietransformation sowie weiterer DSP Algorithmen (insgesamt 61).&lt;br /&gt;
&lt;br /&gt;
Leider hat diese Kompatibilität auch seine Grenzen, denn Sonderfunktionen bzw. Spezialitäten in der &amp;quot;gleichen&amp;quot; Peripherie zwischen unterschiedlichen Halbleiterherstellern werden nicht abgedeckt. &lt;br /&gt;
Wäre auch zu schön, wenn die Prozesorhersteller dem Entwickler dadurch einen fliegenden HW-Wechsel bzw. eine einfache Vergleichbarkeit ermöglichen würden ;-)&lt;br /&gt;
&lt;br /&gt;
Eine komplette CMSIS-Lib (V2.0) &amp;quot;Cortex Microcontroller Software Interface Standard&amp;quot; ist für das &amp;quot;Code Red&amp;quot; Paket verfügbar, inklusive einer &amp;quot;DSP-Library&amp;quot; &lt;br /&gt;
http://support.code-red-tech.com/CodeRedWiki/NewInVersion4&lt;br /&gt;
bzw. für GNU / Keil / IAR unter&lt;br /&gt;
http://ics.nxp.com/support/documents/microcontrollers/?search=CMSIS&amp;amp;type=software&amp;amp;Search.x=8&amp;amp;Search.y=12&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/LPC1xxx_Entwicklungskit_LPCXpresso LPCXpresso-Entwicklungskit]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung zur IDE von Code-Red]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Codebase_f%C3%BCr_LPC1xxx LPC1xxx Codebase]&lt;br /&gt;
&lt;br /&gt;
Suche im Forum nach&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=LPC12* LPC12xx]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=LPC13* LPC13xx]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=LPC17* LPC17xx]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=LPC18* LPC18xx]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
Versandhäuser für Privatpersonen&lt;br /&gt;
&lt;br /&gt;
* [http://darisusgmbh.de/shop/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 Darisus]&lt;br /&gt;
* [http://www.hbe-shop.de HBE] &lt;br /&gt;
* [http://www.tme.eu/de/katalog#cleanParameters%3D1%26searchClick%3D1%26search%3DLPC1%26bf_szukaj%3D+ TME]&lt;br /&gt;
* [http://www.tn-electronics.de/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 TN]&lt;br /&gt;
* [http://de.mouser.com/_/?Keyword=LPC1&amp;amp;Ns=Pricing|0&amp;amp;FS=True Mouser]&lt;br /&gt;
* [http://www.soselectronic.eu/?searchstring=LPC1&amp;amp;str=378 SOS]&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
* [http://www.watterott.com/index.php?x79e1c=i52drq5oir64v4l66rk9856re1&amp;amp;page=search&amp;amp;page_action=query&amp;amp;desc=on&amp;amp;sdesc=on&amp;amp;keywords=LPCXpresso&amp;amp;x=0&amp;amp;y=0 Watterott (24€ inclusive JTAG-Programmiergerät UND JTAG Debugger für kostenlose &amp;quot;Code-Red&amp;quot; Entwicklungsplattform)], dazu hier die &#039;&#039;&#039;[http://www.mikrocontroller.net/wikisoftware/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso&amp;amp;action=edit Beschreibung]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.lpctools.com/evaluationboardskitsforlpc17xx.aspx LPC-Tools]&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities ==&lt;br /&gt;
&lt;br /&gt;
* http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html&lt;br /&gt;
* http://www.nxp.com/#/page/content=[f=/dynamic/applicationnotes/tid-50809_sid-56890/data.xml]&lt;br /&gt;
* [http://mbed.org/handbook/Homepage MBED]&lt;br /&gt;
* [http://forums.nxp.com/forums/viewforum.php?f=1 NXP-WIKI]&lt;br /&gt;
* [http://knowledgebase.nxp.com/forumdisplay.php?s=389a3610c741bca7b18221d32b9c0ce0&amp;amp;f=4 NXP-Forum]&lt;br /&gt;
* [http://ics.nxp.com/lpcxpresso/ LPCXpresso]&lt;br /&gt;
* [http://code.google.com/p/32bitmicro/ 32BitMicro]&lt;br /&gt;
* [http://www.brc-electronics.nl SimpleCortex]&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsplattformen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.code-red-tech.com/red-suite-4-nxp.php Code-Red (Kostenlos mit Debugger)]&lt;br /&gt;
* [http://support.code-red-tech.com/CodeRedWiki/WikiHome CR-WIKI]&lt;br /&gt;
* ARM/Keil MDK-ARM&lt;br /&gt;
* IAR EWARM&lt;br /&gt;
* Rowley Crossworks&lt;br /&gt;
* Green Hills Software &lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:LPC1x| ]]&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=65413</id>
		<title>LPC-Mikrocontroller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LPC-Mikrocontroller&amp;diff=65413"/>
		<updated>2012-04-01T13:26:55Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* Weblinks, Foren, Communities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:overview_Sep2011.png|thumb|right|850px|Überblick über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
[[Bild:positioning_NXPSep2011.gif|thumb|right|850px|Vergleich über die aktuelle Cortex M0/3 Familie, ©NXP.com]]&lt;br /&gt;
Die LPC1000-Familie von NXP basiert auf 32-Bit Cortex-Kernen von ARM und arbeitet mit bis zu 150MHz. Die LPC11xx-Serie basiert auf dem Cortex-M0-Kern, die Serien LPC13xx, 17xx und 18xx auf dem Cortex-M3. Mikrocontroller aus der LPC13xx-Serie mit 72MHz und der LPC17xx-Serie mit 100MHz (120MHz) sind inzwischen auch für Privatnutzer zu Preisen erhältlich, die mit denen von 8-Bit-Mikrocontrollern vergleichbar sind. Eine Auflistung der verschiedenen Typen findet sich im Dokument &#039;&#039;&#039;[http://www.nxp.com/documents/line_card/line_card.pdf &amp;quot;The ARM selection guide&amp;quot; (PDF)]&#039;&#039;&#039; von NXP (Seite 2f). &lt;br /&gt;
&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039; und diese &#039;&#039;&#039;[http://www.mikrocontroller.net/wikisoftware/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso&amp;amp;action=edit Beschreibung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Infos + User-Manuals==&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC11xx (Cortex-M0) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc11xx/ LPC11xx-Serie]&#039;&#039;&#039; (3,3V) bietet viele Möglichkeiten&lt;br /&gt;
* Der LPC1100L ist derzeit laut NXP (Sep2011) der preisgünstigste ARM auf dem Markt. Der 32Bit ARM mit einer Performance von ca. 45DMIPS @50MHZ benötigt bei dieser Taktfrequenz nur etwa 10mA. (Details siehe NXP-Seite)&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features :&lt;br /&gt;
** LPC1100 Serie: • I2C, SSP, UART, GPIO, • Timers and watch dog timer, • 10-bit ADC, • Flash/SRAM memory, • Weitere Funktionen, siehe &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/LPC1xxx#Features_eines_LPC11xx 2.3 Features]&#039;&#039;&#039;&lt;br /&gt;
** LPC1100L Serie zusätzlich zu LPC1100: • Power Profile mit lower power consumption in Active- und Sleep-mode, • Interne pull-ups auf VDD level, • Programmierbarer pseudo open-drain mode für GPIO Pins, • WWDT mit Clock Source Lock.&lt;br /&gt;
**LPC11C00 Serie zusätzlich zu LPC1100: • CAN controller, • On-chip CAN Treiber, • On-chip CAN Transceiver (LPC11C2x), • WDT (not windowed) mit Clock Source Lock .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10398.pdf User Manual der LPC11-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC12xx (Cortex-M0) ===&lt;br /&gt;
* Die Low Power &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc12xx/ LPC12xx-Serie]&#039;&#039;&#039; (3,3V) ist laut NXP (Sep2011) ein Cortex-M0 mit 32 bis 128kB Flash, einem 45 CoreMark™ Benchmark-Score bei 30MHz, 2 bis 8kB SRAM, und einem internen 1% genauen 12MHz Oscillator.&lt;br /&gt;
&lt;br /&gt;
* Überblick über die Features: fMAX von 30MHz, 1 10-Bit  ADC mit 8 Kanälen, 2 Comparatoren, 2 UARTs, 1 SSP/SPI, 1 I2C, DMA Controller, CRC Engine, 1 32-Bit, 5 Timer (16- und 32-Bit, + RTC), 13 PWM Kanäle, bis zu 55 GPIOs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10441.pdf User Manual der LPC12xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC13xx (Cortex-M3) ===&lt;br /&gt;
Die sehr stromsparende &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc13xx/ LPC13xx-Serie]&#039;&#039;&#039; (3,3V) bietet im LQFP 48 Gehäuse 8..32k Flash, 2..8k SRAM, 5 Timer (mit WD), 11 PWM, 1 UART, 1IIC, 1USB, 1..2 SPI, einen 8-Kanal/10Bit AD-Wandler und eine Taktfrequenz von max. 72MHz. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10375.pdf User Manual der LPC13xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC17xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc17xx/ LPC17xx-Serie]&#039;&#039;&#039; hingegen enthält eine weit größere Peripherie in einem LQFP80 bzw. LQFP100 Package.&lt;br /&gt;
32..512k Flash, 8..64k SRAM, 6 Timer (mit WD), 6 zusätzliche PWM-Einheiten, teilweise Ethernet, meist USB, 4 UART, 2..3IIC, 1..2 CAN, 1 SPI, 2 SSP/SPI einen 6..8-Kanal/12Bit AD-Wandler, einen 10Bit DAC, Motor-Control-Einheiten, einen Encoder-Eingang und eine Taktfrequenz von max. 100MHz(120MHz) und vieles mehr. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.nxp.com/documents/user_manual/UM10360.pdf User Manual der LPC17xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Eckdaten LPC18xx (Cortex-M3) ===&lt;br /&gt;
Die &#039;&#039;&#039;[http://ics.nxp.com/products/lpc1000/lpc18xx/ LPC18xx-Serie]&#039;&#039;&#039; stellt DIE &amp;quot;High-Performance&amp;quot; Controller aus der Cortex-M3-Serie. Die Taktfrequenz geht bis 150MHz, die Controller enthalten große dual-Bank Flash Speicher bis zu 1MB, ein großes On-Chip SRAM mit bis zu 200KB, zusätzliche Peripherie wie z.B. SPI Flash Interface (SPIFI) und State Configurable Timer (SCT), 2x High Speed USB (1x mit On-Chip HS PHY) und eine MPU.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://ics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc18xx.pdf User Manual der LPC18xx-Familie (PDF)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Überblick über die Features: &#039;&#039;&#039;[http://ics.nxp.com/literature/leaflets/microcontrollers/pdf/lpc18xx.pdf LPC18xx Flyer von NXP]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungskits ===&lt;br /&gt;
Von NXP sind &amp;lt;u&amp;gt;sehr preiswerte&amp;lt;/u&amp;gt; Entwicklungskits (ca. 25€ für. USB-JTAG Programmer und Debugger) erhältlich z.B. &#039;&#039;&#039;[http://www.watterott.com/index.php?page=search&amp;amp;keywords=LPCXpresso&amp;amp;cat=&amp;amp;mnf=&amp;amp;x=0&amp;amp;y=0 Watterott]&#039;&#039;&#039;. Siehe dazu auch die Dokumentation von NXP zu den &#039;&#039;&#039;[http://www.nxp.com/documents/leaflet/75016842.pdf LPCXpresso-Entwicklungskits (PDF)]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Kostenlose Entwicklungsumgebung für ALLE hier genannten Controller ===&lt;br /&gt;
Für die ganze Prozessorfamilie ist eine &amp;lt;u&amp;gt;kostenlose&amp;lt;/u&amp;gt; Entwicklungsumgebung  erhältlich. Informationen unter &#039;&#039;&#039;[http://www.code-red-tech.com/lpcxpresso.php  code-red]&#039;&#039;&#039;: Die auf Eclipse basierende Entwicklungsumgebung ist nach der Installation bis 8k freigeschaltet und nach einer einfachen und kostenlosen Registrierung für 128kB. Die IDE ist auch für &#039;&#039;&#039;[http://support.code-red-tech.com/CodeRedWiki/redlib_v2_notes Linux]&#039;&#039;&#039; verfügbar.&lt;br /&gt;
&lt;br /&gt;
Hier die &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== LPC11xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC11xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
[[Bild:block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-N0, ©NXP.com]]&lt;br /&gt;
=== Blockdiagramm der LPC11xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC11xx ===&lt;br /&gt;
* System:&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 50 MHz. &lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory:&lt;br /&gt;
** 32 kB (LPC1114/LPC11C14), 24 kB (LPC1113), 16 kB (LPC1112/LPC11C12), or 8 kB (LPC1111) on-chip flash programming memory. &lt;br /&gt;
** 8 kB, 4 kB, or 2 kB SRAM.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors. Number of GPIO pins is reduced for smaller packages and LPC11C22/C24.&lt;br /&gt;
** GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** High-current output driver (20 mA) on one pin.&lt;br /&gt;
** High-current sink drivers (20 mA) on two I2C-bus pins in Fast-mode Plus.&lt;br /&gt;
** Four general purpose timers/counters with a total of four capture inputs and up to 13 match outputs. &lt;br /&gt;
** Programmable WatchDog Timer (WDT).&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** UART with fractional baud rate generation, internal FIFO, and RS-485 support. &lt;br /&gt;
** Two SPI controllers with SSP features and with FIFO and multi-protocol capabilities (second SPI on LQFP48 and PLCC44 packages only).&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. &lt;br /&gt;
** C_CAN controller (LPC11Cxx only). On-chip CAN and CANopen drivers included.&lt;br /&gt;
** On-chip, high-speed CAN transceiver (parts LPC11C22/C24 only).&lt;br /&gt;
* Clock generation:&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, and the Watchdog clock.&lt;br /&gt;
* Power control:&lt;br /&gt;
** Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
** Power profiles residing in boot ROM allowing to optimize performance and minimize power consumption for any given application through one simple function call. (On LPC111x/102/202/302 only.)&lt;br /&gt;
** Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 13 of the functional pins.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Single 3.3 V power supply (1.8 V to 3.6 V).&lt;br /&gt;
* Available as 48-pin LQFP package, 33-pin HVQFN package, and 44-pin PLCC package.&lt;br /&gt;
&lt;br /&gt;
== LPC12xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC12xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
[[Bild:block.diagramM0_NXPSep2011.gif|thumb|right|850px|Blockdiagramm des Cortex-M0, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
=== Blockdiagramm der LPC12xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC12xx ===&lt;br /&gt;
&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M0 processor, running at frequencies of up to 45 MHz (one wait state from flash) or 30 MHz (zero wait states from flash). The LPC122x have a high score of over 45 in CoreMark CPU performance benchmark testing, equivalent to 1.51/MHz.&lt;br /&gt;
** ARM Cortex-M0 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Serial Wire Debug (SWD).&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* Memory&lt;br /&gt;
** Up to 8 kB SRAM.&lt;br /&gt;
** Up to 128 kB on-chip flash programming memory. &lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Includes ROM-based 32-bit integer division routines.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz Internal RC (IRC) oscillator trimmed to 1 % accuracy that can optionally be used as a system clock.&lt;br /&gt;
** PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
** Clock output function with divider that can reflect the system oscillator clock, IRC clock, main clock, and Watchdog clock.&lt;br /&gt;
** Real-Time Clock (RTC).&lt;br /&gt;
* Digital peripherals&lt;br /&gt;
** Micro DMA controller with 21 channels.&lt;br /&gt;
** CRC engine.&lt;br /&gt;
** Two UARTs with fractional baud rate generation and internal FIFO. One UART with RS-485 and modem support and one standard UART with IrDA.&lt;br /&gt;
** SSP/SPI controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
** I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode. I2C-bus pins have programmable glitch filter.&lt;br /&gt;
** Up to 55 General Purpose I/O (GPIO) pins with programmable pull-up resistor, open-drain mode, programmable digital input glitch filter, and programmable input inverter. &lt;br /&gt;
** Programmable output drive on all GPIO pins. Four pins support high-current output drivers.&lt;br /&gt;
** All GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
** Four general purpose counter/timers with four capture inputs and four match outputs (32-bit timers) or two capture inputs and two match outputs (16-bit timers). &lt;br /&gt;
** Windowed WatchDog Timer (WWDT).&lt;br /&gt;
* Analog peripherals&lt;br /&gt;
** One 8-channel, 10-bit ADC.&lt;br /&gt;
** Two highly flexible analog comparators. Comparator outputs can be programmed to trigger a timer match signal or can be used to emulate 555 timer behavior.&lt;br /&gt;
* Power&lt;br /&gt;
** Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Deep-sleep mode via start logic using 12 port pins.&lt;br /&gt;
** Processor wake-up from Deep-power down and Deep-sleep modes via the RTC.&lt;br /&gt;
** Brownout detect with three separate thresholds each for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
** Integrated PMU (Power Management Unit).&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* 3.3 V power supply.&lt;br /&gt;
* Available as 64-pin and 48-pin LQFP package.&lt;br /&gt;
&lt;br /&gt;
== LPC13xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC13xx ===&lt;br /&gt;
[[Bild:LPC13xx_Selection_Guide_Sep2011.png|thumb|right|600px|Selection Guide zur LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1313 mit 32k-Flash mit 72MHz im LQFP 48 Gehäuse. Der LPC1313 ist bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; erhältlich für 3€57 (Juli/2011), oder digikey für2€70.  (Für den &amp;quot;/1&amp;quot; suche ich noch eine Bezugsquelle.) Entwicklungskit INCLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1343-LPCXpresso-Board Watterott]&#039;&#039;&#039; für 23€80 (Juli/2011)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC13xx Block Diagram Sep2011.png|thumb|right|680px|Blockdiagramm der LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
=== Blockdiagram der LPC13xx Familie ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1313 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 72 MHz.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 32 kB on-chip flash programming memory.&lt;br /&gt;
* 8 kB SRAM.&lt;br /&gt;
* In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
* UART with fractional baud rate generation, modem, internal FIFO, and RS-485/EIA-485 support.&lt;br /&gt;
* SSP controller with FIFO and multi-protocol capabilities.&lt;br /&gt;
* Additional SSP controller on LPC1313FBD48/01.&lt;br /&gt;
* I2C-bus interface supporting full I2C-bus specification and Fast-mode Plus with a data rate of 1 Mbit/s with multiple address recognition and monitor mode.&lt;br /&gt;
* Up to 42 General Purpose I/O (GPIO) pins with configurable pull-up/pull-down resistors.&lt;br /&gt;
* Four general purpose counter/timers with a total of four capture inputs and 13 match outputs.&lt;br /&gt;
* Programmable Watchdog Timer (WDT) &lt;br /&gt;
* System tick timer.&lt;br /&gt;
* Serial Wire Debug and Serial Wire Trace port.&lt;br /&gt;
* High-current output driver (20 mA) on one pin.&lt;br /&gt;
* High-current sink drivers (20 mA) on two I2C-bus pins in Fast-mode Plus.&lt;br /&gt;
* Integrated PMU (Power Management Unit) to minimize power consumption during Sleep, Deep-sleep, and Deep power-down modes.&lt;br /&gt;
* Three reduced power modes: Sleep, Deep-sleep, and Deep power-down.&lt;br /&gt;
* Single power supply (2.0 V to 3.6 V).&lt;br /&gt;
* 10-bit ADC with input multiplexing among 8 pins.&lt;br /&gt;
* GPIO pins can be used as edge and level sensitive interrupt sources.&lt;br /&gt;
* Clock output function with divider that can reflect the system oscillator clock, IRC clock, CPU clock, or the watchdog clock.&lt;br /&gt;
* Processor wake-up from Deep-sleep mode via a dedicated start logic using up to 40 of the functional pins.&lt;br /&gt;
* Brownout detect with four separate thresholds for interrupt and one thresholds for forced reset.&lt;br /&gt;
* Power-On Reset (POR).&lt;br /&gt;
* Integrated oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 12 MHz internal RC oscillator trimmed to 1 % accuracy over the entire temperature and voltage range that can optionally be used as a system clock.&lt;br /&gt;
* Programmable watchdog oscillator with a frequency range of 7.8 kHz to 1.8 MHz. System PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the system oscillator or the internal RC oscillator.&lt;br /&gt;
* Code Read Protection (CRP) with different security levels.&lt;br /&gt;
* Unique device serial number for identification.&lt;br /&gt;
* Available as 48-pin LQFP package and 33-pin HVQFN package.&lt;br /&gt;
&lt;br /&gt;
== LPC17xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC17xx ===&lt;br /&gt;
[[Bild:LPC17xx_Selection_Guide_Sep2011.png|thumb|right|1200px|Selection Guide zur LPC13xx Familie, ©NXP.com]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
LPC1754 mit 128K Flash im LQFP80, der bei &#039;&#039;&#039;[http://www.darisus.de/ Darius]&#039;&#039;&#039; für 7€74 (Juli/2011) erhältlich ist,[den LPC1751 (32k/8k) schon für 5€95] und bei Digikey für 6€35, den LPC1764FBD100 bei &#039;&#039;&#039;[http://www.tme.eu/de TME]&#039;&#039;&#039;    für 7€ Entwicklungskit INCLUSIVE JTAG-Programmer &amp;amp; Debugger bei &#039;&#039;&#039;[http://www.watterott.com/de/LPC1769-LPCXpresso Watterott]&#039;&#039;&#039; für 23€80 (Juli/2011)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:LPC177x_178x Block Diagram Sep2011.png|thumb|right|680px|Blockdiagramm der LPC17xx Familie, ©NXP.com]]&lt;br /&gt;
=== Blockdiagram der LPC17xx Familie ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC1754 ===&lt;br /&gt;
* ARM Cortex-M3 processor, running at frequencies of up to 100 MHz &lt;br /&gt;
* A Memory Protection Unit (MPU) supporting eight regions is included.&lt;br /&gt;
* ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
* 128 kB on-chip flash program memory with In-System Programming (ISP) and In-Application Programming (IAP) capabilities. &lt;br /&gt;
* 32 kB of SRAM on the CPU with local code/data bus for high-performance CPU access.&lt;br /&gt;
* Eight channel General Purpose DMA controller &lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
* USB 2.0 full-speed controller that can be configured for either device, Host, or OTG operation with an on-chip PHY for device and Host functions &lt;br /&gt;
* Four UARTs with fractional baud rate generation, internal FIFO, IrDA, and DMA, Einer mit Modem I/Os und RS485 Support&lt;br /&gt;
* 1 CAN controller.&lt;br /&gt;
* 2 SSP controllers &lt;br /&gt;
* 1 SPI controller &lt;br /&gt;
* 2 I2C-bus interfaces with data rates of 1Mbit/s,&lt;br /&gt;
* I2S (Inter-IC Sound) &lt;br /&gt;
* 52  General Purpose I/O (GPIO) pins Any pin of ports 0 and 2 can be used to generate an interrupt.&lt;br /&gt;
* 8x 12-bit Analog-to-Digital Converter (ADC) conversion rates up to 200 kHz&lt;br /&gt;
* 1x 10-bit Digital-to-Analog Converter (DAC) &lt;br /&gt;
* Four general purpose timers/counters, with a total of eight capture inputs and ten compare outputs. &lt;br /&gt;
* One motor control PWM with support for three-phase motor control.&lt;br /&gt;
* Quadrature encoder interface that can monitor one external quadrature encoder.&lt;br /&gt;
* One standard PWM/timer block with external count input.&lt;br /&gt;
* Real-Time Clock (RTC) with a separate power domain including 20 bytes of battery-powered backup registers,  An RTC interrupt can wake up the CPU from any reduced power mode.&lt;br /&gt;
* Watchdog Timer (WDT). &lt;br /&gt;
* Cortex-M3 system tick timer&lt;br /&gt;
* Repetitive interrupt timer &lt;br /&gt;
* Standard JTAG test/debug interface as well as Serial Wire Debug and Serial Wire Trace Port options.&lt;br /&gt;
* Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
* Single 3.3 V power supply (2.4 V to 3.6 V). &lt;br /&gt;
* Four external interrupt inputs configurable as edge/level sensitive. All pins on PORT0 and PORT2 can be used as edge sensitive interrupt sources.&lt;br /&gt;
* Non-maskable Interrupt (NMI) input.&lt;br /&gt;
* Wakeup Interrupt Controller (WIC) &lt;br /&gt;
* Each peripheral has its own clock divider for further power savings.&lt;br /&gt;
* Brownout detect with separate threshold for interrupt and forced reset.&lt;br /&gt;
* On-chip Power-On Reset (POR).&lt;br /&gt;
* On-chip crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
* 4 MHz internal RC oscillator trimmed to 1% accuracy that can optionally be used as a system clock.&lt;br /&gt;
* An on-chip PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the main oscillator, the internal RC oscillator, or the RTC oscillator.&lt;br /&gt;
* Available as 80-pin LQFP (12 x 12 x 1.4 mm) packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LPC18xx ==&lt;br /&gt;
&lt;br /&gt;
=== Familienübersicht LPC18xx ===&lt;br /&gt;
Bezugsquellen und Preise:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:block.diagram_NXP18xx Sep2011.gif|thumb|right|680px|Blockdiagramm der LPC18xx Familie, ©NXP.com]]&lt;br /&gt;
=== Blockdiagramm der LPC18xx Familie ===&lt;br /&gt;
&lt;br /&gt;
=== Features eines LPC18xx ===&lt;br /&gt;
DRAFT!&lt;br /&gt;
* Processor core&lt;br /&gt;
** ARM Cortex-M3 processor, running at frequencies of up to 150 MHz.&lt;br /&gt;
** ARM Cortex-M3 built-in Memory Protection Unit (MPU) supporting eight regions.&lt;br /&gt;
** ARM Cortex-M3 built-in Nested Vectored Interrupt Controller (NVIC).&lt;br /&gt;
** Non-maskable Interrupt (NMI) input.&lt;br /&gt;
** JTAG and Serial Wire Debug, serial trace, eight breakpoints, and four watch points.&lt;br /&gt;
** ETM and ETB support.&lt;br /&gt;
** System tick timer.&lt;br /&gt;
* On-chip memory (flashless parts LPC1850/30/20/10)&lt;br /&gt;
** Up to 200 kB SRAM total for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 64 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* On-chip memory (parts with on-chip flash)&lt;br /&gt;
** Up to 1 MB total dual bank flash memory with flash accelerator.&lt;br /&gt;
** In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software.&lt;br /&gt;
** Up to 136 kB SRAM for code and data use.&lt;br /&gt;
** Two 32 kB SRAM blocks with separate bus access. Both SRAM blocks can be powered down individually.&lt;br /&gt;
** 32 kB ROM containing boot code and on-chip software drivers.&lt;br /&gt;
** 32-bit One-Time Programmable (OTP) memory for general-purpose customer use.&lt;br /&gt;
* Clock generation unit&lt;br /&gt;
** Crystal oscillator with an operating range of 1 MHz to 25 MHz.&lt;br /&gt;
** 12 MHz internal RC oscillator trimmed to 1 % accuracy.&lt;br /&gt;
** Ultra-low power RTC crystal oscillator.&lt;br /&gt;
** Three PLLs allow CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. The second PLL is dedicated to the High-speed USB, the third PLL can be used as audio PLL.&lt;br /&gt;
** Clock output.&lt;br /&gt;
* Serial interfaces:&lt;br /&gt;
** Quad SPI Flash Interface (SPIFI) with four lanes and data rates of up to 40 MB per second total.&lt;br /&gt;
** 10/100T Ethernet MAC with RMII and MII interfaces and DMA support for high throughput at low CPU load. Support for IEEE 1588 time stamping/advanced time stamping (IEEE 1588-2008 v2).&lt;br /&gt;
** One High-speed USB 2.0 Host/Device/OTG interface with DMA support and on-chip PHY.&lt;br /&gt;
** One High-speed USB 2.0 Host/Device interface with DMA support, on-chip full-speed PHY and ULPI interface to external high-speed PHY.&lt;br /&gt;
** USB interface electrical test software included in ROM USB stack.&lt;br /&gt;
** Four 550 UARTs with DMA support: one UART with full modem interface; one UART with IrDA interface; three USARTs support synchronous mode and a smart card interface conforming to ISO7816 specification.&lt;br /&gt;
** Two C_CAN 2.0B controllers with one channel each.&lt;br /&gt;
** Two SSP controllers with FIFO and multi-protocol support. Both SSPs with DMA support.&lt;br /&gt;
** One Fast-mode Plus I2C-bus interface with monitor mode and with open-drain I/O pins conforming to the full I2C-bus specification. Supports data rates of up to 1 Mbit/s.&lt;br /&gt;
** One standard I2C-bus interface with monitor mode and standard I/O pins.&lt;br /&gt;
** Two I2S interfaces with DMA support, each with one input and one output.&lt;br /&gt;
* Digital peripherals:&lt;br /&gt;
** External Memory Controller (EMC) supporting external SRAM, ROM, NOR flash, and SDRAM devices.&lt;br /&gt;
** LCD controller with DMA support and a programmable display resolution of up to 1024H x 768V. Supports monochrome and color STN panels and TFT color panels; supports 1/2/4/8 bpp CLUT and 16/24-bit direct pixel mapping.&lt;br /&gt;
** SD/MMC card interface.&lt;br /&gt;
** Eight-channel General-Purpose DMA (GPDMA) controller can access all memories on the AHB and all DMA-capable AHB slaves.&lt;br /&gt;
** Up to 80 General-Purpose Input/Output (GPIO) pins with configurable pull-up/pull-down resistors and open-drain modes. &lt;br /&gt;
** GPIO registers are located on the AHB for fast access. GPIO ports have DMA support.&lt;br /&gt;
** State Configurable Timer (SCT) subsystem on AHB.&lt;br /&gt;
** Four general-purpose timer/counters with capture and match capabilities.&lt;br /&gt;
** One motor control PWM for three-phase motor control.&lt;br /&gt;
** One Quadrature Encoder Interface (QEI).&lt;br /&gt;
** Repetitive Interrupt timer (RI timer).&lt;br /&gt;
** Windowed watchdog timer.&lt;br /&gt;
** Ultra-low power Real-Time Clock (RTC) on separate power domain with 256 bytes of battery powered backup registers.&lt;br /&gt;
** Alarm timer; can be battery powered.&lt;br /&gt;
* Digital peripherals available on flash-based parts LPC18xx only:&lt;br /&gt;
** &amp;lt;tbd&amp;gt;&lt;br /&gt;
* Analog peripherals:&lt;br /&gt;
** One 10-bit DAC with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
** Two 10-bit ADCs with DMA support and a data conversion rate of 400 kSamples/s.&lt;br /&gt;
* Security:&lt;br /&gt;
** Hardware-based AES security engine programmable through an on-chip API.&lt;br /&gt;
** Two 128-bit secure OTP memories for AES key storage and customer use.&lt;br /&gt;
** Unique ID for each device.&lt;br /&gt;
* Power: &lt;br /&gt;
** Single 3.3 V (2.2 V to 3.6 V) power supply with on-chip internal voltage regulator for the core supply and the RTC power domain.&lt;br /&gt;
** RTC power domain can be powered separately by a 3 V battery supply.&lt;br /&gt;
** Four reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.&lt;br /&gt;
** Processor wake-up from Sleep mode via wake-up interrupts from various eripherals. &lt;br /&gt;
** Wake-up from Deep-sleep, Power-down, and Deep power-down modes via external interrupts and interrupts generated by battery powered blocks in the RTC power domain.&lt;br /&gt;
** Brownout detect with four separate thresholds for interrupt and forced reset.&lt;br /&gt;
** Power-On Reset (POR).&lt;br /&gt;
* Available as 100-pin, 144-pin, and 208-pin LQFP packages and as 100-pin, 180-pin, and 256-pin LBGA packages.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
=== Code Red ===&lt;br /&gt;
[[Bild:lpcxpresso-debug_Code-red_3Sep2011.gif|thumb|right|680px|Ansicht der Entwicklungsumgebung, ©code-red-tech.com]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Entwicklungs Tool ====&lt;br /&gt;
(Beschreibung aus der Web-Site:)&lt;br /&gt;
LPCXpresso&#039;s IDE (powered by Code Red) ist eine hoch integrierte Entwicklungsumgebung für LPC-Controller, und beinhaltet alle zur Entwicklung erforderlichen Tools um hoch qualitative Software in einer angemessenen Zeit zu schreiben. LPCXpresso basiert auf ein vereinfachtes Eclipse mit vielen LPC-specifischen Erweiterungen.&lt;br /&gt;
Des Weiteren ist eine aktuelle Version der Industrie-Standard GNU Tool-Chain mit einer propritären und optimierten C-Lib mit dabei. Die LPCXpresso IDE stellt ein voll optimiertes Executable zur Verfügung stellen. Die einzige Beschränkung der kostenlosen Version ist eine Limitierung auf 128kB Code nach erfolgter Registrierung.&lt;br /&gt;
Das LPCXpresso Target Board ist eine Gemeinschaftsentwicklung von Embedded Artists, Code Red, NXP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
Die LPCXpresso IDE stellt eine C-Umgebung mit Syntax-Colouring, Source-Formatierung, Funktions-Folding, sowie mit Online- und Offline Hilfe und umfangreichen Projekt-Management Funktionen zur Verfügung.  &lt;br /&gt;
Dies beinhaltet:&lt;br /&gt;
* Wizards um Projekte für alle unterstützten Controller zu erstellen &lt;br /&gt;
* Automatische Linker Script Generierung inklusive Memory-Map Unterstützung &lt;br /&gt;
* Programmierung des Controllers&lt;br /&gt;
* On-Line Debugging&lt;br /&gt;
* Datenblatt-Zugriff über eingebauten Browser&lt;br /&gt;
* Support für die NXP LPC Microcontroller Familien, von Cortex-M0, Cortex-M3 bis Cortex-M4 und ARM7 bis ARM9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Peripherie und Register Views im Debugger ====&lt;br /&gt;
Der Peripherie-Viewer im integrierten Debugger zeigt alle Register und Bit-Felder in einer einfachen Baumstruktur.&lt;br /&gt;
Ein Prozessor-Register Viewer erlaubt den Zugriff auf alle Prozessor-Register und stellt eine &amp;quot;Smart-Formatting&amp;quot;  Funktion zur Verfügung um komplexe Register wie Flags oder Status Register übersichtlich darstellen zu können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Unterstützte Familien ====&lt;br /&gt;
Cortex-M0, Cortex-M3, Cortex-M4, Einzelne Controller aus der LPC2000 family, ARM966, ARM926-EJ, ARM926-EJ + VFP &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Standard Library ====&lt;br /&gt;
Im Download der &amp;quot;Code Red&amp;quot; Entwicklungsumgebung ist eine relativ umfangreiche Firmwarebibliothek vorhanden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Installationsanleitung zur IDE ====&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
==== Codebase für LPC11xx und LPC13xx ====&lt;br /&gt;
Für die Cortex-M0 und -M3 Familien existieren verschiedene Basispakete die als Startausstattung sehr gut geeignet sind. Auf microbuilder.eu findet man eine sehr interessante Version inklusive Dokumentation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Codebase_f%C3%BCr_LPC1xxx HIER]&#039;&#039;&#039; findet man alle Links zur original Codebase mit allen Dateien (Stand Januar 2012) aber auch eine deutsche Übersetzung zu den Files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CooCox ===&lt;br /&gt;
&lt;br /&gt;
Auf der &#039;&#039;&#039;[http://www.coocox.org/Index.html Homepage]&#039;&#039;&#039; von CooCox - einem chinesischen Open-Source Projekt, auf der eine IDE für Atmel, Energy Micro, Holtek, Nuvoton, ST, TI und NXP verfügbar ist  - findet man die auf Eclipse basierende &amp;quot;CooCox CoIDE&amp;quot;, die sich aus dem &amp;quot;CoBuilder&amp;quot; und dem &amp;quot;CoDebugger&amp;quot; zusammensetzt.&lt;br /&gt;
Des Weiteren bietet man dort ein Echtzeit-Multitasking Betriebssystem, sowie SW-Versionen von zwei unterschiedliche Debugging-Adapter und ein Stand-alone Flash-Tool zum freien Download an.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Controller können damit programmiert und debugged werden:&lt;br /&gt;
    LPC1111x101    LPC1111x201   LPC1112x101   LPC1112x201&lt;br /&gt;
    LPC1113x201    LPC1113x301   LPC1114x201   LPC1114x301&lt;br /&gt;
    LPC11C14x301   LPC11C12x301&lt;br /&gt;
    LPC1224x101    LPC1224x121   LPC1225x301   LPC1225x321   LPC1226x301  LPC1227x301&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    LPC1311   LPC1313   LPC1342   LPC1343&lt;br /&gt;
    LPC1751   LPC1752   LPC1754   LPC1756   LPC1758   LPC1759&lt;br /&gt;
    LPC1763   LPC1764   LPC1765   LPC1766   LPC1767   LPC1768   LPC1769&lt;br /&gt;
&lt;br /&gt;
=== Codebase ===&lt;br /&gt;
Des Weiteren existiert eine umfangreiche Sammlung von &#039;&#039;&#039;[http://www.coocox.org/NXP-Series.php Code-Beispielen]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== WinARM ===&lt;br /&gt;
[http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/#winarm WinARM] (wird derzeit nicht gepflegt)&lt;br /&gt;
&lt;br /&gt;
=== GNUARM ===&lt;br /&gt;
[http://gnuarm.com/ GNUARM] (Linux, Windows, wird derzeit nicht gepflegt), &lt;br /&gt;
&lt;br /&gt;
=== Yagarto ===&lt;br /&gt;
[http://www.yagarto.de/ Yagarto] (Windows, mit Eclipse-Integration) &lt;br /&gt;
&lt;br /&gt;
=== CodeSourcery ===&lt;br /&gt;
[http://www.codesourcery.com/gnu_toolchains/arm CodeSourcery CodeBench Lite]&lt;br /&gt;
&lt;br /&gt;
== CMSIS  -  Standard für alle Platformen ==&lt;br /&gt;
Der Cortex Microcontroller Software Interface Standard (CMSIS) stellt einen &amp;quot;abstraction layer&amp;quot; für alle Cortex-Mx Controller zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
CMSIS stellt einen Schnittstellenstandard von ARM dar, der von vielen Tool-Herstellern unterstützt wird und ist (laut verschiedener Berichte)  kompatibel mit den verschiedensten Compilern (incl GCC). Dies wird erreicht durch einheitliche Definitionen für Adressen und Namen die den Zugriff auf die Register des Cores und der Peripherie ermöglichen.&lt;br /&gt;
Auch Standard-Funktionen für den Start und die Interrupts stehen zur Verfügung.&lt;br /&gt;
Natürlich kann auch weiterhin direkt auf die HW zugegriffen werden, es geht nur um eine Vereinheitlichung von identischen Funktionen. &lt;br /&gt;
Da die Peripherie-Teile zumindest innerhalb eines Halbleiterherstellers für die Cortex-Mx Controller sehr ähnlich oder sogar weitgehend identisch sind kann deutlich mehr SW für verschiedene Derivate innerhalb dieser Prozessorfamilien wiederverwendet werden.  (siehe Google: &amp;quot;CMSIS_Doulos_Tutorial.pdf&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Ein weiterer, interessanter Punkt ist die CMSIS-DSP Lib mit ihren Vektorfunktionen, Matrix-Berechnung sowie komplexen Algorithmen für Filter, &lt;br /&gt;
Regler und Fourietransformation sowie weiterer DSP Algorithmen (insgesamt 61).&lt;br /&gt;
&lt;br /&gt;
Leider hat diese Kompatibilität auch seine Grenzen, denn Sonderfunktionen bzw. Spezialitäten in der &amp;quot;gleichen&amp;quot; Peripherie zwischen unterschiedlichen Halbleiterherstellern werden nicht abgedeckt. &lt;br /&gt;
Wäre auch zu schön, wenn die Prozesorhersteller dem Entwickler dadurch einen fliegenden HW-Wechsel bzw. eine einfache Vergleichbarkeit ermöglichen würden ;-)&lt;br /&gt;
&lt;br /&gt;
Eine komplette CMSIS-Lib (V2.0) &amp;quot;Cortex Microcontroller Software Interface Standard&amp;quot; ist für das &amp;quot;Code Red&amp;quot; Paket verfügbar, inklusive einer &amp;quot;DSP-Library&amp;quot; &lt;br /&gt;
http://support.code-red-tech.com/CodeRedWiki/NewInVersion4&lt;br /&gt;
bzw. für GNU / Keil / IAR unter&lt;br /&gt;
http://ics.nxp.com/support/documents/microcontrollers/?search=CMSIS&amp;amp;type=software&amp;amp;Search.x=8&amp;amp;Search.y=12&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/LPC1xxx_Entwicklungskit_LPCXpresso LPCXpresso-Entwicklungskit]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Installationsanleitung_C-Entwicklungsumgebung_f%C3%BCr_LPC1xxx_von_Code_Red Installationsanleitung zur IDE von Code-Red]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Codebase_f%C3%BCr_LPC1xxx LPC1xxx Codebase]&lt;br /&gt;
&lt;br /&gt;
Suche im Forum nach&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=LPC11* LPC11xx]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=LPC12* LPC12xx]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=LPC13* LPC13xx]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=LPC17* LPC17xx]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=LPC18* LPC18xx]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
Versandhäuser für Privatpersonen&lt;br /&gt;
&lt;br /&gt;
* [http://darisusgmbh.de/shop/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 Darisus]&lt;br /&gt;
* [http://www.hbe-shop.de HBE] &lt;br /&gt;
* [http://www.tme.eu/de/katalog#cleanParameters%3D1%26searchClick%3D1%26search%3DLPC1%26bf_szukaj%3D+ TME]&lt;br /&gt;
* [http://www.tn-electronics.de/advanced_search_result.php?keywords=LPC1&amp;amp;x=0&amp;amp;y=0 TN]&lt;br /&gt;
* [http://de.mouser.com/_/?Keyword=LPC1&amp;amp;Ns=Pricing|0&amp;amp;FS=True Mouser]&lt;br /&gt;
* [http://www.soselectronic.eu/?searchstring=LPC1&amp;amp;str=378 SOS]&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
* [http://www.watterott.com/index.php?x79e1c=i52drq5oir64v4l66rk9856re1&amp;amp;page=search&amp;amp;page_action=query&amp;amp;desc=on&amp;amp;sdesc=on&amp;amp;keywords=LPCXpresso&amp;amp;x=0&amp;amp;y=0 Watterott (24€ inclusive JTAG-Programmiergerät UND JTAG Debugger für kostenlose &amp;quot;Code-Red&amp;quot; Entwicklungsplattform)], dazu hier die &#039;&#039;&#039;[http://www.mikrocontroller.net/wikisoftware/index.php?title=LPC1xxx_Entwicklungskit_LPCXpresso&amp;amp;action=edit Beschreibung]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.lpctools.com/evaluationboardskitsforlpc17xx.aspx LPC-Tools]&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities ==&lt;br /&gt;
&lt;br /&gt;
* http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html&lt;br /&gt;
* http://www.nxp.com/#/page/content=[f=/dynamic/applicationnotes/tid-50809_sid-56890/data.xml]&lt;br /&gt;
* [http://mbed.org/handbook/Homepage MBED]&lt;br /&gt;
* [http://forums.nxp.com/forums/viewforum.php?f=1 NXP-WIKI]&lt;br /&gt;
* [http://knowledgebase.nxp.com/forumdisplay.php?s=389a3610c741bca7b18221d32b9c0ce0&amp;amp;f=4 NXP-Forum]&lt;br /&gt;
* [http://ics.nxp.com/lpcxpresso/ LPCXpresso]&lt;br /&gt;
* [http://code.google.com/p/32bitmicro/ 32BitMicro]&lt;br /&gt;
* [http://www.brc-electronics.nl]&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsplattformen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.code-red-tech.com/red-suite-4-nxp.php Code-Red (Kostenlos mit Debugger)]&lt;br /&gt;
* [http://support.code-red-tech.com/CodeRedWiki/WikiHome CR-WIKI]&lt;br /&gt;
* ARM/Keil MDK-ARM&lt;br /&gt;
* IAR EWARM&lt;br /&gt;
* Rowley Crossworks&lt;br /&gt;
* Green Hills Software &lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:LPC1x| ]]&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_Bootloader_FastBoot_von_Peter_Dannegger&amp;diff=26050</id>
		<title>AVR Bootloader FastBoot von Peter Dannegger</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_Bootloader_FastBoot_von_Peter_Dannegger&amp;diff=26050"/>
		<updated>2008-02-04T14:24:22Z</updated>

		<summary type="html">&lt;p&gt;Jojos: /* Downloads */ Link Protokollbeschreibung hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Karsten Donat&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Was ist ein Bootloader? ==&lt;br /&gt;
&lt;br /&gt;
Der Bootloader ist selbst ein kleines Programm. Es wird beim Start des Controllers zuerst ausgeführt. Damit das PC-Programm für das Firmware-Update sich melden kann, wartet der Bootloader  eine gewisse Zeit (hier 0,33 Sekunden) auf ein Zeichen über die serielle Schnittstelle (UART  RS232, USB). Kommt dies Zeichen wird die neue Firmware gebrannt. Andernfalls wird das eigentliche Programm des Controllers ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Dem eigentlichen Anwendungsprogramm geht natürlich der Platz den der Bootloader benötigt verloren. Da Peters Bootloader jedoch in ein 512Bytes (256 Worte!) großes Segment passt, stört das nicht weiter.&lt;br /&gt;
&lt;br /&gt;
Normalerweise wird der Programmcode des Microcontrollers mit einem ISP-Dongle in den Flash gebrannt. Aus verschiedenen Gründen kann dies jedoch nicht möglich/ gewünscht sein:&lt;br /&gt;
* Speed: Der ISP-Dongle kann langsam sein (z.B. myAVR mit aktuellem AVRDude)&lt;br /&gt;
* PINs: Man braucht die PINs und will ISP abschalten ( Fuses, aber Vorsicht!, danach kann man nur mit dem Bootloader oder einem STK-500 noch an den Flash)&lt;br /&gt;
* Komfort: Man möchte dem Kunden/ Nutzer die Möglichkeit geben, eine neue Firmware selbst einzuspielen. In der Regel hat dieser jedoch keinen ISP-Dongle zur Hand. Eine Rs232/ USB ist aber oftmals vorhanden.&lt;br /&gt;
* Sicherheit: Man möchte dem Kunden nicht die Firmware in deassemblierbarer Form geben (über geänderten Bootloader kann die Datei verschlüsselt sein)&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/73196 http://www.mikrocontroller.net/topic/73196] - Forum-Beitrag und Bootloader&lt;br /&gt;
* [http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725 http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725] - Atmel AVR-Studio (Bootloader compilieren)&lt;br /&gt;
* [http://www.KarstenDonat.de/AVR/Bootloader.pdf http://www.KarstenDonat.de/AVR/Bootloader.pdf] - diese Anleitung als PDF&lt;br /&gt;
* [http://www.KarstenDonat.de/AVR http://www.KarstenDonat.de/AVR] - ATMega IDE 2007&lt;br /&gt;
* [http://www.myavr.de/download/myAVR_WorkpadPLUS_Demo.exe http://www.myavr.de/download/myAVR_WorkpadPLUS_Demo.exe] - myAVR Workpad Plus Demoversion (Fuses beim myAVR ändern)&lt;br /&gt;
* [http://www.kreatives-chaos.com/artikel/fastboot17-frontend-python Python Implementierung des bootloaders]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/27570/Bootloaderprotokoll.txt http://www.mikrocontroller.net/attachment/27570/Bootloaderprotokoll.txt] - Protokollbeschreibung&lt;br /&gt;
&lt;br /&gt;
== Bootloader anpassen ==&lt;br /&gt;
&lt;br /&gt;
=== CPU-Frequenz, Wartezeit - FASTLOAD.H ===&lt;br /&gt;
&lt;br /&gt;
Bei XTAL die benutzte Frequenz des Controllers einstellen (jungfräuliche AVRs haben oft intern 1MHz aktiviert!).&lt;br /&gt;
Im Standard Makefile von WinAVR steht die Frequenz unter F_CPU&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
.equ	XTAL		= 3686400	; 8MHz, not critical&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Wartezeit auf das Firmware-Update beim Booten anzupassen:&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
.equ	BootDelay	= XTAL / 3	; 0.33s&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UART Port/ Pins – M*.ASM ===&lt;br /&gt;
&lt;br /&gt;
Da die verwendeten Pins für die Schnittstelle freiwählbar sind, müssen diese noch eingestellt werden. Für einige Controller liegen bereits Definitionsdateien bei. Für den ATMega 8 heißt die Datei beispielsweise M8.ASM.&lt;br /&gt;
&lt;br /&gt;
STX_PORT: hier den Sende Port angeben. Für den Hardware-UART des M8 wäre das Port D.&lt;br /&gt;
Es muss aber nicht der Hardware-UART sein! (wenn man den aber eh als Schnittstelle nutzt ist es sinnvoll)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
.equ    STX_PORT        = PORTD&lt;br /&gt;
.equ    STX_DDR         = DDRD&lt;br /&gt;
.equ    STX             = PD1&lt;br /&gt;
&lt;br /&gt;
.equ    SRX_PIN         = PIND&lt;br /&gt;
.equ    SRX_PORT        = PORTD&lt;br /&gt;
.equ    SRX             = PD0&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&#039;&#039;Beispiel für Hardware-UART im ATMega 8, 48, 168&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man einen neuen Controller hinzufügen möchte, muss noch die BufferSize angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compilieren des Booloaders ==&lt;br /&gt;
&lt;br /&gt;
Da der Booloader in Assembler geschrieben ist, kann der WinAVR nicht so ohneweiteres damit umgehen.&lt;br /&gt;
Das einfachste ist, sich das AVRStudio von Atmel herunterzuladen [http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725 http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725]&lt;br /&gt;
&lt;br /&gt;
Im Unterverzeichnis AvrAssembler2 befindet sich der benötigte Assembler. Das Einfachste ist, sich die unter Appnotes benötigte Include Datei des jeweiligen Controllers (oder das komplette Verzeichnis) und die avrasm2.exe ins Verzeichnis des Bootloaders zu kopieren.&lt;br /&gt;
&lt;br /&gt;
Danach wird der Assembler aufgerufen (m8.asm für ATMega 8)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avrasm2 -fI m8.asm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;Bootloader compilieren&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das AVRStudio lässt sich unter Linux auch mit WINE installieren (die IDE des AVR Studio 4 geht allerdings nicht).&lt;br /&gt;
Der Aufruf des Assemblers ist dann:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wine avrasm2.exe -fI M8.ASM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;Bootloader mit Hilfe von WINE compilieren&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Brennen des Bootloaders ==&lt;br /&gt;
&lt;br /&gt;
Der nun erzeugte Bootloader wird mit dem vorhanden ISP Dongle in den AVR gebrannt (Intel Hex Format)&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;avrdude&amp;quot; -p m8 -c avr910 -P com1 -U flash:w:&amp;quot;C:\Developing\AVR\Test\Bootloader Peter Dannegger\fastload_V14\m8 3686400.hex&amp;quot;:i&lt;br /&gt;
  -U flash:v:&amp;quot;C:\Developing\AVR\Test\Bootloader Peter Dannegger\fastload_V14\m8 3686400.hex&amp;quot;:i -y&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Brennen mit AVRDude auf COM 1 und einem AVR910 kompatiblen Dongle (z.B. myAVR USB)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Einstellen der Fuses ==&lt;br /&gt;
&lt;br /&gt;
Damit der Bootloader zu Beginn gestartet wird, müssen die entsprechenden Fuses gesetzt werden. Möglich ist dies u.a. mit der AVRDude GUI.&lt;br /&gt;
* BOOTRST muss auf 0 gestellt werden (aktiviert den Bootloader)&lt;br /&gt;
* BOOTSZ muss auf 10 gestellt werden für 256 Worte&lt;br /&gt;
&lt;br /&gt;
Bei einigen Controllern wie z.B. dem ATMega 48 wird das Flag&lt;br /&gt;
* Selfprogramming enabled gesetzt.&lt;br /&gt;
&lt;br /&gt;
=== Fuses mit myAVR ändern ===&lt;br /&gt;
&lt;br /&gt;
Der myAVR Dongle unterstützt leider keine Fuses mit AVRDude. Abhilfe liefert hier jedoch das myAVR Worpad Plus. Die Demo-Version (reicht hierfür) kann unter&lt;br /&gt;
&lt;br /&gt;
[http://www.myavr.de/download/myAVR_WorkpadPLUS_Demo.exe http://www.myavr.de/download/myAVR_WorkpadPLUS_Demo.exe] - myAVR Workpad Plus Demoversion&lt;br /&gt;
&lt;br /&gt;
heruntergeladen werden.&lt;br /&gt;
Nach dem Installieren und starten im Menü Extras – Fuse- und Lock-Bits wählen.&lt;br /&gt;
Das Programm ermittelt automatisch den aktuellen Status. Je nach Controller steht der Bootloader Support unter High oder Extended Fuses.&lt;br /&gt;
&lt;br /&gt;
== Brennen des eigentlichen Programmes ==&lt;br /&gt;
&lt;br /&gt;
Damit das Programm mit Peters Tool in den Controller geladen werden kann, muss im Intel HEX Format vorliegen.&lt;br /&gt;
Im makefile Template von WinAVR (und auch der ATMegaIDE) ist dies standardmäßig eingestellt.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
# Output format. (can be srec, ihex, binary)&lt;br /&gt;
FORMAT = ihex&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach wird Peters Firmware-Update Tool aufgerufen (hier COM 2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fboot /C2 /Pmain.hex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;hier wird die main.hex als Hauptprogramm gebrannt&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wenn noch keine Firmware im Controller ist (direkt nach Installieren des Bootloaders) startet der Brennvorgang automatisch. Andernfalls wartet das Programm auf den Reset des Controllers.&lt;br /&gt;
Peters Tool arbeitet nur mit COM1 bis COM4 zusammen. Also ggf. den USB Adapter im Gerätemanager umstellen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Booloader-Support in ATMegaIDE 2007 ==&lt;br /&gt;
&lt;br /&gt;
Die IDE kann wahlweise mit AVRDude und einem entsprechenden ISP-Dongle oder mit dem Bootloader das Programm in den Flash brennen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Anpassen des Programms ===&lt;br /&gt;
Um das Firmware Update komfortabler zu gestalten kann ein Software-Reset eingebaut werden, der per RS232/ USB Schnittstelle oder Tastendruck ausgelöst wird.&lt;br /&gt;
&lt;br /&gt;
==== Tastendruck ====&lt;br /&gt;
In der mitgelieferten Standard.h gibt es den Befehl void Reset();. Er löst mit Hilfe des Watchdog-Timers einen Hardwarereset aus.&lt;br /&gt;
Man kann jetzt z.B. auf einen bestimmten Tastendruck (-kombination) hin diesen Reset ausführen.&lt;br /&gt;
&lt;br /&gt;
==== RS232/ USB ====&lt;br /&gt;
Alternativ kann ein entsprechender Befehl über die RS232 gesendet werden. Standardmäßig ist dies 0xFF ‚R‘.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Einstellungen in der IDE ===&lt;br /&gt;
&lt;br /&gt;
Der Bootloader Support kann bei den Projekt-Eigenschaften eingestellt werden. Beim Brennen wird er dann automatisch benutzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== ToDo ==&lt;br /&gt;
&lt;br /&gt;
=== Support großer ATMegas ===&lt;br /&gt;
&lt;br /&gt;
Peter und andere arbeiten momentan noch an der Anpassung für größere Controller wie den ATMega 128.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Komfortables Stand-Alone Firmware-Update ===&lt;br /&gt;
&lt;br /&gt;
Basierend auf dem Code der IDE wird es im September noch ein Standalone Programm für das Firmware-Update geben. Es wird auch ein entsprechendes Protokoll zur Versionskontrollle haben. (bisherige Soft- und viel wichtiger Hardwareversion wird gechecked). Eine Verschlüsselung der Firmware-Datei ist in Planung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Automatisches erzeugen des Booloaders ===&lt;br /&gt;
Sobald ich Zeit habe kommt in die IDE auch die Möglichkeit, die Anpassungen des Bootloaders von der IDE durchführen zu lassen.&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]]&lt;/div&gt;</summary>
		<author><name>Jojos</name></author>
	</entry>
</feed>