<?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=Johnpatcher</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=Johnpatcher"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Johnpatcher"/>
	<updated>2026-04-11T18:26:56Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP&amp;diff=84914</id>
		<title>IRMP</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP&amp;diff=84914"/>
		<updated>2014-09-18T18:42:14Z</updated>

		<summary type="html">&lt;p&gt;Johnpatcher: /* avr-gcc-Optimierungen */: Unterscheidung zwischen Windows und Linux entfernt, da laut Manpage o.g. Optionen tatsächlich notwendig sind.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Von &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
Da RC5 nicht nur veraltet, sondern mittlerweile obsolet ist und immer mehr die elektronischen Geräte der fernöstlichen Unterhaltungsindustrie in unseren Haushalten Einzug finden, ist es an der Zeit, einen IR-Decoder zu entwickeln, der ca. 90% aller bei uns im täglichen Leben zu findenden IR-Fernbedienungen &amp;quot;versteht&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Im folgenden wird IRMP als &amp;quot;Infrarot-Multiprotokoll-Decoder&amp;quot; in allen Einzelheiten vorgestellt. Auch das Gegenstück, nämlich IRSND als IR-Encoder, wird in diesem Artikel behandelt.&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrarot-Multiprotokoll-Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:IRMP-TSOP1736.png|miniatur|Anschluß eines IR-Empfängers an µC]]&lt;br /&gt;
&lt;br /&gt;
=== Unterstützte µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] ist u.a. lauffähig auf folgenden AVR µCs:&lt;br /&gt;
&lt;br /&gt;
* ATtiny87,  ATtiny167&lt;br /&gt;
* ATtiny45,  ATtiny85&lt;br /&gt;
* ATtiny44,  ATtiny84&lt;br /&gt;
* ATmega8,   ATmega16,  ATmega32&lt;br /&gt;
* ATmega162&lt;br /&gt;
* ATmega164, ATmega324, ATmega644,  ATmega644P, ATmega1284&lt;br /&gt;
* ATmega88,  ATmega88P, ATmega168,  ATmega168P, ATmega328P&lt;br /&gt;
&lt;br /&gt;
Es gibt aber auch Portierungen auf diverse PIC µCs - für den CCS- und C18-Compiler. Auch ist [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] mittlerweile auf ARM STM32 und Stellaris LM4F120 Launchpad von TI (ARM Cortex M4) lauffähig.&lt;br /&gt;
&lt;br /&gt;
=== Unterstützte IR-Protokolle ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] - der Infrarot-Fernbedienungsdecoder, der mehrere Protokolle auf einmal decodieren kann, beherrscht folgende Protokolle (in alphabetischer Reihenfolge):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Protokoll || Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#A1TVBOX|A1TVBOX]] || ADB (Advanced Digital Broadcast), z.B. A1 TV Box &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#APPLE|APPLE]] || Apple &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#B&amp;amp;O|B&amp;amp;O]] || Bang &amp;amp; Olufsen &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#BOSE|BOSE]] || Bose &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#DENON|DENON]] || Denon, Sharp &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#FDC|FDC]] || FDC Keyboard &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#GRUNDIG_+_NOKIA|GRUNDIG]] || Grundig &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#GRUNDIG_+_NOKIA|NOKIA]] || Nokia, z.B. D-Box &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#IR60 (SDA2008)|IR60 (SDA2008)]] || Diverse europäische Hersteller &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#JVC|JVC]] || JVC &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#KASEIKYO|KASEIKYO]] || Panasonic, Technics, Denon und andere japanische Hersteller, welche Mitglied der &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot; sind. &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#KATHREIN|KATHREIN]]  || KATHREIN &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#LEGO|LEGO]]   || Lego &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#LGAIR|LGAIR]]   || LG Air Conditioner &#039;&#039;&#039;(NEU, nur im SVN)&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#MATSUSHITA|MATSUSHITA]] || Matsushita &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#NEC16|NEC16]]  || JVC, Daewoo &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#NEC42|NEC42]]  || JVC &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#NEC_+_extended_NEC|NEC]] || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName und viele weitere japanische Hersteller. &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#NETBOX|NETBOX]]  || Netbox &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#NIKON|NIKON]] || NIKON &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#NUBERT|NUBERT]] || Nubert, z.B. Subwoofer System &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#ORTEK|ORTEK]] || Ortek, Hama (z. Zt. nur im SVN!)&lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#RC5_+_RC5X|RC5]] || Philips und andere europäische Hersteller &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#RC6_+_RC6A|RC6A]] || Philips, Kathrein und andere Hersteller, z.B. XBOX &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#RC6_+_RC6A|RC6]] || Philips und andere europäische Hersteller &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#RCCAR|RCCAR]] || RC Car: IR Fernbedienung für Modellfahrzeuge &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#RECS80|RECS80]] || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#RECS80EXT|RECS80EXT]] || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#RCMM|RCMM]] || Fujitsu-Siemens z.B. Activy keyboard &#039;&#039;&#039;(NEU!)&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#ROOMBA|ROOMBA]] || iRobot Roomba Staubsauger&lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#SAMSUNG32|SAMSUNG32]] || Samsung &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#SAMSUNG48|SAMSUNG48]] || Div. Klimaanlagen Hersteller  (&#039;&#039;&#039;NEU&#039;&#039;&#039;! z. Zt. nur im SVN!)&lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#SAMSUNG|SAMSUNG]] || Samsung &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#SIEMENS_+_RUWIDO|RUWIDO]] || RUWIDO (z.B. T-Home-Mediareceiver, MERLIN-Tastatur (Pollin)) &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]] || Siemens, z.B. Gigaset M740AV &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#SIRCS|SIRCS]] || Sony &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#SPEAKER|SPEAKER]] || Lautsprecher Systeme wie z.B. X-Tensions &#039;&#039;&#039;(NEU, nur im SVN!)&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#TELEFUNKEN|TELEFUNKEN]] || Telefunken &lt;br /&gt;
|- &lt;br /&gt;
| [[IRMP#THOMSON|THOMSON]] || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jedes dieser Protokolle ist einzeln aktivierbar. Wer möchte, kann alle Protokolle aktivieren. Wer nur ein Protokoll braucht, kann alle anderen deaktivieren. Es wird nur das vom Compiler übersetzt, was auch benötigt wird.&lt;br /&gt;
&lt;br /&gt;
=== Entstehung ===&lt;br /&gt;
&lt;br /&gt;
Der auf AVR- und PIC-µCs einsetzbare Source zu [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] entstand im Rahmen des [[Word Clock]] Projektes.&lt;br /&gt;
&lt;br /&gt;
=== Thread im Forum ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anlass für einen eigenen [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]]-Artikel ist folgender Thread in der Codesammlung: [http://www.mikrocontroller.net/topic/162119 Beitrag: IRMP - Infrared Multi Protocol Decoder]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== IR-Protokolle ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC-Protokoll, Reichelt RGB-LED-Fernbedienung, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Einige Hersteller verwenden ihr eigenes hausinterne Protokoll, dazu gehören u.a. Sony, Samsung und Matsushita. Philips hat [[IRMP#RC5 + RC5X|RC5]] entwickelt und natürlich auch selbst benutzt. [[IRMP#RC5 + RC5X|RC5]] galt damals in Europa als &#039;&#039;das&#039;&#039; Standard-IR-Protokoll, welches von vielen europäischen Herstellern übernommen wurde. Mittlerweile ist [[IRMP#RC5 + RC5X|RC5]] fast gar nicht mehr anzutreffen - man kann es eigentlich als &amp;quot;ausgestorben&amp;quot; abhaken. Der Nachfolger [[IRMP#RC6_+_RC6A|RC6]] wird zwar noch in einigen aktuellen europäischen Geräten eingesetzt, ist aber auch nur vereinzelt vorzufinden.&lt;br /&gt;
&lt;br /&gt;
Auch die japanischen Hersteller haben versucht, einen eigenen Standard zu etablieren, nämlich das sog. [[IRMP#KASEIKYO|Kaseikyo]]- (oder auch &amp;quot;Japan-&amp;quot;) Protokoll. Dieses ist mit einer Bitlänge von 48 sehr universell und allgemein verwendbar. Richtig durchgesetzt hat es sich aber bis heute nicht - auch wenn man es hier und da im heimischen Haushalt vorfindet.&lt;br /&gt;
&lt;br /&gt;
Heutzutage wird (auch vornehmlich bei japanischen Geräten) das [[IRMP#NEC_+_extended_NEC|NEC]]-Protokoll verwendet - und zwar von den unterschiedlichsten (Marken- und auch Noname-)Herstellern. Ich schätze den &amp;quot;Marktanteil&amp;quot; auf ca. 80% beim [[IRMP#NEC_+_extended_NEC|NEC]]-Protokoll. Fast alle Fernbedienungen im alltäglichen Einsatz verwenden bei mir den [[IRMP#NEC_+_extended_NEC|NEC]]-IR-Code. Das fängt beim Fernseher an, geht über vom DVD-Player zur Notebook-Fernbedienung und reicht bis zur Noname-MultiMedia-Festplatte - um nur einige Beispiele zu nennen.&lt;br /&gt;
&lt;br /&gt;
== Kodierungen ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] unterstützt folgende IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP#Pulse Distance|Pulse Distance]], typ. Beispiel: [[IRMP#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP#Pulse Width|Pulse Width]], typ. Beispiel: [[IRMP#SIRCS|Sony SIRCS]]&lt;br /&gt;
* [[IRMP#Biphase|Biphase (Manchester)]], typ. Beispiel: Philips [[IRMP#RC5_+_RC5X|RC5]], [[IRMP#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP#Pulse Position|Pulse Position (NRZ)]], typ. Beispiel: [[IRMP#NETBOX|Netbox]]&lt;br /&gt;
* [[IRMP#Pulse Distance Width|Pulse Distance Width]], typ. Beispiel: [[IRMP#NUBERT|Nubert]]&lt;br /&gt;
&lt;br /&gt;
Die Pulse werden dabei moduliert - üblicherweise mit 36kHz oder 38kHz - um Umwelteinflüsse wie Raum- oder Sonnenlicht ausfiltern zu können.&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
Eine Pulse Distance Kodierung erkennt man an der folgenden Regel:&lt;br /&gt;
&lt;br /&gt;
* es gibt nur &#039;&#039;&#039;eine Pulslänge&#039;&#039;&#039; und &#039;&#039;&#039;zwei verschiedene Pausenlängen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Pulse Width ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Pulse-Width.png|miniatur|Pulse Width Coding]]&lt;br /&gt;
&lt;br /&gt;
Bei der Pulse Width Kodierung gilt die Regel:&lt;br /&gt;
&lt;br /&gt;
* es gibt &#039;&#039;&#039;zwei verschiedene Pulslängen&#039;&#039;&#039; und nur &#039;&#039;&#039;eine Pausenlänge&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Width ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Pulse-Distance-Width.png|miniatur|Pulse Distance Width Coding]]&lt;br /&gt;
&lt;br /&gt;
Dies ist ein Mischmasch aus Pulse Distance und Pulse Width Coding.&lt;br /&gt;
&lt;br /&gt;
Also:&lt;br /&gt;
&lt;br /&gt;
* es gibt &#039;&#039;&#039;zwei verschiedene Pulslängen&#039;&#039;&#039; und &#039;&#039;&#039;zwei verschiedene Pausenlängen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Biphase ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Biphase-Coding.png|miniatur|Biphase Coding]]&lt;br /&gt;
&lt;br /&gt;
Bei der Biphase Kodierung entscheidet die Reihenfolge von Puls und Pause über den Wert des Bits.&lt;br /&gt;
&lt;br /&gt;
Damit erkennt man ein Biphase-Coding an folgendem Kriterium:&lt;br /&gt;
&lt;br /&gt;
* es kommen genau &#039;&#039;&#039;eine&#039;&#039;&#039; Pausen- und eine Pulslänge, sowie jeweils die &#039;&#039;&#039;doppelten&#039;&#039;&#039; Puls-/Pausenlängen vor&lt;br /&gt;
&lt;br /&gt;
Normalerweise sind die Längen für die Pulse und Pausen gleich, d.h. die Signalform ist symmetrisch. IRMP erkennt aber auch Protokolle, die mit unterschiedlichen Puls-/Pause-Längen arbeiten. Dies ist zum Beispiel bei dem [[IRMP#A1TVBOX|A1TVBOX]]-Protokoll der Fall.&lt;br /&gt;
&lt;br /&gt;
=== Pulse Position ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Pulse-Position.png|miniatur|Pulse Position Coding]]&lt;br /&gt;
&lt;br /&gt;
Die Pulse Position Kodierung kennt man von den üblichen UARTs. Hier hat jedes Bit eine feste Länge. Je nach Wert (0 oder 1) ist es ein Puls oder eine Pause.&lt;br /&gt;
&lt;br /&gt;
Typisches Kriterium für ein &#039;&#039;&#039;Pulse Position Protokoll&#039;&#039;&#039; ist:&lt;br /&gt;
&lt;br /&gt;
* es kommen &#039;&#039;&#039;Vielfache&#039;&#039;&#039; einer Grund-Puls-/Pausenlänge vor&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eine tabellarische Aufstellung der verschiedenen IR-Protokolle findet man hier: [[IRMP#Die_IR-Protokolle_im_Detail|Die IR-Protokolle im Detail]].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die dort angegebenen Timingwerte sind Idealwerte. Bei einigen Fernbedienungen in der Praxis weichen sie um bis zu 40% voneinander ab. Deshalb arbeitet [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] mit Minimum-/Maximumsgrenzen, um bzgl. des Zeitverhaltens tolerabel zu sein.&lt;br /&gt;
&lt;br /&gt;
== Protokoll-Erkennung ==&lt;br /&gt;
&lt;br /&gt;
Die von [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] decodierten Protokolle haben etwas gemeinsames: Sie weisen alle 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 die verschiedenen Protokolle unterschieden. [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] misst also das Timing des Start-Bits und stellt dann &amp;quot;on-thy-fly&amp;quot; seine Timingtabellen auf das erkannte Protokoll um, damit die nach dem Start-Bit gesandten Daten in einem Rutsch eingelesen werden können, ohne das komplette Telegramm (Frame) erst speichern zu müssen. [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] wartet also nicht darauf, dass ein kompletter Frame eingelesen wurde, sondern legt direkt nach der ersten Pulserkennung los.&lt;br /&gt;
&lt;br /&gt;
Ist das gelesene Start-Bit nicht eindeutig, fährt [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] &amp;quot;mehrspurig&amp;quot;, d.h. es werden zum Beispiel zwei mögliche Protokolle gleichzeitig verfolgt. Sobald aus Plausibilitätsgründen eines der beiden Protokolle nicht mehr möglich sein kann, wird komplett auf das andere Protokoll gewechselt.&lt;br /&gt;
&lt;br /&gt;
Realisiert wird die Erkennung über eine [[Statemachine]], die [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|timergesteuert]] über eine [[Interrupt|Interruptroutine]] in regelmäßigen Abständen (üblicherweise 15.000 mal in der Sekunde) aufgerufen wird. Die [[Statemachine]] kennt (unter anderem) folgende Zustände:&lt;br /&gt;
&lt;br /&gt;
* Erkenne den ersten Puls des Start-Bits&lt;br /&gt;
* Erkenne die Pause des Start-Bits&lt;br /&gt;
* Erkenne den Puls des ersten Datenbits&lt;br /&gt;
&lt;br /&gt;
Danach sind die Puls/Pause-Längen des Startbits bekannt. Nun werden alle vom Anwender aktivierten Protokolle nach diesen Längen durchsucht. Wurde ein Protokoll gefunden, werden die Timing-Tabellen dieses Protokolls geladen und im weiteren geprüft, ob die nachfolgenden Puls-/Pause-Zeiten innerhalb der geladenen Werte übereinstimmen.&lt;br /&gt;
&lt;br /&gt;
Es geht also weiter in der [[Statemachine]] mit folgenden Zuständen&lt;br /&gt;
&lt;br /&gt;
* Erkenne die Pausen der Datenbits&lt;br /&gt;
* Erkenne die Pulse der Datenbits&lt;br /&gt;
* Prüfe Timing. Wenn abweichend, schalte um auf ein anderes noch in Frage kommendes IR-Protokoll, ansonsten schalte [[Statemachine]] komplett zurück&lt;br /&gt;
* Erkenne das Stop-Bit, falls das Protokoll eines vorsieht&lt;br /&gt;
* Prüfe Daten auf Plausibilität, wie CRC oder andere redundante Datenbits&lt;br /&gt;
* Wandle die Daten in Geräte-Adresse und Kommando&lt;br /&gt;
* Erkenne Wiederholungen durch längere Tastendrücke, setze entsprechendes Flag&lt;br /&gt;
&lt;br /&gt;
Tatsächlich ist die [[Statemachine]] noch etwas komplizierter, da manche Protokolle gar kein Start-Bit (z.B. [[IRMP#DENON|Denon]]) bzw. mehrere Start-Bits (z.B. 4 bei [[IRMP#B.26O|B&amp;amp;O]]) haben bzw. mitten im Frame ein weiteres Synchronisierungs-Bit (z.B. [[IRMP#SAMSUNG|Samsung]]) vorsehen. Diese besonderen Bedingungen werden durch protokollspezifische &amp;quot;Spezialbehandlungen&amp;quot; im Code abgefangen.&lt;br /&gt;
&lt;br /&gt;
Das Umschalten auf ein anderes Protokoll kann mehrfach während des Empfangs des Frames geschehen, z.B. von [[IRMP#NEC42|NEC42]] (42 Bit) auf [[IRMP#NEC16|NEC16]] (8 Bit + Sync-Bit + 8 Bit), wenn vorzeitig ein zusätzliches Synchronisierungsbit erkannt wurde, oder von [[IRMP#NEC + extended NEC|NEC]]/[[IRMP#NEC42|NEC42]] (32/42 Bit) auf [[IRMP#JVC|JVC]] (16 Bit), wenn das Stop-Bit vorzeitig auftrat. Schwierig wird es dann, wenn zwei mögliche Protokolle nach Erkennung des Start-Bits unterschiedliche Kodierungen verwenden, z.B. wenn das eine Protokoll ein [[IRMP#Pulse Distance|Pulse Distance Coding]] und das andere ein [[IRMP#Biphase|Biphase Coding (Manchester)]] benutzt. Hier speichert [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] die jeweils völlig verschieden ermittelten Bits für beide Codierungen, um dann später die einen oder anderen&lt;br /&gt;
Werte wieder zu verwerfen.&lt;br /&gt;
&lt;br /&gt;
Desweiteren senden einige Fernbedienungen bei bestimmten Protokollen aus Gründen der Redundanz (Fehlererkennung) oder wegen längeren Tastendrucks Wiederholungsframes. Diese werden von IRMP unterschieden: Die für die Fehlererkennung zuständigen Frames werden von IRMP geprüft, aber nicht an die Anwendung zurückgegeben, die anderen werden als langer Tastendruck erkannt und entsprechend von IRMP gekennzeichnet.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.6.6, Stand vom 18.09.2014&lt;br /&gt;
&lt;br /&gt;
Download Release-Version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] &amp;amp; [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] sind nun auch über SVN abrufbar: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP im SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Version im SVN kann eine Zwischen- oder Test-Version sein, die nicht den hier dokumentierten Stand widerspiegelt! Im Zweifel verwendet man besser den obigen Download-Link auf Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Software-Änderungen kann man sich hier anschauen: [http://www.mikrocontroller.net/articles/IRMP#Software-Historie_IRMP Software-Historie IRMP]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source-Code ==&lt;br /&gt;
&lt;br /&gt;
Der Source-Code lässt sich einfach für AVR-µCs übersetzen, indem man unter Windows die Projekt-Datei irmp.aps in das AVR Studio 4 lädt.&lt;br /&gt;
&lt;br /&gt;
Für andere Entwicklungsumgebungen ist leicht ein Projekt bzw. Makefile angelegt. Zum Source gehören:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] - Der eigentliche IR-Decoder&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - Sämtliche Definitionen zu den IR-Protokollen&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - Vom Zielsystem abhängige Definitionen für AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.h?view=markup irmp.h] - Include-Datei für die Applikation&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] - Anzupassende Konfigurationsdatei &lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] - Beispiel Anwendung&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
;WICHTIG: Im Applikations-Source sollte nur irmp.h per include eingefügt werden, also lediglich:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;irmp.h&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle anderen Include-Dateien werden automatisch über irmp.h &amp;quot;eingefügt&amp;quot;. Siehe dazu auch die Beispieldatei main.c.&lt;br /&gt;
&lt;br /&gt;
Desweiteren muss die Preprocessor-Konstante &#039;&#039;&#039;F_CPU im Projekt bzw. Makefile&#039;&#039;&#039; gesetzt werden. Diese sollte mindestens den Wert 8000000UL haben, der Prozessor sollte also zumindest mit 8 MHz laufen.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Auch auf PIC-Prozessoren ist [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] lauffähig. Für den PIC-CCS-Compiler sind entsprechende Preprocessor-Konstanten bereits gesetzt, so dass man [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] direkt in der CCS-Entwicklungsumgebung verwenden kann. Lediglich eine kleine Interrupt-Routine wie&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void  TIMER2_isr(void) &lt;br /&gt;
{&lt;br /&gt;
 irmp_ISR ();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ist hinzuzufügen, wobei man den Interrupt auf 66µs (also 15kHz) stellt. &lt;br /&gt;
&lt;br /&gt;
Für AVR-Prozessoren ist ein Beispiel für die Anwendung von [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] zu finden - im wesentlichen geht es da um die [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]]-Initialisierung und den Abruf der empfangenen IR-Telegramme. Das empfangene Protokoll, die Geräte-Adresse und der Kommando-Code wird dann in der AVR-Version auf dem HW-UART ausgegeben.&lt;br /&gt;
&lt;br /&gt;
Für das Stellaris LM4F120 Launchpad von TI (ARM Cortex M4) ist eine entsprechende Timer-Initialisierungsfunktion in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c] bereits integriert.&lt;br /&gt;
&lt;br /&gt;
Ebenso kann [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] auf STM32-Mikroprozessoren eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== avr-gcc-Optimierungen ===&lt;br /&gt;
&lt;br /&gt;
Ab Version avr-gcc 4.7.x kann die [https://gcc.gnu.org/onlinedocs/gccint/LTO.html#LTO LTO-Option] genutzt werden, um den Aufruf der externen Funktion irmp_ISR() aus der eigentlichen ISR effizienter zu machen. Das verbessert das Zeitverhalten der ISR etwas.&lt;br /&gt;
&lt;br /&gt;
Zu den sonst schon üblichen Compiler- und Linker-Optionen kommen noch folgende dazu:&lt;br /&gt;
&lt;br /&gt;
* Zusätzliche Compiler-Option: -flto&lt;br /&gt;
* Zusätzliche Linker-Optionen: -flto -Os&lt;br /&gt;
&lt;br /&gt;
Vergisst man (unter Windows?) die zusätzliche Linker-Option -Os, wird das Binary allerdings wesentlich größer, da dann nicht mehr optimiert wird. Auch muss -flto an den Linker übergeben werden, weil sonst die LTO-Optimierung nicht mehr greift.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration von [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] wird über Parameter in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] vorgenommen, nämlich:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP#F_INTERRUPTS|Anzahl Interrupts pro Sekunde]]&lt;br /&gt;
* [[IRMP#IRMP_SUPPORT_xxx_PROTOCOL|Unterstützte IR-Protokolle]]&lt;br /&gt;
* [[IRMP#IRMP_PORT_LETTER + IRMP_BIT_NUMBER|Hardware-Pin zum IR-Empfänger]]&lt;br /&gt;
* [[IRMP#IRMP_LOGGING|IR-Logging]]&lt;br /&gt;
&lt;br /&gt;
=== Einstellungen in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] decodiert sämtliche oben aufgelisteten Protokolle in einer ISR. Dafür sind einige Angaben nötig. Diese werden in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] eingestellt.&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Anzahl der Interrupts pro Sekunde. Der Wert kann zwischen 10000 und 20000 eingestellt werden. Je höher der Wert, desto besser die Auflösung und damit die Erkennung. Allerdings erkauft man sich diesen Vorteil mit erhöhter CPU-Last. Der Wert 15000 ist meist ein guter Kompromiss.&lt;br /&gt;
&lt;br /&gt;
Standardwert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define F_INTERRUPTS                            15000      // interrupts per second&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IRMP_SUPPORT_xxx_PROTOCOL ====&lt;br /&gt;
&lt;br /&gt;
Hier lässt sich einstellen, welche Protokolle von [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] unterstützt werden sollen. Die Standardprotokolle sind bereits aktiv. Möchte man weitere Protokolle einschalten bzw. einige aus Speicherplatzgründen deaktivieren, sind die entsprechenden Werte in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] anzupassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// typical protocols, disable here!             Enable  Remarks                 F_INTERRUPTS            Program Space&lt;br /&gt;
#define IRMP_SUPPORT_SIRCS_PROTOCOL             1       // Sony SIRCS           &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NEC_PROTOCOL               1       // NEC + APPLE          &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRMP_SUPPORT_SAMSUNG_PROTOCOL           1       // Samsung + Samsung32  &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRMP_SUPPORT_MATSUSHITA_PROTOCOL        1       // Matsushita           &amp;gt;= 10000                  ~50 bytes&lt;br /&gt;
#define IRMP_SUPPORT_KASEIKYO_PROTOCOL          1       // Kaseikyo             &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
&lt;br /&gt;
// more protocols, enable here!                 Enable  Remarks                 F_INTERRUPTS            Program Space&lt;br /&gt;
#define IRMP_SUPPORT_DENON_PROTOCOL             0       // DENON, Sharp         &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRMP_SUPPORT_RC5_PROTOCOL               0       // RC5                  &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRMP_SUPPORT_RC6_PROTOCOL               0       // RC6 &amp;amp; RC6A           &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRMP_SUPPORT_JVC_PROTOCOL               0       // JVC                  &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NEC16_PROTOCOL             0       // NEC16                &amp;gt;= 10000                 ~100 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NEC42_PROTOCOL             0       // NEC42                &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRMP_SUPPORT_IR60_PROTOCOL              0       // IR60 (SDA2008)       &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRMP_SUPPORT_GRUNDIG_PROTOCOL           0       // Grundig              &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRMP_SUPPORT_SIEMENS_PROTOCOL           0       // Siemens Gigaset      &amp;gt;= 15000                 ~550 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NOKIA_PROTOCOL             0       // Nokia                &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
&lt;br /&gt;
// exotic protocols, enable here!               Enable  Remarks                 F_INTERRUPTS            Program Space&lt;br /&gt;
#define IRMP_SUPPORT_BOSE_PROTOCOL              0       // BOSE                 &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRMP_SUPPORT_KATHREIN_PROTOCOL          0       // Kathrein             &amp;gt;= 10000                 ~200 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NUBERT_PROTOCOL            0       // NUBERT               &amp;gt;= 10000                  ~50 bytes&lt;br /&gt;
#define IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL      0       // Bang &amp;amp; Olufsen       &amp;gt;= 10000                 ~200 bytes&lt;br /&gt;
#define IRMP_SUPPORT_RECS80_PROTOCOL            0       // RECS80 (SAA3004)     &amp;gt;= 15000                  ~50 bytes&lt;br /&gt;
#define IRMP_SUPPORT_RECS80EXT_PROTOCOL         0       // RECS80EXT (SAA3008)  &amp;gt;= 15000                  ~50 bytes&lt;br /&gt;
#define IRMP_SUPPORT_THOMSON_PROTOCOL           0       // Thomson              &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NIKON_PROTOCOL             0       // NIKON camera         &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NETBOX_PROTOCOL            0       // Netbox keyboard      &amp;gt;= 10000                 ~400 bytes (PROTOTYPE!)&lt;br /&gt;
#define IRMP_SUPPORT_ORTEK_PROTOCOL             0       // ORTEK (Hama)         &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRMP_SUPPORT_TELEFUNKEN_PROTOCOL        0       // Telefunken 1560      &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRMP_SUPPORT_FDC_PROTOCOL               0       // FDC3402 keyboard     &amp;gt;= 10000 (better 15000)  ~150 bytes (~400 in combination with RC5)&lt;br /&gt;
#define IRMP_SUPPORT_RCCAR_PROTOCOL             0       // RC Car               &amp;gt;= 10000 (better 15000)  ~150 bytes (~500 in combination with RC5)&lt;br /&gt;
#define IRMP_SUPPORT_ROOMBA_PROTOCOL            0       // iRobot Roomba        &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRMP_SUPPORT_RUWIDO_PROTOCOL            0       // RUWIDO, T-Home       &amp;gt;= 15000                 ~550 bytes&lt;br /&gt;
#define IRMP_SUPPORT_A1TVBOX_PROTOCOL           0       // A1 TV BOX            &amp;gt;= 15000 (better 20000)  ~300 bytes&lt;br /&gt;
#define IRMP_SUPPORT_LEGO_PROTOCOL              0       // LEGO Power RC        &amp;gt;= 20000                 ~150 bytes&lt;br /&gt;
#define IRMP_SUPPORT_RCMM_PROTOCOL              0       // RCMM 12,24, or 32    &amp;gt;= 20000                 ~150 bytes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jedes von [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] unterstützte IR-Protokoll &amp;quot;verbrät&amp;quot; ungefähr den oben angegebenen Speicher an Code. Hier kann man Optimierungen vornehmen: Zum Beispiel ist die Modulationsfrequenz von 455kHz beim [[IRMP#B&amp;amp;O|B&amp;amp;O]]-Protokoll weitab von den Frequenzen, die von den anderen Protokollen verwendet werden. Hier braucht man evtl. andere IR-Empfänger, anderenfalls kann man diese Protokolle einfach deaktiveren. Zum Beispiel kann man mit einem TSOP1738 kein [[IRMP#B&amp;amp;O|B&amp;amp;O]]-Protokoll (455kHz) mehr empfangen. &lt;br /&gt;
&lt;br /&gt;
Ausserdem werden die Protokolle [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]]/[[IRMP#FDC|FDC]]/[[IRMP#RCCAR|RCCAR]] erst ab einer Scan-Frequenz von ca. 15kHz zuverlässig erkannt. Bei [[IRMP#LEGO|LEGO]] sind es sogar 20kHz. Wenn man also diese Protokolle nutzen will, muss man [[IRMP#F_INTERRUPTS|F_INTERRUPTS]] entsprechend anpassen, sonst erscheint beim Übersetzen eine entsprechende Warnung und die entsprechenden Protokolle werden dann automatisch abgeschaltet.&lt;br /&gt;
&lt;br /&gt;
==== IRMP_PORT_LETTER + IRMP_BIT_NUMBER ====&lt;br /&gt;
&lt;br /&gt;
Über diese Konstanten wird der Pin am µC beschrieben, an welchem der IR-Empfänger angeschlossen ist.&lt;br /&gt;
&lt;br /&gt;
Standardwert ist PORT B6:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*---------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for ATMEL AVR&lt;br /&gt;
 *---------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#if defined (ATMEL_AVR)                         // use PB6 as IR input on AVR&lt;br /&gt;
#  define IRMP_PORT_LETTER                      B&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese beiden Werte sind an den tatsächlichen Hardware-Pin des µCs anzupassen. &lt;br /&gt;
&lt;br /&gt;
Dies gilt ebenso für die STM32-µCs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for ARM STM32&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (ARM_STM32)                       // use C13 as IR input on STM32&lt;br /&gt;
#  define IRMP_PORT_LETTER                      C&lt;br /&gt;
#  define IRMP_BIT_NUMBER                       13&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei den PIC-Prozessoren gibt es lediglich die anzupassende Konstante &#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039; - je nach Compiler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC C18 compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_C18)                         // use RB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PORTBbits.RB4&lt;br /&gt;
&lt;br /&gt;
/*----------------------------------------------------------------------------&lt;br /&gt;
 * Change hardware pin here for PIC CCS compiler&lt;br /&gt;
 *----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
#elif defined (PIC_CCS)                         // use PB4 as IR input on PIC&lt;br /&gt;
#  define IRMP_PIN                              PIN_B4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IRMP_USE_CALLBACK ====&lt;br /&gt;
&lt;br /&gt;
Standardwert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_USE_CALLBACK                      0        // flag: 0 = don&#039;t use callbacks, 1 = use callbacks, default is 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man Callbacks einschaltet, wird bei jeder Pegeländerung des Eingangs eine Callback-Funktion aufgerufen. Dies kann zum Beispiel dafür verwendet werden, das eingehende IR-Signal sichtbar zu machen, also als Signal an einem weiteren Pin auszugeben.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define LED_PORT PORTD                                  // LED at PD6&lt;br /&gt;
#define LED_DDR  DDRD&lt;br /&gt;
#define LED_PIN  6&lt;br /&gt;
&lt;br /&gt;
/*-----------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 * Called (back) from IRMP module&lt;br /&gt;
 * This example switches a LED (which is connected to Vcc)&lt;br /&gt;
 *-----------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
void&lt;br /&gt;
led_callback (uint8_t on)&lt;br /&gt;
{&lt;br /&gt;
    if (on)&lt;br /&gt;
    {&lt;br /&gt;
       LED_PORT &amp;amp;= ~(1 &amp;lt;&amp;lt; LED_PIN);&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
       LED_PORT |= (1 &amp;lt;&amp;lt; LED_PIN);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int&lt;br /&gt;
main ()&lt;br /&gt;
{&lt;br /&gt;
    ...&lt;br /&gt;
    irmp_init ();&lt;br /&gt;
&lt;br /&gt;
    LED_DDR |= (1 &amp;lt;&amp;lt; LED_PIN);         // LED pin to output&lt;br /&gt;
    LED_PORT |= (1 &amp;lt;&amp;lt; LED_PIN);        // switch LED off (active low)&lt;br /&gt;
    irmp_set_callback_ptr (led_callback);&lt;br /&gt;
&lt;br /&gt;
    sei ();&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IRMP_LOGGING ====&lt;br /&gt;
&lt;br /&gt;
Mit IRMP_LOGGING kann das Protokollieren von eingehenden IR-Frames eingeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
Standardwert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_LOGGING                            0       // 1: log IR signal (scan), 0: do not. default is 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Erläuterungen siehe [[IRMP#Scannen_von_unbekannten_IR-Protokollen|Scannen von unbekannten IR-Protokollen]].&lt;br /&gt;
&lt;br /&gt;
=== Anwendung von IRMP ===&lt;br /&gt;
&lt;br /&gt;
Die von [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] unterstützten Protokolle weisen Bitlängen - teilweise variabel, teilweise fest - von 2 bis 48 Bit auf. Diese werden über Preprocessor-Defines beschrieben.&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] trennt diese IR-Telegramme prinzipiell in 3 Bereiche:&lt;br /&gt;
&lt;br /&gt;
 1. ID für verwendetes Protokoll&lt;br /&gt;
 2. Adresse bzw. Herstellercode&lt;br /&gt;
 3. Kommando&lt;br /&gt;
&lt;br /&gt;
Mittels der Funktion&lt;br /&gt;
&lt;br /&gt;
   irmp_get_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
kann man ein decodiertes Telegramm abrufen. Der Return-Wert ist 1, wenn ein Telegramm eingelesen wurde, sonst 0. Im ersten Fall werden die Struct-Members&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    irmp_data_p-&amp;gt;protocol (8 Bit)&lt;br /&gt;
    irmp_data_p-&amp;gt;address (16 Bit)&lt;br /&gt;
    irmp_data_p-&amp;gt;command (16 Bit)&lt;br /&gt;
    irmp_data_p-&amp;gt;flags (8 Bit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gefüllt.&lt;br /&gt;
&lt;br /&gt;
Das heisst: am Ende bekommt man dann über irmp_get_data() einfach drei&lt;br /&gt;
Werte (Protokoll, Adresse und Kommando-Code), die man über ein if oder switch checken kann, z.&amp;amp;nbsp;B. hier eine Routine, welche die Tasten 1-9 auf einer Fernbedienung auswertet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
   IRMP_DATA irmp_data;&lt;br /&gt;
&lt;br /&gt;
   if (irmp_get_data (&amp;amp;irmp_data))&lt;br /&gt;
   {&lt;br /&gt;
      if (irmp_data.protocol == IRMP_NEC_PROTOCOL &amp;amp;&amp;amp;     // NEC-Protokoll&lt;br /&gt;
          irmp_data.address == 0x1234)                   // Adresse 0x1234&lt;br /&gt;
      {&lt;br /&gt;
         switch (irmp_data.command)&lt;br /&gt;
         {&lt;br /&gt;
            case 0x0001: key1_pressed(); break;          // Taste 1&lt;br /&gt;
            case 0x0002: key2_pressed(); break;          // Taste 2&lt;br /&gt;
            ...&lt;br /&gt;
            case 0x0009: key9_pressed(); break;          // Taste 9&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier die möglichen Werte für irmp_data.protocol, siehe auch [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL                      1              // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                        2              // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL                    3              // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL                 4              // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL                   5              // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL                     6              // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                        7              // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL                      8              // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                        9              // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL                 10              // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL                     11              // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL                 12              // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL                    13              // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL              14              // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL                   15              // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL                     16              // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL                   17              // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL                       18              // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL                     19              // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL                       20              // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL                      21              // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL                     22              // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL                    23              // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL                      24              // IR60 (SDA2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL                  25              // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL                    26              // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL                     27              // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL                     28              // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL                      29              // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL                   30              // Thomson&lt;br /&gt;
#define IRMP_BOSE_PROTOCOL                      31              // BOSE&lt;br /&gt;
#define IRMP_A1TVBOX_PROTOCOL                   32              // A1 TV Box&lt;br /&gt;
#define IRMP_ORTEK_PROTOCOL                     33              // ORTEK - Hama&lt;br /&gt;
#define IRMP_TELEFUNKEN_PROTOCOL                34              // Telefunken (1560)&lt;br /&gt;
#define IRMP_ROOMBA_PROTOCOL                    35              // iRobot Roomba vacuum cleaner&lt;br /&gt;
#define IRMP_RCMM32_PROTOCOL                    36              // Fujitsu-Siemens (Activy remote control)&lt;br /&gt;
#define IRMP_RCMM24_PROTOCOL                    37              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_RCMM12_PROTOCOL                    38              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_SPEAKER_PROTOCOL                   39              // Another loudspeaker protocol, similar to Nubert&lt;br /&gt;
#define IRMP_LGAIR_PROTOCOL                     40              // LG air conditioner&lt;br /&gt;
#define IRMP_SAMSUNG48_PROTOCOL                 41              // air conditioner with SAMSUNG protocol (48 bits)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Werte für die Adresse und das Kommando muss man natürlich einmal für eine unbekannte Fernbedienung auslesen und dann über ein UART oder LC-Display ausgeben, um sie dann im Programm hart zu kodieren. Oder man hat eine kleine Anlernroutine, wo man einmal die gewünschten Tasten drücken muss, um sie anschließend im EEPROM abzuspeichern. Ein Beispiel dazu findet man im Artikel [http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP Lernfähige IR-Fernbedienung mit IRMP].&lt;br /&gt;
&lt;br /&gt;
Eine weitere [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup Beispiel-Main-Funktion] ist im Zip-File enthalten, da sieht man dann auch die Initialisierung des Timers.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Entprellen&amp;quot; von Tasten ===&lt;br /&gt;
&lt;br /&gt;
Um zu unterscheiden, ob eine Taste lange gedrückt wurde oder lediglich einzeln, dient das Bit IRMP_FLAG_REPETITION. Dieses wird im Struct-Member &#039;&#039;&#039;flags&#039;&#039;&#039; gesetzt, wenn eine Taste auf der Fernbedienung längere Zeit gedrückt wurde und dadurch immer wieder dasselbe Kommando innerhalb kurzer Zeitabstände ausgesandt wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    if (irmp_data.flags &amp;amp; IRMP_FLAG_REPETITION)&lt;br /&gt;
    {&lt;br /&gt;
      // Benutzer hält die Taste länger runter&lt;br /&gt;
      // entweder:&lt;br /&gt;
      //   ich ignoriere die (Wiederholungs-)Taste&lt;br /&gt;
      // oder:&lt;br /&gt;
      //   ich benutze diese Info, um einen Repeat-Effekt zu nutzen&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      // Es handelt sich um eine neue Taste&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies kann zum Beispiel dafür genutzt werden, um die Tasten 0-9 zu &amp;quot;entprellen&amp;quot;, indem man Kommandos mit gesetztem Bit IRMP_FLAG_REPETITION ignoriert. Bei dem Drücken auf die Tasten VOLUME+ oder VOLUME- kann die wiederholte Auswertung ein und desselben Kommandos aber durchaus gewünscht sein - zum Beispiel, um [[LED-Fading|LEDs zu faden]].&lt;br /&gt;
&lt;br /&gt;
Wenn man nur Einzeltasten auswerten will, kann man obigen IF-Block reduzieren auf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    if (! (irmp_data.flags &amp;amp; IRMP_FLAG_REPETITION))&lt;br /&gt;
    {&lt;br /&gt;
      // Es handelt sich um eine neue Taste&lt;br /&gt;
      // ACTION!&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arbeitsweise ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] ist die Interrupt Service Routine irmp_ISR() welche 15.000 mal pro Sekunde aufgerufen werden sollte. Weicht dieser Wert ab, muss die Preprocessor-Konstante [[IRMP#F_INTERRUPTS|F_INTERRUPTS]] in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] angepasst werden. Der Wert kann zwischen 10kHz und 20kHz eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
irmp_ISR() detektiert zunächst die Länge und die Form des/der Startbits und ermittelt daraus das verwendete Protokoll. Sobald das Protokoll erkannt wurde, werden die weiter einzulesenden Bits parametrisiert, um dann möglichst effektiv in den weiteren Aufrufen das komplette IR-Telegramm einzulesen.&lt;br /&gt;
&lt;br /&gt;
Um direkt Kritikern den Wind aus den Segeln zu nehmen:&lt;br /&gt;
&lt;br /&gt;
Ich weiss, die ISR ist ziemlich groß. Aber da sie sich wie eine State Machine verhält, ist der tatsächlich ausgeführte Code pro Durchlauf relativ gering. Solange es &amp;quot;dunkel&amp;quot; ist (und das ist es ja die meiste Zeit ;-)) ist die aufgewendete Zeit sogar verschwindend gering. Im WordClock-Projekt werden mit ein- und demselben Timer 8 ISRs aufgerufen, davon ist die irmp_ISR() nur eine unter vielen. Bei mindestens 8 MHz CPU-Takt traten bisher keine Timing-Probleme auf. Daher sehe ich bei der Länge von irmp_ISR überhaupt kein Problem.&lt;br /&gt;
&lt;br /&gt;
Ein Quarz ist nicht unbedingt notwendig, es funktioniert auch mit dem internen Oszillator des AVRs, wenn man die Prescaler-Fuse entsprechend gesetzt hat, dass die CPU auch mit 8MHz rennt ... Die Fuse-Werte für einen ATMEGA88 findet man in [http://www.mikrocontroller.net/svnbrowser/irmp/main.c?view=markup main.c].&lt;br /&gt;
&lt;br /&gt;
== Scannen von unbekannten IR-Protokollen ==&lt;br /&gt;
&lt;br /&gt;
Stellt man in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] in der Zeile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    #define IRMP_LOGGING    0   // 1: log IR signal (scan), 0: do not (default)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
den Wert für [[IRMP#IRMP_LOGGING|IRMP_LOGGING]] auf 1, wird in [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] eine Protokollierung eingeschaltet: Es werden dann die Hell- und Dunkelphase auf dem UART des Microntrollers mit 9600Bd ausgegeben: 1=Dunkel, 0=Hell. Eventuell müssen dann die Konstanten in den Funktionen uart_init() und uart_putc() angepasst werden; das kommt auf den verwendeten AVR-µC an.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis: Für PIC-Prozessoren gibt es ein eigenes Logging-Modul namens [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]. Dieses ermöglicht das Logging über USB. Für AVR-Prozessoren ist [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c] irrelevant&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nimmt man diese Protokoll-Scans mit einem Terminal-Emulationsprogramm auf und speichert sie dann als normale Datei ab, kann man diese Scan-Dateien zur Analyse verwenden, um damit [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] an das unbekannte Protokoll anzupassen - siehe nächstes Kapitel.&lt;br /&gt;
&lt;br /&gt;
Wer eine Fernbedienung hat, die nicht von [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] unterstützt wird, kann mir  ([http://www.mikrocontroller.net/user/show/ukw ukw]) gern die Scan-Dateien zuschicken. Ich schaue dann, ob das Protokoll in das IRMP-Konzept passt und passe gegebenenfalls den Source an.&lt;br /&gt;
&lt;br /&gt;
== IRMP unter Linux und Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Übersetzen ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] lässt sich auch unter Linux direkt kompilieren, um damit Infrarot-Scans, welche in Dateien gespeichert sind, direkt zu testen. Im Unterordner IR-Data finden sich solche Dateien, die man dem [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] geht folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
    make -f makefile.lnx&lt;br /&gt;
&lt;br /&gt;
Dabei werden 3 IRMP-Versionen erzeugt:&lt;br /&gt;
&lt;br /&gt;
* irmp-10kHz: Version für 10kHz Scans&lt;br /&gt;
* irmp-15kHz: Version für 15kHz Scans&lt;br /&gt;
* irmp-20kHz: Version für 20kHz Scans&lt;br /&gt;
&lt;br /&gt;
=== Aufruf von IRMP ===&lt;br /&gt;
&lt;br /&gt;
Der Aufruf geschieht dann über:&lt;br /&gt;
&lt;br /&gt;
  ./irmp-nnkHz [-l|-p|-a|-v] &amp;lt; scan-file&lt;br /&gt;
&lt;br /&gt;
Die angegebenen Optionen schließen sich aus, das heisst, es kann jeweils nur eine Option zu einer Zeit angegeben werden:&lt;br /&gt;
&lt;br /&gt;
Option:&lt;br /&gt;
&lt;br /&gt;
   -l  List             gibt eine Liste der Pulse und Pausen aus&lt;br /&gt;
   -a analyze           analysiert die Puls-/Pausen und schreibt ein &amp;quot;Spektrum&amp;quot; in ASCII-Form&lt;br /&gt;
   -v verbose           ausführliche Ausgabe&lt;br /&gt;
   -p  Print Timings    gibt für alle Protokolle eine Timing-Tabelle aus&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
=== Normale Ausgabe ===&lt;br /&gt;
&lt;br /&gt;
   ./irmp-10kHz &amp;lt; IR-Data/orion_vcr_07660BM070.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 -------------------------------------------------------------------------&lt;br /&gt;
 # Taste 1&lt;br /&gt;
 00000001110111101000000001111111 p =  2, a = 0x7b80, c = 0x0001, f = 0x00&lt;br /&gt;
 -------------------------------------------------------------------------&lt;br /&gt;
 # Taste 2&lt;br /&gt;
 00000001110111100100000010111111 p =  2, a = 0x7b80, c = 0x0002, f = 0x00&lt;br /&gt;
 -------------------------------------------------------------------------&lt;br /&gt;
 # Taste 3&lt;br /&gt;
 00000001110111101100000000111111 p =  2, a = 0x7b80, c = 0x0003, f = 0x00&lt;br /&gt;
 -------------------------------------------------------------------------&lt;br /&gt;
 # Taste 4&lt;br /&gt;
 00000001110111100010000011011111 p =  2, a = 0x7b80, c = 0x0004, f = 0x00&lt;br /&gt;
 -------------------------------------------------------------------------&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Listen-Ausgabe ===&lt;br /&gt;
&lt;br /&gt;
   ./irmp-10kHz -l &amp;lt; IR-Data/orion_vcr_07660BM070.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
# Taste 1&lt;br /&gt;
pulse: 91 pause: 44&lt;br /&gt;
pulse: 6 pause: 5&lt;br /&gt;
pulse: 6 pause: 6&lt;br /&gt;
pulse: 6 pause: 5&lt;br /&gt;
pulse: 6 pause: 5&lt;br /&gt;
pulse: 6 pause: 5&lt;br /&gt;
pulse: 6 pause: 6&lt;br /&gt;
pulse: 6 pause: 5&lt;br /&gt;
pulse: 6 pause: 16&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Analyse ===&lt;br /&gt;
&lt;br /&gt;
   ./irmp-10kHz -a &amp;lt; IR-Data/orion_vcr_07660BM070.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
START PULSES:&lt;br /&gt;
 90 o 1&lt;br /&gt;
 91 oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 33&lt;br /&gt;
 92 ooo 2&lt;br /&gt;
pulse avg: 91.0=9102.8 us, min: 90=9000.0 us, max: 92=9200.0 us, tol:  1.1%&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
START PAUSES:&lt;br /&gt;
 43 oo 1&lt;br /&gt;
 44 oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 25&lt;br /&gt;
 45 oooooooooooooooooooooooo 10&lt;br /&gt;
pause avg: 44.2=4425.0 us, min: 43=4300.0 us, max: 45=4500.0 us, tol:  2.8%&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
PULSES:&lt;br /&gt;
  5 o 17&lt;br /&gt;
  6 ooooooooooooooooooooooooooooooooooooooooooooooooooooooo 562&lt;br /&gt;
  7 oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 609&lt;br /&gt;
pulse avg:  6.5= 649.8 us, min:  5= 500.0 us, max:  7= 700.0 us, tol: 23.1%&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
PAUSES:&lt;br /&gt;
  4 ooooooooooooooooooooooo 169&lt;br /&gt;
  5 oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 412&lt;br /&gt;
  6 oooo 31&lt;br /&gt;
pause avg:  4.8= 477.5 us, min:  4= 400.0 us, max:  6= 600.0 us, tol: 25.7%&lt;br /&gt;
 15 oooooo 43&lt;br /&gt;
 16 oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 425&lt;br /&gt;
 17 oooooooooo 72&lt;br /&gt;
pause avg: 16.1=1605.4 us, min: 15=1500.0 us, max: 17=1700.0 us, tol:  6.6%&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sieht man die gemessenen Zeiten aller Pulse und Pausen als (liegende) Glockenkurven, welche natürlich wegen der ASCII-Darstellung nicht gerade einer Idealkurve entsprechen. Je schmaler die gemessenen Kanäle, desto besser ist das Timing der Fernbedienung.&lt;br /&gt;
&lt;br /&gt;
Aus obigem Output kann man herauslesen:&lt;br /&gt;
&lt;br /&gt;
* Das Start-Bit hat eine Pulslänge zwischen 9000 und 9200 usec, im Mittel sind es 9102 usec. Die Abweichung von diesem Mittelwert liegt bei 1,1 Prozent.&lt;br /&gt;
&lt;br /&gt;
* Das Start-Bit hat eine Pausenlänge zwischen 4300 usec und 4500 usec, der Mittelwert beträgt 4424 usec. Der Fehler liegt bei 2,8 Prozent.&lt;br /&gt;
&lt;br /&gt;
* Die Pulslänge eines Datenbits liegt zwischen 500 usec und 700 usec, im Mittel sind es 650 usec, der Fehler liegt bei (stolzen) 23,1 Prozent!&lt;br /&gt;
&lt;br /&gt;
Desweiteren gibt es noch 2 verschieden lange Pausen (für die Bits 0 und 1), das Ablesen der Werte überlasse ich dem geneigten Leser ;-)&lt;br /&gt;
&lt;br /&gt;
=== Ausführliche Ausgabe ===&lt;br /&gt;
&lt;br /&gt;
    ./irmp-10kHz -v &amp;lt; IR-Data/orion_vcr_07660BM070.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
# 1 - IR-cmd: 0x0001&lt;br /&gt;
   0.200ms [starting pulse]&lt;br /&gt;
  13.700ms [start-bit: pulse = 91, pause = 44]&lt;br /&gt;
protocol = NEC, start bit timings: pulse:  62 - 118, pause:  30 -  60&lt;br /&gt;
pulse_1:   3 -   8&lt;br /&gt;
pause_1:  11 -  23&lt;br /&gt;
pulse_0:   3 -   8&lt;br /&gt;
pause_0:   3 -   8&lt;br /&gt;
command_offset: 16&lt;br /&gt;
command_len:     16&lt;br /&gt;
complete_len:    32&lt;br /&gt;
stop_bit:         1&lt;br /&gt;
  14.800ms [bit  0: pulse =   6, pause =   5] 0&lt;br /&gt;
  16.000ms [bit  1: pulse =   6, pause =   6] 0&lt;br /&gt;
  17.100ms [bit  2: pulse =   6, pause =   5] 0&lt;br /&gt;
  18.200ms [bit  3: pulse =   6, pause =   5] 0&lt;br /&gt;
  19.300ms [bit  4: pulse =   6, pause =   5] 0&lt;br /&gt;
  20.500ms [bit  5: pulse =   6, pause =   6] 0&lt;br /&gt;
  21.600ms [bit  6: pulse =   6, pause =   5] 0&lt;br /&gt;
  23.800ms [bit  7: pulse =   6, pause =  16] 1&lt;br /&gt;
  26.100ms [bit  8: pulse =   6, pause =  17] 1&lt;br /&gt;
  28.300ms [bit  9: pulse =   6, pause =  16] 1&lt;br /&gt;
  29.500ms [bit 10: pulse =   6, pause =   6] 0&lt;br /&gt;
  31.700ms [bit 11: pulse =   6, pause =  16] 1&lt;br /&gt;
  34.000ms [bit 12: pulse =   6, pause =  17] 1&lt;br /&gt;
  36.200ms [bit 13: pulse =   6, pause =  16] 1&lt;br /&gt;
  38.500ms [bit 14: pulse =   6, pause =  17] 1&lt;br /&gt;
  39.600ms [bit 15: pulse =   6, pause =   5] 0&lt;br /&gt;
  41.900ms [bit 16: pulse =   6, pause =  17] 1&lt;br /&gt;
  43.000ms [bit 17: pulse =   6, pause =   5] 0&lt;br /&gt;
  44.100ms [bit 18: pulse =   6, pause =   5] 0&lt;br /&gt;
  45.200ms [bit 19: pulse =   6, pause =   5] 0&lt;br /&gt;
  46.400ms [bit 20: pulse =   7, pause =   5] 0&lt;br /&gt;
  47.500ms [bit 21: pulse =   6, pause =   5] 0&lt;br /&gt;
  48.600ms [bit 22: pulse =   6, pause =   5] 0&lt;br /&gt;
  49.800ms [bit 23: pulse =   6, pause =   6] 0&lt;br /&gt;
  50.900ms [bit 24: pulse =   5, pause =   6] 0&lt;br /&gt;
  53.100ms [bit 25: pulse =   6, pause =  16] 1&lt;br /&gt;
  55.400ms [bit 26: pulse =   6, pause =  17] 1&lt;br /&gt;
  57.600ms [bit 27: pulse =   6, pause =  16] 1&lt;br /&gt;
  59.900ms [bit 28: pulse =   6, pause =  17] 1&lt;br /&gt;
  62.100ms [bit 29: pulse =   6, pause =  16] 1&lt;br /&gt;
  64.400ms [bit 30: pulse =   6, pause =  17] 1&lt;br /&gt;
  66.700ms [bit 31: pulse =   6, pause =  17] 1&lt;br /&gt;
stop bit detected&lt;br /&gt;
  67.300ms code detected, length = 32&lt;br /&gt;
  67.300ms p =  2, a = 0x7b80, c = 0x0001, f = 0x00&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Aufruf unter Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] kann man auch unter Windows nutzen, nämlich folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
* Eingabeaufforderung starten&lt;br /&gt;
* In das Verzeichnis irmp wechseln&lt;br /&gt;
* Aufruf von:&lt;br /&gt;
            irmp-10kHz.exe &amp;lt; IR-Data\rc5x.txt&lt;br /&gt;
&lt;br /&gt;
Es gelten dieselben Optionen wie für die Linux-Version.&lt;br /&gt;
&lt;br /&gt;
=== Längere Ausgaben ===&lt;br /&gt;
&lt;br /&gt;
Da manche Ausgaben sehr lang werden, empfiehlt es sich auch hier, die Ausgabe in eine Datei zu lenken oder in einen Pager weiterzuleiten, damit man seitenweise blättern kann:&lt;br /&gt;
&lt;br /&gt;
Linux:&lt;br /&gt;
&lt;br /&gt;
            ./irmp-10kHz &amp;lt; IR-Data/rc5x.txt | less&lt;br /&gt;
&lt;br /&gt;
Windows:&lt;br /&gt;
&lt;br /&gt;
            irmp-10kHz.exe &amp;lt; IR-Data\rc5x.txt | more&lt;br /&gt;
&lt;br /&gt;
== Fernbedienungen ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Protokoll || Bezeichnung || Gerät || Device Address&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#NEC_+_extended_NEC|NEC]] || Toshiba CT-9859 || Fernseher || 0x5F40&lt;br /&gt;
|-&lt;br /&gt;
| || Toshiba VT-728G || V-728G Videorekorder || 0x5B44&lt;br /&gt;
|-&lt;br /&gt;
| || Elta 8848 MP 4 || DVD-Player || 0x7F00&lt;br /&gt;
|-&lt;br /&gt;
| || AS-218 || Askey TV-View CHP03X (TV-Karte) || 0x3B86&lt;br /&gt;
|-&lt;br /&gt;
| || Cyberhome ??? || Cyberhome DVD Player || 0x6D72&lt;br /&gt;
|-&lt;br /&gt;
| || WD TV Live || Western Digital Multimediaplayer || 0x1F30&lt;br /&gt;
|-&lt;br /&gt;
| || Canon WL-DC100 || Kamera Canon PowerShot G5 || 0xB1CA&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#NEC16|NEC16]] || Daewoo || Videorekorder || 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#KASEIKYO|KASEIKYO]] || Technics EUR646497 || AV Receiver SA-AX 730 || 0x2002&lt;br /&gt;
|-&lt;br /&gt;
| || Panasonic TV || Fernseher TX-L32EW6 || 0x2002&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#RC5_+_RC5X|RC5]] || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#RC6_+_RC6A|RC6]] || Philips Television || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#SIRCS|SIRCS]] || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#DENON|DENON]] || DENON RC970 || AVR3805 (Verstärker) || 0x0008&lt;br /&gt;
|-&lt;br /&gt;
| || DENON RC970 || DVD/CD-Player || 0x0002&lt;br /&gt;
|-&lt;br /&gt;
| || DENON RC970 || Tuner || 0x0006&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#SAMSUNG32|SAMSUNG32]] || Samsung AA59-00484A || LE40D550 Fernseher || 0x0707&lt;br /&gt;
|-&lt;br /&gt;
| || LG AKB72033901 || Blu-Ray Player BD370 || 0x2D2D&lt;br /&gt;
|-&lt;br /&gt;
| [[IRMP#APPLE|APPLE]] || Apple || Apple Dock (iPod 2) || 0x0020&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IR-Tastaturen ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] unterstützt ab Version 1.7.0 auch IR-Tastaturen, nämlich die Infrarot-Tastatur FDC-3402 - erhältlich bei Pollin (Art. 711 056) für weniger als 2 EUR.&lt;br /&gt;
&lt;br /&gt;
Beim Erkennen einer Taste gibt [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] folgende Daten zurück:&lt;br /&gt;
&lt;br /&gt;
 Protokoll-Nummer (irmp_data.protocol): 18&lt;br /&gt;
 Addresse         (irmp_data.address):  0x003F&lt;br /&gt;
&lt;br /&gt;
Als Kommando (irmp_data.command) werden folgende Werte zurückgeliefert:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&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;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Code || Taste&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 0x0400 || KEY_MOUSE_1&lt;br /&gt;
|-&lt;br /&gt;
| 0x0800 || KEY_MOUSE_2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dabei gelten die obigen Werte für das Drücken einer Taste. Wird die Taste wieder losgelassen, setzt [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] zusätzlich das 8. Bit im Kommando.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
      Taste &#039;a&#039; drücken:   0x001F&lt;br /&gt;
      Taste &#039;a&#039; loslassen: 0x009F&lt;br /&gt;
&lt;br /&gt;
Ausnahme ist die EIN/AUS-Taste: Diese sendet nur beim Drücken einen Code, nicht beim Loslassen.&lt;br /&gt;
&lt;br /&gt;
Wird eine Taste länger gedrückt, wird das in irmp_data.flag angezeigt.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
                           command   flag&lt;br /&gt;
      Taste &#039;a&#039; drücken:   0x001F    0x00&lt;br /&gt;
      Taste &#039;a&#039; drücken:   0x001F    0x01&lt;br /&gt;
      Taste &#039;a&#039; drücken:   0x001F    0x01&lt;br /&gt;
      Taste &#039;a&#039; drücken:   0x001F    0x01&lt;br /&gt;
      ....&lt;br /&gt;
      Taste &#039;a&#039; loslassen: 0x009F    0x00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Werden Tastenkombinationen (zum Beispiel für ein großes &#039;A&#039;) gedrückt, dann sind die Rückgabewerte von [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] in folgendem Ablauf zu sehen:&lt;br /&gt;
&lt;br /&gt;
      Linke SHIFT-Taste drücken:   0x0002&lt;br /&gt;
      Taste &#039;a&#039; drücken:           0x001F&lt;br /&gt;
      Taste &#039;a&#039; loslassen:         0x009F&lt;br /&gt;
      Linke SHIFT-Taste loslassen: 0x0082&lt;br /&gt;
&lt;br /&gt;
In [http://www.mikrocontroller.net/svnbrowser/irmp/irmp.c?view=markup irmp.c] findet man für die LINUX-Version eine Funktion get_fdc_key(), welche als Vorlage dienen mag, die Keycodes einer FDC-Tastatur in die entsprechenden ASCII-Codes umzuwandeln. Diese Funktion kann man entweder lokal auf dem µC nutzen, um die Keycodes zu decodieren, oder auf einem Hostsystem (z.B. PC), an welches die IRMP-Data-Struktur gesandt wird. Dafür sollte man die Funktion incl. der dazugehörenden Preprozessor-Konstanten in seinen Applikations-Quelltext kopieren.&lt;br /&gt;
&lt;br /&gt;
Hier der entsprechende Auszug:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define STATE_LEFT_SHIFT    0x01&lt;br /&gt;
#define STATE_RIGHT_SHIFT   0x02&lt;br /&gt;
#define STATE_LEFT_CTRL     0x04&lt;br /&gt;
#define STATE_LEFT_ALT      0x08&lt;br /&gt;
#define STATE_RIGHT_ALT     0x10&lt;br /&gt;
&lt;br /&gt;
#define KEY_ESCAPE          0x1B            // keycode = 0x006e&lt;br /&gt;
#define KEY_MENUE           0x80            // keycode = 0x0070&lt;br /&gt;
#define KEY_BACK            0x81            // keycode = 0x0071&lt;br /&gt;
#define KEY_FORWARD         0x82            // keycode = 0x0072&lt;br /&gt;
#define KEY_ADDRESS         0x83            // keycode = 0x0073&lt;br /&gt;
#define KEY_WINDOW          0x84            // keycode = 0x0074&lt;br /&gt;
#define KEY_1ST_PAGE        0x85            // keycode = 0x0075&lt;br /&gt;
#define KEY_STOP            0x86            // keycode = 0x0076&lt;br /&gt;
#define KEY_MAIL            0x87            // keycode = 0x0077&lt;br /&gt;
#define KEY_FAVORITES       0x88            // keycode = 0x0078&lt;br /&gt;
#define KEY_NEW_PAGE        0x89            // keycode = 0x0079&lt;br /&gt;
#define KEY_SETUP           0x8A            // keycode = 0x007a&lt;br /&gt;
#define KEY_FONT            0x8B            // keycode = 0x007b&lt;br /&gt;
#define KEY_PRINT           0x8C            // keycode = 0x007c&lt;br /&gt;
#define KEY_ON_OFF          0x8E            // keycode = 0x007c&lt;br /&gt;
&lt;br /&gt;
#define KEY_INSERT          0x90            // keycode = 0x004b&lt;br /&gt;
#define KEY_DELETE          0x91            // keycode = 0x004c&lt;br /&gt;
#define KEY_LEFT            0x92            // keycode = 0x004f&lt;br /&gt;
#define KEY_HOME            0x93            // keycode = 0x0050&lt;br /&gt;
#define KEY_END             0x94            // keycode = 0x0051&lt;br /&gt;
#define KEY_UP              0x95            // keycode = 0x0053&lt;br /&gt;
#define KEY_DOWN            0x96            // keycode = 0x0054&lt;br /&gt;
#define KEY_PAGE_UP         0x97            // keycode = 0x0055&lt;br /&gt;
#define KEY_PAGE_DOWN       0x98            // keycode = 0x0056&lt;br /&gt;
#define KEY_RIGHT           0x99            // keycode = 0x0059&lt;br /&gt;
#define KEY_MOUSE_1         0x9E            // keycode = 0x0400&lt;br /&gt;
#define KEY_MOUSE_2         0x9F            // keycode = 0x0800&lt;br /&gt;
&lt;br /&gt;
static uint8_t&lt;br /&gt;
get_fdc_key (uint16_t cmd)&lt;br /&gt;
{&lt;br /&gt;
    static uint8_t key_table[128] =&lt;br /&gt;
    {&lt;br /&gt;
     // 0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F&lt;br /&gt;
        0,  &#039;^&#039;, &#039;1&#039;, &#039;2&#039;, &#039;3&#039;, &#039;4&#039;, &#039;5&#039;, &#039;6&#039;, &#039;7&#039;, &#039;8&#039;, &#039;9&#039;, &#039;0&#039;, &#039;ß&#039;, &#039;´&#039;,  0,  &#039;\b&#039;,&lt;br /&gt;
       &#039;\t&#039;,&#039;q&#039;, &#039;w&#039;, &#039;e&#039;, &#039;r&#039;, &#039;t&#039;, &#039;z&#039;, &#039;u&#039;, &#039;i&#039;, &#039;o&#039;, &#039;p&#039;, &#039;ü&#039;, &#039;+&#039;,  0,   0,  &#039;a&#039;,&lt;br /&gt;
       &#039;s&#039;, &#039;d&#039;, &#039;f&#039;, &#039;g&#039;, &#039;h&#039;, &#039;j&#039;, &#039;k&#039;, &#039;l&#039;, &#039;ö&#039;, &#039;ä&#039;, &#039;#&#039;,  &#039;\r&#039;, 0,  &#039;&amp;lt;&#039;, &#039;y&#039;, &#039;x&#039;,&lt;br /&gt;
       &#039;c&#039;, &#039;v&#039;, &#039;b&#039;, &#039;n&#039;, &#039;m&#039;, &#039;,&#039;, &#039;.&#039;, &#039;-&#039;,  0,   0,   0,   0,   0,  &#039; &#039;,  0,   0,&lt;br /&gt;
&lt;br /&gt;
        0,  &#039;°&#039;, &#039;!&#039;, &#039;&amp;quot;&#039;, &#039;§&#039;, &#039;$&#039;, &#039;%&#039;, &#039;&amp;amp;&#039;, &#039;/&#039;, &#039;(&#039;, &#039;)&#039;, &#039;=&#039;, &#039;?&#039;, &#039;`&#039;,  0,  &#039;\b&#039;,&lt;br /&gt;
       &#039;\t&#039;,&#039;Q&#039;, &#039;W&#039;, &#039;E&#039;, &#039;R&#039;, &#039;T&#039;, &#039;Z&#039;, &#039;U&#039;, &#039;I&#039;, &#039;O&#039;, &#039;P&#039;, &#039;Ü&#039;, &#039;*&#039;,  0,   0,  &#039;A&#039;,&lt;br /&gt;
       &#039;S&#039;, &#039;D&#039;, &#039;F&#039;, &#039;G&#039;, &#039;H&#039;, &#039;J&#039;, &#039;K&#039;, &#039;L&#039;, &#039;Ö&#039;, &#039;Ä&#039;, &#039;\&#039;&#039;,&#039;\r&#039;, 0,  &#039;&amp;gt;&#039;, &#039;Y&#039;, &#039;X&#039;,&lt;br /&gt;
       &#039;C&#039;, &#039;V&#039;, &#039;B&#039;, &#039;N&#039;, &#039;M&#039;, &#039;;&#039;, &#039;:&#039;, &#039;_&#039;,  0,   0,   0,   0,   0,  &#039; &#039;,  0,   0&lt;br /&gt;
    };&lt;br /&gt;
    static uint8_t state;&lt;br /&gt;
&lt;br /&gt;
    uint8_t key = 0;&lt;br /&gt;
&lt;br /&gt;
    switch (cmd)&lt;br /&gt;
    {&lt;br /&gt;
        case 0x002C: state |=  STATE_LEFT_SHIFT;    break;              // pressed left shift&lt;br /&gt;
        case 0x00AC: state &amp;amp;= ~STATE_LEFT_SHIFT;    break;              // released left shift&lt;br /&gt;
        case 0x0039: state |=  STATE_RIGHT_SHIFT;   break;              // pressed right shift&lt;br /&gt;
        case 0x00B9: state &amp;amp;= ~STATE_RIGHT_SHIFT;   break;              // released right shift&lt;br /&gt;
        case 0x003A: state |=  STATE_LEFT_CTRL;     break;              // pressed left ctrl&lt;br /&gt;
        case 0x00BA: state &amp;amp;= ~STATE_LEFT_CTRL;     break;              // released left ctrl&lt;br /&gt;
        case 0x003C: state |=  STATE_LEFT_ALT;      break;              // pressed left alt&lt;br /&gt;
        case 0x00BC: state &amp;amp;= ~STATE_LEFT_ALT;      break;              // released left alt&lt;br /&gt;
        case 0x003E: state |=  STATE_RIGHT_ALT;     break;              // pressed left alt&lt;br /&gt;
        case 0x00BE: state &amp;amp;= ~STATE_RIGHT_ALT;     break;              // released left alt&lt;br /&gt;
&lt;br /&gt;
        case 0x006e: key = KEY_ESCAPE;              break;&lt;br /&gt;
        case 0x004b: key = KEY_INSERT;              break;&lt;br /&gt;
        case 0x004c: key = KEY_DELETE;              break;&lt;br /&gt;
        case 0x004f: key = KEY_LEFT;                break;&lt;br /&gt;
        case 0x0050: key = KEY_HOME;                break;&lt;br /&gt;
        case 0x0051: key = KEY_END;                 break;&lt;br /&gt;
        case 0x0053: key = KEY_UP;                  break;&lt;br /&gt;
        case 0x0054: key = KEY_DOWN;                break;&lt;br /&gt;
        case 0x0055: key = KEY_PAGE_UP;             break;&lt;br /&gt;
        case 0x0056: key = KEY_PAGE_DOWN;           break;&lt;br /&gt;
        case 0x0059: key = KEY_RIGHT;               break;&lt;br /&gt;
        case 0x0400: key = KEY_MOUSE_1;             break;&lt;br /&gt;
        case 0x0800: key = KEY_MOUSE_2;             break;&lt;br /&gt;
&lt;br /&gt;
        default:&lt;br /&gt;
        {&lt;br /&gt;
            if (!(cmd &amp;amp; 0x80))                      // pressed key&lt;br /&gt;
            {&lt;br /&gt;
                if (cmd &amp;gt;= 0x70 &amp;amp;&amp;amp; cmd &amp;lt;= 0x7F)     // function keys&lt;br /&gt;
                {&lt;br /&gt;
                    key = cmd + 0x10;               // 7x -&amp;gt; 8x&lt;br /&gt;
                }&lt;br /&gt;
                else if (cmd &amp;lt; 64)                  // key listed in key_table&lt;br /&gt;
                {&lt;br /&gt;
                    if (state &amp;amp; (STATE_LEFT_ALT | STATE_RIGHT_ALT))&lt;br /&gt;
                    {&lt;br /&gt;
                        switch (cmd)&lt;br /&gt;
                        {&lt;br /&gt;
                            case 0x0003: key = &#039;²&#039;;     break;&lt;br /&gt;
                            case 0x0008: key = &#039;{&#039;;     break;&lt;br /&gt;
                            case 0x0009: key = &#039;[&#039;;     break;&lt;br /&gt;
                            case 0x000A: key = &#039;]&#039;;     break;&lt;br /&gt;
                            case 0x000B: key = &#039;}&#039;;     break;&lt;br /&gt;
                            case 0x000C: key = &#039;\\&#039;;    break;&lt;br /&gt;
                            case 0x001C: key = &#039;~&#039;;     break;&lt;br /&gt;
                            case 0x002D: key = &#039;|&#039;;     break;&lt;br /&gt;
                            case 0x0034: key = &#039;µ&#039;;     break;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    else if (state &amp;amp; (STATE_LEFT_CTRL))&lt;br /&gt;
                    {&lt;br /&gt;
                        if (key_table[cmd] &amp;gt;= &#039;a&#039; &amp;amp;&amp;amp; key_table[cmd] &amp;lt;= &#039;z&#039;)&lt;br /&gt;
                        {&lt;br /&gt;
                            key = key_table[cmd] - &#039;a&#039; + 1;&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            key = key_table[cmd];&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        int idx = cmd + ((state &amp;amp; (STATE_LEFT_SHIFT | STATE_RIGHT_SHIFT)) ? 64 : 0);&lt;br /&gt;
&lt;br /&gt;
                        if (key_table[idx])&lt;br /&gt;
                        {&lt;br /&gt;
                            key = key_table[idx];&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            break;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return (key);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als letztes noch ein Beispiel einer Anwendung der Funktion get_fdc_key():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    if (irmp_get_data (&amp;amp;irmp_data))&lt;br /&gt;
    {&lt;br /&gt;
        uint8_t key;&lt;br /&gt;
&lt;br /&gt;
        if (irmp_data.protocol == IRMP_FDC_PROTOCOL &amp;amp;&amp;amp;&lt;br /&gt;
            (key = get_fdc_key (irmp_data.command)) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            if ((key &amp;gt;= 0x20 &amp;amp;&amp;amp; key &amp;lt; 0x7F) || key &amp;gt;= 0xA0) // show only printable characters&lt;br /&gt;
            {&lt;br /&gt;
                printf (&amp;quot;ascii-code = 0x%02x, character = &#039;%c&#039;\n&amp;quot;, key, key);&lt;br /&gt;
            }&lt;br /&gt;
            else // it&#039;s a non-printable key&lt;br /&gt;
            {&lt;br /&gt;
                printf (&amp;quot;ascii-code = 0x%02x\n&amp;quot;, key);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle nicht-druckbaren Zeichen werden dabei folgendermaßen codiert:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Taste             || Konstante                || Wert&lt;br /&gt;
|-&lt;br /&gt;
| ESC               || KEY_ESCAPE              || 0x1B&lt;br /&gt;
|-&lt;br /&gt;
| Menü              || KEY_MENUE               || 0x80&lt;br /&gt;
|-&lt;br /&gt;
| Zurück            || KEY_BACK                || 0x81&lt;br /&gt;
|-&lt;br /&gt;
| Vorw.             || KEY_FORWARD             || 0x82&lt;br /&gt;
|-&lt;br /&gt;
| Adresse           || KEY_ADDRESS             || 0x83&lt;br /&gt;
|-&lt;br /&gt;
| Fenster           || KEY_WINDOW              || 0x84&lt;br /&gt;
|-&lt;br /&gt;
| 1. Seite          || KEY_1ST_PAGE            || 0x85&lt;br /&gt;
|-&lt;br /&gt;
| Stop              || KEY_STOP                || 0x86&lt;br /&gt;
|-&lt;br /&gt;
| Mail              || KEY_MAIL                || 0x87&lt;br /&gt;
|-&lt;br /&gt;
| Fav.              || KEY_FAVORITES           || 0x88&lt;br /&gt;
|-&lt;br /&gt;
| Neue Seite        || KEY_NEW_PAGE            || 0x89&lt;br /&gt;
|-&lt;br /&gt;
| Setup             || KEY_SETUP               || 0x8A&lt;br /&gt;
|-&lt;br /&gt;
| Schrift           || KEY_FONT                || 0x8B&lt;br /&gt;
|-&lt;br /&gt;
| Druck             || KEY_PRINT               || 0x8C&lt;br /&gt;
|-&lt;br /&gt;
| Ein/Aus           || KEY_ON_OFF              || 0x8E&lt;br /&gt;
|-&lt;br /&gt;
| Backspace         || &#039;\b&#039;                    || 0x08&lt;br /&gt;
|-&lt;br /&gt;
| CR/ENTER          || &#039;\r&#039;                    || 0x0C&lt;br /&gt;
|-&lt;br /&gt;
| TAB               || &#039;\t&#039;                    || 0x09&lt;br /&gt;
|-&lt;br /&gt;
| Einfg             || KEY_INSERT              || 0x90&lt;br /&gt;
|-&lt;br /&gt;
| Entf              || KEY_DELETE              || 0x91&lt;br /&gt;
|-&lt;br /&gt;
| Cursor links      || KEY_LEFT                || 0x92&lt;br /&gt;
|-&lt;br /&gt;
| Pos1              || KEY_HOME                || 0x93&lt;br /&gt;
|-&lt;br /&gt;
| Ende              || KEY_END                 || 0x94&lt;br /&gt;
|-&lt;br /&gt;
| Cursor rechts     || KEY_UP                  || 0x95&lt;br /&gt;
|-&lt;br /&gt;
| Cursor runter     || KEY_DOWN                || 0x96&lt;br /&gt;
|-&lt;br /&gt;
| Bild hoch         || KEY_PAGE_UP             || 0x97&lt;br /&gt;
|-&lt;br /&gt;
| Bild runter       || KEY_PAGE_DOWN           || 0x98&lt;br /&gt;
|-&lt;br /&gt;
| Cursor links      || KEY_RIGHT               || 0x99&lt;br /&gt;
|-&lt;br /&gt;
| Linke Maustaste   || KEY_MOUSE_1             || 0x9E&lt;br /&gt;
|-&lt;br /&gt;
| Rechte Maustaste  || KEY_MOUSE_2             || 0x9F&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Funktion get_fdc_key berücksichtigt das Gedrückthalten der Shift-, Strg- und ALT-Tasten. Damit funktioniert nicht nur das Schreiben von Großbuchstaben, sondern auch das Auswählen der Sonderzeichen mit der Tastenkombination  ALT + Taste, z.B. ALT + m = µ oder ALT + q = @. Ebenso kann man mit der Strg-Taste die Control-Zeichen CTRL-A bis CTRL-Z senden. Die CapsLock-Taste wird ignoriert, da ich sie sowieso für die überflüssigste Taste überhaupt halte ;-)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= IRSND - Infrarot-Multiprotokoll-Encoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
== Einleitung IRSND ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:ir-sender.png|miniatur|Anschluß eines einfachen IR-Senders an µC. 1k als Basiswiderstand sollte die Reichweite beträchtlich erhöhen.]]&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] ist das Gegenstück zu IRMP: es reproduziert aus den Daten, die mit [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] empfangen wurden, wieder den Original Frame, der dann über eine Infrarot-Diode ausgegeben werden kann.&lt;br /&gt;
&lt;br /&gt;
=== Von IRSND unterstützte µCs ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] ist lauffähig auf folgenden AVR µCs:&lt;br /&gt;
&lt;br /&gt;
* ATtiny87,  ATtiny167&lt;br /&gt;
* ATtiny45,  ATtiny85&lt;br /&gt;
* ATtiny44,  ATtiny84&lt;br /&gt;
* ATmega8,   ATmega16,  ATmega32&lt;br /&gt;
* ATmega162&lt;br /&gt;
* ATmega164, ATmega324, ATmega644,  ATmega644P, ATmega1284&lt;br /&gt;
* ATmega88,  ATmega88P, ATmega168,  ATmega168P, ATmega328P&lt;br /&gt;
&lt;br /&gt;
Es gibt aber auch Portierungen auf diverse PIC µCs - für den CCS- und C18-Compiler. Auch ist [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] mittlerweile auf ARM STM32 lauffähig.&lt;br /&gt;
&lt;br /&gt;
=== Von IRSND unterstützte Protokolle ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] unterstützt die folgenden Protokolle:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP#SIRCS|SIRCS]]&lt;br /&gt;
* [[IRMP#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
* [[IRMP#SAMSUNG|SAMSUNG]]&lt;br /&gt;
* [[IRMP#SAMSUNG32|SAMSUNG32]]&lt;br /&gt;
* [[IRMP#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* [[IRMP#MATSUSHITA|MATSUSHITA]]&lt;br /&gt;
* [[IRMP#RC5_+_RC5X|RC5]]&lt;br /&gt;
* [[IRMP#KASEIKYO|KASEIKYO]]&lt;br /&gt;
* [[IRMP#DENON|DENON]]&lt;br /&gt;
* [[IRMP#JVC|JVC]]&lt;br /&gt;
* [[IRMP#APPLE|APPLE]]&lt;br /&gt;
* [[IRMP#NUBERT|NUBERT]]&lt;br /&gt;
* [[IRMP#B&amp;amp;O|BANG_OLUFSON]]&lt;br /&gt;
* [[IRMP#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* [[IRMP#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]] (bei mind. ~15kHz)&lt;br /&gt;
* [[IRMP#FDC|FDC]] (bei mind. ~15kHz)&lt;br /&gt;
* [[IRMP#RCCAR|RCCAR]] (bei mind. ~15kHz)&lt;br /&gt;
* [[IRMP#RECS80|RECS80]] (bei mind. ~20kHz)&lt;br /&gt;
* [[IRMP#RECS80EXT|RECS80EXT]] (bei mind. ~20kHz)&lt;br /&gt;
* [[IRMP#NIKON|NIKON]]&lt;br /&gt;
* [[IRMP#RC6_+_RC6A|RC6]]&lt;br /&gt;
* [[IRMP#RC6_+_RC6A|RC6A]]&lt;br /&gt;
* [[IRMP#THOMSON|THOMSON]]&lt;br /&gt;
* [[IRMP#NEC16|NEC16]]&lt;br /&gt;
* [[IRMP#NEC42|NEC42]]&lt;br /&gt;
* [[IRMP#LEGO|LEGO]]&lt;br /&gt;
* [[IRMP#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* [[IRMP#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* [[IRMP#ROOMBA|ROOMBA]] &#039;&#039;&#039;(NEU, nur im SVN!)&#039;&#039;&#039;&lt;br /&gt;
* [[IRMP#SPEAKER|SPEAKER]] &#039;&#039;&#039;(NEU, nur im SVN!)&#039;&#039;&#039;&lt;br /&gt;
* [[IRMP#TELEFUNKEN|TELEFUNKEN]] &#039;&#039;&#039;(NEU, nur im SVN!)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] unterstützt die folgenden Protokolle derzeit (noch) &#039;&#039;&#039;NICHT&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* [[IRMP#KATHREIN|KATHREIN]]&lt;br /&gt;
* [[IRMP#NETBOX|NETBOX]]&lt;br /&gt;
* [[IRMP#ORTEK|ORTEK]]&lt;br /&gt;
* [[IRMP#RCMM|RCMM]]&lt;br /&gt;
* [[IRMP#LGAIR|LGAIR]]&lt;br /&gt;
&lt;br /&gt;
== Download IRSND ==&lt;br /&gt;
&lt;br /&gt;
Version 2.6.4, Stand vom 15.09.2014&lt;br /&gt;
&lt;br /&gt;
Download Release-Version: [http://www.mikrocontroller.net/wikifiles/c/c7/Irsnd.zip Irsnd.zip] &lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] &amp;amp; [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] sind nun auch über SVN abrufbar: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP im SVN]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Version im SVN kann eine Zwischen- oder Test-Version sein, die nicht den hier dokumentierten Stand widerspiegelt! Im Zweifel verwendet man besser den obigen Download auf Irsnd.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Software-Änderungen kann man sich hier anschauen: [http://www.mikrocontroller.net/articles/IRMP#Software-Historie_IRSND Software-Historie IRSND]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source-Code IRSND ==&lt;br /&gt;
&lt;br /&gt;
Der Source-Code lässt sich einfach übersetzen, indem man unter Windows die Projekt-Datei irsnd.aps in das AVRStudio 4 lädt.&lt;br /&gt;
&lt;br /&gt;
Auch für andere Entwicklungsumgebungen lässt sich leicht ein Projekt bzw. Makefile zusammenstellen. Zum IRSND-Source gehören folgende Dateien:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irsnd.c?view=markup irsnd.c] - Der eigentliche IR-Encoder&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h] - Sämtliche Definitionen zu den IR-Protokollen&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irmpsystem.h?view=markup irmpsystem.h] - Vom Zielsystem abhängige Definitionen für AVR/PIC/STM32&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irsnd.h?view=markup irsnd.h] - Include-Datei für die Applikation&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irsndconfig.h?view=markup irsndconfig.h] - Anzupassende Konfigurationsdatei&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/svnbrowser/irmp/irsndmain.c?view=markup irsndmain.c] - Beispiel Anwendung&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WICHTIG:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Im Applikations-Source sollte nur [http://www.mikrocontroller.net/svnbrowser/irmp/irsnd.h?view=markup irsnd.h] per include eingefügt werden, also lediglich:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;irsnd.h&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle anderen Include-Dateien werden automatisch über [http://www.mikrocontroller.net/svnbrowser/irmp/irsnd.h?view=markup irsnd.h] &amp;quot;eingefügt&amp;quot;. Siehe dazu auch die Beispieldatei [http://www.mikrocontroller.net/svnbrowser/irmp/irsndmain.c?view=markup irsndmain.c].&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] encodiert sämtliche oben aufgelisteten Protokolle in einer ISR, siehe [http://www.mikrocontroller.net/svnbrowser/irmp/irsnd.c?view=markup irsnd.c].&lt;br /&gt;
&lt;br /&gt;
=== Einstellungen in irsndconfig.h ===&lt;br /&gt;
&lt;br /&gt;
==== F_INTERRUPTS ====&lt;br /&gt;
&lt;br /&gt;
Anzahl der Interrupts pro Sekunde. Der Wert kann zwischen 10000 und 20000 eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Standardwert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define F_INTERRUPTS                            15000      // interrupts per second&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IRSND_SUPPORT_xxx_PROTOCOL ====&lt;br /&gt;
&lt;br /&gt;
Hier lässt sich einstellen, welche Protokolle von [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] unterstützt werden sollen. Die Standardprotokolle sind bereits aktiv. Möchte man weitere Protokolle einschalten bzw. einige aus Speicherplatzgründen deaktivieren, sind die entsprechenden Werte in [http://www.mikrocontroller.net/svnbrowser/irmp/irsndconfig.h?view=markup irsndconfig.h] anzupassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// typical protocols, disable here!             Enable  Remarks                 F_INTERRUPTS            Program Space&lt;br /&gt;
#define IRSND_SUPPORT_SIRCS_PROTOCOL            1       // Sony SIRCS           &amp;gt;= 10000                 ~200 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NEC_PROTOCOL              1       // NEC + APPLE          &amp;gt;= 10000                 ~100 bytes&lt;br /&gt;
#define IRSND_SUPPORT_SAMSUNG_PROTOCOL          1       // Samsung + Samsung32  &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRSND_SUPPORT_MATSUSHITA_PROTOCOL       1       // Matsushita           &amp;gt;= 10000                 ~200 bytes&lt;br /&gt;
#define IRSND_SUPPORT_KASEIKYO_PROTOCOL         1       // Kaseikyo             &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
&lt;br /&gt;
// more protocols, enable here!                 Enable  Remarks                 F_INTERRUPTS            Program Space&lt;br /&gt;
#define IRSND_SUPPORT_DENON_PROTOCOL            0       // DENON, Sharp         &amp;gt;= 10000                 ~200 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RC5_PROTOCOL              0       // RC5                  &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RC6_PROTOCOL              0       // RC6                  &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RC6A_PROTOCOL             0       // RC6A                 &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRSND_SUPPORT_JVC_PROTOCOL              0       // JVC                  &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NEC16_PROTOCOL            0       // NEC16                &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NEC42_PROTOCOL            0       // NEC42                &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_IR60_PROTOCOL             0       // IR60 (SDA2008)       &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRSND_SUPPORT_GRUNDIG_PROTOCOL          0       // Grundig              &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRSND_SUPPORT_SIEMENS_PROTOCOL          0       // Siemens, Gigaset     &amp;gt;= 15000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NOKIA_PROTOCOL            0       // Nokia                &amp;gt;= 10000                 ~400 bytes&lt;br /&gt;
&lt;br /&gt;
// exotic protocols, enable here!               Enable  Remarks                 F_INTERRUPTS            Program Space&lt;br /&gt;
#define IRSND_SUPPORT_KATHREIN_PROTOCOL         0       // Kathrein             &amp;gt;= 10000                 DON&#039;T CHANGE, NOT SUPPORTED YET!&lt;br /&gt;
#define IRSND_SUPPORT_NUBERT_PROTOCOL           0       // NUBERT               &amp;gt;= 10000                 ~100 bytes&lt;br /&gt;
#define IRSND_SUPPORT_BANG_OLUFSEN_PROTOCOL     0       // Bang&amp;amp;Olufsen         &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RECS80_PROTOCOL           0       // RECS80               &amp;gt;= 15000                 ~100 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RECS80EXT_PROTOCOL        0       // RECS80EXT            &amp;gt;= 15000                 ~100 bytes&lt;br /&gt;
#define IRSND_SUPPORT_THOMSON_PROTOCOL          0       // Thomson              &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NIKON_PROTOCOL            0       // NIKON                &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NETBOX_PROTOCOL           0       // Netbox keyboard      &amp;gt;= 10000                 DON&#039;T CHANGE, NOT SUPPORTED YET!&lt;br /&gt;
#define IRSND_SUPPORT_FDC_PROTOCOL              0       // FDC IR keyboard      &amp;gt;= 10000 (better 15000)  ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RCCAR_PROTOCOL            0       // RC CAR               &amp;gt;= 10000 (better 15000)  ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_ROOMBA_PROTOCOL           0       // iRobot Roomba        &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RUWIDO_PROTOCOL           0       // RUWIDO, T-Home       &amp;gt;= 15000                 ~250 bytes&lt;br /&gt;
#define IRSND_SUPPORT_A1TVBOX_PROTOCOL          0       // A1 TV BOX            &amp;gt;= 15000 (better 20000)  ~200 bytes&lt;br /&gt;
#define IRSND_SUPPORT_LEGO_PROTOCOL             0       // LEGO Power RC        &amp;gt;= 20000                 ~150 bytes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit Setzen auf 0 wird das Protokoll deaktiviert, mit Setzen auf 1 wird es aktiviert. Die deaktivierten Protokolle werden dann nicht mitübersetzt. Das spart Speicherplatz im Flash, siehe Angaben in obigen Kommentaren. Wenn man unbedingt Speicherplatz sparen muss, gelten natürlich hier dieselben Tipps wie für IRMP.&lt;br /&gt;
&lt;br /&gt;
Um das [[IRMP#APPLE|APPLE]]-Protokoll zu unterstützen, ist IRSND_SUPPORT_NEC_PROTOCOL auf 1 zu setzen, da es sich hier lediglich um einen Spezialfall vom [[IRMP#NEC_+_extended_NEC|NEC]]-Protokoll handelt.&lt;br /&gt;
&lt;br /&gt;
==== IRSND_OCx ====&lt;br /&gt;
&lt;br /&gt;
Für das Senden der IR-Signale benötigt [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] einen PWM-fähigen Output-Pin, da das Signal moduliert werden muss. Möglich sind eine der folgenden Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC2  // OC2  on ATmegas         supporting OC2,  e.g. ATmega8&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC2A // OC2A on ATmegas         supporting OC2A, e.g. ATmega88&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC2B // OC2B on ATmegas         supporting OC2B, e.g. ATmega88&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC0  // OC0  on ATmegas         supporting OC0,  e.g. ATmega162&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC0A // OC0A on ATmegas/ATtinys supporting OC0A, e.g. ATtiny84, ATtiny85&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC0B // OC0B on ATmegas/ATtinys supporting OC0B, e.g. ATtiny84, ATtiny85&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standardwert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC2B&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die PIC- und STM32-µCs sind entsprechende Werte anzupassen, siehe Kommentare in [http://www.mikrocontroller.net/svnbrowser/irmp/irsndconfig.h?view=markup irsndconfig.h].&lt;br /&gt;
&lt;br /&gt;
==== IRSND_USE_CALLBACK ====&lt;br /&gt;
&lt;br /&gt;
Standardwert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRSND_USE_CALLBACK                      0       // flag: 0 = don&#039;t use callbacks, 1 = use callbacks, default is 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man Callbacks einschaltet, wird bei jeder Änderung des Signals (IR-Modulation ein/aus) eine Callback-Funktion aufgerufen. Dies kann zum Beispiel dafür verwendet werden, ein unmoduliertes Signal an einem weiteren Pin auszugeben.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define LED_PORT PORTD                                  // LED at PD6&lt;br /&gt;
#define LED_DDR  DDRD&lt;br /&gt;
#define LED_PIN  6&lt;br /&gt;
&lt;br /&gt;
/*-----------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 * Called (back) from IRSND module&lt;br /&gt;
 * This example switches a LED (which is connected to Vcc)&lt;br /&gt;
 *-----------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
void&lt;br /&gt;
led_callback (uint8_t on)&lt;br /&gt;
{&lt;br /&gt;
    if (on)&lt;br /&gt;
    {&lt;br /&gt;
       LED_PORT &amp;amp;= ~(1 &amp;lt;&amp;lt; LED_PIN);&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
       LED_PORT |= (1 &amp;lt;&amp;lt; LED_PIN);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int&lt;br /&gt;
main ()&lt;br /&gt;
{&lt;br /&gt;
    ...&lt;br /&gt;
    LED_DDR |= (1 &amp;lt;&amp;lt; LED_PIN);         // LED pin to output&lt;br /&gt;
    LED_PORT |= (1 &amp;lt;&amp;lt; LED_PIN);        // switch LED off (active low)&lt;br /&gt;
    irsnd_init ();&lt;br /&gt;
    irsnd_set_callback_ptr (led_callback);&lt;br /&gt;
    sei ();&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anwendung von IRSND ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] baut den zu sendenden Frame &amp;quot;on-the-fly&amp;quot; aus der IRMP-Datenstruktur wieder zusammen. Dazu zählen:&lt;br /&gt;
&lt;br /&gt;
 1. ID für verwendetes Protokoll&lt;br /&gt;
 2. Adresse bzw. Herstellercode&lt;br /&gt;
 3. Kommando&lt;br /&gt;
&lt;br /&gt;
Mittels der Funktion&lt;br /&gt;
&lt;br /&gt;
   irsnd_send_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
kann man ein zu encodierendes Telegramm versenden. Der Return-Wert ist 1, wenn das Telegramm versendet werden kann, sonst 0. Im ersten Fall werden die Struct-Members&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    irmp_data_p-&amp;gt;protocol&lt;br /&gt;
    irmp_data_p-&amp;gt;address&lt;br /&gt;
    irmp_data_p-&amp;gt;command&lt;br /&gt;
    irmp_data_p-&amp;gt;flags&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ausgelesen und dann als Frame im jeweils gewünschten Protokoll gesendet.&lt;br /&gt;
&lt;br /&gt;
irmp_data_p-&amp;gt;flags gibt die Anzahl der Wiederholungen an, z.B.&lt;br /&gt;
&lt;br /&gt;
  irmp_data_p-&amp;gt;flags = 0: keine Wiederholung&lt;br /&gt;
  irmp_data_p-&amp;gt;flags = 1: 1 Wiederholung&lt;br /&gt;
  irmp_data_p-&amp;gt;flags = 2: 2 Wiederholungen&lt;br /&gt;
  usw.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zu beachten: Es ist unbedingt darauf zu achten, dass irmp_data_p-&amp;gt;flags vor dem Aufruf von irsnd_send_data() einen definierten Wert hat!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
   IRMP_DATA irmp_data;&lt;br /&gt;
&lt;br /&gt;
   irmp_data.protocol = IRMP_NEC_PROTOCOL;       // sende im NEC-Protokoll&lt;br /&gt;
   irmp_data.address  = 0x00FF;                  // verwende Adresse 0x00FF&lt;br /&gt;
   irmp_data.command  = 0x0001;                  // sende Kommando 0001&lt;br /&gt;
   irmp_data.flags    = 0;                       // keine Wiederholung!&lt;br /&gt;
&lt;br /&gt;
   (void) irsnd_send_data (&amp;amp;irmp_data, FALSE);   // versende ohne Prüfung und ohne Warten&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Frame wird asynchron über die Interrupt-Routine irsnd_ISR() verschickt, so dass die Funktion irsnd_send_data() sofort zurückkommt.&lt;br /&gt;
&lt;br /&gt;
Sind Wiederholungen angegeben, wird entweder der Frame nach einer Pause (protokollabhängig) neu ausgegeben oder ein protokollspezifischer Wiederholungsframe (z.B. für NEC) gesendet.&lt;br /&gt;
&lt;br /&gt;
Wird erneut irsnd_send_data() aufgerufen, wartet diese, bis der vorhergenhende Frame vollständig verschickt wurde. Man kann aber auch selbst prüfen, ob [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] gerade &amp;quot;busy&amp;quot; ist oder nicht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
   while (irsnd_is_busy ())&lt;br /&gt;
   {&lt;br /&gt;
      ;                                          // selber warten oder was anderes tun...&lt;br /&gt;
   }&lt;br /&gt;
   (void) irsnd_send_data (&amp;amp;irmp_data, FALSE);   // versende ohne Prüfung und ohne Warten&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird irsnd_send_data() mit dem 2. Argument TRUE aufgerufen, kommt diese Funktion erst zurück, wenn der Frame komplett ausgesendet wurde.&lt;br /&gt;
&lt;br /&gt;
Im Beispiel-Source irsndmain.c findet man neben der Verwendung von irsnd_send_data() auch den [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]]-Aufruf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
ISR(TIMER1_COMPA_vect)&lt;br /&gt;
{&lt;br /&gt;
  irsnd_ISR())          // call irsnd ISR&lt;br /&gt;
  // call other timer interrupt routines...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Paralleles Betreiben von IRMP und IRSND ===&lt;br /&gt;
&lt;br /&gt;
Möchte man [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] und [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] parallel verwenden (also als Sender und Empfänger) schreibt man die ISR folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
ISR(TIMER1_COMPA_vect)&lt;br /&gt;
{&lt;br /&gt;
  if (! irsnd_ISR())          // call irsnd ISR&lt;br /&gt;
  {                           // if not busy...&lt;br /&gt;
      irmp_ISR();             // call irmp ISR&lt;br /&gt;
  }&lt;br /&gt;
  // call other timer interrupt routines...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das heisst: Nur wenn irsnd_ISR() nichts zu tun hat, dann rufe die ISR des Empfängers auf. Damit ist der Empfänger solange abgeschaltet, während irsnd_ISR() noch Daten sendet. Die [[AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR|Timer]]-Initialisierungsroutine ist für [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] und [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] dann natürlich dieselbe.&lt;br /&gt;
&lt;br /&gt;
Eine gemeinsame main-Funktion könnte dann zum Beispiel folgendermaßen aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int&lt;br /&gt;
main (void)&lt;br /&gt;
{&lt;br /&gt;
  IRMP_DATA irmp_data;&lt;br /&gt;
&lt;br /&gt;
  irmp_init();                // initialize irmp&lt;br /&gt;
  irsnd_init();               // initialize irsnd&lt;br /&gt;
  timer_init();               // initialize timer&lt;br /&gt;
  sei ();                     // enable interrupts&lt;br /&gt;
&lt;br /&gt;
  for (;;)&lt;br /&gt;
  {&lt;br /&gt;
    if (irmp_get_data (&amp;amp;irmp_data))&lt;br /&gt;
    {&lt;br /&gt;
      irmp_data.flags = 0;    // reset flags!&lt;br /&gt;
      irsnd_send_data (&amp;amp;irmp_data);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Funktion des obigen Sources ist offensichtlich: Ein empfangenes Telegramm wird nach vollständiger Decodierung wieder encodiert und dann wieder über die IR-Diode ausgesandt. Somit können dann zum Beispiel Signale &amp;quot;um die Ecke&amp;quot; oder streckenweise drahtgebunden übertragen werden.&lt;br /&gt;
&lt;br /&gt;
Desweiteren könnte man auch Protokolle transformieren, zum Beispiel NEC-Telegramme in RC5 umwandeln, wenn man seine Original-RC5-FB zu seinem Philips-Gerät verlegt hat...&lt;br /&gt;
&lt;br /&gt;
Der Rest bleibt der Phantasie des geneigten Lesers überlassen ;-)&lt;br /&gt;
&lt;br /&gt;
Hier noch die möglichen Werte für irmp_data.protocol, siehe auch [http://www.mikrocontroller.net/svnbrowser/irmp/irmpprotocols.h?view=markup irmpprotocols.h]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL                      1              // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                        2              // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL                    3              // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL                 4              // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL                   5              // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL                     6              // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                        7              // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL                      8              // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                        9              // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL                 10              // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL                     11              // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL                 12              // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL                    13              // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL              14              // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL                   15              // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL                     16              // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL                   17              // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL                       18              // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL                     19              // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL                       20              // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL                      21              // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL                     22              // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL                    23              // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL                      24              // IR60 (SDA2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL                  25              // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL                    26              // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL                     27              // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL                     28              // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL                      29              // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL                   30              // Thomson&lt;br /&gt;
#define IRMP_BOSE_PROTOCOL                      31              // BOSE&lt;br /&gt;
#define IRMP_A1TVBOX_PROTOCOL                   32              // A1 TV Box&lt;br /&gt;
#define IRMP_ORTEK_PROTOCOL                     33              // ORTEK - Hama&lt;br /&gt;
#define IRMP_TELEFUNKEN_PROTOCOL                34              // Telefunken (1560)&lt;br /&gt;
#define IRMP_ROOMBA_PROTOCOL                    35              // iRobot Roomba vacuum cleaner&lt;br /&gt;
#define IRMP_RCMM32_PROTOCOL                    36              // Fujitsu-Siemens (Activy remote control)&lt;br /&gt;
#define IRMP_RCMM24_PROTOCOL                    37              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_RCMM12_PROTOCOL                    38              // Fujitsu-Siemens (Activy keyboard)&lt;br /&gt;
#define IRMP_SPEAKER_PROTOCOL                   39              // Another loudspeaker protocol, similar to Nubert&lt;br /&gt;
#define IRMP_LGAIR_PROTOCOL                     40              // LG air conditioner&lt;br /&gt;
#define IRMP_SAMSUNG48_PROTOCOL                 41              // air conditioner with SAMSUNG protocol (48 bits)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Daten für die Adresse und das Kommando ermittelt man am besten über IRMP, siehe weiter oben ;-)&lt;br /&gt;
&lt;br /&gt;
== IRSND unter Linux und Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Übersetzen von IRSND ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/svnbrowser/irmp/irsnd.c?view=markup irsnd.c] lässt sich auch unter Linux direkt kompilieren, um damit Telegramme in Form von IRMP-Scan-Dateien zu erzeugen. Das geht folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
    make -f makefile.unx&lt;br /&gt;
&lt;br /&gt;
=== Aufruf von IRSND ===&lt;br /&gt;
&lt;br /&gt;
Der Aufruf geht dann folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
    ./irsnd protocol-number hex-address hex-command [repeat] &amp;gt; filename.txt&lt;br /&gt;
&lt;br /&gt;
also zum Beispiel für das NEC-Protokoll, Adresse 0x00FF, Kommando 0x0001&lt;br /&gt;
&lt;br /&gt;
    ./irsnd 2 00FF 0001 &amp;gt; nec.txt                   # irsnd ausführen&lt;br /&gt;
&lt;br /&gt;
=== IRSND unter Windows ===&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] kann man auch unter Windows nutzen, nämlich folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
* Eingabeaufforderung starten&lt;br /&gt;
* In das Verzeichnis von irsnd wechseln&lt;br /&gt;
* Aufruf von:&lt;br /&gt;
&lt;br /&gt;
            irsnd.exe 2 00FF 0001 &amp;gt; nec.txt&lt;br /&gt;
&lt;br /&gt;
Nun kann man direkt mit [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] anschließend testen, ob das erzeugte Telegramm auch korrekt ist:&lt;br /&gt;
&lt;br /&gt;
            ./irmp &amp;lt; nec.txt&lt;br /&gt;
&lt;br /&gt;
bzw. unter Windows:&lt;br /&gt;
&lt;br /&gt;
            irmp.exe &amp;lt; nec.txt&lt;br /&gt;
&lt;br /&gt;
Das Ganze geht auch ohne Zwischendatei, nämlich:&lt;br /&gt;
&lt;br /&gt;
            ./irsnd 2 00FF 0001 | ./irmp&lt;br /&gt;
&lt;br /&gt;
bzw. unter Windows:&lt;br /&gt;
&lt;br /&gt;
            irsnd.exe 2 00FF 0001 | irmp.exe&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] gibt dann als Ergebnis folgendes aus:&lt;br /&gt;
&lt;br /&gt;
            11111111000000001000000001111111 p =  2, a = 0x00ff, c = 0x0001, f = 0x00&lt;br /&gt;
&lt;br /&gt;
[[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] konnte also aus dem von [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] generierten Frame wieder das Protokoll 2, Adresse 0x00FF und Kommando 0x0001 decodieren.&lt;br /&gt;
&lt;br /&gt;
Bitte beachten: Je nach benutztem Protokoll sind die Bit-Breiten der Adressen bzw. Kommandos verschieden, siehe obige Tabelle [http://www.mikrocontroller.net/articles/IRMP#Protokolle].&lt;br /&gt;
&lt;br /&gt;
Man kann also nicht mit jedem IR-Protokoll komplett 16-Bit breite Adressen oder Kommandos transparent übertragen.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== Die IR-Protokolle im Detail ==&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Protokolle ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Pulse-Distance.png|miniatur|Pulse Distance Coding]]&lt;br /&gt;
&lt;br /&gt;
==== NEC + extended NEC ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#NEC-Protokoll|NEC + extended NEC]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten NEC || 8 Adress-Bits + 8 invertierte Adress-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten ext. NEC || 16 Adress-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 9000µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 560µs Puls,  560µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 560µs Puls, 1690µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 560µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || 9000µs Puls, 2250µs Pause, 560µs Puls, ~100ms Pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== JVC ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#NEC16-Protokoll (JVC)|JVC]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 16 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 4 Adress-Bits + 12 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 9000µs Puls, 4500µs Pause, 6000µs Pause bei Tasten-Wiederholung&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 560µs Puls,  560µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 560µs Puls, 1690µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 560µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || Wiederholung nach Pause von 25ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NEC16 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&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;
{| class=&amp;quot;wikitable&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;
==== LGAIR ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#LGAIR-Protokoll|LGAIR]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 28 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 8 Adress-Bits + 16 Kommando-Bits + 4 Checksum-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 9000µs Puls, 4500µs Pause (identisch mit [[IRMP#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 560µs Puls,  560µs Pause (identisch mit [[IRMP#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 560µs Puls, 1690µs Pause (identisch mit [[IRMP#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 560µs Puls (identisch mit [[IRMP#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first (&#039;&#039;&#039;abweichend&#039;&#039;&#039; zu [[IRMP#NEC_.2B_extended_NEC|NEC]])&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#SAMSUNG-Protokoll|SAMSUNG]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 16 Daten(1)-Bits + 1 Sync-Bit + 20 Daten(2)-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten(1) || 16 Adress-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten(2) || 4 ID-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 4500µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 550µs Puls,  550µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 550µs Puls, 1650µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Sync-Bit || 550µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 550µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG32 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG32&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Adress-Bits + 16 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 4500µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 550µs Puls,  550µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 550µs Puls, 1650µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 550µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || eine nach ca. 47 msec&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || dritter, fünfter, siebter usw. identischer Frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAMSUNG48 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&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;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#MATSUHITA-Protokoll|MATSUSHITA]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&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;
==== KASEIKYO ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#KASEIKYO-Protokoll (auch &amp;quot;Japan-Protokoll&amp;quot;)|KASEIKYO]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 48 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Hersteller-Bits + 4 Parity-Bits + 4 Genre1-Bits + 4 Genre2-Bits + 10 Kommando-Bits + 2 ID-Bits + 8 Parity-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 3380µs Puls, 1690µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 423µs Puls,  423µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 423µs Puls, 1269µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 423µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || einmalig nach 74ms Pause&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des 1. Original-Frames nach ca. 80ms Pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RECS80 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#RECS80- und RECS80-Extended-Protokoll|RECS80]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bits + 10 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 1 Toggle-Bit + 3 Adress-Bits + 6 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 158µs Puls, 7432µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 158µs Puls, 4902µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 158µs Puls, 7432µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 158µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RECS80EXT ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#RECS80- und RECS80-Extended-Protokoll|RECS80EXT]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start-Bits + 11 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 1 Toggle-Bit + 4 Adress-Bits + 6 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 158µs Puls, 3637µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 158µs Puls, 4902µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 158µs Puls, 7432µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 158µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DENON ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#Denon-Protokoll|DENON]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz (in der Praxis, lt. Dokumentation: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start-Bits + 15 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 5 Address-Bits + 10 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Kommando || 6 Datenbits + 2 Extension Bits + 2 Data Construction Bits (normal: 00, invertiert: 11)&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || kein Start-Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 310µs Puls, 745µs Pause (in der Praxis, lt. Doku: 275µs Puls, 775µs Pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 310µs Puls, 1780µs Pause (in der Praxis, lt. Doku: 275µs Puls, 1900µs Pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 310µs Puls (310µs Puls, 745µs Pause (in der Praxis, lt. Doku: 275µs Puls)&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || Nach 65ms Wiederholung des Frames mit invertieren Kommando-Bits (Data Construction Bits = 11)&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung der beiden Original-Frames nach 65ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== APPLE ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;APPLE&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Adress-Bits + 11100000 + 8 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || siehe [[IRMP#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || siehe [[IRMP#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || siehe [[IRMP#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || siehe [[IRMP#NEC_+_extended_NEC|NEC]]&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== BOSE ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&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;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#Bang &amp;amp; Olufsen|B&amp;amp;O]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 Start-Bits + 16 Daten-Bits + 1 Trailer-Bit + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 0 Adress-Bits + 16 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 1 || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 2 || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 3 || 200µs Puls, 15425µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 4 || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 200µs Puls, 9175µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| R-Bit || 200µs Puls, 6050µs Pause, wiederholt das letzte Bit (repetition)&lt;br /&gt;
|-&lt;br /&gt;
| Trailer-Bit || 200µs Puls, 12300µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 200µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FDC ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&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;
{| class=&amp;quot;wikitable&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;
==== KATHREIN ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&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;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#LEGO Power Functions RC|LEGO]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 16 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 158µs Puls, 1026µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 158µs Puls,  263µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 158µs Puls, 553µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 158µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== THOMSON ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&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;
{| class=&amp;quot;wikitable&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;
{| class=&amp;quot;wikitable&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;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#RCMM-Protokoll|RCMM]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM32 || 1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM24 || 1 Start-Bit + 24 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Frame RCMM12 || 1 Start-Bit + 12 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten RCMM32 || 16 Adress-Bits (= 4 Mode-Bits + 12 Device-Bits) + 1 Toggle-Bit + 15 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten RCMM24 || 16 Adress-Bits (= 4 Mode-Bits + 12 Device-Bits) + 1 Toggle-Bit + 7 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten RCMM12 || 4 Adress-Bits (= 2 Mode-Bits + 2 Device-Bits) + 8 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 500µs Puls, 220µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 00-Bits || 230µs Puls, 220µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 01-Bits || 230µs Puls, 380µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 10-Bits || 230µs Puls, 550µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 11-Bits || 230µs Puls, 720µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 230µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || nach 80ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Width Protokolle ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Pulse-Width.png|miniatur|Pulse Width Coding]]&lt;br /&gt;
&lt;br /&gt;
==== SIRCS ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#SIRCS-Protokoll|SIRCS]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|Frequenz ||40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 12-20 Daten-Bits, kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 7 Kommando-Bits + 5 Adress-Bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2400µs Puls, 600µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 600µs Puls, 600µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 1200µs Puls, 600µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || zweimalig nach ca. 25ms, d.h. 2. und 3. Frame&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || ab dem 4. identischen Frame, Abstand ca. 25ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pulse Distance Width Protokolle ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Pulse-Distance-Width.png|miniatur|Pulse Distance Width Coding]]&lt;br /&gt;
&lt;br /&gt;
==== NUBERT ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&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;
==== SPEAKER ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&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;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;ROOMBA&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance Width&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 7 Daten-Bits + 0 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 0 Adress-Bits + 7 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2790µs Puls, 930µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 930µs Puls, 2790µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 2790µs Puls, 930µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || dreimalig nach jeweils 18ms?&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || noch unbekannt&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Biphase Protokolle ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Biphase-Coding.png|miniatur|Biphase Coding]]&lt;br /&gt;
&lt;br /&gt;
==== RC5 + RC5X ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#RC5- und RC5x-Protokoll|RC5 + RC5X]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start-Bits + 12 Daten-Bits + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten RC5 || 1 Toggle-Bit + 5 Adress-Bits + 6 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 Start-Bit + 13 Daten-Bits + 0 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten RC5X || 1 invertiertes Kommando-Bit + 1 Toggle-Bit + 5 Adress-Bits + 6 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 889µs Pause, 889µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 889µs Puls, 889µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 889µs Pause, 889µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RC6 + RC6A ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#RC6 und RC6A-Protokoll|RC6 + RC6A]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC6 || 1 Start-Bit + 1 Bit &amp;quot;1&amp;quot; + 3 Mode-Bits (000) + 1 Toggle-Bit + 16 Daten-Bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC6A || 1 Start-Bit + 1 Bit &amp;quot;1&amp;quot; + 3 Mode-Bits (110) + 1 Toggle-Bit + 31 Daten-Bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Daten RC6 || 8 Adress-Bits + 8 Kommando Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten RC6A || &amp;quot;1&amp;quot; + 14 Hersteller-Bits + 8 System-Bits + 8 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten RC6A Pace (Sky) || &amp;quot;1&amp;quot; + 3 Mode-Bits (&amp;quot;110&amp;quot;) + 1 Toggle-Bit(UNUSED &amp;quot;0&amp;quot;) + 16 Bit + 1 Toggle(!) + 15 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2666µs Puls, 889µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0-Bit || 889µs Pause, 889µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1-Bit || 889µs Puls, 889µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 444µs Pause, 444µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 444µs Puls, 444µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== GRUNDIG + NOKIA ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#Grundig-Protokoll|GRUNDIG + NOKIA]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame-Paket || 1 Start-Frame + 19,968ms Pause + N Info-Frames + 117,76ms Pause + 1 Stop-Frame&lt;br /&gt;
|-&lt;br /&gt;
| Start-Frame || 1 Pre-Bit + 1 Start-Bit + 9 Daten-Bits (alle 1) + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 Pre-Bit + 1 Start-Bit + 9 Daten-Bits + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 Pre-Bit + 1 Start-Bit + 9 Daten-Bits (alle 1) + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten Grundig || 9 Kommando-Bits + 0 Adress-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten Nokia || 8 Kommando-Bits + 8 Adress-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre-Bit || 528µs Puls, 2639µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 528µs Puls, 528µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 528µs Pause, 528µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 528µs Puls, 528µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Info-Frames mit einem Pausenabstand von 117,76ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== IR60 (SDA2008) ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;[[IRMP#IR60 (SDA2008 bzw. MC14497P)|IR60 (SDA2008)]]&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 30 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Biphase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Start Frame || 1 Start-Bit + 101111 + 0 Stop-Bits + 22ms Pause&lt;br /&gt;
|-&lt;br /&gt;
| Daten Frame || 1 Start-Bit + 7 Daten-Bits + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 0 Adress-Bits + 7 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 528µs Puls, 2639µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 528µs Pause, 528µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 528µs Puls, 528µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Info-Frames mit einem Pausenabstand von 117,76ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SIEMENS + RUWIDO ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&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;
{| class=&amp;quot;wikitable&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;
==== ORTEK ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&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;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;NETBOX&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width: 50em&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Position&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 16 Daten-Bits, kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 3 Adress-Bits + 13 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2400µs Puls, 800µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Bitlänge || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || Abstand ca. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software-Historie IRMP ==&lt;br /&gt;
&lt;br /&gt;
Änderungen IRMP in 2.6.x:&lt;br /&gt;
&lt;br /&gt;
Version 2.6.6:&lt;br /&gt;
&lt;br /&gt;
* 18.09.2014: Logging für ARM STM32F10X hinzugefügt&lt;br /&gt;
&lt;br /&gt;
Version 2.6.5:&lt;br /&gt;
&lt;br /&gt;
* 17.09.2014: PROGMEM-Zugriff für Array irmp_protocol_names[] korrigiert.&lt;br /&gt;
&lt;br /&gt;
Version 2.6.4:&lt;br /&gt;
&lt;br /&gt;
* 15.09.2014: Timing-Toleranzen für [[IRMP#KASEIKYO|KASEIKYO]]-Protokoll vergrößert&lt;br /&gt;
&lt;br /&gt;
Version 2.6.3:&lt;br /&gt;
&lt;br /&gt;
* 15.09.2014: Wechsel von irmp_protocol_names auf PROGMEM, zusätzliche UART Routinen in main.c&lt;br /&gt;
&lt;br /&gt;
Version 2.6.2:&lt;br /&gt;
&lt;br /&gt;
* 21.07.2014: Portierung auf PIC 12F1840&lt;br /&gt;
&lt;br /&gt;
Ältere Versionen:&lt;br /&gt;
&lt;br /&gt;
* 09.07.2014: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
* 09.07.2014: Kleine Syntaxfehlerkorrektur&lt;br /&gt;
* 01.07.2014: Logging für ARM_STM32F4XX eingebaut&lt;br /&gt;
* 01.07.214: IRMP port für PIC XC8 compiler, Variadic Macros herausgenommen wg. dummen XC8-Compiler :-(&lt;br /&gt;
* 05.06.2014: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#LGAIR|LGAIR]]&lt;br /&gt;
* 30.05.2014: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#SPEAKER|SPEAKER]]&lt;br /&gt;
* 30.05.2014: Timings für [[IRMP#SAMSUNG|SAMSUNG]]-Protokolle optimiert&lt;br /&gt;
* 20.02.2014: Fehlerhaftes Decodieren des [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]]-Protokolls korrigiert&lt;br /&gt;
* 19.02.2014: &#039;&#039;&#039;Neue Protokolle&#039;&#039;&#039;: [[IRMP#RCMM|RCMM32, RCMM24 und RCMM12]]&lt;br /&gt;
* 17.09.2014: Timing für [[IRMP#ROOMBA|ROOMBA]] verbessert&lt;br /&gt;
* 09.04.2013: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#ROOMBA|ROOMBA]]&lt;br /&gt;
* 09.04.2013: Verbesserte Frame-Erkennung für [[IRMP#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 19.03.2013: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#ORTEK|ORTEK (Hama)]]&lt;br /&gt;
* 19.03.2013: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 12.03.2013: Geänderte Timing-Toleranzen für [[IRMP#RECS80|RECS80]]- und  [[IRMP#RECS80EXT|RECS80EXT]]-Protokoll&lt;br /&gt;
* 21.01.2013: Korrekturen Erkennung des Wiederholungsframes beim [[IRMP#DENON|DENON]]-Protokoll&lt;br /&gt;
* 17.01.2013: Korrekturen Frame-Erkennung beim [[IRMP#DENON|DENON]]-Protokoll&lt;br /&gt;
* 11.12.2012: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 07.12.2012: Verbesserte Erkennung von [[IRMP#DENON|DENON]]-Wiederholungsframes&lt;br /&gt;
* 19.11.2012: Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4)&lt;br /&gt;
* 06.11.2012: Korrektur [[IRMP#DENON|DENON]]-Frame-Erkennung&lt;br /&gt;
* 26.10.2012: Einige Timer-Korrekturen, Anpassungen an Arduino&lt;br /&gt;
* 11.07.2012: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#BOSE|BOSE]]&lt;br /&gt;
* 18.06.2012: Unterstützung für ATtiny87/167 hinzugefügt&lt;br /&gt;
* 05.06.2012: Kleinere Korrekturen Portierung auf ARM STM32&lt;br /&gt;
* 05.06.2012: Include-Korrektur in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpextlog.c?view=markup irmpextlog.c]&lt;br /&gt;
* 05.06.2012: Bugfix, wenn nur [[IRMP#NEC_+_extended_NEC|NEC]] und [[IRMP#NEC42|NEC42]] aktiviert&lt;br /&gt;
* 23.05.2012: Portierung auf ARM STM32&lt;br /&gt;
* 23.05.2012: Bugfix Frame-Erkennung beim [[IRMP#DENON|DENON]]-Protokoll&lt;br /&gt;
* 27.02.2012: Bug in IR60-Decoder behoben&lt;br /&gt;
* 27.02.2012: Bug in CRC-Berechnung von [[IRMP#KASEIKYO|KASEIKYO]]-Frames behoben&lt;br /&gt;
* 27.02.2012: Portierung auf C18 Compiler für PIC-Mikroprozessoren&lt;br /&gt;
* 13.02.2012: Bugfix: oberstes Bit in Adresse falsch bei [[IRMP#NEC_+_extended_NEC|NEC]]-Protokoll, wenn auch [[IRMP#NEC42|NEC42]]-Protokoll eingeschaltet ist.&lt;br /&gt;
* 13.02.2012: Timing von [[IRMP#SAMSUNG|SAMSUNG]]- und [[IRMP#SAMSUNG32|SAMSUNG32]]-Protokoll korrigiert&lt;br /&gt;
* 13.02.2012: [[IRMP#KASEIKYO|KASEIKYO]]: Genre2-Bits werden nun im oberen Nibble von flags gespeichert.&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#KATHREIN|KATHREIN]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#THOMSON|THOMSON]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#LEGO|LEGO]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#NEC16|NEC16]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#NEC42|NEC42]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#NETBOX|NETBOX]]&lt;br /&gt;
* 20.09.2011: Portierung auf ATtiny84 und ATtiny85&lt;br /&gt;
* 20.09.2011: Verbesserung von Tastenwiederholungen bei [[IRMP#RC5_+_RC5X|RC5]]&lt;br /&gt;
* 20.09.2011: Verbessertes Decodieren von [[IRMP#Biphase|Biphase]]-Protokollen&lt;br /&gt;
* 20.09.2011: Korrekturen am [[IRMP#RECS80|RECS80]]-Decoder&lt;br /&gt;
* 20.09.2011: Korrekturen beim Erkennen von zusätzlichen Bits im SIRCS-Protocol&lt;br /&gt;
* 18.01.2011: Korrekturen für [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]]-Protokoll&lt;br /&gt;
* 18.01.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#NIKON|NIKON]]&lt;br /&gt;
* 18.01.2011: Speichern der zusätzlichen Bits (&amp;gt;12) im [[IRMP#SIRCS|SIRCS]]-Protokoll in der Adresse&lt;br /&gt;
* 18.01.2011: Timing-Korrekturen für [[IRMP#DENON|DENON]]-Protokoll&lt;br /&gt;
&lt;br /&gt;
* 04.09.2010: Bugfix für F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 02.09.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#RC6_+_RC6A|RC6A]]&lt;br /&gt;
&lt;br /&gt;
* 29.08.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#JVC|JVC]]&lt;br /&gt;
* 29.08.2010: [[IRMP#KASEIKYO|KASEIKYO]]-Protokoll: Berücksichtigung der Genre-Bits. &#039;&#039;&#039;ACHTUNG: dadurch neue Command-Codes!&#039;&#039;&#039;&lt;br /&gt;
* 29.08.2010: [[IRMP#KASEIKYO|KASEIKYO]]-Protokoll: Verbesserte Behandlung von Wiederholungs-Frames&lt;br /&gt;
* 29.08.2010: Verbesserte Unterstützung des [[IRMP#APPLE|APPLE]]-Protokolls. &#039;&#039;&#039;ACHTUNG: dadurch neue Adress-Codes!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 01.07.2010: Bugfix: Einführen eines Timeouts für [[IRMP#NEC_+_extended_NEC|NEC]]-Repetition-Frames, um &amp;quot;Geisterkommandos&amp;quot; zu verhindern.&lt;br /&gt;
&lt;br /&gt;
* 26.06.2010: Bugfix: Deaktivieren von [[IRMP#RECS80|RECS80]], [[IRMP#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]] bei geringer Interrupt-Rate&lt;br /&gt;
&lt;br /&gt;
* 25.06.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#RCCAR|RCCAR]]&lt;br /&gt;
* 25.06.2010: Tastenerkennung für [[IRMP#FDC|FDC]]-Protokoll (IR-keyboard) erweitert&lt;br /&gt;
* 25.06.2010: Interrupt-Frequenz nun bis zu 20kHz möglich&lt;br /&gt;
&lt;br /&gt;
* 09.06.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 09.06.2010: Timing für [[IRMP#DENON|DENON]]-Protokoll korrigiert&lt;br /&gt;
&lt;br /&gt;
* 02.06.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 26.05.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
* 26.05.2010: Bugfix Auswertung von langen Tastendrücken bei [[IRMP#GRUNDIG_+_NOKIA|GRUNDIG]]-Protokoll&lt;br /&gt;
&lt;br /&gt;
* 17.05.2010: Bugfix [[IRMP#SAMSUNG32|SAMSUNG32]]-Protokoll: Kommando-Bit-Maske korrigiert&lt;br /&gt;
&lt;br /&gt;
* 16.05.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 16.05.2010: Behandlung von automatischen Frame-Wiederholungen beim [[IRMP#SIRCS|SIRCS]]-, [[IRMP#SAMSUNG32|SAMSUNG32]]- und [[IRMP#NUBERT|NUBERT]]-Protokoll verbessert.&lt;br /&gt;
&lt;br /&gt;
* 28.04.2010: Nur einige kosmetische Code-Optimierungen&lt;br /&gt;
&lt;br /&gt;
* 16.04.2010: Sämtliche Timing-Toleranzen angepasst/optimiert&lt;br /&gt;
&lt;br /&gt;
* 12.04.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 29.03.2010: Bugfix beim Erkennen von mehrfachen [[IRMP#NEC_+_extended_NEC|NEC]]-Repetition-Frames&lt;br /&gt;
* 29.03.2010: Konfiguration in [http://www.mikrocontroller.net/svnbrowser/irmp/irmpconfig.h?view=markup irmpconfig.h] ausgelagert&lt;br /&gt;
* 29.03.2010: Einführung einer Programmversion in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 17.03.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#NUBERT|NUBERT]]&lt;br /&gt;
&lt;br /&gt;
* 16.03.2010: Korrektur der RECS80-Startbit-Timings&lt;br /&gt;
* 16.03.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 15.03.2010: Codeoptimierung&lt;br /&gt;
&lt;br /&gt;
* 14.03.2010: Portierung auf PIC&lt;br /&gt;
&lt;br /&gt;
* 11.03.2010: Anpassungen an verschiedene ATMega-Typen durchgeführt&lt;br /&gt;
&lt;br /&gt;
* 07.03.2010: Bugfix: Zurücksetzen der Statemachine nach einem unvollständigen [[IRMP#RC5_+_RC5X|RC5]]-Frame&lt;br /&gt;
&lt;br /&gt;
* 05.03.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#APPLE|APPLE]]&lt;br /&gt;
* 05.03.2010: Die Daten irmp_data.addr + irmp_data.command werden nun in der jeweiligen Bit-Order des verwendeten Protokolls gespeichert&lt;br /&gt;
&lt;br /&gt;
* 04.03.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#SAMSUNG32|SAMSUNG32]] (Mix aus [[IRMP#SAMSUNG|SAMSUNG]] &amp;amp; [[IRMP#NEC_+_extended_NEC|NEC]]-Protokoll)&lt;br /&gt;
* 04.03.2010: Änderung der [[IRMP#SIRCS|SIRCS]]- und [[IRMP#KASEIKYO|KASEIKYO]]-Toleranzen&lt;br /&gt;
&lt;br /&gt;
* 02.03.2010: [[IRMP#SIRCS|SIRCS]]: Korrekte Erkennung und Unterdrückung von automatischen Frame-Wiederholungen&lt;br /&gt;
* 02.03.2010: [[IRMP#SIRCS|SIRCS]]: Device-ID-Bits werden nun in irmp_data.command und nicht mehr in irmp_data.address gespeichert&lt;br /&gt;
* 02.03.2010: Vergrößerung des Scan Buffers (zwecks Protokollierung)&lt;br /&gt;
&lt;br /&gt;
* 24.02.2010: Neue Variable flags in IRMP_DATA zur Erkennung von langen Tastendrücken&lt;br /&gt;
&lt;br /&gt;
* 20.02.2010: Bugfix [[IRMP#DENON|DENON]]-Protokoll: Wiederholungsframe grundsätzlich invertiert&lt;br /&gt;
&lt;br /&gt;
* 19.02.2010: Erkennung von [[IRMP#NEC_+_extended_NEC|NEC]]-Protokoll-Varianten, z.&amp;amp;nbsp;B. [[IRMP#APPLE|APPLE]]-Fernbedienung&lt;br /&gt;
* 19.02.2010: Erkennung von [[IRMP#RC6_+_RC6A|RC6]]- und [[IRMP#DENON|DENON]]-Protokoll&lt;br /&gt;
* 19.02.2010: Verbesserung des [[IRMP#RC5_+_RC5X|RC5]]-Decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 13.02.2010: Bugfix: Puls/Pausen-Counter um 1 zu niedrig, nun bessere Erkennung bei Protokollen mit sehr kurzen Pulszeiten&lt;br /&gt;
* 13.02.2010: Erkennung der [[IRMP#NEC_+_extended_NEC|NEC]]-Wiederholungssequenz&lt;br /&gt;
&lt;br /&gt;
* 12.02.2010: [[IRMP#RC5_+_RC5X|RC5]]-Protokoll-Decoder hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* 05.02.2010: Konflikt zwischen [[IRMP#SAMSUNG|SAMSUNG]]- und [[IRMP#MATSUSHITA|MATSUSHITA]]-Protokoll beseitigt&lt;br /&gt;
&lt;br /&gt;
* 07.01.2010: Erste Version&lt;br /&gt;
&lt;br /&gt;
== Software-Historie IRSND ==&lt;br /&gt;
&lt;br /&gt;
Änderungen IRSND in 2.6.x:&lt;br /&gt;
&lt;br /&gt;
Version 2.6.1:&lt;br /&gt;
&lt;br /&gt;
* 10.07.2014: Einige GPIO Änderungen für STM32F10x (in IRSND).&lt;br /&gt;
&lt;br /&gt;
Version 2.6.0:&lt;br /&gt;
&lt;br /&gt;
* 10.07.2014: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#SAMSUNG48|SAMSUNG48]]&lt;br /&gt;
&lt;br /&gt;
Ältere Versionen:&lt;br /&gt;
&lt;br /&gt;
* 23.06.2014: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#LGAIR|LGAIR]]&lt;br /&gt;
* 03.06.2014: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#TELEFUNKEN|TELEFUNKEN]]&lt;br /&gt;
* 30.05.2014: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#SPEAKER|SPEAKER]]&lt;br /&gt;
* 30.05.2014: Timings für [[IRMP#SAMSUNG|SAMSUNG]]-Protokolle optimiert&lt;br /&gt;
* 20.02.2014: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#SIEMENS_+_RUWIDO|RUWIDO]]&lt;br /&gt;
* 09.04.2013: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#ROOMBA|ROOMBA]]&lt;br /&gt;
* 12.03.2013: 15kHz für [[IRMP#RECS80|RECS80]]- und  [[IRMP#RECS80EXT|RECS80EXT]]-Protokoll ist nun auch erlaubt&lt;br /&gt;
* 17.01.2013: Unterstützung für ATtiny44 hinzugefügt&lt;br /&gt;
* 12.12.2012: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#A1TVBOX|A1TVBOX]]&lt;br /&gt;
* 07.12.2012: Korrektur Timing beim [[IRMP#NIKON|NIKON]]-Protokoll&lt;br /&gt;
* 26.10.2012: Einige Timer-Korrekturen, Anpassungen an Arduino&lt;br /&gt;
* 18.06.2012: Unterstützung für ATtiny87/167 hinzugefügt&lt;br /&gt;
* 05.06.2012: Korrekturen Portierung auf ARM STM32 - nun getestet&lt;br /&gt;
* 23.05.2012: Portierung auf ARM STM32 (ungetestet!)&lt;br /&gt;
* 23.05.2012: Bugfix Timing für 2. Frame beim Denon-Protokoll&lt;br /&gt;
* 27.02.2012: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#IR60 (SDA2008)|IR60 (SDA2008)]]&lt;br /&gt;
* 27.02.2012: Bug beim Senden von [[IRMP#Biphase|Biphase]]-Frames (Manchester) behoben&lt;br /&gt;
* 27.02.2012: Portierung auf C18 Compiler für PIC-Mikroprozessoren&lt;br /&gt;
* 15.02.2012: Bugfix: Nur der 1. Frame wurde gesendet&lt;br /&gt;
* 13.02.2012: Timing von [[IRMP#SAMSUNG|SAMSUNG]]- und [[IRMP#SAMSUNG32|SAMSUNG32]]-Protokoll korrigiert&lt;br /&gt;
* 13.02.2012: [[IRMP#KASEIKYO|KASEIKYO]]: Genre2-Bits werden nun im oberen Nibble von flags gespeichert.&lt;br /&gt;
* 13.02.2012: Zusätzliche Pause nach dem Senden des letzten Frames&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#THOMSON|THOMSON]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#LEGO|LEGO]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#NEC16|NEC16]]&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#NEC42|NEC42]]&lt;br /&gt;
* 20.09.2011: Portierung auf ATtiny84 und ATtiny85&lt;br /&gt;
* 20.09.2011: Korrektur von Pausenlängen&lt;br /&gt;
* 20.09.2011: Korrekturen von irsnd_stop()&lt;br /&gt;
* 20.09.2011: Korrektur des [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]]-Timings&lt;br /&gt;
* 20.09.2011: Umstellung auf 36kHz Modulationsfrequenz für [[IRMP#DENON|DENON]]-Protokoll&lt;br /&gt;
* 20.09.2011: Korrektur Behandlung zusätzlicher Bits im [[IRMP#SIRCS|SIRCS]]-Protokoll&lt;br /&gt;
* 18.01.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#RC6_+_RC6A|RC6A]]&lt;br /&gt;
* 18.01.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#RC6_+_RC6A|RC6]]&lt;br /&gt;
* 18.01.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: [[IRMP#NIKON|NIKON]]&lt;br /&gt;
* 18.01.2011: Beachten der zusätzlichen Bits (&amp;gt;12) im [[IRMP#SIRCS|SIRCS]]-Protokoll&lt;br /&gt;
* 18.01.2011: Korrektur der Pausenlängen&lt;br /&gt;
* 18.01.2011: Timing-Korrekturen für [[IRMP#DENON|DENON]]-Protokoll&lt;br /&gt;
&lt;br /&gt;
* 02.09.2010: Neues Protokoll: [[IRMP#JVC|JVC]]&lt;br /&gt;
* 02.09.2010: Anpassung des [[IRMP#APPLE|APPLE]]-Encoders an IRMP-Version 1.7.3.&lt;br /&gt;
&lt;br /&gt;
* 29.08.2010: Neues Protokoll: [[IRMP#KASEIKYO|KASEIKYO]] (Panasonic u.a.)&lt;br /&gt;
&lt;br /&gt;
* 01.07.2010: Bugfix: Deaktivieren von [[IRMP#RECS80|RECS80]], [[IRMP#RECS80EXT|RECS80EXT]] &amp;amp; [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]] bei geringer Interrupt-Rate&lt;br /&gt;
&lt;br /&gt;
* 25.06.2010: Neues Protokoll: [[IRMP#RCCAR|RCCAR]]&lt;br /&gt;
&lt;br /&gt;
* 09.06.2010: Neues Protokoll: [[IRMP#FDC|FDC]] (IR-keyboard)&lt;br /&gt;
* 09.06.2010: Timing für [[IRMP#DENON|DENON]]-Protokoll korrigiert&lt;br /&gt;
&lt;br /&gt;
* 02.06.2010: Neues Protokoll: [[IRMP#SIEMENS_+_RUWIDO|SIEMENS]] (Gigaset)&lt;br /&gt;
* 02.06.2010: Simulation von langen Tastendrücken&lt;br /&gt;
&lt;br /&gt;
* 26.05.2010: Neues Protokoll: [[IRMP#GRUNDIG_+_NOKIA|NOKIA]]&lt;br /&gt;
&lt;br /&gt;
* 17.05.2010: Neues Protokoll: [[IRMP#GRUNDIG_+_NOKIA|GRUNDIG]]&lt;br /&gt;
* 17.05.2010: Behandlung von Frame-Wiederholungen für [[IRMP#SIRCS|SIRCS]], [[IRMP#SAMSUNG32|SAMSUNG32]] und [[IRMP#NUBERT|NUBERT]] korrigiert&lt;br /&gt;
&lt;br /&gt;
* 28.04.2010: Unterstützung des [[IRMP#APPLE|APPLE]]-Protokolls&lt;br /&gt;
* 28.04.2010: Konfiguration über [http://www.mikrocontroller.net/svnbrowser/irmp/irsndconfig.h?view=markup irsndconfig.h]&lt;br /&gt;
&lt;br /&gt;
* 16.04.2010: Sämtliche Timing-Toleranzen angepasst/optimiert&lt;br /&gt;
&lt;br /&gt;
* 14.04.2010: Neues Protokoll: [[IRMP#B&amp;amp;O|Bang &amp;amp; Olufsen]]&lt;br /&gt;
&lt;br /&gt;
* 17.03.2010: Neues Protokoll: [[IRMP#NUBERT|NUBERT]]&lt;br /&gt;
* 17.03.2010: Korrektur der Pausen zwischen Frame-Wiederholungen&lt;br /&gt;
&lt;br /&gt;
* 16.03.2010: Korrektur des Timer-Registers TCCR2&lt;br /&gt;
* 16.03.2010: Korrektur der [[IRMP#RECS80|RECS80]]-Startbit-Timings&lt;br /&gt;
* 16.03.2010: Neues Protokoll: [[IRMP#RECS80EXT|RECS80 Extended]]&lt;br /&gt;
&lt;br /&gt;
* 11.03.2010: Anpassungen an verschiedene ATMega-Typen durchgeführt&lt;br /&gt;
&lt;br /&gt;
* 07.03.2010: Alpha-Version&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
&lt;br /&gt;
=== IR-Übersicht ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/index.php&lt;br /&gt;
* http://www.epanorama.net/links/irremote.html&lt;br /&gt;
* http://www.elektor.de/jahrgang/2008/juni/cc2-avr-projekt-%283%29-unsichtbare-kommandos.497184.lynkx?tab=4 (IR Übersicht &amp;amp; RC5)&lt;br /&gt;
&lt;br /&gt;
=== SIRCS-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/sirc.php&lt;br /&gt;
* http://www.ustr.net/infrared/sony.shtml&lt;br /&gt;
* http://users.telenet.be/davshomepage/sony.htm&lt;br /&gt;
* http://picprojects.org.uk/projects/sirc/&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== NEC-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nec.php&lt;br /&gt;
* http://www.ustr.net/infrared/nec.shtml&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== LGAIR-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
Der LG Air Conditioner ist eine Klimaanlage, die durch eine &amp;quot;intelligente&amp;quot; Fernbedienung gesteuert wird.&lt;br /&gt;
Dies sind die &amp;quot;entschlüsselten&amp;quot; Daten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    Befehl                  AAAAAAAA  PW  Z  S  T  mmm  tttt  vvvv  PPPP&lt;br /&gt;
    --------------------------------------------------------------------&lt;br /&gt;
    ON 23C                  10001000  00  0  0  0  000  1000  0100  1100&lt;br /&gt;
    ON 26C                  10001000  00  0  0  0  000  1011  0100  1111&lt;br /&gt;
&lt;br /&gt;
    OFF                     10001000  11  0  0  0  000  0000  0101  0001&lt;br /&gt;
    TURN OFF                10001000  11  0  0  0  000  0000  0101  0001  (18C currently, identical with off)&lt;br /&gt;
&lt;br /&gt;
    TEMP DOWN 23C           10001000  00  0  0  1  000  1000  0100  0100&lt;br /&gt;
    MODE (to mode0, 23C)    10001000  00  0  0  1  000  1000  0100  0100&lt;br /&gt;
&lt;br /&gt;
    TEMP UP (24C)           10001000  00  0  0  1  000  1001  0100  0101&lt;br /&gt;
    TEMP DOWN 24C           10001000  00  0  0  1  000  1001  0100  0101&lt;br /&gt;
&lt;br /&gt;
    TEMP UP (25C)           10001000  00  0  0  1  000  1010  0100  0110&lt;br /&gt;
    TEMP DOWN 25C           10001000  00  0  0  1  000  1010  0100  0110&lt;br /&gt;
&lt;br /&gt;
    TEMP UP (26C)           10001000  00  0  0  1  000  1011  0100  0111&lt;br /&gt;
&lt;br /&gt;
    MODE                    10001000  00  0  0  1  011  0111  0100  0110  (to mode1, 22C - when switching to mode1 temp automaticall sets to 22C)&lt;br /&gt;
    ON (mode1, 22C)         10001000  00  0  0  0  011  0111  0100  1110&lt;br /&gt;
&lt;br /&gt;
    MODE                    10001000  00  0  0  1  001  1000  0100  0101  (to mode2, no temperature displayed)&lt;br /&gt;
    ON (mode2)              10001000  00  0  0  0  001  1000  0100  1101&lt;br /&gt;
    MODE (to mode3, 23C)    10001000  00  0  0  1  100  1000  0100  1000&lt;br /&gt;
    ON (mode3, 23C)         10001000  00  0  0  0  100  1000  0100  0000&lt;br /&gt;
&lt;br /&gt;
    VENTILATION SLOW        10001000  00  0  0  1  000  0011  0000  1011&lt;br /&gt;
    VENTILATION MEDIUM      10001000  00  0  0  1  000  0011  0010  1101&lt;br /&gt;
    VENTILATION HIGH        10001000  00  0  0  1  000  0011  0100  1111&lt;br /&gt;
    VENTILATION LIGHT       10001000  00  0  0  1  000  0011  0101  0000&lt;br /&gt;
&lt;br /&gt;
    SWING ON/OFF            10001000  00  0  1  0  000  0000  0000  0001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    Format:     1 start bit + 8 address bits + 16 data bits + 4 checksum bits + 1 stop bit&lt;br /&gt;
&lt;br /&gt;
    Address:    AAAAAAAA = 0x88 (8 bits)&lt;br /&gt;
&lt;br /&gt;
    Data:       PW Z S T MMM tttt vvvv PPPP (16 bits)&lt;br /&gt;
&lt;br /&gt;
                PW:         Power:     00 = On, 11 = Off&lt;br /&gt;
&lt;br /&gt;
                Z:          N/A:       Always 0&lt;br /&gt;
&lt;br /&gt;
                S:          Swing:     1 = Toggle swing, all other data bits are zeros.&lt;br /&gt;
&lt;br /&gt;
                T:          Temp/Vent: 1 = Set temperature and ventilation&lt;br /&gt;
&lt;br /&gt;
                MMM:        Mode, can be combined with temperature&lt;br /&gt;
                            000=Mode 0&lt;br /&gt;
                            001=Mode 2&lt;br /&gt;
                            010=????&lt;br /&gt;
                            011=Mode 1&lt;br /&gt;
                            100=Mode 3&lt;br /&gt;
                            101=???&lt;br /&gt;
                            111=???&lt;br /&gt;
&lt;br /&gt;
                tttt:       Temperature:&lt;br /&gt;
                            0000=used by OFF command&lt;br /&gt;
                            0001=????&lt;br /&gt;
                            0010=????&lt;br /&gt;
                            0011=18°C&lt;br /&gt;
                            0100=19°C&lt;br /&gt;
                            0101=20°C&lt;br /&gt;
                            0110=21°C&lt;br /&gt;
                            0111=22°C&lt;br /&gt;
                            1000=23°C&lt;br /&gt;
                            1001=24°C&lt;br /&gt;
                            1010=25°C&lt;br /&gt;
                            1011=26°C&lt;br /&gt;
                            1011=27°C&lt;br /&gt;
                            1100=28°C&lt;br /&gt;
                            1101=29°C&lt;br /&gt;
                            1111=30°C&lt;br /&gt;
&lt;br /&gt;
                vvvv:       Ventilation:&lt;br /&gt;
                            0000=slow&lt;br /&gt;
                            0010=medium&lt;br /&gt;
                            0011=????&lt;br /&gt;
                            0100=high&lt;br /&gt;
                            0101=light&lt;br /&gt;
                            0110=????&lt;br /&gt;
                            0111=????&lt;br /&gt;
                            ...&lt;br /&gt;
                            1111=????&lt;br /&gt;
&lt;br /&gt;
    Checksum:   PPPP = (DataNibble1 + DataNibble2 + DataNibble3 + DataNibble4) &amp;amp; 0x0F&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NEC16-Protokoll (JVC) ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/jvc.php&lt;br /&gt;
* http://www.ustr.net/infrared/jvc.shtml&lt;br /&gt;
&lt;br /&gt;
=== SAMSUNG-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
(wurde aus diversen Protokollen (Daewoo u.ä.) zusammengereimt, daher kein direkter Link auf irgendwelche SAMSUNG-Dokumentation verfügbar)&lt;br /&gt;
&lt;br /&gt;
Hier ein Link zum Daewoo-Protokoll, welches dasselbe Prinzip des Sync-Bits in der Mitte eines Frames nutzt, jedoch mit anderen Timing-Werten arbeitet:&lt;br /&gt;
&lt;br /&gt;
* http://users.telenet.be/davshomepage/daewoo.htm&lt;br /&gt;
&lt;br /&gt;
=== MATSUHITA-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
=== KASEIKYO-Protokoll (auch &amp;quot;Japan-Protokoll&amp;quot;) ===&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/attachment/4246/IR-Protokolle_Diplomarbeit.pdf&lt;br /&gt;
* http://www.roboternetz.de/phpBB2/files/entwicklung_und_realisierung_einer_universalinfrarotfernbedienung_mit_timerfunktionen.pdf&lt;br /&gt;
&lt;br /&gt;
=== RECS80- und RECS80-Extended-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.php&lt;br /&gt;
&lt;br /&gt;
=== RC5- und RC5x-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rc5.php&lt;br /&gt;
* http://users.telenet.be/davshomepage/rc5.htm&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
* http://www.opendcc.de/info/rc5/rc5.html&lt;br /&gt;
&lt;br /&gt;
=== Denon-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.com/de/IR-Protokolle.php#DENON&lt;br /&gt;
* http://www.manualowl.com/m/Denon/AVR-3803/Manual/170243&lt;br /&gt;
&lt;br /&gt;
=== RC6 und RC6A-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rc6.php&lt;br /&gt;
* http://www.picbasic.nl/info_rc6_uk.htm&lt;br /&gt;
&lt;br /&gt;
=== Bang &amp;amp; Olufsen ===&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/attachment/33137/datalink.pdf&lt;br /&gt;
&lt;br /&gt;
=== Grundig-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.see-solutions.de/sonstiges/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
=== Nokia-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.php&lt;br /&gt;
&lt;br /&gt;
=== IR60 (SDA2008 bzw. MC14497P) ===&lt;br /&gt;
&lt;br /&gt;
* http://www.datasheetcatalog.org/datasheet/motorola/MC14497P.pdf&lt;br /&gt;
&lt;br /&gt;
=== LEGO Power Functions RC ===&lt;br /&gt;
&lt;br /&gt;
* http://www.philohome.com/pf/LEGO_Power_Functions_RC_v110.pdf&lt;br /&gt;
&lt;br /&gt;
=== RCMM-Protokoll ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rcmm.php&lt;br /&gt;
&lt;br /&gt;
=== Diverse Protokolle ===&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/attachment/4246/IR-Protokolle_Diplomarbeit.pdf&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
* http://www.roboternetz.de/phpBB2/files/entwicklung_und_realisierung_einer_universalinfrarotfernbedienung_mit_timerfunktionen.pdf&lt;br /&gt;
&lt;br /&gt;
== IRMP auf Youtube ==&lt;br /&gt;
&lt;br /&gt;
Einige Videos zu [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] habe ich auf Youtube gefunden:&lt;br /&gt;
&lt;br /&gt;
* http://www.youtube.com/watch?v=Q7DJvLIyTEI&lt;br /&gt;
&lt;br /&gt;
* http://www.youtube.com/watch?v=1tQ_aqayWZk&lt;br /&gt;
&lt;br /&gt;
* http://www.youtube.com/watch?v=W4tI2axR3-w&lt;br /&gt;
&lt;br /&gt;
* http://www.youtube.com/watch?v=SRs98dIe2WE&lt;br /&gt;
&lt;br /&gt;
== Weitere Artikel zu IRMP ==&lt;br /&gt;
&lt;br /&gt;
[http://www.infineon.com/dgdl/RF2ir+WhitePaper+V1.0.pdf?folderId=db3a3043191a246301192dd3ee2c2ae4&amp;amp;fileId=db3a30432b57a660012b5c16272c2e81 Whitepaper von Martin Gotschlich, Infineon Technologies AG]&lt;br /&gt;
&lt;br /&gt;
== Hardware / IRMP-Projekte ==&lt;br /&gt;
&lt;br /&gt;
=== Remote IRMP ===&lt;br /&gt;
&lt;br /&gt;
Netzwerkfähiger Infrarot-Sender und Empfänger mit Android Handy als Fernbedienung:&lt;br /&gt;
&lt;br /&gt;
 * http://www.mikrocontroller.net/articles/Remote_IRMP&lt;br /&gt;
&lt;br /&gt;
=== IR-Tester ===&lt;br /&gt;
&lt;br /&gt;
Eine Implementierung auf Basis [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] und [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]] als Multiprotokoll Dekoder mit LCD&lt;br /&gt;
von Klaus Leidinger: &lt;br /&gt;
* http://www.mikrocontroller-projekte.de/Mikrocontroller/index.html&lt;br /&gt;
&lt;br /&gt;
=== IR-Tester mit AVR-NET-IO ===&lt;br /&gt;
&lt;br /&gt;
Ähnliche Implementierung wie von Klaus Leidinger für Pollin AVR-NET-IO mit Pollin ADD-ON Board:&lt;br /&gt;
* http://son.ffdf-clan.de/include.php?path=forumsthread&amp;amp;threadid=703&lt;br /&gt;
&lt;br /&gt;
=== USB IR Remote Receiver ===&lt;br /&gt;
&lt;br /&gt;
USB IR Remote Receiver von Hugo Portisch:&lt;br /&gt;
* http://www.mikrocontroller.net/articles/USB_IR_Remote_Receiver&lt;br /&gt;
&lt;br /&gt;
=== Servo-gesteuerter IR-Sender  ===&lt;br /&gt;
&lt;br /&gt;
Servo-gesteuerter IR-Sender mit Anlernfunktion von Stefan Pendsa:&lt;br /&gt;
* http://forum.mikrokopter.de/topic-21060.html&lt;br /&gt;
* [http://svn.mikrokopter.de/listing.php?repname=Projects&amp;amp;path=%2FServo-Controlled+IR-Transmitter%2F&amp;amp;#Ad2417800d6aa14bf08c571a896e9def7 SVN]&lt;br /&gt;
&lt;br /&gt;
=== Lernfähige IR-Fernbedienung ===&lt;br /&gt;
&lt;br /&gt;
Lernfähige IR-Fernbedienung von Robert und Frank M.&lt;br /&gt;
* http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP&lt;br /&gt;
&lt;br /&gt;
=== AVR Moodlight ===&lt;br /&gt;
&lt;br /&gt;
AVR Moodlight von Axel Schwenke&lt;br /&gt;
* http://www.mikrocontroller.net/topic/244768&lt;br /&gt;
&lt;br /&gt;
=== Kinosteuerung ===&lt;br /&gt;
&lt;br /&gt;
Kinosteuerung von Owagner&lt;br /&gt;
* http://ccc.zerties.org/index.php/Benutzer:Owagner&lt;br /&gt;
&lt;br /&gt;
=== Phasenanschnittsdimmer ===&lt;br /&gt;
&lt;br /&gt;
Phasenanschnittsdimmer - steuerbar über IR-Fernbedienung:&lt;br /&gt;
&lt;br /&gt;
* http://flosserver.dyndns.org/phasenanschnittsdimmer.php&lt;br /&gt;
&lt;br /&gt;
=== IRDioder – Ikea Dioder Hack ===&lt;br /&gt;
&lt;br /&gt;
Ikea Dioder Hack mit Atmel und Infrarotempfaenger:&lt;br /&gt;
&lt;br /&gt;
* http://marco-difeo.de/tag/infrared/&lt;br /&gt;
&lt;br /&gt;
=== 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;
=== 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;
== Danksagung ==&lt;br /&gt;
&lt;br /&gt;
Ganz herzlich bedanken möchte ich mich bei Vlad Tepesch, Klaus Leidinger und Peter K., die mich mit Scan-Dateien ihrer Infrarot-Fernbedienungen versorgt haben. Dank auch an Klaus für seine nächtelangen Tests von [[IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder|IRMP]] &amp;amp; [[IRMP#IRSND_-_Infrarot-Multiprotokoll-Encoder|IRSND]].&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung. Vielen Dank auch an gera für die Portierung auf den PIC-C18 Compiler. Für die Portierung auf ARM STM32 bedanke ich mich herzlich bei kichi (Michael K.). Vielen Dank auch an Markus Schuster für die Portierung auf Stellaris LM4F120 Launchpad von TI (ARM Cortex M4).&lt;br /&gt;
&lt;br /&gt;
Mein Dank geht auch an Dániel Körmendi, welcher mich nicht nur immer wieder fleißig mit Scans versorgt, sondern auch das LG-AIR-Protokoll in den IRSND eingebaut hat.&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>Johnpatcher</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Word_Clock_Variante_1&amp;diff=84498</id>
		<title>Word Clock Variante 1</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Word_Clock_Variante_1&amp;diff=84498"/>
		<updated>2014-08-15T20:36:57Z</updated>

		<summary type="html">&lt;p&gt;Johnpatcher: /* Bootloader von Karol Babioch &amp;quot;wordboot&amp;quot; */: Archiv upgedatet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Überblick =&lt;br /&gt;
&lt;br /&gt;
[[Datei:wordclock-frontplatte-v2.png| |WordClock]]&lt;br /&gt;
&lt;br /&gt;
Links zum Hauptartikel [1], zur Variante 2 [2] zum langen Thread [3] mit dem hier alles angefangen hat und zum Original [4], das alle hier inspiriert hat.&lt;br /&gt;
&lt;br /&gt;
[1] [[Word Clock]]&amp;lt;br&amp;gt;&lt;br /&gt;
[2] [[Word Clock Variante 2]]&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://www.mikrocontroller.net/topic/156661 Beitrag: Brauche Hilfe beim Bau einer Uhr]&amp;lt;br&amp;gt;&lt;br /&gt;
[4] [http://www.clocktwo.com http://www.clocktwo.com]&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
= WordClock FAQ =&lt;br /&gt;
Häufig tauchen im Forum Fragen zum WordClock Projekt auf (was brauche ich..., wie mache ich...), die schon mehrmals beantwortet wurden. Hier Für die Variante 1 eine Zusammenfassung der wichtigsten Fragen:&lt;br /&gt;
&lt;br /&gt;
  Q: Was brauche ich alles, um die WordClock (Variante 1) zu bauen?&lt;br /&gt;
  A: - Die Steuerplatine mit der Elektronik&lt;br /&gt;
     - Eine Frontblende (das &amp;quot;Ziffernblatt&amp;quot;)&lt;br /&gt;
     - Leuchtdioden und Platinen für die Anzeige&lt;br /&gt;
     - Eine Zwischenplatte um das Licht zwischen den einzelnen Buchstaben zu trennen&lt;br /&gt;
     - Eine Spannungsversorgung&lt;br /&gt;
     - etwas handwerkliches Geschick&lt;br /&gt;
&lt;br /&gt;
  Q: Kann ich Bauteile der WordClock über Sammelbestellungen billiger bekommen?&lt;br /&gt;
  A: Es wurden in der Vergangenheit (seit Dez.2009) mehrere Sammelbestellungen angeboten. Im einzelnen waren das:&lt;br /&gt;
     - Die [http://www.mikrocontroller.net/articles/Word_Clock_Variante_1#Sammelbestellung_der_Platine Leiterplatte] für die Steuerelektronik (von ukw)&lt;br /&gt;
     - [http://www.mikrocontroller.net/articles/Word_Clock_Variante_1#Sammelbestellung Leuchtdioden mit Streifenplatinen] für die Anzeige (von wawibu / matsch)&lt;br /&gt;
     - Eine Frontblende (Buchstabenmatrix)&lt;br /&gt;
        - aus [http://www.mikrocontroller.net/articles/Word_Clock#Sammelbestellung_.28Plexiglas.29 Plexiglas], schwarz (von ukw)&lt;br /&gt;
        - aus [http://www.mikrocontroller.net/articles/Word_Clock#Sammelbestellung_.28Edelstahl.29 Edelstahl] (von andreasp)&lt;br /&gt;
     - Eine [http://www.mikrocontroller.net/articles/Word_Clock#Zwischenplatte Zwischenplatte] (von wawibu / matsch)&lt;br /&gt;
&lt;br /&gt;
  Q: Kann ich eine fertige Uhr kaufen?&lt;br /&gt;
  A: Ja, beim [http://www.qlocktwo.com/ Hersteller] der Vorlage ;-). Hier im uC.net Forum gibt es nur Tipps und Hilfe zum Selberbauen.&lt;br /&gt;
     Eine komplette WordClock kann man hier NICHT bekommen.&lt;br /&gt;
     ...und etwas einlesen wird auch keinem abgenommen ;-)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Aufbau einer Wordclock =&lt;br /&gt;
Hier gibt es ein von bomibob äußerst kunstvolles Video zum Bau einer Word Clock:&lt;br /&gt;
http://www.youtube.com/watch?v=OYhtc-8StXA&lt;br /&gt;
(zugehöriger Post → http://www.mikrocontroller.net/topic/goto_post/2328168)&lt;br /&gt;
&lt;br /&gt;
Details zu den einzelnen Komponenten sind den entsprechenden Unterpunkten, oder dem Hauptartikel zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
= Elektronik =&lt;br /&gt;
* Atmega168&lt;br /&gt;
* 8Mhz (interner Osc.)&lt;br /&gt;
* 24-Bit-Schieberegister an SPI für 24 Wörter&lt;br /&gt;
* 4 Output-Pins für Minutenanzeige&lt;br /&gt;
* 4 weitere GPOS - für allgemeine Zwecke&lt;br /&gt;
* RGB-Steuerung über PWM gegen GND, d.h. 32x3-Matrix&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Schaltung =&lt;br /&gt;
&lt;br /&gt;
[[Datei:wordclock-schmal-schaltung.png|miniatur|Schaltbild V1.0]]&lt;br /&gt;
[[Datei:wordclock-schmal-schaltung-2.0.png|miniatur|Schaltbild V2.0]]&lt;br /&gt;
[[Datei:TSOP-wordclock-1.1.png|miniatur|TSOP17xx in V1.1]]&lt;br /&gt;
[[Datei:RXTX-wordclock-1.1.png|miniatur|Rx/Tx in V1.1 und V2.0]]&lt;br /&gt;
[[Datei:K10-wordclock-2.0.png|miniatur|K10 als I2C in V2.0]]&lt;br /&gt;
[[Datei:K11-wordclock-2.0.png|miniatur|K11 als SPI in V2.0]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Änderungen der Platinen-Version 1.0 gegenüber dem Prototypen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Pullup-Widerstand R7 am DCF-Anschluss entfällt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Änderungen der Platinen-Version 1.1 gegenüber 1.0:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Die Tiefpass-Schaltung für den TSOP17xx ist nun korrekt geschaltet. Die Abweichung sieht man rechts im Zusatzschaltbild.&lt;br /&gt;
* Der Verbinder K9 (UART-Anschluss für Debug-Zwecke) hat zwei zusätzliche Pins erhalten, siehe Zusatzschaltbild rechts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Änderungen der Platinen-Version 2.0 gegenüber 1.1:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Diode D1 entfällt.&lt;br /&gt;
* 6-poliger ISP-Wannenstecker ersetzt 10-poligen Wannenstecker, Vcc nun angeschlossen&lt;br /&gt;
* Neu: Stiftleiste K10 als Anschlüsse für externe I2C-Module, auf der Platine oberhalb der RTC zu finden&lt;br /&gt;
* Neu: Stiftleiste K11 als Anschlüsse für externe SPI-Module, auf der Platine ganz links&lt;br /&gt;
&lt;br /&gt;
Siehe auch untenstehende Zusatzschaltbilder rechts. Die neuen Stiftleisten sind optional, müssen also nicht unbedingt bestückt werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zugehörige Schaltung als PDF&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Version 1.0: &#039;&#039;&#039;[[Media:wordclock-schmal.pdf|wordclock-schmal.pdf]]&#039;&#039;&#039;&lt;br /&gt;
* Version 2.0: &#039;&#039;&#039;[[Media:wordclock-schmal-schaltung-2.0.pdf|wordclock-schmal-schaltung-2.0]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Sammelbestellung der Platine ==&lt;br /&gt;
&lt;br /&gt;
Stand August 2014:&lt;br /&gt;
&lt;br /&gt;
Es sind noch Steuerplatinen aus der letzten Sammelbestellung übrig. Wer sich also noch an der Sammelbestellung beteiligen möchte, kann sich bei mir (Benutzer [http://www.mikrocontroller.net/user/show/ukw &#039;&#039;&#039;ukw&#039;&#039;&#039;]) per PN melden.&lt;br /&gt;
&lt;br /&gt;
Kosten pro Platine: 10 EUR zzgl. Versand von 2,00 EUR bei bis zu 4 Stück. Bei mehr als 4 Stück beträgt der Versand 3,00 EUR.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
* 1 Platine: 10 EUR + 2,00 Versand: 12,00 EUR&lt;br /&gt;
* 2 Platinen: 20 EUR + 2,00 Versand: 22,00 EUR&lt;br /&gt;
* ...&lt;br /&gt;
* 5 Platinen: 50 EUR + 3,00 Versand: 53,00 EUR&lt;br /&gt;
&lt;br /&gt;
Parallel zu dieser Sammelbestellung gibt es noch eine neue (kleinere) Sammelbestellung für passende Frontplatten, siehe auch:&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Word_Clock#Sammelbestellung_.28Plexiglas.29 Sammelbestellung Frontplatten]&lt;br /&gt;
&lt;br /&gt;
Beim Versand zusammen mit den Frontplatten entfallen natürlich die Versandkosten für die Platinen.&lt;br /&gt;
&lt;br /&gt;
Maße: 146mm x 35,6mm.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Reichelt Warenkorb Mono-Variante ==&lt;br /&gt;
Da selbst bei der Mono-Variante der ATmega 88 langsam mehr als eng wird, wurde dieser Warenkorb auch auf den ATmega 168 umgestellt.&lt;br /&gt;
&lt;br /&gt;
Eine vollständige Liste zur Bestellung der nötigen Bauteile ist bei Reichelt abgelegt: &#039;&#039;&#039;[http://www.reichelt.de/?ACTION=20;AWKID=580204;PROVID=2084 Warenkorb-Mono]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Reichelt Warenkorb RGB-Variante ==&lt;br /&gt;
Für die RBG-Version wird der ATmega 168 benötigt. Ein angepasster &#039;&#039;&#039;[http://www.reichelt.de/?ACTION=20;AWKID=580197;PROVID=2084 WARENKORB]&#039;&#039;&#039; ist bei Reichelt hinterlegt.&lt;br /&gt;
&lt;br /&gt;
Im Warenkorb befindet sich nun auch der Nachfolger TSOP 31238 des nicht mehr lieferbaren TSOP17xx. ( 15.11.2011 ).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Beginner-Tipp&amp;quot;: &lt;br /&gt;
&lt;br /&gt;
Der Warenkorb ist eine tolle Vereinfachung der Bestellung. Bevor Ihr jedoch das DCF-77-Modul automatisch mitbestellt, lest bitte mit Hilfe der Suchfunktion das Forum zu diesem Thema durch. Das DCF-77-Modul ist, wie es im Forum so nett formuliert wurde, &amp;quot;ein Sensibelchen&amp;quot;. Es gäbe eine Alternative von C* (siehe Forum). Und um es ganz deutlich zu formulieren: Die Uhr funktioniert auch ohne DCF-77-Modul ganz prima. Sie kann mit der IR-Fernbedienung ganz einfach gestellt werden. Man braucht das Modul nicht wirklich.&lt;br /&gt;
Es befindet sich kein Flachbandkabel im Warenkorb.&lt;br /&gt;
----&lt;br /&gt;
== Reichelt Warenkorb LED Single Board ==&lt;br /&gt;
&lt;br /&gt;
Für das neue SingleBoard (Paket 1) werden zusätzliche Bauteile benötigt. Diese sind in einem eigenen &#039;&#039;&#039;[http://www.reichelt.de/?ACTION=20;AWKID=847662;PROVID=2084 WARENKORB]&#039;&#039;&#039; bei Reichelt hinterlegt.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Reichelt Warenkorb Pollin DCF Stabilisierungsplatine ==&lt;br /&gt;
&lt;br /&gt;
Teil des Single Boards ist eine Stabilisierungsschaltung für den Pollin DCF Empfänger. Bei Verwendung des Pollin DCF Empfängers wird folgender &#039;&#039;&#039;[http://www.reichelt.de/?ACTION=20;AWKID=885799;PROVID=2084 WARENKORB]&#039;&#039;&#039; zusätzlich benötigt.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.pollin.de/shop/dt/NTQ5OTgxOTk-/Bausaetze_Module/Module/DCF_Empfangsmodul_DCF1.html Link]&#039;&#039;&#039; zum DCF-Empfänger bei Pollin.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Bestückung ==&lt;br /&gt;
&lt;br /&gt;
Hier eine kurze Beschreibung zur Bestückung:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Version 1.0 (schmale Ausführung):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal.png|miniatur|Bestückte Platine (Version 1.0)]]&lt;br /&gt;
[[Datei:Wordclock-schmal-1.1.png|miniatur|Bestückte Platine (Version 1.1)]]&lt;br /&gt;
[[Datei:Wordclock-schmal-2.0.png|miniatur|Bestückte Platine (Version 2.0)]]&lt;br /&gt;
&lt;br /&gt;
* Oben Mitte: Anschluss für stehende Lithium-Knopfbatterie CR2032 (die drei abgebildeten Stifte sind natürlich nicht notwendig, die Batterie wird direkt eingelötet)&lt;br /&gt;
* Unten 3-polige Stiftleiste: Anschluss für DCF77-Modul&lt;br /&gt;
* Unten 2-polige Stiftleiste: RX &amp;amp; TX (für Testzwecke)&lt;br /&gt;
* Unten rechts: TSOP17XX/SFH5110 für Infrarot-Empfang&lt;br /&gt;
* Darüber: 2-polige Stiftleiste für LDR (Helligkeitsmessung)&lt;br /&gt;
* Oben links und rechts: Wannenstecker für insg. 32 Ausgabekanäle: OUT0-OUT23 (für die Wörter), OUTL1-OUTL4 (für die Minuten) und OUTG1-OUTG4 (für General-Purpose-Ausgabezwecke)&lt;br /&gt;
* Rechts: Anschlussklemmen für Versorgungsspannung 7-20V und die drei PWM-Kanäle Rot, Grün und Blau.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Version 1.1 (schmale Ausführung):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Wie 1.0, jedoch hat der Verbinder K9 (UART-Anschlüsse Rx/Tx für Debug-Zwecke) zwei zusätzliche Pins erhalten, siehe abweichendes Bestückungsbild rechts. Belegung von links nach rechts: Vcc / GND / RX / TX&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Version 2.0 (schmale Ausführung):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Änderungen gegenüber 1.1:&lt;br /&gt;
&lt;br /&gt;
* Diode D1 entfallen&lt;br /&gt;
* 6-poliger statt 10-poliger ISP-Stecker&lt;br /&gt;
* Am ISP-Stecker ist auch Vcc angeschlossen&lt;br /&gt;
* Anschlussmöglichkeit für weitere I2C-Module&lt;br /&gt;
* Anschlussmöglichkeit für weitere Schieberegister über SPI&lt;br /&gt;
&lt;br /&gt;
[[Datei:RXTX-platine-wordclock-1.1.png|miniatur|Rx/Tx in V1.1 und V2.0]]&lt;br /&gt;
&lt;br /&gt;
Der IR-Empfänger TSOP17XX/SFH5110 muss hinter einem nicht benutzten Buchstaben angebracht werden. Deshalb braucht man ihn nicht unbedingt auf die Platine löten, sondern kann ihn auch über ein 3-poliges Kabel mit der Platine verbinden. In diesem Fall sollte der Kondensator C2 nicht auf die Platine, sondern direkt am TSOP17XX/SFH5110 (C2 Minus an Pin 1, C2 Plus an Pin 2) angelötet werden. Bei Verwendung eines SFH5110 Pinbelegung beachten!&lt;br /&gt;
&lt;br /&gt;
Je nach Ort des LDRs (hinter Buchstaben bzw. mit/ohne Dffusor) kann die automatische Helligkeitsregelung unterschiedlich ausfallen. Hier muss man eventuell den Widerstand R6 variieren, wenn das Ergebnis nicht optimal sein sollte.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bestückung und Anschlüsse&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal-bestueckungsdruck.png|miniatur|Bestückungsaufdruck der Version 1.0]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal-bestueckungsdruck-1.1.png|miniatur|Bestückungsaufdruck der Version 1.1]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal-bestueckungsdruck-2.0.png|miniatur|Bestückungsaufdruck der Version 2.0]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal-bestueckt.jpg|miniatur|Bestückung: Orientierung der IRLUs beachten!]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal-anschluesse.png|miniatur|Anschlüsse V1.0]]&lt;br /&gt;
[[Datei:Wordclock-schmal-anschluesse-1.1.png|miniatur|Anschlüsse V1.1]]&lt;br /&gt;
[[Datei:Wordclock-schmal-anschluesse-2.0.png|miniatur|Anschlüsse V2.0]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WICHTIG (für 1.x und 2.x):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der oberste IRLU2905 muss anders herum eingelötet werden (Metall Richtung Spannungsregler) als die beiden unteren (Metall Richtung Schraubklemme). Siehe auch Foto rechts.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Möchte man einfarbige LEDs verwenden und auf die RGB-Steuerung verzichten, schließt man einfach zwei der drei RGB-PWM-Kanäle nicht an und verwendet stattdessen nur PWMR zur PWM-Steuerung. Die 2 zu PWMG und PWMB gehörenden IRLUs und die angeschlossenen 4 Widerstände am Gate der IRLUs kann man dann auch weglassen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bestückungsliste:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Name                Wert&lt;br /&gt;
 C1,C3,C4,C6,C8,C9   100NF&lt;br /&gt;
 C10,C11,C12,C13     100NF&lt;br /&gt;
 C2                  4,7µF&lt;br /&gt;
 C5,C7               47µF&lt;br /&gt;
 D1                  1N4001&lt;br /&gt;
 IC1                 ATMEGA88&lt;br /&gt;
 IC2                 7805&lt;br /&gt;
 IC3                 TSOP1738 oder TSOP31238 oder SFH5110 (andere Pinbelegung!)&lt;br /&gt;
 IC4,IC5,IC6         74HCT595N&lt;br /&gt;
 IC7                 DS1307&lt;br /&gt;
 IC8,IC9,IC10,IC11   UDN2981A&lt;br /&gt;
 K4                  Wannenstecker 10-polig&lt;br /&gt;
 K7,K8               Wannenstecker 16-polig&lt;br /&gt;
 K6                  LDR&lt;br /&gt;
 KL1                 KLEMME5POL&lt;br /&gt;
 Q1                  32,768KHz&lt;br /&gt;
 R1,R6,R8,R10,R12    10K (R6 für LDR evtl.noch nicht bestücken)&lt;br /&gt;
 R7                  10K, entfällt!&lt;br /&gt;
 R2                  100&lt;br /&gt;
 R3,R4               4K7&lt;br /&gt;
 R5,R9,R11           82&lt;br /&gt;
 T1,T2,T3            IRLU2905&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Davon abweichend für 2.0:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Name                Wert&lt;br /&gt;
 K4                  Wannenstecker 6-polig (statt 10-polig)&lt;br /&gt;
 K10                 I2C (neu, optional)&lt;br /&gt;
 K11                 SPI (neu, optional)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung zu C2 und R2:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
C2 und R2 bilden zusammen einen Tiefpass. Hier gilt: Soll der TSOPxxxx/SFH5110 über ein längeres Kabel entfernt von der Platine angebracht werden, sollte man den Kondensator C2 nicht in die Platine löten, sondern direkt am Empfänger anbringen (Achtung: TSOP17XX und SFH5110 haben unterschiedliche Pinbelegung).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== FAQ zur Bestückung ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal-bestueckt.jpg|miniatur|Bestückung: Orientierung der IRLUs (ganz rechts) beachten!]]&lt;br /&gt;
&lt;br /&gt;
 Q: Wie herum müssen die IRLUs eingelötet werden?&lt;br /&gt;
 A: Der oberste kommt mit der Metallseite nach links (Richtung&lt;br /&gt;
    Spannungsregler), Pin 1 ist hier der untere. Die anderen beiden IRLUs&lt;br /&gt;
    werden mit der Metallseite Richtung Schraubklemme eingelötet, siehe auch&lt;br /&gt;
    Foto rechts. Hier ist jeweils Pin 1 der obere.&lt;br /&gt;
&lt;br /&gt;
 Q: Welche ICs sollte ich sockeln?&lt;br /&gt;
 A: Wenn durch einen versehentlichen Kurzschluss bei der Freiluftverdrahtung der&lt;br /&gt;
    LEDs ein UDN2981 abfackelt, ist das ägerlich. Daher sollte man zumindest&lt;br /&gt;
    die UDNs und den ATMega sockeln. Besser ist es natürlich, alle zu sockeln.&lt;br /&gt;
&lt;br /&gt;
 Q: Bei dem ATMega und der RTC ist nicht ersichtlich, wie herum sie eingebaut&lt;br /&gt;
    werden müssen?&lt;br /&gt;
 A: Doch, kann man sehen: Der Lötpunkt von Pin1 ist immer rechteckig, die&lt;br /&gt;
    anderen sind oval. Das gilt übrigens für fast alle Bauteile, auch die Wannen.&lt;br /&gt;
&lt;br /&gt;
 Q: Ich möchte oben statt der abgebildeten zwei 2x8-poligen Stiftleisten 16-polige&lt;br /&gt;
    Wannenstecker nehmen. Wie herum kommen dann die oberen Wannen drauf?&lt;br /&gt;
 A: Mit der Kerbe nach unten, sieht man auch am rechteckigen Lötpunkt - und&lt;br /&gt;
    auch auf dem Foto rechts.&lt;br /&gt;
&lt;br /&gt;
 Q: Kann ich auf die Batterie verzichten, weil ich DCF77 einsetze bzw. nach&lt;br /&gt;
    einem Stromausfall die Uhr per Fernbedienung selbst neu stellen möchte?&lt;br /&gt;
 A: Wenn man keine Batterie einsetzt, sollte man VBat der RTC DS1307 mit GND&lt;br /&gt;
    verbinden. Das geht am einfachsten an den auf der Platine vorgesehenen&lt;br /&gt;
    Batterieanschlüssen: einfach K1 (Bat+) und K3 (Bat-) mit einem Stück Draht&lt;br /&gt;
    überbrücken. Übrigens: die Batterie hält lt. Datenblatt des DS1307&lt;br /&gt;
    10 Jahre, es ist also durchaus sinnvoll, diese auch zu bestücken.&lt;br /&gt;
&lt;br /&gt;
 Q: Der Infrarot-Empfänger TSOP17XX ist abgekündigt. Gibt es dazu eine Alternative?&lt;br /&gt;
 A: Als Ersatz kann man den [http://www.reichelt.de/?ARTICLE=107210 TSOP31238] nehmen. Er ist pinkompatibel.&lt;br /&gt;
&lt;br /&gt;
 Q: Kann ich (aus Kostengründen) auch einfarbige LEDs verwenden?&lt;br /&gt;
 A: Ja, einfach zwei der drei RGB-PWM-Kanäle nicht anschließen und nur PWMR (für Rot) benutzen.&lt;br /&gt;
    Die 2 zu PWMG und PWMB gehörenden IRLUs und die angeschlossenen 4 Widerstände am Gate der IRLUs&lt;br /&gt;
    kann man dann auch weglassen.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Beginner-Tipp&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Testmodul-Schaltplatine.JPG|miniatur]]&lt;br /&gt;
&lt;br /&gt;
Beim Zusammenbau der Word Clock gibt es eine Reihe von Fehlerquellen (Programmierung, Aufbau der Steuerplatine, Lötfehler auf den LED-Streifen, Verkabelung etc.). Für die Fehlersuche aber auch für das erste Erfolgserlebnis nach dem Zusammenbau der Schaltplatine kann man sich relativ einfach mit Hilfe von Vorwiderständen und Standard-LEDs eine &amp;quot;Test-Umgebung&amp;quot; aufbauen. Die ausgedruckte Tabelle mit der Zuordnung der Ausgänge/LEDs zu den entsprechenden Wörtern erleichtert die Interpretation. Achtung: auf die richtige &amp;quot;Default&amp;quot;-Sprachvariante achten. Wenn die LEDs dann wie erwartet leuchten = erstes Erfolgserlebnis. &lt;br /&gt;
&lt;br /&gt;
Eine BestückungsInfo für die Version V1.1 gibt es als PDF Download: &#039;&#039;&#039;[[Media:WordClockSteuerplatineV1.1Bestueckung.pdf]]&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Anschluss der LEDs =&lt;br /&gt;
&lt;br /&gt;
=== Zuordnung der Kanäle ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wannen.png|400px|Anschlüsse der Wannenstecker]]&lt;br /&gt;
&lt;br /&gt;
Folgende Tabelle enthält die Zuordnung der Wörter zu den Pins der Wannenstecker.&lt;br /&gt;
Die Bezeichnungen der Pins entsprechen dem Schaltplan. Zu beachten ist, dass die Reihenfolge der Wörter nichts mit der Anordnung auf der Frontplatte zu tun hat.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; id=&amp;quot;pinbelegungen&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Zuordnung Pins&#039;&#039;&#039;&lt;br /&gt;
|-                    &lt;br /&gt;
! Anschluss || Pin || [[#Deutsch (2-sprachig) |Frontplatte deutsch 2-sprachig]]  || [[#Deutsch (3-sprachig) |Frontplatte deutsch 3-sprachig]]  || [[#Englisch|Frontplatte Englisch]]&lt;br /&gt;
|-                                                         &lt;br /&gt;
|  OUT0 || K7-08 || ES IST               ||  ZW                         || IT IS&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT1 || K7-07 || FÜNF  (Minuten)      ||  EI                         || FIVE   (Minuten) &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT2 || K7-06 || ZEHN  (Minuten)      ||  N                          || TEN    (Minuten) &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT3 || K7-05 || VOR   (Minuten)      ||  S                          || QUARTER &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT4 || K7-04 || DREI  (Minuten)      ||  IEBEN                      || TWENTY (Minuten) &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT5 || K7-03 || VIERTEL              ||  DREI                       || HALF &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT6 || K7-02 || NACH                 ||  VIER                       || TO &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT7 || K7-01 || VOR                  ||  FÜNF                       || PAST &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT8 || K7-16 || HALB                 ||  SECHS                      || ONE &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT9 || K7-15 || S                    ||  ACHT                       || TWO &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT10 || K7-14 || EIN                 ||  NEUN                       || THREE &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT11 || K7-13 || ZWEI                ||  ZEHN                       || FOUR &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT12 || K7-12 || DREI                ||  ELF                        || FIVE &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT13 || K7-11 || VIER                ||  ZWÖLF                      || SIX &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT14 || K7-10 || FÜNF                ||  ES IST                     || SEVEN &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT15 || K7-09 || SECHS               ||  UHR                        || EIGHT &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT16 || K8-08 || SIEBEN              ||  FÜNF (Minuten)             || NINE &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT17 || K8-07 || ACHT                ||  ZEHN (Minuten)             || TEN &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT18 || K8-06 || NEUN                ||  ZWANZIG (Minuten)      || ELEVEN &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT19 || K8-05 || ZEHN                ||  DREI (Minuten)             || TWELVE &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT20 || K8-04 || ELF                 ||  VIERTEL (Minuten)          || O CLOCK  &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT21 || K8-03 || ZWÖLF               ||  NACH                       || unverbunden&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT22 || K8-02 || UHR                 ||  VOR                        || unverbunden&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT23 || K8-01 || unverbunden         ||  HALB                       || unverbunden&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUTL1 || K8-09 || min1                ||  min1                       || min1&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUTL2 || K8-10 || min2                ||  min2                       || min2&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUTL3 || K8-11 || min3                ||  min3                       || min3&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUTL4 || K8-12 || min4                ||  min4                       || min4&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUTG1 || K8-13 || Ambilight (opt.)           ||  Ambilight (opt.)                  || Ambilight (opt.)           &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUTG2 || K8-14 || unverbunden         ||  unverbunden                || unverbunden&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUTG3 || K8-15 || unverbunden         ||  unverbunden                || unverbunden&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUTG4 || K8-16 || dcf Empfang         ||  dcf Empfang                || dcf Empfang             &lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Beschaltungsvarianten der LEDs ===&lt;br /&gt;
&lt;br /&gt;
Da die Schaltung genügend Power hat, um eine Unmenge an RGB-LEDs zu treiben, gibt es folgende Möglichkeiten, die auch mixbar sind:&lt;br /&gt;
&lt;br /&gt;
1. Pro Wort für jeden Buchstaben eine RGB-LED (mit gemeinsamer Anode) in&lt;br /&gt;
Parallelschaltung (natürlich mit geeignetem Vorwiderstand pro LED)&lt;br /&gt;
&lt;br /&gt;
Prinzip (am Beispiel des Wortes &amp;quot;VIER&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
         /---|&amp;gt;|----| R1R |---- PWMR&lt;br /&gt;
      +--|---|&amp;gt;|----| R1G |---- PWMG     &amp;quot;V&amp;quot;&lt;br /&gt;
      |  \---|&amp;gt;|----| R1B |---- PWMB&lt;br /&gt;
      |&lt;br /&gt;
      |  /---|&amp;gt;|----| R2R |---- PWMR&lt;br /&gt;
      +--|---|&amp;gt;|----| R2G |---- PWMG     &amp;quot;I&amp;quot;&lt;br /&gt;
      |  \---|&amp;gt;|----| R2B |---- PWMB&lt;br /&gt;
 OUTx-+&lt;br /&gt;
      |  /---|&amp;gt;|----| R3R |---- PWMR&lt;br /&gt;
      +--|---|&amp;gt;|----| R3G |---- PWMG     &amp;quot;E&amp;quot;&lt;br /&gt;
      |  \---|&amp;gt;|----| R3B |---- PWMB&lt;br /&gt;
      |&lt;br /&gt;
      |  /---|&amp;gt;|----| R4R |---- PWMR&lt;br /&gt;
      +--|---|&amp;gt;|----| R4G |---- PWMG     &amp;quot;R&amp;quot;&lt;br /&gt;
         \---|&amp;gt;|----| R4B |---- PWMB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Pro Wort für jeden Buchstaben eine RGB-LED in Reihenschaltung (mit&lt;br /&gt;
nur 1 Vorwiderstand für die ganze Reihe, bzw. 3 wegen RGB). Das geht&lt;br /&gt;
aber nur, wenn die RGB-LEDs unabhängige Anoden und Kathoden haben (ja,&lt;br /&gt;
die gibt es).&lt;br /&gt;
&lt;br /&gt;
Prinzip:&lt;br /&gt;
                         &amp;quot;V&amp;quot;    &amp;quot;I&amp;quot;    &amp;quot;E&amp;quot;    &amp;quot;R&amp;quot;&lt;br /&gt;
         /----| R1R |----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|---- PWMR&lt;br /&gt;
 OUTx --+-----| R1G |----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|---- PWMG&lt;br /&gt;
         \----| R1B |----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|---- PWMB&lt;br /&gt;
&lt;br /&gt;
Theoretisch könnte man solche Streifen als Platine herstellen, welche man dann immer auf die gewünschte Länge kürzt, als 1, 2, 3 ... 7 Buchstaben.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung von einfarbigen LEDs vereinfachen sich die Prinzip-Schaltungen wie folgt:&lt;br /&gt;
&lt;br /&gt;
1. Parallelschaltung, eine LED pro Buchstabe im Wort:&lt;br /&gt;
&lt;br /&gt;
       /----|&amp;gt;|----| R1 |---- PWMR     &amp;quot;V&amp;quot;&lt;br /&gt;
      +-----|&amp;gt;|----| R2 |---- PWMR     &amp;quot;I&amp;quot;&lt;br /&gt;
 OUTx-+&lt;br /&gt;
      +-----|&amp;gt;|----| R3 |---- PWMR     &amp;quot;E&amp;quot;&lt;br /&gt;
       \----|&amp;gt;|----| R4 |---- PWMR     &amp;quot;R&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Reihenschaltung, eine LED pro Buchstabe im Wort:&lt;br /&gt;
&lt;br /&gt;
                    &amp;quot;V&amp;quot;    &amp;quot;I&amp;quot;    &amp;quot;E&amp;quot;    &amp;quot;R&amp;quot;&lt;br /&gt;
 OUTx ----| R1 |----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|---- PWMR&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Berechnen der Vorwiderstände kann z.&amp;amp;nbsp;B. dieser Rechner&lt;br /&gt;
verwendet werden: &#039;&#039;&#039;[http://www.elektronik-kompendium.de/sites/bau/1109111.htm Vorwiderstands-Rechner]&#039;&#039;&#039; oder &#039;&#039;&#039;[http://www.modding-faq.de/index.php?artid=506 Vorwiderstands-Rechner mit Unterstützung für Reihenschaltung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit die LEDs selbst nicht sichtbar sind, benötigt man hinter den transparenten Buchstaben einen Diffusor. Im einfachsten Fall kann das eine weiße Schicht Farbe sein.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Beginner-Tipp&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
In der Sammelbestellung wurden die Vorwiderstände für die Reihenschaltung berechnet. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== LEDs &amp;amp; Platinen ===&lt;br /&gt;
==== Single-LED-Platine ====&lt;br /&gt;
Ende 2013 wurde eine neue Platine für die LEDs entworfen. Diese reduziert die notwendigen Löt- und Verdrahtungsarbeiten auf ein minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| Top Seite des Single Boards: || Bottom Seite des Single Boards:&lt;br /&gt;
|-&lt;br /&gt;
| [[Datei:Single_Board_v4_TOP.jpg|350px|Singel LED Platine - LED Seite]]&lt;br /&gt;
 || [[Datei:Single_Board_v4_BOTTOM.jpg|350px|Singel LED Platine - Widerstand Seite]]&lt;br /&gt;
|}&lt;br /&gt;
Das Board ist wie folgt konzipiert:&lt;br /&gt;
* von der TOP Seite betrachtet, befinden sich rechts die 4 Platinen für die Minuten-LEDs&lt;br /&gt;
* von der TOP Seite betrachtet, befindet sich oben rechts eine kleine Zusatzplatine, welche zur Stabilisierung des Pollin DCF Empfängers konstruiert wurde - DANKE an Thomas K.! &amp;lt;br&amp;gt;Anbei der Schaltplan und der Bestückungsplan:&amp;lt;br&amp;gt;[[Datei:Single_Board_v4_DCF77-Schaltplan.png|200px]] [[Datei:Single-Board-v4-DCF-Bestueckung.JPG|300px]]&amp;lt;br&amp;gt;IC1 und C3 sind auf der Rückseite zu bestücken.&lt;br /&gt;
&amp;lt;br&amp;gt;Die notwendigen Bauteile sind als [http://www.reichelt.de/?ACTION=20;AWKID=885799;PROVID=2084 Warenkorb bei Reichelt] hinterlegt.&lt;br /&gt;
* es besteht die Möglichkeit 2 zusätzliche PLCC-6 LEDs zu bestücken (D1 und D2 - links und rechts von SECHS) um so bis zu 6 Status-Anzeigen nach vorne zu führen (derzeit nicht in der SW gesondert verwendet). So kann zB die DCF77 Empfangsanzeige nach vorne ausgeführt werden. In der aktuellen Version sind diese wie folgt vorverdrahtet:&lt;br /&gt;
** D1 ROT -&amp;gt; Out G4 (DCF Empfangskontrolle)&lt;br /&gt;
** D1 GRÜN -&amp;gt; n/a - ausgeführt als Pin zur Verbindungsseite&lt;br /&gt;
** D1 BLAU -&amp;gt; n/a - ausgeführt als Pin zur Verbindungsseite&lt;br /&gt;
** D2 ROT -&amp;gt; Out G1 (Ambilight)&lt;br /&gt;
** D2 GRÜN -&amp;gt; Out G2 - derzeit nicht in der SW verwendet&lt;br /&gt;
** D2 BLAU -&amp;gt; Out G3 - derzeit nicht in der SW verwendet&lt;br /&gt;
* möchte man zB nur die DCF77 Empfangskontrolle haben, so reicht es den ROT-Kanal von D1 mit einer PLCC-2 LED und den dazu gehörigen Widerstand zu bestücken&lt;br /&gt;
* TSOP mit Stabilisierungskondensator und LDR werden direkt auf dem Single Board bestückt&lt;br /&gt;
* das Single Board wird wie folgt mit der Hauptplatine verbunden:&lt;br /&gt;
** 2 16polige Flachbandkabeln für K7 und K8&lt;br /&gt;
** 4 Adern für PWMR / PMWG / PMWB / GND&lt;br /&gt;
** 2 Drähten für den LDR&lt;br /&gt;
** 3 Drähte für den TSOP&lt;br /&gt;
* die Verbindungen zu den Minuten- / Ambilightplatinen erfolgt über die Kontakte an den jeweiligen Ecken / Seiten&lt;br /&gt;
* für die weiter Verwendung sind die Minutenanschlüsse M1-M4 an der zentralen Verbinderseite ausgeführt&lt;br /&gt;
* für die weiter Verwendung sind die OUT G1-G4 an der zentralen Verbinderseite ausgeführt&lt;br /&gt;
* auf der BOTTOM Seite ist Platz für eine PLCC-2 LED als DCF77 Empfangskontroll LED vorgesehen&lt;br /&gt;
&lt;br /&gt;
Die für die DCF77 Empfangskontrolle, D1 und D2 benötigten Bauteile sind &#039;&#039;&#039;nicht Bestandteil&#039;&#039;&#039; eines angebotenen Paketes.&lt;br /&gt;
&lt;br /&gt;
Die Minuten-LEDs werden an den Ecken der Platine über kleine Drahtbrücken angeschlossen: (Bild ist noch vom Prototyp)&lt;br /&gt;
[[Datei:WordClock_Singel_LED_PCB_Minuten.jpg|400px|Anschluß Minuten LED]]&lt;br /&gt;
&lt;br /&gt;
Die Verbindung zwischen der LED-Platine und der Hauptplatine erfolgt mittels kurzem Flachbandkabel.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:WordClock_Singel_LED_PCB_Anschluß.jpg|400px|Anschluß an die Hauptplatine]]&lt;br /&gt;
&lt;br /&gt;
Auf dem Prototyp waren die Buchsen für K7 und K8 verdreht. Daher mussten die Flachbandkabel beim verbinden verdreht werden. Dieses wird in der finalen Version korrigiert. Es erfolgt dann ein Austausch des Bildes.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bitte beachtet, dass für das SingleBoard zusätzliche Bauteile benötigt werden. Diese sind in einem eigenen Warenkorb bei Reichelt hinterlegt.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Diese sind in einem eigenen &#039;&#039;&#039;[http://www.reichelt.de/?ACTION=20;AWKID=847662;PROVID=2084 WARENKORB]&#039;&#039;&#039; bei Reichelt hinterlegt.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Bauteile für das DCF77 Stabilisierungsboard sind ebenfalls in einem eigenen &#039;&#039;&#039;[http://www.reichelt.de/?ACTION=20;AWKID=885799;PROVID=2084 WARENKROB]&#039;&#039;&#039; bei Reichelt hinterlegt.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Streifenplatinen ====&lt;br /&gt;
Die Platine hat ein Maß von 314 x 12 mm und ist auf die Word-Clock-Front-Varianten A und B (also 450mm x 450mm) ausgelegt.&lt;br /&gt;
&lt;br /&gt;
Der Abstand der einzelnen LEDs beträgt 28.1mm&lt;br /&gt;
&lt;br /&gt;
Die Streifenplatine wird so ausschauen: (Version 8 vom 06.März 2010)&lt;br /&gt;
&lt;br /&gt;
[[Datei:LED_Streifen_V6_1.png|750px|Streifenplatine für SMD RGB LEDs Version 8]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:LED_Streifen_V6_1_bestueckt.jpg|750px|Erster Streifen bestückt]]&lt;br /&gt;
&lt;br /&gt;
Erste Streifenplatine bestückt.&amp;lt;br&amp;gt;&lt;br /&gt;
Weitere Beispiel-Photos der bestückten Streifenplatinen sind [http://www.mikrocontroller.net/topic/156661#1780198 hier] zu finden.&lt;br /&gt;
&lt;br /&gt;
Ausschnitt vergrößert dargestellt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:LED_Streifen_V6_1_schnitt.png|500px|Aussschnitt]]&lt;br /&gt;
&lt;br /&gt;
Datenblatt der LED mit Bestückungsinfos: [[Datei:SMD RGB PLCC-6 datasheet3.pdf]]&lt;br /&gt;
&lt;br /&gt;
Hier ist die Bestückung aller Streifen schematisch detailliert gezeigt: &amp;lt;br&amp;gt; [http://www.mikrocontroller.net/topic/156661?goto=1671369#1671369 Beitrag] &amp;lt;br&amp;gt;&lt;br /&gt;
Bestückungstabelle: [[Datei:2012WordClockLEDMatrix.pdf]] &amp;lt;br&amp;gt;&lt;br /&gt;
Bestückungsgrafik: [[Datei:2012WordClockLEDMatrix_wiring_v22.pdf]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Technische Daten der SMD RGB PLCC-6 LEDs ====&lt;br /&gt;
Spezifikation&lt;br /&gt;
* Source Material: InGaN&lt;br /&gt;
* Emitting Colour: SMD SMT 5050 RGB&lt;br /&gt;
* LENS Type: Water clear&lt;br /&gt;
* Reverse Voltage: 5.0 V&lt;br /&gt;
* Viewing Angle: 140 degree&lt;br /&gt;
* Lead Soldering Temp: 260°C for 5 seconds&lt;br /&gt;
&lt;br /&gt;
Absolute Maximum Rating (Ta = 250C)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PARAMETER || Symbol || RED || GREEN || BLUE || UNITS&lt;br /&gt;
|-&lt;br /&gt;
| Power Dissipation || PO || align=&amp;quot;right&amp;quot; | 80 || align=&amp;quot;right&amp;quot; | 95 || align=&amp;quot;right&amp;quot; | 85 || mW&lt;br /&gt;
|-&lt;br /&gt;
| DC Current || IF || align=&amp;quot;right&amp;quot; | 20 || align=&amp;quot;right&amp;quot; | 20 || align=&amp;quot;right&amp;quot; | 20 || mA&lt;br /&gt;
|-&lt;br /&gt;
| Peak Forward Current || IFP || align=&amp;quot;right&amp;quot; | 100 || align=&amp;quot;right&amp;quot; | 100 || align=&amp;quot;right&amp;quot; | 100 || mA&lt;br /&gt;
|-&lt;br /&gt;
| Reverse Voltage || VR || align=&amp;quot;right&amp;quot; | 5 || align=&amp;quot;right&amp;quot; | 5 || align=&amp;quot;right&amp;quot; | 5 || V&lt;br /&gt;
|-&lt;br /&gt;
| Operating Temperature || Topr || colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | -25 to +85 || °C&lt;br /&gt;
|-&lt;br /&gt;
| Storage Temperature || Tstg ||  colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | -40 to +85 || °C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Electro-optical Characteristics (Ta = 250C)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PARAMETER || SYMBOL || CONDITIONS || MIN. || TYP. || MAX. || UNIT&lt;br /&gt;
|-&lt;br /&gt;
| Forward Voltage (B) || VF || IF = 20mA || align=&amp;quot;right&amp;quot; | 3.4 || align=&amp;quot;right&amp;quot; | 3.6 || align=&amp;quot;right&amp;quot; | 3.8 || V&lt;br /&gt;
|-&lt;br /&gt;
| Forward Voltage (G) || VF || IF = 20mA || align=&amp;quot;right&amp;quot; | 3.4 || align=&amp;quot;right&amp;quot; | 3.6 || align=&amp;quot;right&amp;quot; | 3.8 || V&lt;br /&gt;
|-&lt;br /&gt;
| Forward Voltage (R) || VF || IF = 20mA || align=&amp;quot;right&amp;quot; | 1.9 || align=&amp;quot;right&amp;quot; | 2.1 || align=&amp;quot;right&amp;quot; | 2.5 || V&lt;br /&gt;
|-&lt;br /&gt;
| Dominant Wavelength (B) || lD || IF = 20mA || align=&amp;quot;right&amp;quot; | 465 || align=&amp;quot;right&amp;quot; | 470 || align=&amp;quot;right&amp;quot; | 475 || nm&lt;br /&gt;
|-&lt;br /&gt;
| Dominant Wavelength (G) || lD || IF = 20mA || align=&amp;quot;right&amp;quot; | 515 || align=&amp;quot;right&amp;quot; | 520 || align=&amp;quot;right&amp;quot; | 525 || nm&lt;br /&gt;
|-&lt;br /&gt;
| Dominant Wavelength (R) || lD || IF = 20mA || align=&amp;quot;right&amp;quot; | 625 || align=&amp;quot;right&amp;quot; | 630 || align=&amp;quot;right&amp;quot; | 635 || nm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pin / Farbzuordnung:&lt;br /&gt;
* R: Pin 1 - 6&lt;br /&gt;
* G: Pin 2 - 5&lt;br /&gt;
* B: Pin 3 - 4&lt;br /&gt;
&lt;br /&gt;
[[Datei:plcc6_smd_RGB.JPG]]&lt;br /&gt;
----&lt;br /&gt;
==== Widerstandswerte für die LED Streifen ====&lt;br /&gt;
&lt;br /&gt;
Berechnet sind die Widerstände für eine Spannungsversorgung von 15V - abzgl. 1,4V durch den Spannungsabfall an den UDN2981. Ein solches Netzteil gibt es zB bei [http://www.pollin.de/shop/dt/MjU5OTQ2OTk-/Stromversorgung/Netzgeraete/Regelbare_Netzgeraete/EcoFriendly_Universal_Schaltnetzteil_MW_3H36GS.html Pollin] oder auch bei [http://www.reichelt.de/?ACTION=3;ARTICLE=89789;PROVID=2402 Reichelt]. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Beginner-Tipp&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Bitte lest zum Stichwort &amp;quot;Netzteil&amp;quot; im Forum nach. Es gibt hierzu einige Bemerkungen und Empfehlungen. So z. B. auch der Hinweis auf ein weiteres Netzteil von C*: [http://www.conrad.de/ce/de/product/512696/HN-POWER-HNP18-150-STECKER-NETZT-18W Netzteil_15V_1.2A]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | |||| colspan=&amp;quot;3&amp;quot; | ....Widerstände E12.... |||| colspan=&amp;quot;3&amp;quot; | ....Widerstände E24.... ||&lt;br /&gt;
|- &lt;br /&gt;
! Streifen  || Wort  || LEDs |||| style=&amp;quot;color:red;&amp;quot; | Rot || style=&amp;quot;color:green;&amp;quot; | Grün || style=&amp;quot;color:blue;&amp;quot; | Blau |||| style=&amp;quot;color:red;&amp;quot; | Rot || style=&amp;quot;color:green;&amp;quot; | Grün || style=&amp;quot;color:blue;&amp;quot; | Blau || Anschluss&lt;br /&gt;
|- &lt;br /&gt;
| 1 ||  ES ||  2 ||||  560 ||  470 ||  470 ||||  510 ||  360 ||  360 || OUT14&lt;br /&gt;
|- &lt;br /&gt;
| {{H16}} | 1 || {{H16}} | K ||  ||||  ||  ||  ||||  ||  ||  ||&lt;br /&gt;
|- &lt;br /&gt;
| 1 || IST || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT14&lt;br /&gt;
|- &lt;br /&gt;
| {{H16}} | 1 || {{H16}} | L ||  ||||  ||  ||  ||||  ||  ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || FÜNF || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT16&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 2 || ZEHN || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT17&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 2 || ZWAN || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT18&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 2 || ZIG || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT18&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DREI || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT19&lt;br /&gt;
|-&lt;br /&gt;
| 3 || VIER || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT20&lt;br /&gt;
|-&lt;br /&gt;
| 3 || TEL || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT20&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| {{H16}} | 4 || {{H16}} | TG ||  ||||  ||  ||  ||||  ||  ||  ||&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 4 || NACH || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT21&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 4 || VOR || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT22&lt;br /&gt;
|- {{H12}}&lt;br /&gt;
| {{H16}} | 4 || {{H16}} | JM ||  ||||  ||  ||  ||||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 5 || HALB || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT23&lt;br /&gt;
|- &lt;br /&gt;
| {{H16}} | 5 || {{H16}} | Q ||  ||||  ||  ||  ||||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || ZWÖ || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT13&lt;br /&gt;
|-&lt;br /&gt;
| 5 || LF || 2 |||| 560 || 470 || 470 |||| 510 || 360 || 360 || OUT13&lt;br /&gt;
|- &lt;br /&gt;
| {{H16}} | 5 || {{H16}} | P ||  ||||  ||  ||  ||||  ||  ||  ||&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 6 || ZW || 2 |||| 560 || 470 || 470 |||| 510 || 360 || 360 || OUT0&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 6 || EI || 2 |||| 560 || 470 || 470 |||| 510 || 360 || 360 || OUT1&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 6 || N || 1 |||| 680 || 560 || 560 |||| 620 || 560 || 560 || OUT2&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 6 || S || 1 |||| 680 || 560 || 560 |||| 620 || 560 || 560 || OUT3&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 6 || IEB || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT4&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 6 || EN || 2 |||| 560 || 470 || 470 |||| 510 || 360 || 360 || OUT4&lt;br /&gt;
|- &lt;br /&gt;
| {{H16}} | 7 || {{H16}} | K ||  ||||  ||  ||  ||||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 7 || DREI || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT5&lt;br /&gt;
|- &lt;br /&gt;
| {{H16}} | 7 || {{H16}} | RH ||  ||||  ||  ||  ||||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || FÜNF || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT7&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 8 || ELF || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT12&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 8 || NEUN || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT10&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 8 || VIER || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT6&lt;br /&gt;
|- &lt;br /&gt;
| {{H16}} | 9 || {{H16}} | W ||  ||||  ||  ||  ||||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 9 || ACHT || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT9&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ZEHN || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT11&lt;br /&gt;
|- &lt;br /&gt;
| {{H16}} | 9 || {{H16}} | RS ||  ||||  ||  ||  ||||  ||  ||  ||  &lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| {{H16}} | 10 || {{H16}} | B ||  ||||  ||  ||  ||||  ||  ||  ||  &lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 10 || SEC || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT8&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 10 || HS || 2 |||| 560 || 470 || 470 |||| 510 || 360 || 360 || OUT8&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| {{H16}} | 10 || {{H16}} | FM ||  ||||  ||  ||  ||||  ||  ||  ||  &lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 10 || UHR || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Es werden somit folgende Widerstände aus der E24 Reihe benötigt:&lt;br /&gt;
&lt;br /&gt;
* 13x 27Ω&lt;br /&gt;
* 13x 33Ω&lt;br /&gt;
* 18x 200Ω&lt;br /&gt;
* 13x 300Ω&lt;br /&gt;
* 12x 360Ω&lt;br /&gt;
* 9x 390Ω&lt;br /&gt;
* 6x 510Ω&lt;br /&gt;
* 4x 560Ω&lt;br /&gt;
* 2x 620Ω&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== Ambilight-/LED-Streifenplatine bestücken ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Beginner-Tipps&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Die Beschreibung zum Thema Ambilight ist im Forum etwas unübersichtlich. &lt;br /&gt;
&lt;br /&gt;
Sehr hilfreich zum Verständnis sind die Bilder von [http://www.mikrocontroller.net/topic/156661#1780198 Matthias]. Wichtig zum Verständnis ist auch der Hinweis auf die Drahtbrücken auf der Platinenunterseite vor der ersten LED eines Wortes. Es hat mir sehr geholfen, das Platinen-Layout-Schema und das Foto übereinander zu montieren.&lt;br /&gt;
&lt;br /&gt;
[[Datei:LED-Platine.jpg|miniatur]]&lt;br /&gt;
&lt;br /&gt;
Anhand der [http://www.mikrocontroller.net/articles/Word_Clock_Variante_1#Widerstandswerte_f.C3.BCr_die_LED_Streifen Tabelle] kann man erkennen, dass die Widerstände im Ambilight-Paket (300 Ohm = rot, 27 Ohm = grün, 33 Ohm = blau) für 2 x 4 LEDs in Serie ausgelegt sind. &lt;br /&gt;
&lt;br /&gt;
Man kann also 2 x 4 LEDs hinter einander löten oder die Variante von Christian aufgreifen der die LEDs physikalisch in 2er Gruppen angeordnet hat. Durch Drahtbrücken werden diese 2er Gruppen aber dann elektrisch zu zwei 4er Gruppen: LED-LED-Bügel-LED-LED-frei-LED-LED-Bügel-LED-LED, so dass auch für diese Version die Widerstände passen.&lt;br /&gt;
&lt;br /&gt;
Update Jan 2014: ich habe für die Amiblight-Platinen nach dem Muster LED-LED-Bügel-LED-LED-frei-LED-LED-Bügel-LED-LED diese Schemazeichnung mit Lötpunkten und ganz kurzen Drahtbrücken angefertigt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Ambilight-wiring-2x2x2x2-Leds-KHK.png|miniatur]]&lt;br /&gt;
&lt;br /&gt;
Persönlicher Kommentar KHK: &lt;br /&gt;
Ich habe inzwischen die zweite Wordclock fertig gestellt. Beim ersten Mal habe ich die LED-Streifenplatinen/Ambilight-Streifen ohne sie zu trennen bestückt. Das war schön übersichtlich und einfach zu löten. Das Trennen der fertig gelöteten Streifen war aber sehr schwierig. Bei der zweiten Wordclock habe ich die LED-Streifen vor der Bestückung mit einer Hebelschere getrennt. Das ging super einfach und hat mir viel Mühe gespart. Fazit: Trennt bitte die LED-Streifen vor der Bestückung ab! Ihr spart Euch viel Mühe und Stress.&lt;br /&gt;
&lt;br /&gt;
Beginner-Tipp: Das Ambilight wird mit OUTG2 angesteuert (Steuerplatine Version 1.1).&lt;br /&gt;
&lt;br /&gt;
==== LED-Streifen: Logik ====&lt;br /&gt;
&lt;br /&gt;
* Das Signal für die R/G/B PWM wird für jede Streifenplatine seitlich zugeführt (&amp;quot;R/G/B-Ausgangssignal&amp;quot;). Wichtig: nicht alle Platinen hintereinanderschalten, sondern die einzelnen Streifen parallel schalten (sonst werden die Leiterbahnen der ersten Platinen immer mit dem vollen Strom belastet). &lt;br /&gt;
&lt;br /&gt;
* Das &amp;quot;R/G/B-Ausgangssignal&amp;quot; wird vor jedem Wort auf den Vorwiderstand geführt. Dazu ist es notwendig das &amp;quot;R/G/B-Ausgangssignal&amp;quot; von den gemeinsamen Leiterbahnen (R,G,B) mit Draht- (R und G) bzw. einer Lötbrücke (B) auf die Vorwiderstände zu legen. &lt;br /&gt;
&lt;br /&gt;
* Innerhalb eines Wortes werden die vier Signale (PWM R/G/B + COM) über Lötbrücken von einem Buchstaben zum anderen weitergeführt. &lt;br /&gt;
&lt;br /&gt;
* Am Ende eines Wortes werden die Ausgänge 1, 2 und 3 der LED mit Lötbrücken zusammengeführt und gehen auf COM. &lt;br /&gt;
&lt;br /&gt;
* Eine Besonderheit ergibt sich bei &amp;quot;Leerzeichen&amp;quot; - wie z. B. beim Ambilight oder bei &amp;quot;Es(leer)ist&amp;quot;: &lt;br /&gt;
** Die COM Leitung wird durch zwei Lötbrücken links und rechts des zu überbrückenden Segments weitergeleitet. &lt;br /&gt;
** Das &amp;quot;R/G/B-Ausgangssignal&amp;quot; für den ersten Buchstaben nach dem &amp;quot;Leerzeichen&amp;quot; wird wieder mit den Draht-/Lötbrücken zugeführt, die auch vor Wörtern verwenden werden.&lt;br /&gt;
&lt;br /&gt;
Für jedes Wort wird (irgendwo) COM vom den Ausgängen OUTx zugeleitet.&lt;br /&gt;
&lt;br /&gt;
==== LED-Streifen: Zusammenfassung Löten ====&lt;br /&gt;
&lt;br /&gt;
* Widerstände sind immer am Anfang eines Wortes. Individuelle Werte für R/G/B je nach Länge des Wortes.&lt;br /&gt;
* Lötzinnbrücken sind&lt;br /&gt;
** am Anfang eines Wortes bei B&lt;br /&gt;
** am Anfang einer Streifenplatine bei B (hier sind keine Drahtbrücken nötig)&lt;br /&gt;
** am Ende eines Wortes von LED1/LED2/LED3 auf COM&lt;br /&gt;
** in der Mitte eines Wortes vor allen LED (außer der Ersten) zum Ersatz des Vorwiderstandes&lt;br /&gt;
** Zusätzlich zum Überbrücken von &amp;quot;Leerstellen&amp;quot; nur bei COM vor und nach dem Segment (da, wo zwischen zwei Zeichen sonst alle 4 Lötbrücken gesetzt werden)&lt;br /&gt;
* Drahtbrücken an der Platinenunterseite gibt es:&lt;br /&gt;
** vor einem neuen Wort zu R und G&lt;br /&gt;
** nach einer &amp;quot;Leerstelle&amp;quot; zu R und G (= identisch zu 1)&lt;br /&gt;
* Für jedes Wort wird (irgendwo) COM vom den Ausgängen OUTx zugeleitet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== Sammelbestellung LED-Platinen ===&lt;br /&gt;
Es werden folgende 3 Pakete angeboten:&lt;br /&gt;
* Paket 1 (Uhr) - 66,20Eur : 1 Single-LED-Platine, 100 RGB-PLCC6-LEDs und 155 SMD-Widerstände&lt;br /&gt;
* Paket 2 (Ambilight) - 17,00Eur : 4 Streifenplatinen, 32 RGB-PLCC6-LEDs und 45 SMD-Widerstände&lt;br /&gt;
* Paket 3 (Uhr - alte Version) - 52,20Eur : 11 Streifenplatinen, 100 RGB-PLCC6-LEDs und 155 SMD-Widerstände&lt;br /&gt;
&lt;br /&gt;
Für das neue SingleBoard (Paket 1) werden zusätzliche Bauteile benötigt. Diese sind in einem eigenen Reichelt Warenkorb zusammen gestellt:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt; http://www.reichelt.de/?ACTION=20;AWKID=847662;PROVID=2084&lt;br /&gt;
&lt;br /&gt;
Und folgende Einzelpositionen:&lt;br /&gt;
* RGB-PLCC6-LED einzeln - 0,35Eur&lt;br /&gt;
* Streifenplatine einzeln - 1,00Eur&lt;br /&gt;
* Single-LED-Platine einzeln - 25,00Eur&lt;br /&gt;
* Zwischenboden mit Ambilightausfräsung (MDF 19mm gefräst) - 37,50Eur&lt;br /&gt;
* Zwischenboden ohne Ambilightausfräsung (MDF 19mm gefräst) - 37,50Er&lt;br /&gt;
* programmierter ATMega168 - 3,55Eur&lt;br /&gt;
&lt;br /&gt;
Der Versand erfolgt bei nur LEDs / Widerständen / ATMega als MaxiBrief mit Einschreiben.&lt;br /&gt;
* innerhalb BRD (ohne Inseln) - 4,00Eur&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Versand mit Streifenplatinen erfolgt als kleines Paket:&lt;br /&gt;
* innerhalb BRD (ohne Inseln) - 5,20Eur&lt;br /&gt;
* Österreich und Schweiz - 9,00Eur&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Versand mit Zwischenboden (max 8 Böden pro Paket) oder Single-LED-Platine wird als Paket versendet:&amp;lt;br&amp;gt;&lt;br /&gt;
* innerhalb BRD (ohne Inseln) - 6,50Eur&amp;lt;br&amp;gt;&lt;br /&gt;
* Österreich - 16,00Eur&amp;lt;br&amp;gt;&lt;br /&gt;
* Schweiz - 27,50Eur&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es fallen jeweils nur die höheren Versandkosten an.&lt;br /&gt;
&lt;br /&gt;
Werden mehrere Pakete bestellt, können die tatsächlichen Versandkosten von den hier gezeigten Versandkosten abweichen. Diese ist dann von der bestellten Menge und dem Gewicht abhängig.&lt;br /&gt;
&lt;br /&gt;
Bei Interesse bitte per PN melden (Benutzer [http://www.mikrocontroller.net/user/show/wawibu wawibu])&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zeitplanung&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Datum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Aktion&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;bis 16.August 2014&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Sammeln der Bestellungen&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;18.August 2014&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Bestellung geht raus&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;~12.September 2014&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Anlieferung bei mir&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ab 19.September 2014&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Versand&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Alternative können die Pakete 1, 2 und 3 auch ohne Widerstände bei mir bestellt werden. Es werden dann folgende Warenkörbe benötigt:&lt;br /&gt;
&lt;br /&gt;
Widerstands-Warenkörbe bei Reichelt:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;pro WordClock&#039;&#039;&#039;: https://secure.reichelt.de/?;ACTION=20;LA=5010;AWKID=292199;PROVID=2084&lt;br /&gt;
&amp;lt;br&amp;gt;&#039;&#039;&#039;zusätzlich fürs Ambilight&#039;&#039;&#039;: https://secure.reichelt.de/?;ACTION=20;LA=5010;AWKID=292202;PROVID=2084&lt;br /&gt;
&amp;lt;br&amp;gt;&#039;&#039;&#039;LEDs&#039;&#039;&#039; gibt es zB bei LED-Tech: http://www.led-tech.de/de/Leuchtdioden/SMD-LEDs/PLCC6-Superbright-RGB-SMD--5.0x5.0mm--LT-1178_1_2.html&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Die LEDs von LED-Tech haben in der Zwischenzeit eine andere PinBelegung und sind somit nicht 1:1 nutzbar. Der R und B Kanal sind dort anders als bei den LEDs aus der Sammelbestellung. Werden die LEDs von LED-Tech verwendet, muss darauf geachtet werden, das diese beiden Kanäle vertauscht sind!&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Anschluss eines DCF77-Moduls ==&lt;br /&gt;
&lt;br /&gt;
Der Anschluss eines DCF77-Moduls ist optional. Wird ein DCF77-Modul angeschlossen, kann mittels einer LED der DCF77-Empfang angezeigt werden. Die LED blinkt dann im Sekundenrhytmus und zeigt direkt die empfangenen DCF77-Impulse. Der Empfang wird kurze Zeit nach dem Einschalten aktiviert bzw. jede Stunde wiederholt. &lt;br /&gt;
&lt;br /&gt;
Die DCF77-LED kann folgendermaßen angeschlossen werden:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Bei Anschluss des DCF77-Moduls von Reichelt ist folgendes zu beachten:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Es sollte direkt auf den Lötaugen des Reichelt-DCF77-Moduls ein Abblock-Kondensator von 100nF zwischen den Pins +UB und GND aufgelötet werden&lt;br /&gt;
&lt;br /&gt;
*Der Eingang PON muss offen bleiben - entgegen den (falschen) Angaben im Reichelt Datenblatt!&lt;br /&gt;
&lt;br /&gt;
*Das DCF77-Modul von Reichelt braucht eine Synchronisierungszeit von mindestens 10 Sekunden. Erst dann arbeitet der Empfänger.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Beim Anschluss des Conrad-Moduls ArtNr. 641138 ist folgendes zu beachten:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Es muss der nicht-invertierte Open-Collector-Ausgang Pin 3 als Signal an die WordClock angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Ein Max232 der zur Kontrolle angeschlossen ist, kann den DCF Empfang stören. Ohne Max232 verbessert sich der Empfang deutlich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Da einige berichtet haben, dass der DCF-Empfang bei den Reichelt-Modulen oftmals gestört ist, hier ein Tipp von Carsten Wille, wie man den Empfang durch Hinzufügen weniger Bauteile wesentlich verbessern kann:&#039;&#039;&#039; [http://www.mikrocontroller.net/topic/156661?goto=1929382#1929382 Beitrag: Brauche Hilfe beim Bau einer Uhr]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
== Module ==&lt;br /&gt;
=== DCF77 ===&lt;br /&gt;
&lt;br /&gt;
Zur Programmierung siehe den Artikel [[DCF77-Funkwecker mit AVR]]. Im Abschnitt &#039;&#039;Programmierung&#039;&#039; ist das Funksignal dokumentiert, zusammen mit einem Beispiel (Bitstrom und Bedeutung).&lt;br /&gt;
&lt;br /&gt;
Codebeispiel siehe &#039;&#039;[http://www.mikrocontroller.net/topic/25071 Codesammlung DCF 77]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Torsten Giese ([http://www.mikrocontroller.net/user/show/wawibu wawibu])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Automatische Helligkeitsregelung ===&lt;br /&gt;
&lt;br /&gt;
Die Helligkeit des Displays wird über einen LDR (z.B. LDR 07 von Reichelt) gesteuert.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Rene H. ([http://www.mikrocontroller.net/user/show/promeus promeus])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Uhrzeit ===&lt;br /&gt;
&lt;br /&gt;
Die Zeit wird von einer batteriegepufferten Maxim DS1307 Echtzeituhr (RTC), die  über [[I2C]] mit dem Microcontroller verbunden ist, zur Verfügung gestellt. Die Batterie soll bis zu 10 Jahre halten und wird direkt auf die Platine gelötet.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== IR ===&lt;br /&gt;
&lt;br /&gt;
Es werden folgende Infrarot-Protokolle unterstützt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Protokoll || Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| SIRCS || Sony&lt;br /&gt;
|-&lt;br /&gt;
| 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;
| SAMSUNG || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| SAMSUNG32 || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| MATSUSHITA || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| 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;
| RECS80 || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| RECS80EXT || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| RC5 || Philips und andere europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| DENON || Denon&lt;br /&gt;
|-&lt;br /&gt;
| RC6 || Philips und andere europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| APPLE || Apple&lt;br /&gt;
|-&lt;br /&gt;
| NUBERT || Nubert, z.B. Subwoofer System&lt;br /&gt;
|-&lt;br /&gt;
| B&amp;amp;O || Bang &amp;amp; Olufsen (erst ab Version 1.0)&lt;br /&gt;
|-&lt;br /&gt;
| GRUNDIG || Grundig (erst ab Version 1.0)&lt;br /&gt;
|-&lt;br /&gt;
| NOKIA || Nokia, z.B. D-Box (erst ab Version 1.0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Über die automatische Erkennung des Protokolls werden die nötigen Tastatur-Befehl-Bits aus den Infrarot-Daten extrahiert - ohne Kenntnis, welche Tasten da eigentlich tatsächlich gedrückt wurden. So eine Tabelle würde den Speicher des µCs sprengen. Deshalb passiert die Zuordnung der Tasten zu WordClock-Befehlen in einer kleinen Anlernprozedur, die einmal nach dem ersten Bootvorgang ausgeführt werden muss.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile gibt es einen eigenen Artikel zum Infrarot-Fernbedienungsdecoder, siehe [http://www.mikrocontroller.net/articles/IRMP IRMP]&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
&lt;br /&gt;
Eine passende Fernbedienung gibt es bei &#039;&#039; [http://www.dealextreme.com/p/24-key-wireless-infrared-ir-remote-controller-for-rgb-led-light-bulb-1-cr2025-47019 DX] &#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/wikifiles/0/0e/Sku_47019_1.jpg &lt;br /&gt;
&lt;br /&gt;
Passend beschriftet werden kann die Fernbedienung mit folgenden Labels. Es gibt 2 Versionen der Scheckkartenfernbedienungen. Die erste passt für die DX Fernbedienung, diese ist etwas schmaler und länger. Einfach auf eine selbstklebende Folie drucken, ausschneiden und aufkleben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:WordClock_RC_Layout_DX.png|200px]]&lt;br /&gt;
[[Datei:WordClock_RC_Layout.png|200px]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== PWM ===&lt;br /&gt;
&lt;br /&gt;
Die PWM steuert die 3 RGB Kanäle. Damit ist freie Farbenwahl möglich.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Display ===&lt;br /&gt;
&lt;br /&gt;
Das Display wird nicht als 10x11 Matrix sondern wortweise angesteuert. Da die LEDs RGB-LEDs sind ergibt sich daraus für die 24 Wortteile und die 4 Minutenpunkte eine 28x3-Matrix.&lt;br /&gt;
&lt;br /&gt;
Die Farben sind kein Muss, in der Minimalbeschaltung können auch einfarbige LEDs zum Einsatz kommen.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Vlad Tepesch ([http://www.mikrocontroller.net/user/show/vlad_tepesch vlad_tepesch])&lt;br /&gt;
&lt;br /&gt;
==== Struktur ====&lt;br /&gt;
&lt;br /&gt;
Die display.h ist quasi die Basisklasse.&lt;br /&gt;
Dort ist definiert, welche Schnitsstellen eine Uhr anbieten muss.&lt;br /&gt;
Einige front-unabhängige Sachen sind hier bereits implementiert.&lt;br /&gt;
&lt;br /&gt;
Von ihr abgeleitet ist die display_tix und die display_wc,&lt;br /&gt;
wo entweder der gesamte Rest implementiert ist (TIX) oder wo weitere Ableitungen existieren (WC).&lt;br /&gt;
&lt;br /&gt;
Die display_wc implementiert die Teile die alle WC-Varianten gemeinsam haben.&lt;br /&gt;
Von ihr sind quasi die verschiedenen WC-Frontplatten abgeleitet.&lt;br /&gt;
&lt;br /&gt;
Die display_wc_xxx implentieren die Eigenheiten der speziellen Version, was neben ein paar Defines nur das Mapping Zeit → Ausgabemuster (display_getTimeState) ist und das Handling der Modus-Taste ist.&lt;br /&gt;
&lt;br /&gt;
==== Hinzufügen eigener WC-Frontplattenlayouts ====&lt;br /&gt;
&lt;br /&gt;
Prinzipiell sind folgende Schritte notwendig:&lt;br /&gt;
&lt;br /&gt;
# Kopieren und Umbenennen einer display_wc_xxx-Datei, die der eigenen Konfiguration am nächsten kommt (englisch, wenn nur eine Sprache, oder ger3 bei mehreren)&lt;br /&gt;
# in main.h define hinzufügen&lt;br /&gt;
# in display_wc.h oben das kopierte include unter Bedingung des gerade definiertne Defines hinzufügen&lt;br /&gt;
# anpassen des neuen headers&lt;br /&gt;
## Enumeration anpassen, Namen sind egal aber DWP_min1 - DWP_min4 müssen existieren. Auch sollten sie die Werte 24 - 28 haben. &amp;lt;br&amp;gt; Bei kleineren werden sonst die übrigen Shift-Register-ausgängen mit geschalten. &amp;lt;br&amp;gt; Höhere machen keinen Sinn, weil das heißen würde, das mehr Wörter als SR-Kanäle da sind.&lt;br /&gt;
## display_getMinuteMask und display_getHoursMask so anpassen, das alle Minuten, bzw Stundenkanäle gesetzt werden &amp;lt;br&amp;gt;&lt;br /&gt;
## display_getTimeSetIndicatorMask gibt die Bitmaske zurück, die bei Zeiteingabe 0 Minuten visualisieren soll (da sonst nix blinkt)&lt;br /&gt;
## display_getNumberDispalyState muss eine übergebene Zahl in ein Bild umwandeln, dass die übergebene Zahl erahnen lassen kann.&lt;br /&gt;
## Modus-Taste - am einfachsten nur Einträge in e_WcGerModes anpassen. Die Schaltung kann behalten werden. Man beachte, dass es doppelt so viele Modi gibt, wie in der Enumeration, da jeweils das Es_ist abgeschalten werden kann. Ist das nicht gewünscht, muss das Define DISPLAY_DEACTIVATABLE_ITIS auf 0 gestellt.&lt;br /&gt;
# anpassen der mapping-funktion Zeit → Ausgabemuster (display_getTimeState)&lt;br /&gt;
## komplett im Code oder mit look-Up-Tables&lt;br /&gt;
## Es sollte natürlich der aktuell ausgewählte Modus (g_displayParams-&amp;gt;mode) berücksichtigt werden&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Benutzer-Interaktion ===&lt;br /&gt;
&lt;br /&gt;
Mit der Fernbedienung ist folgendes möglich:&lt;br /&gt;
&lt;br /&gt;
* Einmaliges Anlernen der Fernbedienung&lt;br /&gt;
* Anpassen der automatischen Helligkeitssteuerung&lt;br /&gt;
* Einstellen des Farbprogramms (Übergänge etc)&lt;br /&gt;
* Stellen der Uhr (wenn kein DCF77-Modul angeschlossen)&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Vlad Tepesch ([http://www.mikrocontroller.net/user/show/vlad_tepesch vlad_tepesch])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
=== SW V0.13 ===&lt;br /&gt;
[[Datei:Wordclock-0.13.zip]] (Bugfixes beachten)&lt;br /&gt;
&lt;br /&gt;
Änderungen&lt;br /&gt;
* gefixt BUG012_031 (Fehler in der Logik des Ambilight bei der automatischen Deaktivierung)&lt;br /&gt;
* PCB Version 2.0 hinzugefügt&lt;br /&gt;
* verbessertes Fading durch 4kHz-PWM&lt;br /&gt;
* verbesserter Demo-Modus (Umschaltung zwischen altem Modus und Aktivierung aller Segmente)&lt;br /&gt;
* flexiblere Implementierung display_wc_ger3&lt;br /&gt;
* Narren-Modus&lt;br /&gt;
* aktualisiertes Handbuch&lt;br /&gt;
&lt;br /&gt;
==== Bugfixes ====&lt;br /&gt;
* V0.13 Patch 1 ([[Media:V0.13_Patch_1_display_wc_ger3.c|display_wc_ger3.c]]) &lt;br /&gt;
** fixt falsche Zeitanzeige von HH:20 Uhr&lt;br /&gt;
** fügt ein paar Zeitanzeigevarianten hinzu, aus denen der Narren-Modus auswählt&lt;br /&gt;
** Hexfiles:&lt;br /&gt;
*** dreisprachige Front: [[Datei:wordclock_V0.13_Patch_1_ger3_mega168.hex]]&lt;br /&gt;
* V0.13a src ([[Datei:WC_Release_0.13a_src.zip]])&lt;br /&gt;
** enthält nur Sourcen&lt;br /&gt;
** fixt: Patch 1 war nicht übersetzbar, wegen veralteter base.h&lt;br /&gt;
** Änderungen für Übersetzbarkeit mit MS-Compiler&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== ältere Versionen ===&lt;br /&gt;
&lt;br /&gt;
Hier gibt es noch ältere Software Stände:&lt;br /&gt;
==== SW V0.12 ====&lt;br /&gt;
[[Datei:Wordclock-0.12.zip]]&lt;br /&gt;
&lt;br /&gt;
Bitte README.txt lesen!&lt;br /&gt;
&lt;br /&gt;
Änderungen&lt;br /&gt;
* Schwaben-Modus (ossi + 20 vor/nach)&lt;br /&gt;
* Auto-Aus-Animation konfigurierbar mit Vorschau&lt;br /&gt;
* Deaktivierbares &amp;quot;IT IS&amp;quot; für englische Front&lt;br /&gt;
* Demo modus kann über Demo-Modus-Taste wieder verlassen werden&lt;br /&gt;
* PWM modus für bessere Darstellung dunklerer Farben geändert (siehe BUG011_027)&lt;br /&gt;
* PWM Stufen für linearere Erscheinung geändert &lt;br /&gt;
* optisches Feedback bei &amp;quot;Helligkeit übernehmen&amp;quot; hinzugefügt (kurzzeitige Displayabschaltung)&lt;br /&gt;
* gefixt BUG011_025 (Absturz bei Helligkeitskalibrierung)&lt;br /&gt;
* gefixt BUG011_026 (Ambilight wird beim automatischen Ausschalten nicht (in jedem Fall) mit ausgeschaltet) &lt;br /&gt;
* gefixt BUG011_027 (Niedrige Farbqualität bei niedrigen Helligkeiten)&lt;br /&gt;
* gefixt BUG011_028 Fehler bei Zeitüberblendung - Auto-off-Animation ist nun unabhängig von Zeitüberblendung&lt;br /&gt;
* verbessert BUG011_29 Flackern be Zeitüberblendung reduziert (immer noch nicht perfekt!)&lt;br /&gt;
* gefixt BUG011_030 (SW Absturz wenn &amp;quot;falsche&amp;quot; Taste im Aus-Zustand gedrückt wurde (Statemachine wird nun immer geupdated))&lt;br /&gt;
* aktualisiertes Handbuch&lt;br /&gt;
**    --&amp;gt; neue Features&lt;br /&gt;
**    --&amp;gt; &amp;quot;2.1 Übersicht der möglichen Kommandos&amp;quot; enthält nun Platz für Benutzer zum Eintragen seiner Tastennamen&lt;br /&gt;
&lt;br /&gt;
==== SW V0.11 ====&lt;br /&gt;
[[Datei:Wordclock-0.11.zip]]&lt;br /&gt;
&lt;br /&gt;
Bitte README.txt lesen!&lt;br /&gt;
&lt;br /&gt;
Ergänzung:&lt;br /&gt;
im Verzeichnis &amp;quot;art&amp;quot; fehlte ein PDF, ohne das das Handbuch nicht gebaut werden kann.&lt;br /&gt;
[[Datei:regiomap.pdf]]&lt;br /&gt;
&lt;br /&gt;
Noch ein paar Tips zum Handbuch:&amp;lt;br&amp;gt;&lt;br /&gt;
Latex muss 3x ausgeführt werden, damit alles in dem Ausgabedokument stimmt.&lt;br /&gt;
Am besten TeXnicCenter benutzen und das beiliegende Projectfile (*.tcp) benutzen.&lt;br /&gt;
Dann ein Ausgabeprofil anlegen (ein vorhandenes kopieren), in dem man eine der bat-Dateien als LaTeX-Compiler angibt.&amp;lt;br&amp;gt;&lt;br /&gt;
Vorteil ist dann, dass man mittels der Buttons schneller durch die Ausgabe navigieren und zu Fehlermeldungen und Warnungen springen kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Änderungen:&lt;br /&gt;
* gefixt BUG08_002 (Helligkeitskontrolle funktioniert nicht)&lt;br /&gt;
* Kalibrierung der automaticshen Helligkeitsanpassung&lt;br /&gt;
**  --&amp;gt; neues IR-Kommando&lt;br /&gt;
**  --&amp;gt; neuer Eeprom-Parameter&lt;br /&gt;
**  --&amp;gt; neue Loggingoption&lt;br /&gt;
* an Code-Konfig anpassendes latex-basiertes Handbuch (siehe readme)&lt;br /&gt;
* IOs per IR ein/abschaltbar&lt;br /&gt;
**  --&amp;gt; neue IR-Kommandos&lt;br /&gt;
**  --&amp;gt; neue Eeprom-Parameter&lt;br /&gt;
* gefixt BUG09_022 (Automatische Abschaltung) geänderte Logik (-&amp;gt; Handbuch)&lt;br /&gt;
* Autosave optional (user.h USER_AUTOSAVE)&lt;br /&gt;
* Eeprom-parameter-Sicherung bei An/Aus IR-cmd&lt;br /&gt;
* Signalisierung im Auto-Aus-Zustand&lt;br /&gt;
* gefixt BUG010_023 (schnelle Modus-Umschaltung verhindert Fading)&lt;br /&gt;
* Schrittweite der Auschaltzeiten als define&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== SW V0.10 ====&lt;br /&gt;
[[Datei:Wordclock-0.10.zip]]&lt;br /&gt;
&lt;br /&gt;
Bitte README.txt lesen!&lt;br /&gt;
&lt;br /&gt;
Änderungen:&lt;br /&gt;
* abschaltbares &amp;quot;ES IST&amp;quot; via Sprach-Wahl-Taste für beide deutsche Front Designs &lt;br /&gt;
** (übernommen von wichtel - aber Reihenfolge geändert -&amp;gt; Handbuch)&lt;br /&gt;
* Bootloader Support:&lt;br /&gt;
**Wenn &#039;R&#039; über die UART empfangen wird, wird ein Watchdog-Reset ausgelöst.&lt;br /&gt;
**Der Watchdog wird direkt nach Systemstart deaktiviert.&lt;br /&gt;
* Indikator für Zeiteingabe definiert -&amp;gt; blinkendes &#039;Uhr&#039;, wenn keine Minutenwörter aktiv&lt;br /&gt;
* Helligkeit für Nachtstunden bei Zeiteingabe reduziert.&lt;br /&gt;
* Sicherung des Hauptmodus (Einfarb-, Farbwechsel- und Pulse-Modus) und des aktiven Farbprofils im EEPROM&lt;br /&gt;
* BAUD_ERROR Makro aktualisiert&lt;br /&gt;
* atmega88 Konfiguration entfernt&lt;br /&gt;
* DCF77 geändert, zwei erfolgreich empfangene Frames vor Zeitübernahme notwendig&lt;br /&gt;
* IRMP-Version 1.7.2:&lt;br /&gt;
** Bugfix: Timeout vor NEC repetition frames um &amp;quot;Geister-Kommandos&amp;quot; zu vermeiden&lt;br /&gt;
** einige weniger wichtige Protokolle hinzugefügt&lt;br /&gt;
* gefixt BUG09_018 (Zeitupdate während Zeiteingabe beinträchtigt Anzeige)&lt;br /&gt;
* gefixt BUG09_019 (gemeldet von Wichtel) (&amp;quot;Gesiter-Kommandos&amp;quot; siehe neue IRMP-Version)&lt;br /&gt;
* gefixt BUG09_020 (gemeldet von Roman) DCF-Initialisierung &amp;lt;=6 anstatt &amp;lt;=7&lt;br /&gt;
* gefixt BUG09_021 (Ambilight in SW an OUTG2 anstatt OUTG1)&lt;br /&gt;
* gefixt Fehler der in Mono-Color-Variante: zurückschalten in Normal-Mode forciert kein Display-Update&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Einstellungen können in der Main.h geändert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== SW V0.9 ====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-09.zip]]&lt;br /&gt;
&lt;br /&gt;
Bitte README.txt lesen!&lt;br /&gt;
&lt;br /&gt;
zusätzliche Features:&lt;br /&gt;
* Unterstützung für neue (3 sprachige) deutsche Front&lt;br /&gt;
* Unterstützung für TIX-Clock&lt;br /&gt;
* kurze Anzeige von Submodi (Farbprofilauswahl, Sprachvariante)&lt;br /&gt;
* Helligkeits-Offset wird abgespeichert&lt;br /&gt;
* 24h Zeiteingabe (8-20Uhr: hell, 20-8Uhr: dunkel)&lt;br /&gt;
* Standardeeprom-Werte im Flash&lt;br /&gt;
* Ein/Aus-Schalt-Zeiten&lt;br /&gt;
* Pulsierender Modus&lt;br /&gt;
* neue IRMP-Version&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Einstellungen können in der Main.h geändert werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Anmerkung: die vorkompilierten Hexfiles enthalten die 3-sprachig-deutsche Version. Wer noch eine alte Frontplatte hat, muss das Binary nach Ändern der Konfiguration (in der main.h) selbst kompilieren.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Bugfixes =====&lt;br /&gt;
Zum Anwenden der .patch-Files gibt es das patch-Tool, das mit dem AVR-GCC kommt und von der Kommandozeile aus erreichbar ist. Manual-Page zu patch: [http://linux.die.net/man/1/patch hier].&lt;br /&gt;
* V0.9 Patch 1 ([[Media:BUG09_008_hourbug_display_wc_ger3.c.patch|Patchfile]])&lt;br /&gt;
** fixt BUG09_008 (falsche Zeitanzeige)&lt;br /&gt;
** Hexfiles:&lt;br /&gt;
*** dreisprachige Front: [[Datei:wordclock_V0.9_Patch_1_ger3_mega168.hex]]&lt;br /&gt;
*** alte zweisprachige Front: [[Datei:wordclock_V0.9_Patch_1_ger_mega168.hex]]&lt;br /&gt;
* V0.9 Patch 2 ([[Media:BUG09_010_hourbug_display_wc_ger3.c.patch|Patchfile]] - basierend auf vorherigen patches)&lt;br /&gt;
** fixt BUG09_010 (EIN &amp;lt;-&amp;gt; EINS)&lt;br /&gt;
** Hexfiles (enthalten vorherige Patches)&lt;br /&gt;
*** dreisprachige Front: [[Datei:wordclock_V0.9_Patch_2_ger3_mega168.hex]]&lt;br /&gt;
*** alte zweisprachige Front: [[Datei:wordclock_V0.9_Patch_2_ger_mega168.hex]]&lt;br /&gt;
* V0.9 Patch 3 ([[Media:V0.9_patch3.patch|Patchfile]] - basierend auf vorherigen patches)&lt;br /&gt;
** fixed BUG09_009 (crashes after IR-Kommands) &lt;br /&gt;
** fixed BUG09_011 (training bug)&lt;br /&gt;
** fixed BUG09_012 (casing on include usermodes.c)&lt;br /&gt;
** fixed BUG09_013 (1:00 - 1:04  and 1:05-1:09  &#039;s&#039;)&lt;br /&gt;
** fixed BUG09_014 (brightness control does not work after setting time)&lt;br /&gt;
** fixed wrong command handler in display_x-header&lt;br /&gt;
** fixed default values for color profiles&lt;br /&gt;
** extracted inits of states from user_init to own routine in usermodes.c&lt;br /&gt;
** Hexfiles:&lt;br /&gt;
*** dreisprachige Front: [[Datei:wordclock_V0.9_Patch_3_ger3_mega168.hex]]&lt;br /&gt;
*** alte zweisprachige Front: [[Datei:wordclock_V0.9_Patch_3_ger_mega168.hex]]&lt;br /&gt;
* V0.9 Patch 4 ([[Media:BUG09_015_BUG09_016.patch|Patchfile]] - basierend auf vorherigen patches, [[Media:wcFirmware_v0.9_patch4.zip|komplette Sourcen]])&lt;br /&gt;
** fixed BUG09_015 (after enter OnOff-Time no further action is possible)&lt;br /&gt;
** fixed BUG09_016 (last Ir-Command is ignored in training)&lt;br /&gt;
** Hexfiles (enthalten vorherige Patches)&lt;br /&gt;
*** dreisprachige Front: [[Datei:wordclock_V0.9_Patch_4_ger3_mega168.hex]]&lt;br /&gt;
*** alte zweisprachige Front: [[Datei:wordclock_V0.9_Patch_4_ger_mega168.hex]]&lt;br /&gt;
* V0.9 Patch 5 ([[Media:DCF77_BUG09_017.patch|Patchfile]] - basierend auf vorherige Patches)&lt;br /&gt;
** fixed BUG09_017 (set second to 0, when new DCF77 time will take over - prevent a minute jump)&lt;br /&gt;
&lt;br /&gt;
==== V0.8 ====&lt;br /&gt;
[[Datei:Wordclock-08-src.zip]]&lt;br /&gt;
Bitte 00README.txt lesen!&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Bugs ===&lt;br /&gt;
;[bestätigt] &lt;br /&gt;
: der Bug konnte von den Entwicklern reproduziert werden&lt;br /&gt;
;[gefixt] &lt;br /&gt;
: der Bug wurde bereits gefixt, der Fix ist aber in noch keinem Release enthalten.&lt;br /&gt;
;&amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;[gefixt - Vx.y] &amp;lt;/span&amp;gt; &lt;br /&gt;
: der Bug wurde in Version x.y gefixt&lt;br /&gt;
;&amp;lt;span style=&amp;quot;color:#8f8f8f;&amp;quot;&amp;gt;&amp;lt;s&amp;gt;[widerlegt]&amp;lt;/s&amp;gt;&amp;lt;/span&amp;gt; &lt;br /&gt;
: der Bug konnte nicht bestätigt werden, oder es wurde eine andere Ursache gefunden&lt;br /&gt;
&lt;br /&gt;
==== Version 0.8 ====&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG08_001 - [bestätigt] [gefixt - V0.9]&lt;br /&gt;
** Helligkeitssteuerung per FB funktioniert nicht richtig&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG08_002 - [bestätigt]&lt;br /&gt;
** Helligkeitssteuerung per LDR funktioniert nicht richtig&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;[Ergänzt 22.5.10 von Wichtel] In pwm.c wird pwm_idx innerhalb pwm_set_brightness_step() falsch normiert:  [gefixt - V0.10]&lt;br /&gt;
*** pwm_idx % MAX_PWM_STEPS; ersetzen durch:&lt;br /&gt;
*** else if (pwm_idx &amp;gt;= MAX_PWM_STEPS ) pwm_idx = MAX_PWM_STEPS - 1;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG08_003 - [bestätigt] [gefixt - V0.9]&lt;br /&gt;
** OUT23 wird immer mit OUTL1 geschalten&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG08_004 - [bestätigt] [gefixt - V0.9]&lt;br /&gt;
** Helligkeitssteuerung: geänderter Wert wird nicht gespeichert&lt;br /&gt;
** nach Power-ON-Reset immer 100%&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#8f8f8f;&amp;quot;&amp;gt;&amp;lt;s&amp;gt;BUG08_005&amp;lt;/s&amp;gt; [widerlegt] (Fehler lag woanders)&lt;br /&gt;
** die Kommandos der FB gehen nach einem Power-ON-Reset manchmal verloren&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#8f8f8f;&amp;quot;&amp;gt;&amp;lt;s&amp;gt;BUG08_006 (reportet von panik)&amp;lt;/s&amp;gt; [widerlegt] (Fehler lag woanders)&lt;br /&gt;
** Die Uhr zeigt nach mehr als 10 Stunden Betrieb für wenige Minuten ein falsches Word mit halber Helligkeit (auf und abschwellend) an.&lt;br /&gt;
** Anzeige korrekt: FÜNF NACH DREI (Ossi-Modus ist permanent aktiv)&lt;br /&gt;
** jetzt beginnt zusätzlich das Word VIERTEL zu leuchten (halber Helligkeit auf und abschwellend)&lt;br /&gt;
** Nach wenigen Minuten ist wieder alles normal.&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#8f8f8f;&amp;quot;&amp;gt;&amp;lt;s&amp;gt;BUG08_007&amp;lt;/s&amp;gt; [widerlegt] (Fehler lag woanders)&lt;br /&gt;
** nach mehr als 12 Stunden Betrieb oft zusätzliche Anzeige der Wörter VIERTEL und NACH (jetzt mit voller Helligkeit bis zum nächsten Bildwechsel)&lt;br /&gt;
** z.B 20:15 Uhr --&amp;gt; Anzeige: ES IST VIERTEL NACH NEUN (Ossimodus aktiv)&lt;br /&gt;
** 20:05 Uhr --&amp;gt; Anzeige: ES IST FÜNF VIERTEL NACH ACHT(Ossimodus aktiv)&lt;br /&gt;
** 09:35 Uhr --&amp;gt; Anzeige: ES IST FÜNF VIERTEL NACH HALB ZEHN(Ossimodus aktiv)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Version 0.9 ====&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_008 - [bestätigt] [gefixt V0.9 Patch 1]&lt;br /&gt;
** in der 3-sprachigen deutschen Frontplatte wird die Stunde wird in allen Sprachmodi 5min zu spät hochgezählt&amp;lt;/span&amp;gt; &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;Der Fehler liegt in display_wc_ger3.c Zeile 127: das &amp;gt; muss durch ein &amp;gt;= ersetzt werden ([[Media:BUG09_008_hourbug_display_wc_ger3.c.patch|Patchfile]])&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_009 - [bestätigt] [gefixt V0.9 Patch 3]&lt;br /&gt;
** nach Systemstart (nach Ende des Blinken) führt Betätigung des Einfarbmodus-Knopfes (-&amp;gt; Farbprofilwahl) zum Absturz&lt;br /&gt;
** Workaround: zuerst in anderen Modus wechseln (zB. Demo)&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_010 - [bestätigt] [gefixt V0.9 Patch 2] &lt;br /&gt;
** Anzeige von EIN oder EINS vertauscht (&#039;eins&#039; wird angezeigt, wenn &#039;ein&#039; dastehen; vice versa) bei 3 sprachiger Front&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_011 - [bestätigt] [gefixt V0.9 Patch 3]&lt;br /&gt;
** IR-Training - bei falsch erkannten Kommandos (falsche Adresse) wird trotzdem hochgezählt.&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_012 - [bestätigt] [gefixt V0.9 Patch 3]&lt;br /&gt;
**Der Compiler meint: user.c:164:23: error: userModes.c: No such file or directory - Sollte das nicht usermodes.c heißen?&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_013 (gemeldet von Wichtel) - [bestätigt] [gefixt V0.9 Patch 3]&lt;br /&gt;
** Anzeige von EIN und EINS im Bereich von 0-4 und 5-9 min vertauscht, Zeile 153 in display_wc_ger3.c (mit Patch 2) muss lauten:&lt;br /&gt;
** if((hour==1 || hour==13) &amp;amp;&amp;amp; minutes==0){  // if &amp;quot;Es ist ein Uhr&amp;quot; &amp;lt;- remove &#039;s&#039; from &amp;quot;eins&amp;quot;&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_014 (gemeldet von Wichtel) - [bestätigt] [gefixt V0.9 Patch 3]&lt;br /&gt;
** Nach manueller Uhrzeiteinstellung keine Übernahme der manuell eingestellten Helligkeit, nach einmal Pulsmodus ein/aus wird sie wieder übernommen&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_015 (gemeldet von Wichtel) - [bestätigt] [gefixt V0.9 Patch 4]&lt;br /&gt;
**Nach einstellen von Ein/Ausschaltzeit keine Helligkeitssteuerung (Anmerkung von Vlad: --&amp;gt;BUG09_014), keine Modusumschaltung mehr möglich und keine Einblendung des Farbprofilnamens mehr&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_016 (gemeldet von Wichtel) - [bestätigt] [gefixt V0.9 Patch 4]&lt;br /&gt;
** Trainingsmodus erreicht letztes Kommando nicht, da curkey vor Schlussabfrage incrementiert wird.&lt;br /&gt;
** durch BUG09_011-fix entstanden&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_017 (gemeldet von Wichtel) - [bestätigt] [gefixt V0.9 Patch 5]&lt;br /&gt;
** Uhr geht bis zu einer Minute vor, da die Sekunden durch DCF77-Empfang nicht beeinflusst werden, zur Abhilfe in dcf77.c als Zeile 379 einfügen: (die derzeitige Zeile 379 wird entsprechend nach unten geschoben)&lt;br /&gt;
**  DateTime_p-&amp;gt;ss  = 0;&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_018 (gemeldet von Wichtel) - [bestätigt] [gefixt V0.10]&lt;br /&gt;
** Bei manueller Zeiteinstellung und abwarten des realen Minutenwechsels kehrt die Anzeige zur Uhrzeit zurück ohne den Einstellmodus zu beenden&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_019 (gemeldet von Wichtel) - [bestätigt] [gefixt V0.10]&lt;br /&gt;
** Zuletzt erfolgreich erkanntes Fernbedienkommando wird sporadisch mehrere Minuten nach dem letzten tatsächlichen Empfang erneut erkannt&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_020 (gemeldet von Roman) - [bestätigt] [gefixt V0.10]&lt;br /&gt;
** Fehler in der Initialisierung der DCF77 Struct. Zeile 106 muss wie folgt lauten:&lt;br /&gt;
**   for (i=0; i &amp;lt; 6; i++)&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_021 - [bestätigt] [gefixt V0.10]&lt;br /&gt;
** Ambilight ist in SW an OUTG2, anstatt OUTG1&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_022 (gemeldet von Wichtel) - [bestätigt] [gefixt V0.13]&lt;br /&gt;
** Nach manuellem Einschalten während Ausschaltzeit oder man. Ausschalten während Einschaltzeitdauer sind die Ein/ausschaltzeiten wirkungslos&lt;br /&gt;
** Nach erneutem manuellem Eingriff entsprechend programmiertem Zustand wirken sie wieder&lt;br /&gt;
** --&amp;gt; Plan: http://www.mikrocontroller.net/topic/156661?page=15#1795536&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Version 0.10 ====&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG010_023 (gemeldet von kingpin) [bestätigt] [gefixt]&lt;br /&gt;
** Schnelles schalten der Anzeigemodi, verhindert Fading (Uhrzeit, Farbe, Pulsen)&lt;br /&gt;
** Workaround: Modus wechseln/neu anwählen&lt;br /&gt;
** --&amp;gt; http://www.mikrocontroller.net/topic/goto_post/1840552&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG010_024 (gemeldet von matsch) [gefixt V0.13]&lt;br /&gt;
** bei Verwendung eines Farbprofils (bei mir Orange) ändert sich die Farbe kurz bei Uhrzeitwechsel. Der Farbwechsel betrifft nur die sich ändernden Wörter.&lt;br /&gt;
** Kommentar zum Bug --&amp;gt; http://www.mikrocontroller.net/topic/goto_post/1883590&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Version 0.11 ====&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG011_025 (gemeldet von Edimahler) [gefixt V0.12]&lt;br /&gt;
** Druck auf Taste &amp;quot;Helligkeit übernehmen&amp;quot; führt (meistens) dazu, dass die Software hängen bleibt. Keine weiteren Zeitwechsel mehr, FB wird nicht mehr erkannt, nur die Farbe schaltet noch durch (Regenbogenmodus)&lt;br /&gt;
** Workaround: Taste nicht drücken -&amp;gt; Helligkeit automatisch übernehmen lassen (?), Netzstecker ziehen und wieder einstecken.&lt;br /&gt;
** http://www.mikrocontroller.net/topic/156661?goto=new#2322140&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG011_026 (gemeldet von Edimahler) [gefixt V0.12]&lt;br /&gt;
** Ambilight wird beim automatischen Ausschalten nicht (in jedem Fall) mit ausgeschaltet&lt;br /&gt;
** Workaround: Ambilight manuell ausschalten&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG011_027 (gemeldet von Edimahler) [gefixt V0.12]&lt;br /&gt;
** Bei sehr niedrigen Helligkeiten werden alle Farben gräulich-weiss dargestellt (bedingt durch die immer kleiner werdende Auflösung der PWM und den gewählten PWM-Modus, wo immer alle LEDs minimal aufleuchten (schon öfter im Forum besprochen))&lt;br /&gt;
** Durch den neuen INVERSED PWM Modus konnte das Problem behoben werden, die Grundfarben sind nun rein.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG011_028 (gemeldet von Vlad Tepesch) [gefixt V0.12]&lt;br /&gt;
** Bei höher gewählten fade times als 1 Sekunde, wurde die Animation nicht mehr richtig dargestellt&lt;br /&gt;
** Die Abhängigkeiten zwischen den beiden Parametern wurde durch Eiinfügen eines weiteren &amp;quot;defines&amp;quot; behoben&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;* BUG011_029 (gemeldet von Edimahler) [gefixt V0.13]&lt;br /&gt;
** Bei den Zeitwechseln flackert manchmal die neue Zeit zuerst kurz auf, bevor der saubere Übergang stattfindet&lt;br /&gt;
** in Version 0.12 verbessert, aber noch nicht restlos ausgemerzt!&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG011_030 (gemeldet von Edimahler) [gefixt V0.12]&lt;br /&gt;
** Beim Empfang eines korrekten, aber anderen IR-Protokolls als die Power-Taste, wurde bei ausgeschalter Uhr die Statemachine nicht mehr regelmässig geupdated, was zum kompletten Blockieren der Uhr führte.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Version 0.12 ====&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG012_031 (gemeldet von ht81 und bernd_m) [gefixt V0.13]&lt;br /&gt;
** Fehler in der Logik des Ambilight bei der automatischen Deaktivierung&lt;br /&gt;
** https://www.mikrocontroller.net/topic/goto_post/2534972&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
==== Version 0.13 ====&lt;br /&gt;
&lt;br /&gt;
=== Flashen mittels Bootloader ===&lt;br /&gt;
==== Bootloader von Hagen Re &amp;quot;AVRootloader&amp;quot;====&lt;br /&gt;
Bevorzugt wird der Bootloader von Hagen Re.&lt;br /&gt;
→ [[AVR-Bootloader_mit_Verschl%C3%BCsselung_von_Hagen_Re]]&lt;br /&gt;
&lt;br /&gt;
Dieser Bootloader zeichnet sich durch einen großen Funktionsumfang, einfache Inbetriebnahme, sowie komfortable Benutzung aus.&lt;br /&gt;
&lt;br /&gt;
Hagen Re war so freundlich und hat das OK zur Integration in die WordClock-Auslieferung gegeben. Dies hat den Vorteil, dass der fertig konfigurierte Bootloader, sowie die Windows vorkonfigurierte Flash-Anwendung beiliegen und nicht extra geladen werden müssen. &lt;br /&gt;
&lt;br /&gt;
Vielen Dank an Hagen für diesen tollen Bootloader!&lt;br /&gt;
&lt;br /&gt;
Die vorkompilierten WordClock-Hexfiles sollten sowohl mit, als auch ohne Bootloader funktionstüchtig sein.&lt;br /&gt;
Das senden eines &#039;R&#039; per UART löst ein Reset (und damit ein Starten des Bootloaders) aus.&lt;br /&gt;
&lt;br /&gt;
Verwendung des Bootloaders:&lt;br /&gt;
* setzten der BOOTRST-Fuse am AtMega168&lt;br /&gt;
** Damit ergibt sich folgende Konfiguration der Fuses: lfuse: 0xE2 hfuse: 0xDC efuse: 0xFC&lt;br /&gt;
* flashen des AVRootloader-hexfile auf bisherigem Weg&lt;br /&gt;
* Starten der AVRootloader.exe&lt;br /&gt;
* Auswahl des Com-Ports&lt;br /&gt;
* Baudrate auf 9600&lt;br /&gt;
* Sign auf WCMB (WordClock Main Board)&lt;br /&gt;
* &amp;quot;Connect to device&amp;quot; -&amp;gt; Button wird zu &amp;quot;Disconnect&amp;quot;&lt;br /&gt;
* Auswahl des Hexfiles&lt;br /&gt;
* Klick auf &amp;quot;Program&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
Das Tool ist so konfiguiert, dass es von sich aus ein &#039;R&#039; schickt, &lt;br /&gt;
um die WordClock zu resetten und den Bootloader zu betreten.&lt;br /&gt;
&lt;br /&gt;
==== Bootloader von Peter Dannegger &amp;quot;FastBoot&amp;quot;====&lt;br /&gt;
Um den ATmega168 mit dem Fastboot von Peter Dannegger zu flashen, muss vorab das FastBoot.hex eingespielt werden. Ebenso muss dann die eFuse auf 0xFC eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Um dann später eine neue SW zu flashen, muss dann nur noch das neue Hexfile mittels FBOOT übertragen werden.&lt;br /&gt;
&lt;br /&gt;
Im angehängten ZIP ist der FBOOT von Peter Dannegger und das HEX-File für den ATmega168 einfügt. &#039;&#039;&#039;&amp;gt;&amp;gt; [[Datei:WordClock_FastBoot.zip‎]] &amp;lt;&amp;lt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ist diese einmal auf dem uC, kann jederzeit einfach über die serielle Schnittstelle (COM 1) mittels einem RS-232/TTL Pegelwandler die neue Firmware eingespielt werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039; FBOOT.exe und die neue Firmware müssen in einem Verzeichnis liegen. Dann kann mittels &#039;&#039;FBOOT /Pwordcl~1.hex&#039;&#039; geflasht werden. FBOOT kann nicht mit langen Dateinamen umgehen!&lt;br /&gt;
&lt;br /&gt;
Ein &#039;&#039;&#039;bootloader-client&#039;&#039;&#039; für &#039;&#039;&#039;Linux&#039;&#039;&#039; ist [https://trac.fs.ei.tum.de/elektronik/browser/ventilator/userspace/lboot hier] zu finden. Credits: Bernhard Michler ([http://www.mikrocontroller.net/user/show/Boregard Boregard]), Andreas Butti, [http://www.mikrocontroller.net/user/show/ad-rem ad-rem].&lt;br /&gt;
&lt;br /&gt;
==== Bootloader von chip45.com &amp;quot;chip45boot2&amp;quot; ====&lt;br /&gt;
Bei diesem Bootloader muss die eFuse auf 0xF8 eingestellt werden und zusätzlich in main.h die Option &amp;quot;BOOTLOADER_RESET_WDT&amp;quot; abgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
Vorkonfigurierte HEX-Files und PC-Software sind hier zu bekommen: http://www.chip45.com/info/chip45boot2.html&lt;br /&gt;
&lt;br /&gt;
==== Bootloader von Karol Babioch &amp;quot;wordboot&amp;quot; ====&lt;br /&gt;
[https://github.com/Wordclock/wordboot wordboot] ist ein dediziert für das [https://github.com/Wordclock/firmware Wordclock] Projekt entwickelter Bootloader. Dieser basiert auf [https://code.google.com/p/optiboot/ optiboot] und wurde für die verwendete Hardware angepasst. Der Bootloader wird direkt von [http://www.nongnu.org/avrdude/ avrdude] unterstützt, und ist somit unabhängig von der verwendeten Plattform einsetzbar. In seiner ursprünglichen Form ist er für den ATmega328P entwickelt worden, da der ATmega168 für die Erweiterungen von o.g. Firmware-Version nicht mehr ausreichend war. Zum [[Datei:Wordboot.zip|Download]] gibt es allerdings auch eine für den ATmega168 kompilierte Version (ungetestet!).&lt;br /&gt;
&lt;br /&gt;
===== Eigenschaften =====&lt;br /&gt;
&lt;br /&gt;
* Implementiert das [http://www.atmel.com/Images/doc2525.pdf STK500 Protokoll] und ist somit kompatibel mit [http://www.nongnu.org/avrdude/ avrdude].&lt;br /&gt;
* Neben dem Lesen und Schreiben des Flash-Speichers, ist auch das Auslesen bzw. Beschreiben des EEPROM möglich.&lt;br /&gt;
* Relativ klein: Der Bootloader nimmt nur 512 Wörter in Anspruch und lässt damit genug Platz für die eigentliche Anwendung.&lt;br /&gt;
* Als einziger Bootloader zeigt er den aktuellen Status über die Minuten-LEDs des Frontpanels an. Beim Betreten des Bootloader bzw. beim Empfangen von Daten blinken diese in einer weißen Farbe, sodass ersichtlich wird, dass man sich im Bootloader-Modus befindet.&lt;br /&gt;
* Bietet einige Optionen, welche das Verhalten des Bootloaders beeinflussen und [https://github.com/Wordclock/wordboot#configuration hier] näher beschrieben werden.&lt;br /&gt;
* Komplett in C programmiert und nicht wie viele andere AVR ATmega Bootloader in Assembler. Dies bietet den Vorteil, dass das Ganze leichter verständlich und wartbar ist.&lt;br /&gt;
&lt;br /&gt;
===== Fuses =====&lt;br /&gt;
&lt;br /&gt;
Die folgenden Fuses müssen programmiert werden:&lt;br /&gt;
* &#039;&#039;&#039;BOOTRST = 0&#039;&#039;&#039; &#039;&#039;(Boot Reset vector Enabled)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;BOOTSZ = 01&#039;&#039;&#039; &#039;&#039;(Boot Flash section size = 512 words)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit ergibt sich für den ATmega168 folgender Wert für die &#039;&#039;&#039;efuse&#039;&#039;&#039;: &#039;&#039;0xFA&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Installation =====&lt;br /&gt;
&lt;br /&gt;
* [[Datei:Wordboot.zip|Archiv]] herunterladen&lt;br /&gt;
* Fuses wie oben angegeben programmieren&lt;br /&gt;
* Bootloader auf konventionellem Weg flashen, d.h. per ISP oder HVPP&lt;br /&gt;
* Die vier Minuten LEDs sollten nun beim Starten blinken&lt;br /&gt;
* Anwendung kann mittels avrdude programmiert werden, z.B. mit folgendem Befehl:&lt;br /&gt;
  &amp;lt;code&amp;gt;avrdude -p m328p -c arduino -b 9600 -P /dev/ttyUSB1 -U flash:w:Wordclock.hex&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Weitere Informationen =====&lt;br /&gt;
&lt;br /&gt;
Alle weiteren Informationen bezüglich dieses Bootloaders finden sich im Projekt [https://github.com/Wordclock/wordboot Repository].&lt;br /&gt;
&lt;br /&gt;
=== Flashen per Bluetooth ===&lt;br /&gt;
Bootloaden über Bluetooth wurde in diesem [http://www.mikrocontroller.net/topic/156661?goto=1710183#1710183 Post] erfolgreich implementiert, siehe auch [http://www.mikrocontroller.net/articles/Diskussion:Word_Clock_Variante_1 hier].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mechanik =&lt;br /&gt;
&lt;br /&gt;
Folgende Anleitung gilt für die Frontplatte aus Plexiglas und die Word Clock mit Ambilight, d. h. die Wandmontage erfolgt ohne Rahmen/Bilderrahmen.&lt;br /&gt;
Beim Bau meiner Word Clock habe ich definitiv mehr Zeit über mechanische Lösungen nachgedacht, als über die Elektronik/Programmierung. Vor allem die Recherche geeigneter Bezugsquellen hat Zeit gekostet und die Lieferzeit hat den Bau der Uhr sehr verzögert. Ich hoffe, dass diese Anleitung hilft, etwas Zeit zu sparen.&lt;br /&gt;
&lt;br /&gt;
== Vorbereiten der Zwischenplatte == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:1-mdf-spachtel.jpeg&lt;br /&gt;
Datei:2-gespachtelte-kante.jpeg|Die Seitenfläche nach den Auftragen der Spachtelmasse.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit die Zwischenplatte optisch gut zur Frontplatte passt, muss diese lackiert werden. Im vorliegenden Vorschlag wurde die Zwischenplatte an den Seiten mit wasserbasiertem Acryllack schwarz lackiert. &lt;br /&gt;
&lt;br /&gt;
Die MDF Platte kann grundiert oder gespachtelt werden. In diesem Beispiel wurde die Platte mit  &amp;quot;Holz und MDF Spachtel” (z. B. Decotric, siehe Amazon) vorbehandelt. Eine geeignete Grundierung wäre z. B. “MDF Grundierung Grund Vorbehandlung” von Molto. Die Grundierung ist leichter zu verarbeiten. Mit der Spachtelmasse kann man allerdings unerwünschte Löcher verschließen. Die Masse muss einige Stunden aushärten, bevor sie geschliffen werden kann. Am besten beginnt man daher den Bau mit der Word Clock mit dieser Vorarbeit. In der Wartezeit kann die Elektronik zusammengelötet werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:3-Kante-sw-gestrichen.jpeg|Die Zwischenplatte sollte vor der Montage der Elektronik vorbereitet werden. Der Mülleimer ist ein perfekter und stabiler Halter während des Streichen: einfach zu drehen, man macht sich die Finger nicht voll Farbe und man kann alle Seiten auf einmal streichen.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Aushärten wurde die Oberfläche mit Schmirgelpapier geschliffen (P240) und anschließend dreimal lackiert. Die erste und zweite Lackschicht wurde jeweils mit P400 Schmirgelpapier geglättet. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:4-platine-fertig-in-hand.jpeg|&lt;br /&gt;
Datei:5-platine-fertig-in-zwischenplatte.jpeg|&lt;br /&gt;
Datei:6-platine-fertig-in-zwischenplatte-ohne-fraesung.jpeg|&lt;br /&gt;
Datei:7-platine-fertign-in-zwischenplatten-mit-fraesung.jpeg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leider ist mir beim Einlöten der Komponenten nicht aufgefallen, dass die Batterie und IC2 (7805) sehr hoch sind. Da ich die Beinchen der Batterie schon zu kurz abgeschnitten hatte, konnte ich die Batterie nicht mehr einfach umbiegen, so dass dieses Problem nur noch durch angelötete Kabel zu lösen war. Die Batterie wird nun einfach neben die Steuerplatine gelegt. Den 7805 konnte ich durch Umbiegen etwas in seiner Höhe reduzieren. Der Platz für den umgebogenen 7805 wurde mit einer Fräse im Multitool/Dremel geschaffen.&lt;br /&gt;
&lt;br /&gt;
Im Nachhinein betrachtet hätte ich mir diese Mühe sparen können, da durch die Befestigung mit dem Spiegelbefestigungsset (siehe unten) die Höhe kein Problem mehr ist. Ebenfalls etwas zu spät habe ich im Forum Bilder einer Lösung gesehen, bei der die Ausfräsung für Batterie und 7805 in Richtung des äußeren Randes und nicht wie bei mir in Richtung der LEDs gelöst worden war. Im äußeren Rahmen ist genug Platz für eine Ausfräsung, die es erlaubt, die Batterie und den 7805 horizontal einzulöten.&lt;br /&gt;
&lt;br /&gt;
== Befestigung der Frontplatte (“Plexiglasvariante”) an der Zwischenplatte ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:8-holzbohrer-8mm-mit-tiefenmarkierung.jpeg|8 mm Holzbohrer mit improvisierter Tiefenmarkierung.&lt;br /&gt;
Datei:9-bohrung-fuer-magnet-1.jpeg|Fertige Bohrung. An der Kante unter dem Loch sieht man die Spachtelmasse. Während die Spachtelmasse noch trocknet, können bereits die Magnete montiert werden.&lt;br /&gt;
Datei:10-bohrung-fuer-magnet-2.jpeg|Zentral wird eine 2 mm Bohrung ergänzt, damit der Magnet bei Fehlpositionierung wieder ausgestossen werden könnte.&lt;br /&gt;
Datei:11-bohrung-fuer-magnet-3.jpeg|Zur Veranschaulichung: der Magnet könnte mit dem 2 mm Bohrer ausgestossen werden. &lt;br /&gt;
Datei:12-magnet-1.jpeg|&lt;br /&gt;
Datei:13-magnet-mit-werkzeug.jpeg|Die Magnete habe eine ganz gute Presspassung. Mit Hilfe eines Zwischenhölzchens zum Schutz des Magneten können sie in das Loch gehämmert werden.&lt;br /&gt;
Datei:14-magnet-2.jpeg|&lt;br /&gt;
Datei:15-magnet-3.jpeg|&lt;br /&gt;
Datei:16-magnet-4.jpeg|&lt;br /&gt;
Datei:17-magent-mit-kleinem-magnet-1.jpeg|Der 8 mm x 4 mm Magnet wird 0.5 mm unter die Oberfläche der Zwischenplatte gepresst, damit auch der 8 mm x 0.5 mm Magnet flächenbündig befestigt werden kann.&lt;br /&gt;
Datei:18-magent-mit-kleinem-magnet-2.jpeg|Hier ist der 8 mm x 0.5 mm Magnet in der Bohrung. Damit sich der 8 mm x 0.5 mm Magnet durch Verschieben von dem 8 mm x 4 mm Magneten lösen lässt, muss die Kante der Bohrung abgeschrägt werden.&lt;br /&gt;
Datei:19-anschraegung-fuer-kleinen-magnet.jpeg|Durch die Abschrägung am Rand der Bohrung (Universalmesser, Taschenmesser oder Dremel-Fräse) gleitet der 8 mm x 0.5 mm Magnet leicht aus der Befestigung und läßt sich so mit wenig Kraft vom 8 mm x 4 mm Magnet lösen.&lt;br /&gt;
Datei:20-alu-isolation-magnet-vor-klebung.jpeg|Vor dem Kleben wird die Holzoberfläche und der 8 mm x 4 mm Magnet mit Hilfe einer dünnen Folie (fixiert durch den 8 mm x 0.5 mm Magnet) isoliert (hier: Haushalts-Alu-Folie). Der Kleber wird sehr dünn aufgetragen, um Überschüsse zu vermeiden.&lt;br /&gt;
Datei:21-fertig-geklebt-magnete-frontplatte.jpeg|Rückseite der Frontplatte nach der Klebebefestigung der vier 8 mm x 0.5 mm Magneten. Alle vier Magnete wurden in einem Arbeitsgang geklebt. Die Ausrichtung der Plexiglasscheibe erfolgte von Hand. Die Oberfläche wurde mit einem alten Handtuch geschützt und mit Gewicht beschwert, während der Kleber auspolymerisierte.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Befestigung der Frontplatte an der Zwischenplatte wurden im Forum schon einige Lösungen besprochen.&lt;br /&gt;
&lt;br /&gt;
Man kann die Frontplatte z. B. mit Magneten befestigen oder direkt auf die Zwischenplatte kleben.&lt;br /&gt;
&lt;br /&gt;
Als Kleber wird meist ein Zweikomponentenkleber auf Epoxidharzbasis verwendet (z. B. Uhu Plus Sofortfest, Uhu Plus schnellfest, Uhu Plus Endfest 300...), da dieser keine Lösungsmittel enthält, die Plexiglas oder die Tinte des Frontplattendrucks anlösen. Im Forum wird bemerkt, dass der Kleber dünn aber vollflächig aufgetragen wurde. &lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird eine einfache Methode beschrieben, die Frontplatte mit Magneten zu befestigen.  Diese Methode hat den Vorteil, dass man die empfindliche Frontplatte abnehmen kann, wenn man an der Word Clock arbeitet. Die Magnete können ohne aufwendige Werkzeuge befestigt werden. &lt;br /&gt;
&lt;br /&gt;
Ich habe mich für runde Magnete entschieden, weil man diese mit einer einfachen Bohrung befestigen kann. Die Haftkraft von vier 8 mm x 4 mm Magneten reicht aus, die Plexiglas-Frontplatte sicher zu tragen. Ich habe die Haftkraft bewusst nicht überdimensioniert, da ich Bedenken habe, dass starke Magnete beim Abnehmen der Frontplatte die Farbschicht von der Plexiglasplatte beschädigen könnten. &lt;br /&gt;
&lt;br /&gt;
Ich verwende zwei Magnete. Der dickere Magnet wird in der Zwischenplatte versenkt. Der dünnere Magnet wird an die Frontplatte geklebt. Der dünnere Magnet hat den gleichen Durchmesser wie der dickere Magnet, er ist jedoch nur 0.5 mm dick. &lt;br /&gt;
&lt;br /&gt;
Ein wesentliches Argument für die Verwendung von zwei Magneten anstelle der im Forum beschriebenen Lösung “1 Magnet und eine angeklebte Beilagscheibe” ist die Positioniergenauigkeit. Bei meinen Versuchen mit der Kombination Metall + Magnet hatte ich immer das Problem, dass der Magnet leicht seitlich verschoben werden konnte. Dies ist bei der Kombination Magnet + Magnet nicht möglich. Der flache Magnet wurde ebenfalls bewusst ausgewählt. Der Grund ist, dass zwei aneinander haftende Magnete nur schwer in axialer Richtung getrennt werden können. Es ist dagegen relativ einfach, die beiden Magneten durch seitliche Verschiebung zu trennen. Um die Plexiglasscheibe mit angeklebten Magneten seitlich verschieben zu können, dürfen die Magnete, die auf das Plexiglas geklebt werden, nicht zu hoch sein. Da die Plexiglasplatte ohne Luftspalt bündig auf der Zwischenplatte aufliegen soll, muss der Platz für den 0.5 mm Magnet auf der Seite der Zwischenplatte geschaffen werden. &lt;br /&gt;
&lt;br /&gt;
Theoretisch müsste man für beide Magneten in die Zwischenplatte ein 8 mm Loch mit einer Tiefe von 0.5 mm + 4.0 mm = 4.5 mm bohren. Damit der 0.5 mm dicke Magnet durch Verschieben entfernt werden kann, wird der Rand der Bohrung so angeschrägt, dass der Magnet seitlich verschoben werden kann. &lt;br /&gt;
&lt;br /&gt;
Da ich keine Bohrständer habe, wurde die Bohrungen freihändig mit einem 8 mm Holzbohrer im Akkuschrauber ausgeführt. Mit Hilfe eines Klebestreifens wurde die ungefähre Bohrtiefe festgelegt. &lt;br /&gt;
Im Zentrum der 8 mm Sacklochbohrung wurde zusätzlich eine 2 mm Bohrung durch die Zwischenplatte angefertigt. In diese kann man von der Unterseite mit den 2 mm Bohrer stecken und bei Bedarf den Magneten wieder ausstoßen. Ursprünglich dachte ich, den 8 mm x 4 mm Magneten festkleben zu müssen. Die Passgenauigkeit war jedoch so gut, dass ich den 8 mm x 4 mm Magneten einfach in die Bohrung pressen konnten (mit Hilfe eines kleinen Hölzchens und eines kleinen Hammers). &lt;br /&gt;
&lt;br /&gt;
Der 8 mm x 0.5 mm Magnet wird gemeinsam mit dem 8 mm x 4 mm Magnet so in die Bohrung gepresst, dass seine Oberfläche mit der Zwischenplatte bündig abschließt. Anschließend wird der kleine Magnet mit einem spitzen Gegenstand (z. B. Taschenmesser) entfernt und der Rand abgeschrägt (Dremel und Schleifsteinchen bzw. Fräser). &lt;br /&gt;
&lt;br /&gt;
Vor der Klebebefestigung an der Plexiglasscheibe wird das Holz und der 8 mm x 4 mm Magnet mit einer dünnen Folie vor Kleberüberschuss geschützt. In meinem Fall habe ich Haushalts-Alu-Folie verwendet. Für die Klebung werden die 8 mm x 0.5 mm Magneten an dem fest gepressten 8 mm x 4 mm Magneten fixiert. Der Kleber wird dünn auf die Oberfläche des 8 mm x 0.5 mm Magneten aufgetragen, die Plexiglasscheibe korrekt positioniert und mit Hilfe von Gewichten während der Aushärtphase fixiert. Ich habe alle Magnete auf einmal geklebt. &lt;br /&gt;
&lt;br /&gt;
Die einzelnen Arbeitsschritte sind auf den Bildern zu erkennen.&lt;br /&gt;
&lt;br /&gt;
=== Bezugsquelle der Magnete ===&lt;br /&gt;
&lt;br /&gt;
Neotexx, Herweghstr. 11, 12487	Berlin ( http://www.neomagnete.com )&lt;br /&gt;
&lt;br /&gt;
Folgende Magnete wurden verwendet:&lt;br /&gt;
&lt;br /&gt;
* Cylinder 8x0.5 mm, Dimension: D8x0.5mm, NdFeB Magnet in N48 (1.42 Tesla), Magnetized Direction: through 0.5mm (axial), Coating: Nickel, item # Z-008-000.5-N &lt;br /&gt;
* Cylinder 8x4 mm, Dimension: D8x4mm, NdFeB Magnet in N48 (1.42 Tesla), Magnetized Direction: through 4mm, Coating: Nickel, item # Z-008-004-N&lt;br /&gt;
&lt;br /&gt;
Wer den Mindestbestellwert (10€) und die vergleichsweise hohen Versandkosten (5,50€) scheut, kann mir (User [http://www.mikrocontroller.net/user/show/Stoerte Stoerte]) eine PN-Schicken. Ich habe etwas großzügiger bestellt und würde die übrigen Magnete zu folgenden Paketen (Paket 2 für den Fall, dass man eine zweite Frontplatte zum Wechseln bestücken will) abgeben:&lt;br /&gt;
&lt;br /&gt;
* Paket 1: 4x D8x4mm + 4x D8x0.5mm = 4,50€ + 1,50€ Versand&lt;br /&gt;
* Paket 2: 4x D8x4mm + 8x D8x0.5mm = 6,00€ + 1,50€ Versand&lt;br /&gt;
&lt;br /&gt;
== Befestigung der Platinen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:22-bueroklammer-pin.jpeg|Befestigungspin aus Büroklammerdraht.&lt;br /&gt;
Datei:23-led-streifen-mit-pins.jpeg|Die Pins werden in der Ausfräsung verkeilt und fixieren die LED-Streifenplatinen, können aber jederzeit wieder leicht gelöst werden.&lt;br /&gt;
Datei:24-min-platine-mit-pin.jpeg|Auch die Kabel und Minuten-LED-Platinen können mit Pins fixiert werden.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An der Zwischenplatte müssen folgende Komponenten befestigt werden:&lt;br /&gt;
&lt;br /&gt;
* Steuerelektronik&lt;br /&gt;
* LED-Platinen Word Clock&lt;br /&gt;
* LED-Platinen Ambilight&lt;br /&gt;
* Netzteil&lt;br /&gt;
* DCF77-Modul&lt;br /&gt;
* Kabel&lt;br /&gt;
&lt;br /&gt;
Die einfachste Lösung ist die Klebebefestigung mit Heißkleber oder einem anderen geeigneten Kleber. Die Klebemethode hat jedoch den Nachteil, dass die Klebung nicht so leicht wieder gelöst werden kann. Aus diesem Grund wurde eine reversible Alternative gesucht. &lt;br /&gt;
&lt;br /&gt;
Die vorgeschlagene Methode wirkt zwar auf den ersten Blick nicht sehr professionell, funktioniert aber sehr gut. So musste ich einige Male Korrekturen an den LED Platinen vornehmen, weil sich z. B. bei meinen „Manipulationen“ Kabel gelöst haben. &lt;br /&gt;
&lt;br /&gt;
Die Lösung ist relativ einfach. Ein harter Draht (in meinem Fall 0,8 mm dicker Federdraht, wird z. B. bei Kieferorthopäden verwendet, als Alternative kann man aber auch Büroklammerdraht verwenden) wird etwas länger abgezwickt, als die Ausfräsung für die Platine oder die Kabel ist. Der Draht kann in die relativ weiche MDF Platte so verkeilt werden, dass die Platine oder Kabel gut halten. Es ist sinnvoll, den Draht an beiden Enden abzuzwicken. Dadurch entstehen zwei scharfe Enden, die sich leichter im MDF verankern lassen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:25-dcf-77-geklebt.jpeg|DCF-77 Modul und Ferritantenne. Befestigung mit Heisskleber.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Befestigung für die Ambilight-LED Streifen sowie  das DCF-77 Modul habe ich leider keine bessere Lösung gefunden, als die Befestigung mit Heißkleber. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:26-netzteil.jpeg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Steuerplatine wird durch die angeschlossenen Kabel sicher in ihrer Position gehalten. &lt;br /&gt;
&lt;br /&gt;
Das modifizierte Conrad-Netzteil hält durch Klemmpassung in der Aussparung. Achtung: an der Unterseite der Platine liegen die 220 V Anschlüsse frei. Das ist kein Problem, sobald die Uhr an der Wand befestigt ist. Um sicherzustellen, dass niemand aus Versehen die Platine von der Seite berühren kann, wurde das Oberteil des Gehäuses als Berührschutz belassen. Beachten Sie dies bitte bei der Montage. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:27-uhr-wand-mit-ambilight.jpeg|&lt;br /&gt;
Datei:28-uhr-wand-ohne-ambilight.jpeg|&lt;br /&gt;
Datei:29-uhr-wand-schraeg-1.jpeg|&lt;br /&gt;
Datei:30-uhr-wand-schraeg-2.jpeg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Lösung ist nur von Relevanz, wenn die Stromversorgung direkt hinter der Uhr möglich ist. Dann sieht die Lösung allerdings sehr elegant aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:31-netzteil-1.jpeg|&lt;br /&gt;
Datei:32-netzteil-2.jpeg|&lt;br /&gt;
Datei:33-netzteil-3.jpeg|&lt;br /&gt;
Datei:34-netzteil-4.jpeg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Vorbereitung musste das Netzteilgehäuse geöffnet werden. Folgende Bilder zeigen den Innenaufbau und sollen so das Öffnen des Gehäuses erleichtern helfen. Das Gehäuse ist fest verklebt. Der Kleber kann nicht aufgesprengt werden (vielleicht würde es gehen, wenn man den Kleber mit einer Heißluftpistole ausreichend erwärmen würde ?). Ich habe mich für die Lösung entschieden, das Gehäuse entlang der Klebenaht mit einer Puk-Metallsäge aufzusägen, da ich noch nicht wusste, wie das Netzteil aufgebaut ist. Heute würde ich nur noch die Steckerpins absägen. Als Alternative zu dieser brachialen Methode habe ich geprüft, ob man ein Netzteil selbst bauen könnte. Ich bin aber zu den Schluss gekommen, dass es nicht wirklich möglich ist, ein eigenes Netzteil so preiswert und auch so klein wie das Conrad-Netzteil zu bauen.&lt;br /&gt;
&lt;br /&gt;
== Verkabelung ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:35-starre-draehte.jpeg|Für den ersten Versuch hatte ich Einzelader-Schaltdraht direkt auf die LED-Streifen gelötet. Leider neigte der Schaltdraht dazu, an den ungünstigsten Stellen zu brechen, wenn ich die Platinen bewegte, was allein schon zum Löten erforderlich war. &lt;br /&gt;
Datei:36-fliegender-aufbau.jpeg|Fliegender Aufbau... für den ersten Systemtest.&lt;br /&gt;
Datei:37-stecker-an-led-platine.jpeg|Erst die Verwendung von abgewinkelten Steckverbindern (Stiftleiste RM 2,54, gewinkelt Rastermaß: 2.54 mm, in Kombination mit der passenden Buchsenleiste RM 2,54 Rastermaß: 2.54 mm, Alternative: Stiftleiste RM 2,54, gewinkelt Rastermaß: 2.54 mm Polzahl: 3, 72645 BKL Electronic) vereinfachte die Montage der RGB-Verbindungen drastisch. &lt;br /&gt;
Datei:38-verkabelung-1.jpeg|Zusätzlich zu den Steckverbindern wurden keine starren Einzelkabel mehr verwendet, sondern flexible Drähte (bei mir: recycelte IDE-Festplattenkabel, alternativ: Flachbandkabel, RM 1,27; Polzahl: 50, 0.09 mm², Grau Sterner Kabel, ich werde beim nächsten Mal dieses Kabel testen: Flachbandkabel 3 x 0.14 mm², Gelb, Rot, Grün,  Sterner Kabel, Conrad Best.-Nr.: 605819 - 62).&lt;br /&gt;
&lt;br /&gt;
Auch für die Anschlüsse der Kabel von den Buchsensteckern K7 und K8 an die LED-Streifenplatinen waren die Steckverbinder sehr hilfreich. Die Einzelstecker habe ich, weil ich keine Alternativen hatte/kannte, von Buchsenleisten abgetrennt, was doch recht aufwendig war. Kennt jemand eine professionellere Lösung (Name, Bezugsquelle?)&lt;br /&gt;
Datei:39-verkabelung-2.jpeg|Sobald die Funktion erfolgreich getestet wurde, können die Kabel eingekürzt und schöner verlegt werden. Eigentlich wollte ich das Klebeband durch Heisskleber ersetzen. Aber nichts ist bekanntlich beständiger als ein Provisorium.&lt;br /&gt;
Datei:40-ir-und-ldr.jpeg|Der LDR und der Infrarot-Empfänger werden an der Unterseite der Word Clock auf leeren Plätzen der Amibilight-Platine befestigt. Für den IR-Empfänger reicht doppelseitiges Klebeband, der LDR kann mit einfachem Klebeband an den Beinchen fixiert werden. &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P.N. (http://www.mikrocontroller.net/topic/156661#2511143) hat eine elegante Lösung zur Befestigung des LDR und TSOP vorgeschlagen:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;- Der TSOP sitzt bei mir hinter dem &amp;quot;S&amp;quot; (&amp;quot;WACHTZEHNRS&amp;quot;) und ist direkt&lt;br /&gt;
auf diese Streifenplatine eingelötet. Davor habe ich natürlich die&lt;br /&gt;
PWM-Leiterbahnen des letzten Feldes durchtrennt und die 3 Beinchen auf&lt;br /&gt;
Stiftleisten am Ende der Platine geroutet. Geht bei dem Layout ganz gut.&lt;br /&gt;
Der IR-Empfang ist auch durch die Frontplatte einwandfrei&lt;br /&gt;
&lt;br /&gt;
- Der LDR sitzt hinter dem &amp;quot;M&amp;quot; (&amp;quot;TGNACHVORJM&amp;quot;) und wurde ebenso an der&lt;br /&gt;
Steifenplatine befestigt und auf eine Stiftleiste gelegt. Zusätzlich hat&lt;br /&gt;
er noch einen &amp;quot;Schirm&amp;quot; aus einer Lochrasterplatine gegen Streulicht von&lt;br /&gt;
angrenzenden Buchstaben erhalten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Wandbefestigung der Uhr ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:41-spiegelblech-1.jpeg|miniatur|Minimal Montageset: Exzenterscheiben (oben), Spiegel-Haftmagnet (links und rechts aussen), Haftblech mit Kieme]]&lt;br /&gt;
[[Datei:42-spiegelblech-2.jpeg|miniatur|Das Haftblech mit Kieme wird mit der Metallsäge getrennt und Bohrungen zur Befestigung mit Schrauben werden ergänzt (rechts Original, links Modifikation)]]&lt;br /&gt;
[[Datei:43-spiegelhalterung-montiert.jpeg|miniatur|Fertig montierte Haftbleche]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Word Clock kann wie jedes Bild an der Wand befestigt werden. Eine elegante, bewährte und gut funktionierende Variante stellt die Befestigung mit einer sog. Spiegelbefestigung mit Haftmagneten dar. Die Komplettsets sind meist ziemlich teuer und die Befestigungsbleche sind für die Word Clock viel zu groß. &lt;br /&gt;
&lt;br /&gt;
Eine preisgünstige Lösung findet man bei:&lt;br /&gt;
&lt;br /&gt;
Leha-Technik&amp;lt;br/&amp;gt;&lt;br /&gt;
Burger Straße 63 A&amp;lt;br/&amp;gt;&lt;br /&gt;
42859 Remscheid&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.leha.de www.leha.de]&lt;br /&gt;
&lt;br /&gt;
Hier kann man die Einzelkomponenten kaufen. Wichtig sind nur die Exzenterscheiben (2 Stück), die Haftmagneten (2 Stück) und die Haftbleche mit Kieme (2 Stück). Die Schrauben und Dübel sollten sich in der Bastelkiste finden (ich habe 6er Dübel, mit 4 x 50 mm Schrauben verwendet). Die Exzenterscheiben haben einen entscheidenden Vorteil. Wenn der Bohrer etwas verläuft oder wenn schon die Messung ungenau ist, kann man die Befestigung mit der Exzenterscheibe immer noch schön waagerecht ausrichten. &lt;br /&gt;
&lt;br /&gt;
Theoretisch könnte man auf die Magneten verzichten. In meinem Fall war jedoch hinter der Uhr eine Stromversorgung und die Kabel waren etwas steifer als gewünscht. Das hatte zur Folge, dass die Uhr von den Kabeln von der Wand abgehoben wurde und somit leicht schräg stand. Die Magneten haben dieses Problem sehr elegant gelöst. &lt;br /&gt;
&lt;br /&gt;
Das Haftblech mit Kieme wurde mit einer Eisensäge geteilt. Der Teil mit der Kieme ist mit 2.5 cm breit genauso breit, wie der Steg für die Befestigung. Da ich im Zusammenhang mit MDF kein Vertrauen zu dem Kleber hatte, wurden zwei Bohrungen ergänzt (3,5 mm Metallbohrer, improvisiertes Versenken der Schrauben mit einem 6 mm Metallbohrer, ich habe keinen speziellen Versenkbohrer). Das Blech wurde dann geklebt und mit 3 x 20 mm Spax-Schrauben befestigt. Die MDF Platte wurde vorher mit einem 2 mm Bohrer vor gebohrt. &lt;br /&gt;
&lt;br /&gt;
Der untere, abgetrennte Teil des Haftbleches wurde für den Magneten verwendet. Seine Breite passte ebenfalls perfekt zu den Befestigungsstegen. Auch diese Bleche wurden zusätzlich mit Schrauben befestigt.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Anzahl x VPE !! Artikel !! Art.Nr.&lt;br /&gt;
|-&lt;br /&gt;
| 2 x Stück || Haftblech, mit Kieme - 70 x 70 mm (selbstklebend) 3 kg || 5208608&lt;br /&gt;
|-&lt;br /&gt;
| 2 x Stück || Spiegel-Haftmagnet || 5208601&lt;br /&gt;
|-&lt;br /&gt;
| 2 x Stück || Exzenterscheibe || 5208602&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Das erste Mal einschalten =&lt;br /&gt;
&lt;br /&gt;
=== LED-Streifen ===&lt;br /&gt;
&lt;br /&gt;
Nach dem Verlöten aller Bauteile der LED-Streifen sollten diese vor dem endgültigen Verbau noch geprüft werden:&lt;br /&gt;
&lt;br /&gt;
# Prüfung der drei PWM-Kanäle und der Steuerleitungen auf gegenseitige Kurzschlüsse&lt;br /&gt;
# Funktionsprüfung der LED-Streifen mittels direkter Versorgung durch ein Netzteil: Hierbei nacheinander die einzelnen Farben der jeweiligen Wörter anschließen und ggf. nacharbeiten, falls es &#039;mal dunkel bleiben sollte&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; &amp;quot;Beginner-Tipp&amp;quot;: Die mangelhaften Lötstellen findet man am besten, wenn man mit dem Diodentest des Multimeters die Lötpunkte der angrenzenden LEDs berührt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Steuerplatine ===&lt;br /&gt;
&lt;br /&gt;
Wenn alle Bauteile verlötet sind, sollten zur ersten Prüfung alle Sockel noch leer bleiben. Wer ein entsprechendes Netzteil hat, sollte den Strom auf ca. 50mA begrenzen. Wer dies nicht kann, sollte wenigstens ein (im Regelfall auf 200mA) abgesichertes Netzteil dazwischen schalten. Zum Bestücken der einzelnen Bauteile sollte stets die Spannungsversorgung unterbrochen werden.&lt;br /&gt;
&lt;br /&gt;
# Prüfen der Spannungsversorgung auf Kurzschluss&lt;br /&gt;
# Anlegen der Versorgungsspannung, am Spannungsregler sollten nun 5V anliegen. Tipp: Minus ist ganz außen, Plus ist die zweite Befestigung von außen. Kann man anhand der Unterseite der Platine kontrollieren. Im Schaltplan ist das bei der Belegung von KL1 nicht eindeutig zu erkennen!&lt;br /&gt;
# µC bestücken, die Stromaufnahme sollte nun knapp 20mA betragen&lt;br /&gt;
# Erst Fuses programmieren, dann Software flashen&lt;br /&gt;
# RTC, Schieberegister (74HCT595) und Treiber (ULN) einsetzen&lt;br /&gt;
# LED-Streifen anschließen&lt;br /&gt;
# Wenn alles funktioniert, dann blinken die 4 Minuten-LEDs nach dem Einschalten rund 5-6 mal gleichzeitig auf. Zu der Zeit fängt die RealTimeClock an zu ticken&lt;br /&gt;
# Während des Blinkens kann nun auch eine (beliebige) Taste auf der Fernbedienung gedrückt werden, und deren Anlernprozess gestartet werden (-&amp;gt; s. Manual). Für den Funktionstest muss keine dauerhafte Tastenbelegung gewählt werden, dies kann jederzeit nachgeholt werden.&lt;br /&gt;
# Wenn die FB angelernt ist, dann gibt es eine Taste, mit der alle Ausgänge (das heißt alle Wörter) nacheinander geschaltet werden (&amp;quot;Demo-Modus&amp;quot;). Den Demo-Modus kann man verlassen, in dem ein anderer Modus aktiviert wird. Drückt einfach im Anschluss an den Demo-Modus die Taste &amp;quot;Einfarb-/Modus/Farbprofile aktivieren&amp;quot;.&lt;br /&gt;
# Mit der Fernbedienung und der Uhr spielen ... :o)&lt;br /&gt;
# Nun kann das DCF-Modul angeschlossen werden (wenn möglich, per UART den DCF-Status loggen). Nach einiger Zeit (mehrere Minuten!) sollte die Uhr die aktuelle Zeit anzeigen, sofern auf der DCF-Seite alles klappt.&lt;br /&gt;
&lt;br /&gt;
Wenn eine Fernbedienung angelernt werden soll, dann musst man, während alle 4 Minuten-LEDs blinken, irgendeine Taste auf der Fernbedienung drücken. Wird die FB erkannt, dann hört das Blinken auf und die &amp;quot;eins&amp;quot; leuchtet. Jetzt musst man die Taste drücken, die zum Ein-/Ausschalten der Uhr verwendet werden soll. Als nächstes leuchtet die &amp;quot;zwei&amp;quot; usw..... --&amp;gt; Mehr dazu siehe Handbuch&lt;br /&gt;
&lt;br /&gt;
Sollte nach dem &amp;quot;Neustart&amp;quot; der Uhr keine LED mehr leuchten, KEINE PANIK... es kann sein, dass einfach die &amp;quot;Helligkeit&amp;quot; der LEDs so gering ist, dass Ihr sie einfach nicht seht.&lt;br /&gt;
&lt;br /&gt;
Tipp fürs erste Anlernen der FB: Einfach alle Tasten stur der Reihe nach durchdrücken. Dann kann man durch Zählen und Vergleichen mit der Tabelle im Handbuch solange &amp;quot;überleben&amp;quot;, bis man die Muse hatte, eine sinnvolle Belegung zu überlegen und auch zu dokumentieren!&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Abstimmungen =&lt;br /&gt;
Eine Stimme ist ein Strich. Nach 5 Strichen bitte ein Leerzeichen einfügen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== offen: ==&lt;br /&gt;
IR-FB Anlernphase deaktivierbar (Default / keine FB angelernt: anlernen aktiv): | &amp;lt;br&amp;gt;&lt;br /&gt;
ethernet ntp client: ||||| ||||| ||||| || &amp;lt;br&amp;gt;&lt;br /&gt;
Bewegungsmelder: ||||| ||||| ||||| ||||| ||||| ||||| |||&amp;lt;br&amp;gt;|&lt;br /&gt;
IR zum PC für Kommunikation/Bootloader |&amp;lt;br&amp;gt;&lt;br /&gt;
RFM12 für Kommunikation/Bootloader |||&amp;lt;br&amp;gt;&lt;br /&gt;
NTP Server (um eine genaue Zeit ins Netzwerk zu verteilen) |||&amp;lt;br&amp;gt;&lt;br /&gt;
Beim Start, alle LEDs einmal der Reihe nach Durchlaufen lassen zum Funktionstest (statt &amp;quot;Volldampfmodus&amp;quot;): ||||| ||||| ||||| | &amp;lt;br&amp;gt;&lt;br /&gt;
Ton zur vollen Stunde (Beep/Piezo): ||||| ||&amp;lt;br /&amp;gt;&lt;br /&gt;
ZBus (Ethersex) zum einstellen der Uhr über das Netzwerk, evt holen der Zeitdaten über ZBus von einem Zeitserver: || &amp;lt;br /&amp;gt;&lt;br /&gt;
zeitgesteuert Dunkelschalten wochentagsweise: |||| |||&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== bereits umgesetzt: ==&lt;br /&gt;
DCF: ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||| &amp;lt;br&amp;gt;&lt;br /&gt;
IR für Fernbedienung: ||||| ||||| ||||| || &amp;lt;br&amp;gt;&lt;br /&gt;
Ambilight: ||||| ||||| ||||| ||||| |||| &amp;lt;br&amp;gt;&lt;br /&gt;
zeitgesteuert Dunkelschalten (z.&amp;amp;nbsp;B. nachts &amp;quot;Aus&amp;quot;): ||||| ||||| ||||| &amp;lt;br&amp;gt;&lt;br /&gt;
Bluetooth: || (Posting: [http://www.mikrocontroller.net/topic/156661?goto=1710183#1710183 Bluetooth mit Debug, Bootloader und Autoreset])&amp;lt;br&amp;gt;&lt;br /&gt;
Möglichkeit, Zeiteinstellmodus bei &amp;quot;0 Minuten&amp;quot; von Normalmodus zu unterscheiden z.B. blinkendes &amp;quot;UHR&amp;quot; |||||&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;ES IST&amp;quot; soll man ein- oder ausschalten können: ||||| |&amp;lt;br&amp;gt;&lt;br /&gt;
Bluetooth per FB ein-/ausschalten: ||&amp;lt;br&amp;gt;&lt;br /&gt;
Taste &amp;quot;Speichern&amp;quot; auf FB statt automatisch |||(On Off speichert)&amp;lt;br&amp;gt;&lt;br /&gt;
kurzzeitiger &amp;quot;Volldampf-Modus&amp;quot; (alle Wörter an für bspw. 30sek): ||||| |||  - als Submodus des Demomodus, multiplexing, jeweils ein Kanal an jedem Treiber aktiv&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== An/Ausschalt-Logik ==&lt;br /&gt;
A: Manuell ausgeschaltete Uhr bleibt aus bei Erreichen der Einschaltzeit - hier könnte natürlich gleich der Stecker gezogen werden, sofern die Uhr nicht festeingebaut ist&lt;br /&gt;
&lt;br /&gt;
B: Manuell ausgeschaltete Uhr geht wieder an bei Erreichen der Einschaltzeit&lt;br /&gt;
&lt;br /&gt;
C: Es gibt eine OFF-Taste und eine STANDBY-Taste. Bei STANDBY schaltet sich die Uhr bei Erreichen der Einschaltzeit wieder ein, bei OFF bleibt sie aus.&lt;br /&gt;
&lt;br /&gt;
D: Die Variante A oder B lässt sich vor dem Kompilieren der Software als define individuell nach eigenem Gutdünken festlegen. (Viele andere Werte sind bereits heute so einstellbar in der SW)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A Strichliste: |&lt;br /&gt;
&lt;br /&gt;
B Strichliste: |||  &lt;br /&gt;
&lt;br /&gt;
C Strichliste: |||||  ||||| |||||&lt;br /&gt;
&lt;br /&gt;
D Strichliste: ||||&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Zurück zum Hauptartikel: [[Word Clock]]&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Timer und Uhren]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;br /&gt;
[[Kategorie:DCF77]]&lt;/div&gt;</summary>
		<author><name>Johnpatcher</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Wordboot.zip&amp;diff=84497</id>
		<title>Datei:Wordboot.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Wordboot.zip&amp;diff=84497"/>
		<updated>2014-08-15T20:35:50Z</updated>

		<summary type="html">&lt;p&gt;Johnpatcher: Selbst zusammengestellt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Selbst zusammengestellt.&lt;/div&gt;</summary>
		<author><name>Johnpatcher</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Wordboot_6_0.zip&amp;diff=84496</id>
		<title>Datei:Wordboot 6 0.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Wordboot_6_0.zip&amp;diff=84496"/>
		<updated>2014-08-15T20:31:29Z</updated>

		<summary type="html">&lt;p&gt;Johnpatcher: Johnpatcher lud eine neue Version von „Datei:Wordboot 6 0.zip“ hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Selbst von mir zusammengestellt.&lt;/div&gt;</summary>
		<author><name>Johnpatcher</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Word_Clock_Variante_1&amp;diff=84490</id>
		<title>Word Clock Variante 1</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Word_Clock_Variante_1&amp;diff=84490"/>
		<updated>2014-08-15T13:58:47Z</updated>

		<summary type="html">&lt;p&gt;Johnpatcher: Abschnitt über wordboot hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Überblick =&lt;br /&gt;
&lt;br /&gt;
[[Datei:wordclock-frontplatte-v2.png| |WordClock]]&lt;br /&gt;
&lt;br /&gt;
Links zum Hauptartikel [1], zur Variante 2 [2] zum langen Thread [3] mit dem hier alles angefangen hat und zum Original [4], das alle hier inspiriert hat.&lt;br /&gt;
&lt;br /&gt;
[1] [[Word Clock]]&amp;lt;br&amp;gt;&lt;br /&gt;
[2] [[Word Clock Variante 2]]&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://www.mikrocontroller.net/topic/156661 Beitrag: Brauche Hilfe beim Bau einer Uhr]&amp;lt;br&amp;gt;&lt;br /&gt;
[4] [http://www.clocktwo.com http://www.clocktwo.com]&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
= WordClock FAQ =&lt;br /&gt;
Häufig tauchen im Forum Fragen zum WordClock Projekt auf (was brauche ich..., wie mache ich...), die schon mehrmals beantwortet wurden. Hier Für die Variante 1 eine Zusammenfassung der wichtigsten Fragen:&lt;br /&gt;
&lt;br /&gt;
  Q: Was brauche ich alles, um die WordClock (Variante 1) zu bauen?&lt;br /&gt;
  A: - Die Steuerplatine mit der Elektronik&lt;br /&gt;
     - Eine Frontblende (das &amp;quot;Ziffernblatt&amp;quot;)&lt;br /&gt;
     - Leuchtdioden und Platinen für die Anzeige&lt;br /&gt;
     - Eine Zwischenplatte um das Licht zwischen den einzelnen Buchstaben zu trennen&lt;br /&gt;
     - Eine Spannungsversorgung&lt;br /&gt;
     - etwas handwerkliches Geschick&lt;br /&gt;
&lt;br /&gt;
  Q: Kann ich Bauteile der WordClock über Sammelbestellungen billiger bekommen?&lt;br /&gt;
  A: Es wurden in der Vergangenheit (seit Dez.2009) mehrere Sammelbestellungen angeboten. Im einzelnen waren das:&lt;br /&gt;
     - Die [http://www.mikrocontroller.net/articles/Word_Clock_Variante_1#Sammelbestellung_der_Platine Leiterplatte] für die Steuerelektronik (von ukw)&lt;br /&gt;
     - [http://www.mikrocontroller.net/articles/Word_Clock_Variante_1#Sammelbestellung Leuchtdioden mit Streifenplatinen] für die Anzeige (von wawibu / matsch)&lt;br /&gt;
     - Eine Frontblende (Buchstabenmatrix)&lt;br /&gt;
        - aus [http://www.mikrocontroller.net/articles/Word_Clock#Sammelbestellung_.28Plexiglas.29 Plexiglas], schwarz (von ukw)&lt;br /&gt;
        - aus [http://www.mikrocontroller.net/articles/Word_Clock#Sammelbestellung_.28Edelstahl.29 Edelstahl] (von andreasp)&lt;br /&gt;
     - Eine [http://www.mikrocontroller.net/articles/Word_Clock#Zwischenplatte Zwischenplatte] (von wawibu / matsch)&lt;br /&gt;
&lt;br /&gt;
  Q: Kann ich eine fertige Uhr kaufen?&lt;br /&gt;
  A: Ja, beim [http://www.qlocktwo.com/ Hersteller] der Vorlage ;-). Hier im uC.net Forum gibt es nur Tipps und Hilfe zum Selberbauen.&lt;br /&gt;
     Eine komplette WordClock kann man hier NICHT bekommen.&lt;br /&gt;
     ...und etwas einlesen wird auch keinem abgenommen ;-)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Aufbau einer Wordclock =&lt;br /&gt;
Hier gibt es ein von bomibob äußerst kunstvolles Video zum Bau einer Word Clock:&lt;br /&gt;
http://www.youtube.com/watch?v=OYhtc-8StXA&lt;br /&gt;
(zugehöriger Post → http://www.mikrocontroller.net/topic/goto_post/2328168)&lt;br /&gt;
&lt;br /&gt;
Details zu den einzelnen Komponenten sind den entsprechenden Unterpunkten, oder dem Hauptartikel zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
= Elektronik =&lt;br /&gt;
* Atmega168&lt;br /&gt;
* 8Mhz (interner Osc.)&lt;br /&gt;
* 24-Bit-Schieberegister an SPI für 24 Wörter&lt;br /&gt;
* 4 Output-Pins für Minutenanzeige&lt;br /&gt;
* 4 weitere GPOS - für allgemeine Zwecke&lt;br /&gt;
* RGB-Steuerung über PWM gegen GND, d.h. 32x3-Matrix&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Schaltung =&lt;br /&gt;
&lt;br /&gt;
[[Datei:wordclock-schmal-schaltung.png|miniatur|Schaltbild V1.0]]&lt;br /&gt;
[[Datei:wordclock-schmal-schaltung-2.0.png|miniatur|Schaltbild V2.0]]&lt;br /&gt;
[[Datei:TSOP-wordclock-1.1.png|miniatur|TSOP17xx in V1.1]]&lt;br /&gt;
[[Datei:RXTX-wordclock-1.1.png|miniatur|Rx/Tx in V1.1 und V2.0]]&lt;br /&gt;
[[Datei:K10-wordclock-2.0.png|miniatur|K10 als I2C in V2.0]]&lt;br /&gt;
[[Datei:K11-wordclock-2.0.png|miniatur|K11 als SPI in V2.0]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Änderungen der Platinen-Version 1.0 gegenüber dem Prototypen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Pullup-Widerstand R7 am DCF-Anschluss entfällt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Änderungen der Platinen-Version 1.1 gegenüber 1.0:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Die Tiefpass-Schaltung für den TSOP17xx ist nun korrekt geschaltet. Die Abweichung sieht man rechts im Zusatzschaltbild.&lt;br /&gt;
* Der Verbinder K9 (UART-Anschluss für Debug-Zwecke) hat zwei zusätzliche Pins erhalten, siehe Zusatzschaltbild rechts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Änderungen der Platinen-Version 2.0 gegenüber 1.1:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Diode D1 entfällt.&lt;br /&gt;
* 6-poliger ISP-Wannenstecker ersetzt 10-poligen Wannenstecker, Vcc nun angeschlossen&lt;br /&gt;
* Neu: Stiftleiste K10 als Anschlüsse für externe I2C-Module, auf der Platine oberhalb der RTC zu finden&lt;br /&gt;
* Neu: Stiftleiste K11 als Anschlüsse für externe SPI-Module, auf der Platine ganz links&lt;br /&gt;
&lt;br /&gt;
Siehe auch untenstehende Zusatzschaltbilder rechts. Die neuen Stiftleisten sind optional, müssen also nicht unbedingt bestückt werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zugehörige Schaltung als PDF&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Version 1.0: &#039;&#039;&#039;[[Media:wordclock-schmal.pdf|wordclock-schmal.pdf]]&#039;&#039;&#039;&lt;br /&gt;
* Version 2.0: &#039;&#039;&#039;[[Media:wordclock-schmal-schaltung-2.0.pdf|wordclock-schmal-schaltung-2.0]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Sammelbestellung der Platine ==&lt;br /&gt;
&lt;br /&gt;
Stand August 2014:&lt;br /&gt;
&lt;br /&gt;
Es sind noch Steuerplatinen aus der letzten Sammelbestellung übrig. Wer sich also noch an der Sammelbestellung beteiligen möchte, kann sich bei mir (Benutzer [http://www.mikrocontroller.net/user/show/ukw &#039;&#039;&#039;ukw&#039;&#039;&#039;]) per PN melden.&lt;br /&gt;
&lt;br /&gt;
Kosten pro Platine: 10 EUR zzgl. Versand von 2,00 EUR bei bis zu 4 Stück. Bei mehr als 4 Stück beträgt der Versand 3,00 EUR.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
* 1 Platine: 10 EUR + 2,00 Versand: 12,00 EUR&lt;br /&gt;
* 2 Platinen: 20 EUR + 2,00 Versand: 22,00 EUR&lt;br /&gt;
* ...&lt;br /&gt;
* 5 Platinen: 50 EUR + 3,00 Versand: 53,00 EUR&lt;br /&gt;
&lt;br /&gt;
Parallel zu dieser Sammelbestellung gibt es noch eine neue (kleinere) Sammelbestellung für passende Frontplatten, siehe auch:&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Word_Clock#Sammelbestellung_.28Plexiglas.29 Sammelbestellung Frontplatten]&lt;br /&gt;
&lt;br /&gt;
Beim Versand zusammen mit den Frontplatten entfallen natürlich die Versandkosten für die Platinen.&lt;br /&gt;
&lt;br /&gt;
Maße: 146mm x 35,6mm.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Reichelt Warenkorb Mono-Variante ==&lt;br /&gt;
Da selbst bei der Mono-Variante der ATmega 88 langsam mehr als eng wird, wurde dieser Warenkorb auch auf den ATmega 168 umgestellt.&lt;br /&gt;
&lt;br /&gt;
Eine vollständige Liste zur Bestellung der nötigen Bauteile ist bei Reichelt abgelegt: &#039;&#039;&#039;[http://www.reichelt.de/?ACTION=20;AWKID=580204;PROVID=2084 Warenkorb-Mono]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Reichelt Warenkorb RGB-Variante ==&lt;br /&gt;
Für die RBG-Version wird der ATmega 168 benötigt. Ein angepasster &#039;&#039;&#039;[http://www.reichelt.de/?ACTION=20;AWKID=580197;PROVID=2084 WARENKORB]&#039;&#039;&#039; ist bei Reichelt hinterlegt.&lt;br /&gt;
&lt;br /&gt;
Im Warenkorb befindet sich nun auch der Nachfolger TSOP 31238 des nicht mehr lieferbaren TSOP17xx. ( 15.11.2011 ).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Beginner-Tipp&amp;quot;: &lt;br /&gt;
&lt;br /&gt;
Der Warenkorb ist eine tolle Vereinfachung der Bestellung. Bevor Ihr jedoch das DCF-77-Modul automatisch mitbestellt, lest bitte mit Hilfe der Suchfunktion das Forum zu diesem Thema durch. Das DCF-77-Modul ist, wie es im Forum so nett formuliert wurde, &amp;quot;ein Sensibelchen&amp;quot;. Es gäbe eine Alternative von C* (siehe Forum). Und um es ganz deutlich zu formulieren: Die Uhr funktioniert auch ohne DCF-77-Modul ganz prima. Sie kann mit der IR-Fernbedienung ganz einfach gestellt werden. Man braucht das Modul nicht wirklich.&lt;br /&gt;
Es befindet sich kein Flachbandkabel im Warenkorb.&lt;br /&gt;
----&lt;br /&gt;
== Reichelt Warenkorb LED Single Board ==&lt;br /&gt;
&lt;br /&gt;
Für das neue SingleBoard (Paket 1) werden zusätzliche Bauteile benötigt. Diese sind in einem eigenen &#039;&#039;&#039;[http://www.reichelt.de/?ACTION=20;AWKID=847662;PROVID=2084 WARENKORB]&#039;&#039;&#039; bei Reichelt hinterlegt.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Reichelt Warenkorb Pollin DCF Stabilisierungsplatine ==&lt;br /&gt;
&lt;br /&gt;
Teil des Single Boards ist eine Stabilisierungsschaltung für den Pollin DCF Empfänger. Bei Verwendung des Pollin DCF Empfängers wird folgender &#039;&#039;&#039;[http://www.reichelt.de/?ACTION=20;AWKID=885799;PROVID=2084 WARENKORB]&#039;&#039;&#039; zusätzlich benötigt.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.pollin.de/shop/dt/NTQ5OTgxOTk-/Bausaetze_Module/Module/DCF_Empfangsmodul_DCF1.html Link]&#039;&#039;&#039; zum DCF-Empfänger bei Pollin.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Bestückung ==&lt;br /&gt;
&lt;br /&gt;
Hier eine kurze Beschreibung zur Bestückung:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Version 1.0 (schmale Ausführung):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal.png|miniatur|Bestückte Platine (Version 1.0)]]&lt;br /&gt;
[[Datei:Wordclock-schmal-1.1.png|miniatur|Bestückte Platine (Version 1.1)]]&lt;br /&gt;
[[Datei:Wordclock-schmal-2.0.png|miniatur|Bestückte Platine (Version 2.0)]]&lt;br /&gt;
&lt;br /&gt;
* Oben Mitte: Anschluss für stehende Lithium-Knopfbatterie CR2032 (die drei abgebildeten Stifte sind natürlich nicht notwendig, die Batterie wird direkt eingelötet)&lt;br /&gt;
* Unten 3-polige Stiftleiste: Anschluss für DCF77-Modul&lt;br /&gt;
* Unten 2-polige Stiftleiste: RX &amp;amp; TX (für Testzwecke)&lt;br /&gt;
* Unten rechts: TSOP17XX/SFH5110 für Infrarot-Empfang&lt;br /&gt;
* Darüber: 2-polige Stiftleiste für LDR (Helligkeitsmessung)&lt;br /&gt;
* Oben links und rechts: Wannenstecker für insg. 32 Ausgabekanäle: OUT0-OUT23 (für die Wörter), OUTL1-OUTL4 (für die Minuten) und OUTG1-OUTG4 (für General-Purpose-Ausgabezwecke)&lt;br /&gt;
* Rechts: Anschlussklemmen für Versorgungsspannung 7-20V und die drei PWM-Kanäle Rot, Grün und Blau.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Version 1.1 (schmale Ausführung):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Wie 1.0, jedoch hat der Verbinder K9 (UART-Anschlüsse Rx/Tx für Debug-Zwecke) zwei zusätzliche Pins erhalten, siehe abweichendes Bestückungsbild rechts. Belegung von links nach rechts: Vcc / GND / RX / TX&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Version 2.0 (schmale Ausführung):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Änderungen gegenüber 1.1:&lt;br /&gt;
&lt;br /&gt;
* Diode D1 entfallen&lt;br /&gt;
* 6-poliger statt 10-poliger ISP-Stecker&lt;br /&gt;
* Am ISP-Stecker ist auch Vcc angeschlossen&lt;br /&gt;
* Anschlussmöglichkeit für weitere I2C-Module&lt;br /&gt;
* Anschlussmöglichkeit für weitere Schieberegister über SPI&lt;br /&gt;
&lt;br /&gt;
[[Datei:RXTX-platine-wordclock-1.1.png|miniatur|Rx/Tx in V1.1 und V2.0]]&lt;br /&gt;
&lt;br /&gt;
Der IR-Empfänger TSOP17XX/SFH5110 muss hinter einem nicht benutzten Buchstaben angebracht werden. Deshalb braucht man ihn nicht unbedingt auf die Platine löten, sondern kann ihn auch über ein 3-poliges Kabel mit der Platine verbinden. In diesem Fall sollte der Kondensator C2 nicht auf die Platine, sondern direkt am TSOP17XX/SFH5110 (C2 Minus an Pin 1, C2 Plus an Pin 2) angelötet werden. Bei Verwendung eines SFH5110 Pinbelegung beachten!&lt;br /&gt;
&lt;br /&gt;
Je nach Ort des LDRs (hinter Buchstaben bzw. mit/ohne Dffusor) kann die automatische Helligkeitsregelung unterschiedlich ausfallen. Hier muss man eventuell den Widerstand R6 variieren, wenn das Ergebnis nicht optimal sein sollte.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bestückung und Anschlüsse&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal-bestueckungsdruck.png|miniatur|Bestückungsaufdruck der Version 1.0]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal-bestueckungsdruck-1.1.png|miniatur|Bestückungsaufdruck der Version 1.1]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal-bestueckungsdruck-2.0.png|miniatur|Bestückungsaufdruck der Version 2.0]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal-bestueckt.jpg|miniatur|Bestückung: Orientierung der IRLUs beachten!]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal-anschluesse.png|miniatur|Anschlüsse V1.0]]&lt;br /&gt;
[[Datei:Wordclock-schmal-anschluesse-1.1.png|miniatur|Anschlüsse V1.1]]&lt;br /&gt;
[[Datei:Wordclock-schmal-anschluesse-2.0.png|miniatur|Anschlüsse V2.0]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WICHTIG (für 1.x und 2.x):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der oberste IRLU2905 muss anders herum eingelötet werden (Metall Richtung Spannungsregler) als die beiden unteren (Metall Richtung Schraubklemme). Siehe auch Foto rechts.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Möchte man einfarbige LEDs verwenden und auf die RGB-Steuerung verzichten, schließt man einfach zwei der drei RGB-PWM-Kanäle nicht an und verwendet stattdessen nur PWMR zur PWM-Steuerung. Die 2 zu PWMG und PWMB gehörenden IRLUs und die angeschlossenen 4 Widerstände am Gate der IRLUs kann man dann auch weglassen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bestückungsliste:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Name                Wert&lt;br /&gt;
 C1,C3,C4,C6,C8,C9   100NF&lt;br /&gt;
 C10,C11,C12,C13     100NF&lt;br /&gt;
 C2                  4,7µF&lt;br /&gt;
 C5,C7               47µF&lt;br /&gt;
 D1                  1N4001&lt;br /&gt;
 IC1                 ATMEGA88&lt;br /&gt;
 IC2                 7805&lt;br /&gt;
 IC3                 TSOP1738 oder TSOP31238 oder SFH5110 (andere Pinbelegung!)&lt;br /&gt;
 IC4,IC5,IC6         74HCT595N&lt;br /&gt;
 IC7                 DS1307&lt;br /&gt;
 IC8,IC9,IC10,IC11   UDN2981A&lt;br /&gt;
 K4                  Wannenstecker 10-polig&lt;br /&gt;
 K7,K8               Wannenstecker 16-polig&lt;br /&gt;
 K6                  LDR&lt;br /&gt;
 KL1                 KLEMME5POL&lt;br /&gt;
 Q1                  32,768KHz&lt;br /&gt;
 R1,R6,R8,R10,R12    10K (R6 für LDR evtl.noch nicht bestücken)&lt;br /&gt;
 R7                  10K, entfällt!&lt;br /&gt;
 R2                  100&lt;br /&gt;
 R3,R4               4K7&lt;br /&gt;
 R5,R9,R11           82&lt;br /&gt;
 T1,T2,T3            IRLU2905&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Davon abweichend für 2.0:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Name                Wert&lt;br /&gt;
 K4                  Wannenstecker 6-polig (statt 10-polig)&lt;br /&gt;
 K10                 I2C (neu, optional)&lt;br /&gt;
 K11                 SPI (neu, optional)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung zu C2 und R2:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
C2 und R2 bilden zusammen einen Tiefpass. Hier gilt: Soll der TSOPxxxx/SFH5110 über ein längeres Kabel entfernt von der Platine angebracht werden, sollte man den Kondensator C2 nicht in die Platine löten, sondern direkt am Empfänger anbringen (Achtung: TSOP17XX und SFH5110 haben unterschiedliche Pinbelegung).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== FAQ zur Bestückung ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal-bestueckt.jpg|miniatur|Bestückung: Orientierung der IRLUs (ganz rechts) beachten!]]&lt;br /&gt;
&lt;br /&gt;
 Q: Wie herum müssen die IRLUs eingelötet werden?&lt;br /&gt;
 A: Der oberste kommt mit der Metallseite nach links (Richtung&lt;br /&gt;
    Spannungsregler), Pin 1 ist hier der untere. Die anderen beiden IRLUs&lt;br /&gt;
    werden mit der Metallseite Richtung Schraubklemme eingelötet, siehe auch&lt;br /&gt;
    Foto rechts. Hier ist jeweils Pin 1 der obere.&lt;br /&gt;
&lt;br /&gt;
 Q: Welche ICs sollte ich sockeln?&lt;br /&gt;
 A: Wenn durch einen versehentlichen Kurzschluss bei der Freiluftverdrahtung der&lt;br /&gt;
    LEDs ein UDN2981 abfackelt, ist das ägerlich. Daher sollte man zumindest&lt;br /&gt;
    die UDNs und den ATMega sockeln. Besser ist es natürlich, alle zu sockeln.&lt;br /&gt;
&lt;br /&gt;
 Q: Bei dem ATMega und der RTC ist nicht ersichtlich, wie herum sie eingebaut&lt;br /&gt;
    werden müssen?&lt;br /&gt;
 A: Doch, kann man sehen: Der Lötpunkt von Pin1 ist immer rechteckig, die&lt;br /&gt;
    anderen sind oval. Das gilt übrigens für fast alle Bauteile, auch die Wannen.&lt;br /&gt;
&lt;br /&gt;
 Q: Ich möchte oben statt der abgebildeten zwei 2x8-poligen Stiftleisten 16-polige&lt;br /&gt;
    Wannenstecker nehmen. Wie herum kommen dann die oberen Wannen drauf?&lt;br /&gt;
 A: Mit der Kerbe nach unten, sieht man auch am rechteckigen Lötpunkt - und&lt;br /&gt;
    auch auf dem Foto rechts.&lt;br /&gt;
&lt;br /&gt;
 Q: Kann ich auf die Batterie verzichten, weil ich DCF77 einsetze bzw. nach&lt;br /&gt;
    einem Stromausfall die Uhr per Fernbedienung selbst neu stellen möchte?&lt;br /&gt;
 A: Wenn man keine Batterie einsetzt, sollte man VBat der RTC DS1307 mit GND&lt;br /&gt;
    verbinden. Das geht am einfachsten an den auf der Platine vorgesehenen&lt;br /&gt;
    Batterieanschlüssen: einfach K1 (Bat+) und K3 (Bat-) mit einem Stück Draht&lt;br /&gt;
    überbrücken. Übrigens: die Batterie hält lt. Datenblatt des DS1307&lt;br /&gt;
    10 Jahre, es ist also durchaus sinnvoll, diese auch zu bestücken.&lt;br /&gt;
&lt;br /&gt;
 Q: Der Infrarot-Empfänger TSOP17XX ist abgekündigt. Gibt es dazu eine Alternative?&lt;br /&gt;
 A: Als Ersatz kann man den [http://www.reichelt.de/?ARTICLE=107210 TSOP31238] nehmen. Er ist pinkompatibel.&lt;br /&gt;
&lt;br /&gt;
 Q: Kann ich (aus Kostengründen) auch einfarbige LEDs verwenden?&lt;br /&gt;
 A: Ja, einfach zwei der drei RGB-PWM-Kanäle nicht anschließen und nur PWMR (für Rot) benutzen.&lt;br /&gt;
    Die 2 zu PWMG und PWMB gehörenden IRLUs und die angeschlossenen 4 Widerstände am Gate der IRLUs&lt;br /&gt;
    kann man dann auch weglassen.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Beginner-Tipp&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Testmodul-Schaltplatine.JPG|miniatur]]&lt;br /&gt;
&lt;br /&gt;
Beim Zusammenbau der Word Clock gibt es eine Reihe von Fehlerquellen (Programmierung, Aufbau der Steuerplatine, Lötfehler auf den LED-Streifen, Verkabelung etc.). Für die Fehlersuche aber auch für das erste Erfolgserlebnis nach dem Zusammenbau der Schaltplatine kann man sich relativ einfach mit Hilfe von Vorwiderständen und Standard-LEDs eine &amp;quot;Test-Umgebung&amp;quot; aufbauen. Die ausgedruckte Tabelle mit der Zuordnung der Ausgänge/LEDs zu den entsprechenden Wörtern erleichtert die Interpretation. Achtung: auf die richtige &amp;quot;Default&amp;quot;-Sprachvariante achten. Wenn die LEDs dann wie erwartet leuchten = erstes Erfolgserlebnis. &lt;br /&gt;
&lt;br /&gt;
Eine BestückungsInfo für die Version V1.1 gibt es als PDF Download: &#039;&#039;&#039;[[Media:WordClockSteuerplatineV1.1Bestueckung.pdf]]&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Anschluss der LEDs =&lt;br /&gt;
&lt;br /&gt;
=== Zuordnung der Kanäle ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wannen.png|400px|Anschlüsse der Wannenstecker]]&lt;br /&gt;
&lt;br /&gt;
Folgende Tabelle enthält die Zuordnung der Wörter zu den Pins der Wannenstecker.&lt;br /&gt;
Die Bezeichnungen der Pins entsprechen dem Schaltplan. Zu beachten ist, dass die Reihenfolge der Wörter nichts mit der Anordnung auf der Frontplatte zu tun hat.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; id=&amp;quot;pinbelegungen&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Zuordnung Pins&#039;&#039;&#039;&lt;br /&gt;
|-                    &lt;br /&gt;
! Anschluss || Pin || [[#Deutsch (2-sprachig) |Frontplatte deutsch 2-sprachig]]  || [[#Deutsch (3-sprachig) |Frontplatte deutsch 3-sprachig]]  || [[#Englisch|Frontplatte Englisch]]&lt;br /&gt;
|-                                                         &lt;br /&gt;
|  OUT0 || K7-08 || ES IST               ||  ZW                         || IT IS&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT1 || K7-07 || FÜNF  (Minuten)      ||  EI                         || FIVE   (Minuten) &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT2 || K7-06 || ZEHN  (Minuten)      ||  N                          || TEN    (Minuten) &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT3 || K7-05 || VOR   (Minuten)      ||  S                          || QUARTER &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT4 || K7-04 || DREI  (Minuten)      ||  IEBEN                      || TWENTY (Minuten) &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT5 || K7-03 || VIERTEL              ||  DREI                       || HALF &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT6 || K7-02 || NACH                 ||  VIER                       || TO &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT7 || K7-01 || VOR                  ||  FÜNF                       || PAST &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT8 || K7-16 || HALB                 ||  SECHS                      || ONE &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT9 || K7-15 || S                    ||  ACHT                       || TWO &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT10 || K7-14 || EIN                 ||  NEUN                       || THREE &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT11 || K7-13 || ZWEI                ||  ZEHN                       || FOUR &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT12 || K7-12 || DREI                ||  ELF                        || FIVE &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT13 || K7-11 || VIER                ||  ZWÖLF                      || SIX &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT14 || K7-10 || FÜNF                ||  ES IST                     || SEVEN &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT15 || K7-09 || SECHS               ||  UHR                        || EIGHT &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT16 || K8-08 || SIEBEN              ||  FÜNF (Minuten)             || NINE &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT17 || K8-07 || ACHT                ||  ZEHN (Minuten)             || TEN &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT18 || K8-06 || NEUN                ||  ZWANZIG (Minuten)      || ELEVEN &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT19 || K8-05 || ZEHN                ||  DREI (Minuten)             || TWELVE &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT20 || K8-04 || ELF                 ||  VIERTEL (Minuten)          || O CLOCK  &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT21 || K8-03 || ZWÖLF               ||  NACH                       || unverbunden&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT22 || K8-02 || UHR                 ||  VOR                        || unverbunden&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUT23 || K8-01 || unverbunden         ||  HALB                       || unverbunden&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUTL1 || K8-09 || min1                ||  min1                       || min1&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUTL2 || K8-10 || min2                ||  min2                       || min2&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUTL3 || K8-11 || min3                ||  min3                       || min3&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUTL4 || K8-12 || min4                ||  min4                       || min4&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUTG1 || K8-13 || Ambilight (opt.)           ||  Ambilight (opt.)                  || Ambilight (opt.)           &lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUTG2 || K8-14 || unverbunden         ||  unverbunden                || unverbunden&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUTG3 || K8-15 || unverbunden         ||  unverbunden                || unverbunden&lt;br /&gt;
|-                                                        &lt;br /&gt;
|  OUTG4 || K8-16 || dcf Empfang         ||  dcf Empfang                || dcf Empfang             &lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Beschaltungsvarianten der LEDs ===&lt;br /&gt;
&lt;br /&gt;
Da die Schaltung genügend Power hat, um eine Unmenge an RGB-LEDs zu treiben, gibt es folgende Möglichkeiten, die auch mixbar sind:&lt;br /&gt;
&lt;br /&gt;
1. Pro Wort für jeden Buchstaben eine RGB-LED (mit gemeinsamer Anode) in&lt;br /&gt;
Parallelschaltung (natürlich mit geeignetem Vorwiderstand pro LED)&lt;br /&gt;
&lt;br /&gt;
Prinzip (am Beispiel des Wortes &amp;quot;VIER&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
         /---|&amp;gt;|----| R1R |---- PWMR&lt;br /&gt;
      +--|---|&amp;gt;|----| R1G |---- PWMG     &amp;quot;V&amp;quot;&lt;br /&gt;
      |  \---|&amp;gt;|----| R1B |---- PWMB&lt;br /&gt;
      |&lt;br /&gt;
      |  /---|&amp;gt;|----| R2R |---- PWMR&lt;br /&gt;
      +--|---|&amp;gt;|----| R2G |---- PWMG     &amp;quot;I&amp;quot;&lt;br /&gt;
      |  \---|&amp;gt;|----| R2B |---- PWMB&lt;br /&gt;
 OUTx-+&lt;br /&gt;
      |  /---|&amp;gt;|----| R3R |---- PWMR&lt;br /&gt;
      +--|---|&amp;gt;|----| R3G |---- PWMG     &amp;quot;E&amp;quot;&lt;br /&gt;
      |  \---|&amp;gt;|----| R3B |---- PWMB&lt;br /&gt;
      |&lt;br /&gt;
      |  /---|&amp;gt;|----| R4R |---- PWMR&lt;br /&gt;
      +--|---|&amp;gt;|----| R4G |---- PWMG     &amp;quot;R&amp;quot;&lt;br /&gt;
         \---|&amp;gt;|----| R4B |---- PWMB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Pro Wort für jeden Buchstaben eine RGB-LED in Reihenschaltung (mit&lt;br /&gt;
nur 1 Vorwiderstand für die ganze Reihe, bzw. 3 wegen RGB). Das geht&lt;br /&gt;
aber nur, wenn die RGB-LEDs unabhängige Anoden und Kathoden haben (ja,&lt;br /&gt;
die gibt es).&lt;br /&gt;
&lt;br /&gt;
Prinzip:&lt;br /&gt;
                         &amp;quot;V&amp;quot;    &amp;quot;I&amp;quot;    &amp;quot;E&amp;quot;    &amp;quot;R&amp;quot;&lt;br /&gt;
         /----| R1R |----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|---- PWMR&lt;br /&gt;
 OUTx --+-----| R1G |----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|---- PWMG&lt;br /&gt;
         \----| R1B |----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|---- PWMB&lt;br /&gt;
&lt;br /&gt;
Theoretisch könnte man solche Streifen als Platine herstellen, welche man dann immer auf die gewünschte Länge kürzt, als 1, 2, 3 ... 7 Buchstaben.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung von einfarbigen LEDs vereinfachen sich die Prinzip-Schaltungen wie folgt:&lt;br /&gt;
&lt;br /&gt;
1. Parallelschaltung, eine LED pro Buchstabe im Wort:&lt;br /&gt;
&lt;br /&gt;
       /----|&amp;gt;|----| R1 |---- PWMR     &amp;quot;V&amp;quot;&lt;br /&gt;
      +-----|&amp;gt;|----| R2 |---- PWMR     &amp;quot;I&amp;quot;&lt;br /&gt;
 OUTx-+&lt;br /&gt;
      +-----|&amp;gt;|----| R3 |---- PWMR     &amp;quot;E&amp;quot;&lt;br /&gt;
       \----|&amp;gt;|----| R4 |---- PWMR     &amp;quot;R&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Reihenschaltung, eine LED pro Buchstabe im Wort:&lt;br /&gt;
&lt;br /&gt;
                    &amp;quot;V&amp;quot;    &amp;quot;I&amp;quot;    &amp;quot;E&amp;quot;    &amp;quot;R&amp;quot;&lt;br /&gt;
 OUTx ----| R1 |----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|---- PWMR&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Berechnen der Vorwiderstände kann z.&amp;amp;nbsp;B. dieser Rechner&lt;br /&gt;
verwendet werden: &#039;&#039;&#039;[http://www.elektronik-kompendium.de/sites/bau/1109111.htm Vorwiderstands-Rechner]&#039;&#039;&#039; oder &#039;&#039;&#039;[http://www.modding-faq.de/index.php?artid=506 Vorwiderstands-Rechner mit Unterstützung für Reihenschaltung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit die LEDs selbst nicht sichtbar sind, benötigt man hinter den transparenten Buchstaben einen Diffusor. Im einfachsten Fall kann das eine weiße Schicht Farbe sein.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Beginner-Tipp&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
In der Sammelbestellung wurden die Vorwiderstände für die Reihenschaltung berechnet. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== LEDs &amp;amp; Platinen ===&lt;br /&gt;
==== Single-LED-Platine ====&lt;br /&gt;
Ende 2013 wurde eine neue Platine für die LEDs entworfen. Diese reduziert die notwendigen Löt- und Verdrahtungsarbeiten auf ein minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| Top Seite des Single Boards: || Bottom Seite des Single Boards:&lt;br /&gt;
|-&lt;br /&gt;
| [[Datei:Single_Board_v4_TOP.jpg|350px|Singel LED Platine - LED Seite]]&lt;br /&gt;
 || [[Datei:Single_Board_v4_BOTTOM.jpg|350px|Singel LED Platine - Widerstand Seite]]&lt;br /&gt;
|}&lt;br /&gt;
Das Board ist wie folgt konzipiert:&lt;br /&gt;
* von der TOP Seite betrachtet, befinden sich rechts die 4 Platinen für die Minuten-LEDs&lt;br /&gt;
* von der TOP Seite betrachtet, befindet sich oben rechts eine kleine Zusatzplatine, welche zur Stabilisierung des Pollin DCF Empfängers konstruiert wurde - DANKE an Thomas K.! &amp;lt;br&amp;gt;Anbei der Schaltplan und der Bestückungsplan:&amp;lt;br&amp;gt;[[Datei:Single_Board_v4_DCF77-Schaltplan.png|200px]] [[Datei:Single-Board-v4-DCF-Bestueckung.JPG|300px]]&amp;lt;br&amp;gt;IC1 und C3 sind auf der Rückseite zu bestücken.&lt;br /&gt;
&amp;lt;br&amp;gt;Die notwendigen Bauteile sind als [http://www.reichelt.de/?ACTION=20;AWKID=885799;PROVID=2084 Warenkorb bei Reichelt] hinterlegt.&lt;br /&gt;
* es besteht die Möglichkeit 2 zusätzliche PLCC-6 LEDs zu bestücken (D1 und D2 - links und rechts von SECHS) um so bis zu 6 Status-Anzeigen nach vorne zu führen (derzeit nicht in der SW gesondert verwendet). So kann zB die DCF77 Empfangsanzeige nach vorne ausgeführt werden. In der aktuellen Version sind diese wie folgt vorverdrahtet:&lt;br /&gt;
** D1 ROT -&amp;gt; Out G4 (DCF Empfangskontrolle)&lt;br /&gt;
** D1 GRÜN -&amp;gt; n/a - ausgeführt als Pin zur Verbindungsseite&lt;br /&gt;
** D1 BLAU -&amp;gt; n/a - ausgeführt als Pin zur Verbindungsseite&lt;br /&gt;
** D2 ROT -&amp;gt; Out G1 (Ambilight)&lt;br /&gt;
** D2 GRÜN -&amp;gt; Out G2 - derzeit nicht in der SW verwendet&lt;br /&gt;
** D2 BLAU -&amp;gt; Out G3 - derzeit nicht in der SW verwendet&lt;br /&gt;
* möchte man zB nur die DCF77 Empfangskontrolle haben, so reicht es den ROT-Kanal von D1 mit einer PLCC-2 LED und den dazu gehörigen Widerstand zu bestücken&lt;br /&gt;
* TSOP mit Stabilisierungskondensator und LDR werden direkt auf dem Single Board bestückt&lt;br /&gt;
* das Single Board wird wie folgt mit der Hauptplatine verbunden:&lt;br /&gt;
** 2 16polige Flachbandkabeln für K7 und K8&lt;br /&gt;
** 4 Adern für PWMR / PMWG / PMWB / GND&lt;br /&gt;
** 2 Drähten für den LDR&lt;br /&gt;
** 3 Drähte für den TSOP&lt;br /&gt;
* die Verbindungen zu den Minuten- / Ambilightplatinen erfolgt über die Kontakte an den jeweiligen Ecken / Seiten&lt;br /&gt;
* für die weiter Verwendung sind die Minutenanschlüsse M1-M4 an der zentralen Verbinderseite ausgeführt&lt;br /&gt;
* für die weiter Verwendung sind die OUT G1-G4 an der zentralen Verbinderseite ausgeführt&lt;br /&gt;
* auf der BOTTOM Seite ist Platz für eine PLCC-2 LED als DCF77 Empfangskontroll LED vorgesehen&lt;br /&gt;
&lt;br /&gt;
Die für die DCF77 Empfangskontrolle, D1 und D2 benötigten Bauteile sind &#039;&#039;&#039;nicht Bestandteil&#039;&#039;&#039; eines angebotenen Paketes.&lt;br /&gt;
&lt;br /&gt;
Die Minuten-LEDs werden an den Ecken der Platine über kleine Drahtbrücken angeschlossen: (Bild ist noch vom Prototyp)&lt;br /&gt;
[[Datei:WordClock_Singel_LED_PCB_Minuten.jpg|400px|Anschluß Minuten LED]]&lt;br /&gt;
&lt;br /&gt;
Die Verbindung zwischen der LED-Platine und der Hauptplatine erfolgt mittels kurzem Flachbandkabel.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:WordClock_Singel_LED_PCB_Anschluß.jpg|400px|Anschluß an die Hauptplatine]]&lt;br /&gt;
&lt;br /&gt;
Auf dem Prototyp waren die Buchsen für K7 und K8 verdreht. Daher mussten die Flachbandkabel beim verbinden verdreht werden. Dieses wird in der finalen Version korrigiert. Es erfolgt dann ein Austausch des Bildes.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bitte beachtet, dass für das SingleBoard zusätzliche Bauteile benötigt werden. Diese sind in einem eigenen Warenkorb bei Reichelt hinterlegt.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Diese sind in einem eigenen &#039;&#039;&#039;[http://www.reichelt.de/?ACTION=20;AWKID=847662;PROVID=2084 WARENKORB]&#039;&#039;&#039; bei Reichelt hinterlegt.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Bauteile für das DCF77 Stabilisierungsboard sind ebenfalls in einem eigenen &#039;&#039;&#039;[http://www.reichelt.de/?ACTION=20;AWKID=885799;PROVID=2084 WARENKROB]&#039;&#039;&#039; bei Reichelt hinterlegt.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Streifenplatinen ====&lt;br /&gt;
Die Platine hat ein Maß von 314 x 12 mm und ist auf die Word-Clock-Front-Varianten A und B (also 450mm x 450mm) ausgelegt.&lt;br /&gt;
&lt;br /&gt;
Der Abstand der einzelnen LEDs beträgt 28.1mm&lt;br /&gt;
&lt;br /&gt;
Die Streifenplatine wird so ausschauen: (Version 8 vom 06.März 2010)&lt;br /&gt;
&lt;br /&gt;
[[Datei:LED_Streifen_V6_1.png|750px|Streifenplatine für SMD RGB LEDs Version 8]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:LED_Streifen_V6_1_bestueckt.jpg|750px|Erster Streifen bestückt]]&lt;br /&gt;
&lt;br /&gt;
Erste Streifenplatine bestückt.&amp;lt;br&amp;gt;&lt;br /&gt;
Weitere Beispiel-Photos der bestückten Streifenplatinen sind [http://www.mikrocontroller.net/topic/156661#1780198 hier] zu finden.&lt;br /&gt;
&lt;br /&gt;
Ausschnitt vergrößert dargestellt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:LED_Streifen_V6_1_schnitt.png|500px|Aussschnitt]]&lt;br /&gt;
&lt;br /&gt;
Datenblatt der LED mit Bestückungsinfos: [[Datei:SMD RGB PLCC-6 datasheet3.pdf]]&lt;br /&gt;
&lt;br /&gt;
Hier ist die Bestückung aller Streifen schematisch detailliert gezeigt: &amp;lt;br&amp;gt; [http://www.mikrocontroller.net/topic/156661?goto=1671369#1671369 Beitrag] &amp;lt;br&amp;gt;&lt;br /&gt;
Bestückungstabelle: [[Datei:2012WordClockLEDMatrix.pdf]] &amp;lt;br&amp;gt;&lt;br /&gt;
Bestückungsgrafik: [[Datei:2012WordClockLEDMatrix_wiring_v22.pdf]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Technische Daten der SMD RGB PLCC-6 LEDs ====&lt;br /&gt;
Spezifikation&lt;br /&gt;
* Source Material: InGaN&lt;br /&gt;
* Emitting Colour: SMD SMT 5050 RGB&lt;br /&gt;
* LENS Type: Water clear&lt;br /&gt;
* Reverse Voltage: 5.0 V&lt;br /&gt;
* Viewing Angle: 140 degree&lt;br /&gt;
* Lead Soldering Temp: 260°C for 5 seconds&lt;br /&gt;
&lt;br /&gt;
Absolute Maximum Rating (Ta = 250C)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PARAMETER || Symbol || RED || GREEN || BLUE || UNITS&lt;br /&gt;
|-&lt;br /&gt;
| Power Dissipation || PO || align=&amp;quot;right&amp;quot; | 80 || align=&amp;quot;right&amp;quot; | 95 || align=&amp;quot;right&amp;quot; | 85 || mW&lt;br /&gt;
|-&lt;br /&gt;
| DC Current || IF || align=&amp;quot;right&amp;quot; | 20 || align=&amp;quot;right&amp;quot; | 20 || align=&amp;quot;right&amp;quot; | 20 || mA&lt;br /&gt;
|-&lt;br /&gt;
| Peak Forward Current || IFP || align=&amp;quot;right&amp;quot; | 100 || align=&amp;quot;right&amp;quot; | 100 || align=&amp;quot;right&amp;quot; | 100 || mA&lt;br /&gt;
|-&lt;br /&gt;
| Reverse Voltage || VR || align=&amp;quot;right&amp;quot; | 5 || align=&amp;quot;right&amp;quot; | 5 || align=&amp;quot;right&amp;quot; | 5 || V&lt;br /&gt;
|-&lt;br /&gt;
| Operating Temperature || Topr || colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | -25 to +85 || °C&lt;br /&gt;
|-&lt;br /&gt;
| Storage Temperature || Tstg ||  colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | -40 to +85 || °C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Electro-optical Characteristics (Ta = 250C)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PARAMETER || SYMBOL || CONDITIONS || MIN. || TYP. || MAX. || UNIT&lt;br /&gt;
|-&lt;br /&gt;
| Forward Voltage (B) || VF || IF = 20mA || align=&amp;quot;right&amp;quot; | 3.4 || align=&amp;quot;right&amp;quot; | 3.6 || align=&amp;quot;right&amp;quot; | 3.8 || V&lt;br /&gt;
|-&lt;br /&gt;
| Forward Voltage (G) || VF || IF = 20mA || align=&amp;quot;right&amp;quot; | 3.4 || align=&amp;quot;right&amp;quot; | 3.6 || align=&amp;quot;right&amp;quot; | 3.8 || V&lt;br /&gt;
|-&lt;br /&gt;
| Forward Voltage (R) || VF || IF = 20mA || align=&amp;quot;right&amp;quot; | 1.9 || align=&amp;quot;right&amp;quot; | 2.1 || align=&amp;quot;right&amp;quot; | 2.5 || V&lt;br /&gt;
|-&lt;br /&gt;
| Dominant Wavelength (B) || lD || IF = 20mA || align=&amp;quot;right&amp;quot; | 465 || align=&amp;quot;right&amp;quot; | 470 || align=&amp;quot;right&amp;quot; | 475 || nm&lt;br /&gt;
|-&lt;br /&gt;
| Dominant Wavelength (G) || lD || IF = 20mA || align=&amp;quot;right&amp;quot; | 515 || align=&amp;quot;right&amp;quot; | 520 || align=&amp;quot;right&amp;quot; | 525 || nm&lt;br /&gt;
|-&lt;br /&gt;
| Dominant Wavelength (R) || lD || IF = 20mA || align=&amp;quot;right&amp;quot; | 625 || align=&amp;quot;right&amp;quot; | 630 || align=&amp;quot;right&amp;quot; | 635 || nm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pin / Farbzuordnung:&lt;br /&gt;
* R: Pin 1 - 6&lt;br /&gt;
* G: Pin 2 - 5&lt;br /&gt;
* B: Pin 3 - 4&lt;br /&gt;
&lt;br /&gt;
[[Datei:plcc6_smd_RGB.JPG]]&lt;br /&gt;
----&lt;br /&gt;
==== Widerstandswerte für die LED Streifen ====&lt;br /&gt;
&lt;br /&gt;
Berechnet sind die Widerstände für eine Spannungsversorgung von 15V - abzgl. 1,4V durch den Spannungsabfall an den UDN2981. Ein solches Netzteil gibt es zB bei [http://www.pollin.de/shop/dt/MjU5OTQ2OTk-/Stromversorgung/Netzgeraete/Regelbare_Netzgeraete/EcoFriendly_Universal_Schaltnetzteil_MW_3H36GS.html Pollin] oder auch bei [http://www.reichelt.de/?ACTION=3;ARTICLE=89789;PROVID=2402 Reichelt]. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Beginner-Tipp&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Bitte lest zum Stichwort &amp;quot;Netzteil&amp;quot; im Forum nach. Es gibt hierzu einige Bemerkungen und Empfehlungen. So z. B. auch der Hinweis auf ein weiteres Netzteil von C*: [http://www.conrad.de/ce/de/product/512696/HN-POWER-HNP18-150-STECKER-NETZT-18W Netzteil_15V_1.2A]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | |||| colspan=&amp;quot;3&amp;quot; | ....Widerstände E12.... |||| colspan=&amp;quot;3&amp;quot; | ....Widerstände E24.... ||&lt;br /&gt;
|- &lt;br /&gt;
! Streifen  || Wort  || LEDs |||| style=&amp;quot;color:red;&amp;quot; | Rot || style=&amp;quot;color:green;&amp;quot; | Grün || style=&amp;quot;color:blue;&amp;quot; | Blau |||| style=&amp;quot;color:red;&amp;quot; | Rot || style=&amp;quot;color:green;&amp;quot; | Grün || style=&amp;quot;color:blue;&amp;quot; | Blau || Anschluss&lt;br /&gt;
|- &lt;br /&gt;
| 1 ||  ES ||  2 ||||  560 ||  470 ||  470 ||||  510 ||  360 ||  360 || OUT14&lt;br /&gt;
|- &lt;br /&gt;
| {{H16}} | 1 || {{H16}} | K ||  ||||  ||  ||  ||||  ||  ||  ||&lt;br /&gt;
|- &lt;br /&gt;
| 1 || IST || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT14&lt;br /&gt;
|- &lt;br /&gt;
| {{H16}} | 1 || {{H16}} | L ||  ||||  ||  ||  ||||  ||  ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || FÜNF || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT16&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 2 || ZEHN || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT17&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 2 || ZWAN || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT18&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 2 || ZIG || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT18&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DREI || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT19&lt;br /&gt;
|-&lt;br /&gt;
| 3 || VIER || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT20&lt;br /&gt;
|-&lt;br /&gt;
| 3 || TEL || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT20&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| {{H16}} | 4 || {{H16}} | TG ||  ||||  ||  ||  ||||  ||  ||  ||&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 4 || NACH || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT21&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 4 || VOR || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT22&lt;br /&gt;
|- {{H12}}&lt;br /&gt;
| {{H16}} | 4 || {{H16}} | JM ||  ||||  ||  ||  ||||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 5 || HALB || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT23&lt;br /&gt;
|- &lt;br /&gt;
| {{H16}} | 5 || {{H16}} | Q ||  ||||  ||  ||  ||||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || ZWÖ || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT13&lt;br /&gt;
|-&lt;br /&gt;
| 5 || LF || 2 |||| 560 || 470 || 470 |||| 510 || 360 || 360 || OUT13&lt;br /&gt;
|- &lt;br /&gt;
| {{H16}} | 5 || {{H16}} | P ||  ||||  ||  ||  ||||  ||  ||  ||&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 6 || ZW || 2 |||| 560 || 470 || 470 |||| 510 || 360 || 360 || OUT0&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 6 || EI || 2 |||| 560 || 470 || 470 |||| 510 || 360 || 360 || OUT1&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 6 || N || 1 |||| 680 || 560 || 560 |||| 620 || 560 || 560 || OUT2&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 6 || S || 1 |||| 680 || 560 || 560 |||| 620 || 560 || 560 || OUT3&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 6 || IEB || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT4&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 6 || EN || 2 |||| 560 || 470 || 470 |||| 510 || 360 || 360 || OUT4&lt;br /&gt;
|- &lt;br /&gt;
| {{H16}} | 7 || {{H16}} | K ||  ||||  ||  ||  ||||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 7 || DREI || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT5&lt;br /&gt;
|- &lt;br /&gt;
| {{H16}} | 7 || {{H16}} | RH ||  ||||  ||  ||  ||||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || FÜNF || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT7&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 8 || ELF || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT12&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 8 || NEUN || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT10&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 8 || VIER || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT6&lt;br /&gt;
|- &lt;br /&gt;
| {{H16}} | 9 || {{H16}} | W ||  ||||  ||  ||  ||||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 9 || ACHT || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT9&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ZEHN || 4 |||| 330 || 33 || 33 |||| 300 || 27 || 33 || OUT11&lt;br /&gt;
|- &lt;br /&gt;
| {{H16}} | 9 || {{H16}} | RS ||  ||||  ||  ||  ||||  ||  ||  ||  &lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| {{H16}} | 10 || {{H16}} | B ||  ||||  ||  ||  ||||  ||  ||  ||  &lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 10 || SEC || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT8&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 10 || HS || 2 |||| 560 || 470 || 470 |||| 510 || 360 || 360 || OUT8&lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| {{H16}} | 10 || {{H16}} | FM ||  ||||  ||  ||  ||||  ||  ||  ||  &lt;br /&gt;
|-{{H12}}&lt;br /&gt;
| 10 || UHR || 3 |||| 470 || 220 || 220 |||| 390 || 200 || 200 || OUT15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Es werden somit folgende Widerstände aus der E24 Reihe benötigt:&lt;br /&gt;
&lt;br /&gt;
* 13x 27Ω&lt;br /&gt;
* 13x 33Ω&lt;br /&gt;
* 18x 200Ω&lt;br /&gt;
* 13x 300Ω&lt;br /&gt;
* 12x 360Ω&lt;br /&gt;
* 9x 390Ω&lt;br /&gt;
* 6x 510Ω&lt;br /&gt;
* 4x 560Ω&lt;br /&gt;
* 2x 620Ω&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== Ambilight-/LED-Streifenplatine bestücken ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Beginner-Tipps&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Die Beschreibung zum Thema Ambilight ist im Forum etwas unübersichtlich. &lt;br /&gt;
&lt;br /&gt;
Sehr hilfreich zum Verständnis sind die Bilder von [http://www.mikrocontroller.net/topic/156661#1780198 Matthias]. Wichtig zum Verständnis ist auch der Hinweis auf die Drahtbrücken auf der Platinenunterseite vor der ersten LED eines Wortes. Es hat mir sehr geholfen, das Platinen-Layout-Schema und das Foto übereinander zu montieren.&lt;br /&gt;
&lt;br /&gt;
[[Datei:LED-Platine.jpg|miniatur]]&lt;br /&gt;
&lt;br /&gt;
Anhand der [http://www.mikrocontroller.net/articles/Word_Clock_Variante_1#Widerstandswerte_f.C3.BCr_die_LED_Streifen Tabelle] kann man erkennen, dass die Widerstände im Ambilight-Paket (300 Ohm = rot, 27 Ohm = grün, 33 Ohm = blau) für 2 x 4 LEDs in Serie ausgelegt sind. &lt;br /&gt;
&lt;br /&gt;
Man kann also 2 x 4 LEDs hinter einander löten oder die Variante von Christian aufgreifen der die LEDs physikalisch in 2er Gruppen angeordnet hat. Durch Drahtbrücken werden diese 2er Gruppen aber dann elektrisch zu zwei 4er Gruppen: LED-LED-Bügel-LED-LED-frei-LED-LED-Bügel-LED-LED, so dass auch für diese Version die Widerstände passen.&lt;br /&gt;
&lt;br /&gt;
Update Jan 2014: ich habe für die Amiblight-Platinen nach dem Muster LED-LED-Bügel-LED-LED-frei-LED-LED-Bügel-LED-LED diese Schemazeichnung mit Lötpunkten und ganz kurzen Drahtbrücken angefertigt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Ambilight-wiring-2x2x2x2-Leds-KHK.png|miniatur]]&lt;br /&gt;
&lt;br /&gt;
Persönlicher Kommentar KHK: &lt;br /&gt;
Ich habe inzwischen die zweite Wordclock fertig gestellt. Beim ersten Mal habe ich die LED-Streifenplatinen/Ambilight-Streifen ohne sie zu trennen bestückt. Das war schön übersichtlich und einfach zu löten. Das Trennen der fertig gelöteten Streifen war aber sehr schwierig. Bei der zweiten Wordclock habe ich die LED-Streifen vor der Bestückung mit einer Hebelschere getrennt. Das ging super einfach und hat mir viel Mühe gespart. Fazit: Trennt bitte die LED-Streifen vor der Bestückung ab! Ihr spart Euch viel Mühe und Stress.&lt;br /&gt;
&lt;br /&gt;
Beginner-Tipp: Das Ambilight wird mit OUTG2 angesteuert (Steuerplatine Version 1.1).&lt;br /&gt;
&lt;br /&gt;
==== LED-Streifen: Logik ====&lt;br /&gt;
&lt;br /&gt;
* Das Signal für die R/G/B PWM wird für jede Streifenplatine seitlich zugeführt (&amp;quot;R/G/B-Ausgangssignal&amp;quot;). Wichtig: nicht alle Platinen hintereinanderschalten, sondern die einzelnen Streifen parallel schalten (sonst werden die Leiterbahnen der ersten Platinen immer mit dem vollen Strom belastet). &lt;br /&gt;
&lt;br /&gt;
* Das &amp;quot;R/G/B-Ausgangssignal&amp;quot; wird vor jedem Wort auf den Vorwiderstand geführt. Dazu ist es notwendig das &amp;quot;R/G/B-Ausgangssignal&amp;quot; von den gemeinsamen Leiterbahnen (R,G,B) mit Draht- (R und G) bzw. einer Lötbrücke (B) auf die Vorwiderstände zu legen. &lt;br /&gt;
&lt;br /&gt;
* Innerhalb eines Wortes werden die vier Signale (PWM R/G/B + COM) über Lötbrücken von einem Buchstaben zum anderen weitergeführt. &lt;br /&gt;
&lt;br /&gt;
* Am Ende eines Wortes werden die Ausgänge 1, 2 und 3 der LED mit Lötbrücken zusammengeführt und gehen auf COM. &lt;br /&gt;
&lt;br /&gt;
* Eine Besonderheit ergibt sich bei &amp;quot;Leerzeichen&amp;quot; - wie z. B. beim Ambilight oder bei &amp;quot;Es(leer)ist&amp;quot;: &lt;br /&gt;
** Die COM Leitung wird durch zwei Lötbrücken links und rechts des zu überbrückenden Segments weitergeleitet. &lt;br /&gt;
** Das &amp;quot;R/G/B-Ausgangssignal&amp;quot; für den ersten Buchstaben nach dem &amp;quot;Leerzeichen&amp;quot; wird wieder mit den Draht-/Lötbrücken zugeführt, die auch vor Wörtern verwenden werden.&lt;br /&gt;
&lt;br /&gt;
Für jedes Wort wird (irgendwo) COM vom den Ausgängen OUTx zugeleitet.&lt;br /&gt;
&lt;br /&gt;
==== LED-Streifen: Zusammenfassung Löten ====&lt;br /&gt;
&lt;br /&gt;
* Widerstände sind immer am Anfang eines Wortes. Individuelle Werte für R/G/B je nach Länge des Wortes.&lt;br /&gt;
* Lötzinnbrücken sind&lt;br /&gt;
** am Anfang eines Wortes bei B&lt;br /&gt;
** am Anfang einer Streifenplatine bei B (hier sind keine Drahtbrücken nötig)&lt;br /&gt;
** am Ende eines Wortes von LED1/LED2/LED3 auf COM&lt;br /&gt;
** in der Mitte eines Wortes vor allen LED (außer der Ersten) zum Ersatz des Vorwiderstandes&lt;br /&gt;
** Zusätzlich zum Überbrücken von &amp;quot;Leerstellen&amp;quot; nur bei COM vor und nach dem Segment (da, wo zwischen zwei Zeichen sonst alle 4 Lötbrücken gesetzt werden)&lt;br /&gt;
* Drahtbrücken an der Platinenunterseite gibt es:&lt;br /&gt;
** vor einem neuen Wort zu R und G&lt;br /&gt;
** nach einer &amp;quot;Leerstelle&amp;quot; zu R und G (= identisch zu 1)&lt;br /&gt;
* Für jedes Wort wird (irgendwo) COM vom den Ausgängen OUTx zugeleitet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== Sammelbestellung LED-Platinen ===&lt;br /&gt;
Es werden folgende 3 Pakete angeboten:&lt;br /&gt;
* Paket 1 (Uhr) - 66,20Eur : 1 Single-LED-Platine, 100 RGB-PLCC6-LEDs und 155 SMD-Widerstände&lt;br /&gt;
* Paket 2 (Ambilight) - 17,00Eur : 4 Streifenplatinen, 32 RGB-PLCC6-LEDs und 45 SMD-Widerstände&lt;br /&gt;
* Paket 3 (Uhr - alte Version) - 52,20Eur : 11 Streifenplatinen, 100 RGB-PLCC6-LEDs und 155 SMD-Widerstände&lt;br /&gt;
&lt;br /&gt;
Für das neue SingleBoard (Paket 1) werden zusätzliche Bauteile benötigt. Diese sind in einem eigenen Reichelt Warenkorb zusammen gestellt:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt; http://www.reichelt.de/?ACTION=20;AWKID=847662;PROVID=2084&lt;br /&gt;
&lt;br /&gt;
Und folgende Einzelpositionen:&lt;br /&gt;
* RGB-PLCC6-LED einzeln - 0,35Eur&lt;br /&gt;
* Streifenplatine einzeln - 1,00Eur&lt;br /&gt;
* Single-LED-Platine einzeln - 25,00Eur&lt;br /&gt;
* Zwischenboden mit Ambilightausfräsung (MDF 19mm gefräst) - 37,50Eur&lt;br /&gt;
* Zwischenboden ohne Ambilightausfräsung (MDF 19mm gefräst) - 37,50Er&lt;br /&gt;
* programmierter ATMega168 - 3,55Eur&lt;br /&gt;
&lt;br /&gt;
Der Versand erfolgt bei nur LEDs / Widerständen / ATMega als MaxiBrief mit Einschreiben.&lt;br /&gt;
* innerhalb BRD (ohne Inseln) - 4,00Eur&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Versand mit Streifenplatinen erfolgt als kleines Paket:&lt;br /&gt;
* innerhalb BRD (ohne Inseln) - 5,20Eur&lt;br /&gt;
* Österreich und Schweiz - 9,00Eur&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Versand mit Zwischenboden (max 8 Böden pro Paket) oder Single-LED-Platine wird als Paket versendet:&amp;lt;br&amp;gt;&lt;br /&gt;
* innerhalb BRD (ohne Inseln) - 6,50Eur&amp;lt;br&amp;gt;&lt;br /&gt;
* Österreich - 16,00Eur&amp;lt;br&amp;gt;&lt;br /&gt;
* Schweiz - 27,50Eur&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es fallen jeweils nur die höheren Versandkosten an.&lt;br /&gt;
&lt;br /&gt;
Werden mehrere Pakete bestellt, können die tatsächlichen Versandkosten von den hier gezeigten Versandkosten abweichen. Diese ist dann von der bestellten Menge und dem Gewicht abhängig.&lt;br /&gt;
&lt;br /&gt;
Bei Interesse bitte per PN melden (Benutzer [http://www.mikrocontroller.net/user/show/wawibu wawibu])&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zeitplanung&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Datum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Aktion&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;bis 16.August 2014&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Sammeln der Bestellungen&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;18.August 2014&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Bestellung geht raus&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;~12.September 2014&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Anlieferung bei mir&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ab 19.September 2014&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Versand&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Alternative können die Pakete 1, 2 und 3 auch ohne Widerstände bei mir bestellt werden. Es werden dann folgende Warenkörbe benötigt:&lt;br /&gt;
&lt;br /&gt;
Widerstands-Warenkörbe bei Reichelt:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;pro WordClock&#039;&#039;&#039;: https://secure.reichelt.de/?;ACTION=20;LA=5010;AWKID=292199;PROVID=2084&lt;br /&gt;
&amp;lt;br&amp;gt;&#039;&#039;&#039;zusätzlich fürs Ambilight&#039;&#039;&#039;: https://secure.reichelt.de/?;ACTION=20;LA=5010;AWKID=292202;PROVID=2084&lt;br /&gt;
&amp;lt;br&amp;gt;&#039;&#039;&#039;LEDs&#039;&#039;&#039; gibt es zB bei LED-Tech: http://www.led-tech.de/de/Leuchtdioden/SMD-LEDs/PLCC6-Superbright-RGB-SMD--5.0x5.0mm--LT-1178_1_2.html&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Die LEDs von LED-Tech haben in der Zwischenzeit eine andere PinBelegung und sind somit nicht 1:1 nutzbar. Der R und B Kanal sind dort anders als bei den LEDs aus der Sammelbestellung. Werden die LEDs von LED-Tech verwendet, muss darauf geachtet werden, das diese beiden Kanäle vertauscht sind!&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Anschluss eines DCF77-Moduls ==&lt;br /&gt;
&lt;br /&gt;
Der Anschluss eines DCF77-Moduls ist optional. Wird ein DCF77-Modul angeschlossen, kann mittels einer LED der DCF77-Empfang angezeigt werden. Die LED blinkt dann im Sekundenrhytmus und zeigt direkt die empfangenen DCF77-Impulse. Der Empfang wird kurze Zeit nach dem Einschalten aktiviert bzw. jede Stunde wiederholt. &lt;br /&gt;
&lt;br /&gt;
Die DCF77-LED kann folgendermaßen angeschlossen werden:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Bei Anschluss des DCF77-Moduls von Reichelt ist folgendes zu beachten:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Es sollte direkt auf den Lötaugen des Reichelt-DCF77-Moduls ein Abblock-Kondensator von 100nF zwischen den Pins +UB und GND aufgelötet werden&lt;br /&gt;
&lt;br /&gt;
*Der Eingang PON muss offen bleiben - entgegen den (falschen) Angaben im Reichelt Datenblatt!&lt;br /&gt;
&lt;br /&gt;
*Das DCF77-Modul von Reichelt braucht eine Synchronisierungszeit von mindestens 10 Sekunden. Erst dann arbeitet der Empfänger.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Beim Anschluss des Conrad-Moduls ArtNr. 641138 ist folgendes zu beachten:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Es muss der nicht-invertierte Open-Collector-Ausgang Pin 3 als Signal an die WordClock angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Ein Max232 der zur Kontrolle angeschlossen ist, kann den DCF Empfang stören. Ohne Max232 verbessert sich der Empfang deutlich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Da einige berichtet haben, dass der DCF-Empfang bei den Reichelt-Modulen oftmals gestört ist, hier ein Tipp von Carsten Wille, wie man den Empfang durch Hinzufügen weniger Bauteile wesentlich verbessern kann:&#039;&#039;&#039; [http://www.mikrocontroller.net/topic/156661?goto=1929382#1929382 Beitrag: Brauche Hilfe beim Bau einer Uhr]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
== Module ==&lt;br /&gt;
=== DCF77 ===&lt;br /&gt;
&lt;br /&gt;
Zur Programmierung siehe den Artikel [[DCF77-Funkwecker mit AVR]]. Im Abschnitt &#039;&#039;Programmierung&#039;&#039; ist das Funksignal dokumentiert, zusammen mit einem Beispiel (Bitstrom und Bedeutung).&lt;br /&gt;
&lt;br /&gt;
Codebeispiel siehe &#039;&#039;[http://www.mikrocontroller.net/topic/25071 Codesammlung DCF 77]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Torsten Giese ([http://www.mikrocontroller.net/user/show/wawibu wawibu])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Automatische Helligkeitsregelung ===&lt;br /&gt;
&lt;br /&gt;
Die Helligkeit des Displays wird über einen LDR (z.B. LDR 07 von Reichelt) gesteuert.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Rene H. ([http://www.mikrocontroller.net/user/show/promeus promeus])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Uhrzeit ===&lt;br /&gt;
&lt;br /&gt;
Die Zeit wird von einer batteriegepufferten Maxim DS1307 Echtzeituhr (RTC), die  über [[I2C]] mit dem Microcontroller verbunden ist, zur Verfügung gestellt. Die Batterie soll bis zu 10 Jahre halten und wird direkt auf die Platine gelötet.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== IR ===&lt;br /&gt;
&lt;br /&gt;
Es werden folgende Infrarot-Protokolle unterstützt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Protokoll || Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| SIRCS || Sony&lt;br /&gt;
|-&lt;br /&gt;
| 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;
| SAMSUNG || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| SAMSUNG32 || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| MATSUSHITA || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| 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;
| RECS80 || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| RECS80EXT || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| RC5 || Philips und andere europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| DENON || Denon&lt;br /&gt;
|-&lt;br /&gt;
| RC6 || Philips und andere europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| APPLE || Apple&lt;br /&gt;
|-&lt;br /&gt;
| NUBERT || Nubert, z.B. Subwoofer System&lt;br /&gt;
|-&lt;br /&gt;
| B&amp;amp;O || Bang &amp;amp; Olufsen (erst ab Version 1.0)&lt;br /&gt;
|-&lt;br /&gt;
| GRUNDIG || Grundig (erst ab Version 1.0)&lt;br /&gt;
|-&lt;br /&gt;
| NOKIA || Nokia, z.B. D-Box (erst ab Version 1.0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Über die automatische Erkennung des Protokolls werden die nötigen Tastatur-Befehl-Bits aus den Infrarot-Daten extrahiert - ohne Kenntnis, welche Tasten da eigentlich tatsächlich gedrückt wurden. So eine Tabelle würde den Speicher des µCs sprengen. Deshalb passiert die Zuordnung der Tasten zu WordClock-Befehlen in einer kleinen Anlernprozedur, die einmal nach dem ersten Bootvorgang ausgeführt werden muss.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile gibt es einen eigenen Artikel zum Infrarot-Fernbedienungsdecoder, siehe [http://www.mikrocontroller.net/articles/IRMP IRMP]&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
&lt;br /&gt;
Eine passende Fernbedienung gibt es bei &#039;&#039; [http://www.dealextreme.com/p/24-key-wireless-infrared-ir-remote-controller-for-rgb-led-light-bulb-1-cr2025-47019 DX] &#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/wikifiles/0/0e/Sku_47019_1.jpg &lt;br /&gt;
&lt;br /&gt;
Passend beschriftet werden kann die Fernbedienung mit folgenden Labels. Es gibt 2 Versionen der Scheckkartenfernbedienungen. Die erste passt für die DX Fernbedienung, diese ist etwas schmaler und länger. Einfach auf eine selbstklebende Folie drucken, ausschneiden und aufkleben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:WordClock_RC_Layout_DX.png|200px]]&lt;br /&gt;
[[Datei:WordClock_RC_Layout.png|200px]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== PWM ===&lt;br /&gt;
&lt;br /&gt;
Die PWM steuert die 3 RGB Kanäle. Damit ist freie Farbenwahl möglich.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Display ===&lt;br /&gt;
&lt;br /&gt;
Das Display wird nicht als 10x11 Matrix sondern wortweise angesteuert. Da die LEDs RGB-LEDs sind ergibt sich daraus für die 24 Wortteile und die 4 Minutenpunkte eine 28x3-Matrix.&lt;br /&gt;
&lt;br /&gt;
Die Farben sind kein Muss, in der Minimalbeschaltung können auch einfarbige LEDs zum Einsatz kommen.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Vlad Tepesch ([http://www.mikrocontroller.net/user/show/vlad_tepesch vlad_tepesch])&lt;br /&gt;
&lt;br /&gt;
==== Struktur ====&lt;br /&gt;
&lt;br /&gt;
Die display.h ist quasi die Basisklasse.&lt;br /&gt;
Dort ist definiert, welche Schnitsstellen eine Uhr anbieten muss.&lt;br /&gt;
Einige front-unabhängige Sachen sind hier bereits implementiert.&lt;br /&gt;
&lt;br /&gt;
Von ihr abgeleitet ist die display_tix und die display_wc,&lt;br /&gt;
wo entweder der gesamte Rest implementiert ist (TIX) oder wo weitere Ableitungen existieren (WC).&lt;br /&gt;
&lt;br /&gt;
Die display_wc implementiert die Teile die alle WC-Varianten gemeinsam haben.&lt;br /&gt;
Von ihr sind quasi die verschiedenen WC-Frontplatten abgeleitet.&lt;br /&gt;
&lt;br /&gt;
Die display_wc_xxx implentieren die Eigenheiten der speziellen Version, was neben ein paar Defines nur das Mapping Zeit → Ausgabemuster (display_getTimeState) ist und das Handling der Modus-Taste ist.&lt;br /&gt;
&lt;br /&gt;
==== Hinzufügen eigener WC-Frontplattenlayouts ====&lt;br /&gt;
&lt;br /&gt;
Prinzipiell sind folgende Schritte notwendig:&lt;br /&gt;
&lt;br /&gt;
# Kopieren und Umbenennen einer display_wc_xxx-Datei, die der eigenen Konfiguration am nächsten kommt (englisch, wenn nur eine Sprache, oder ger3 bei mehreren)&lt;br /&gt;
# in main.h define hinzufügen&lt;br /&gt;
# in display_wc.h oben das kopierte include unter Bedingung des gerade definiertne Defines hinzufügen&lt;br /&gt;
# anpassen des neuen headers&lt;br /&gt;
## Enumeration anpassen, Namen sind egal aber DWP_min1 - DWP_min4 müssen existieren. Auch sollten sie die Werte 24 - 28 haben. &amp;lt;br&amp;gt; Bei kleineren werden sonst die übrigen Shift-Register-ausgängen mit geschalten. &amp;lt;br&amp;gt; Höhere machen keinen Sinn, weil das heißen würde, das mehr Wörter als SR-Kanäle da sind.&lt;br /&gt;
## display_getMinuteMask und display_getHoursMask so anpassen, das alle Minuten, bzw Stundenkanäle gesetzt werden &amp;lt;br&amp;gt;&lt;br /&gt;
## display_getTimeSetIndicatorMask gibt die Bitmaske zurück, die bei Zeiteingabe 0 Minuten visualisieren soll (da sonst nix blinkt)&lt;br /&gt;
## display_getNumberDispalyState muss eine übergebene Zahl in ein Bild umwandeln, dass die übergebene Zahl erahnen lassen kann.&lt;br /&gt;
## Modus-Taste - am einfachsten nur Einträge in e_WcGerModes anpassen. Die Schaltung kann behalten werden. Man beachte, dass es doppelt so viele Modi gibt, wie in der Enumeration, da jeweils das Es_ist abgeschalten werden kann. Ist das nicht gewünscht, muss das Define DISPLAY_DEACTIVATABLE_ITIS auf 0 gestellt.&lt;br /&gt;
# anpassen der mapping-funktion Zeit → Ausgabemuster (display_getTimeState)&lt;br /&gt;
## komplett im Code oder mit look-Up-Tables&lt;br /&gt;
## Es sollte natürlich der aktuell ausgewählte Modus (g_displayParams-&amp;gt;mode) berücksichtigt werden&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Benutzer-Interaktion ===&lt;br /&gt;
&lt;br /&gt;
Mit der Fernbedienung ist folgendes möglich:&lt;br /&gt;
&lt;br /&gt;
* Einmaliges Anlernen der Fernbedienung&lt;br /&gt;
* Anpassen der automatischen Helligkeitssteuerung&lt;br /&gt;
* Einstellen des Farbprogramms (Übergänge etc)&lt;br /&gt;
* Stellen der Uhr (wenn kein DCF77-Modul angeschlossen)&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Vlad Tepesch ([http://www.mikrocontroller.net/user/show/vlad_tepesch vlad_tepesch])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
=== SW V0.13 ===&lt;br /&gt;
[[Datei:Wordclock-0.13.zip]] (Bugfixes beachten)&lt;br /&gt;
&lt;br /&gt;
Änderungen&lt;br /&gt;
* gefixt BUG012_031 (Fehler in der Logik des Ambilight bei der automatischen Deaktivierung)&lt;br /&gt;
* PCB Version 2.0 hinzugefügt&lt;br /&gt;
* verbessertes Fading durch 4kHz-PWM&lt;br /&gt;
* verbesserter Demo-Modus (Umschaltung zwischen altem Modus und Aktivierung aller Segmente)&lt;br /&gt;
* flexiblere Implementierung display_wc_ger3&lt;br /&gt;
* Narren-Modus&lt;br /&gt;
* aktualisiertes Handbuch&lt;br /&gt;
&lt;br /&gt;
==== Bugfixes ====&lt;br /&gt;
* V0.13 Patch 1 ([[Media:V0.13_Patch_1_display_wc_ger3.c|display_wc_ger3.c]]) &lt;br /&gt;
** fixt falsche Zeitanzeige von HH:20 Uhr&lt;br /&gt;
** fügt ein paar Zeitanzeigevarianten hinzu, aus denen der Narren-Modus auswählt&lt;br /&gt;
** Hexfiles:&lt;br /&gt;
*** dreisprachige Front: [[Datei:wordclock_V0.13_Patch_1_ger3_mega168.hex]]&lt;br /&gt;
* V0.13a src ([[Datei:WC_Release_0.13a_src.zip]])&lt;br /&gt;
** enthält nur Sourcen&lt;br /&gt;
** fixt: Patch 1 war nicht übersetzbar, wegen veralteter base.h&lt;br /&gt;
** Änderungen für Übersetzbarkeit mit MS-Compiler&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== ältere Versionen ===&lt;br /&gt;
&lt;br /&gt;
Hier gibt es noch ältere Software Stände:&lt;br /&gt;
==== SW V0.12 ====&lt;br /&gt;
[[Datei:Wordclock-0.12.zip]]&lt;br /&gt;
&lt;br /&gt;
Bitte README.txt lesen!&lt;br /&gt;
&lt;br /&gt;
Änderungen&lt;br /&gt;
* Schwaben-Modus (ossi + 20 vor/nach)&lt;br /&gt;
* Auto-Aus-Animation konfigurierbar mit Vorschau&lt;br /&gt;
* Deaktivierbares &amp;quot;IT IS&amp;quot; für englische Front&lt;br /&gt;
* Demo modus kann über Demo-Modus-Taste wieder verlassen werden&lt;br /&gt;
* PWM modus für bessere Darstellung dunklerer Farben geändert (siehe BUG011_027)&lt;br /&gt;
* PWM Stufen für linearere Erscheinung geändert &lt;br /&gt;
* optisches Feedback bei &amp;quot;Helligkeit übernehmen&amp;quot; hinzugefügt (kurzzeitige Displayabschaltung)&lt;br /&gt;
* gefixt BUG011_025 (Absturz bei Helligkeitskalibrierung)&lt;br /&gt;
* gefixt BUG011_026 (Ambilight wird beim automatischen Ausschalten nicht (in jedem Fall) mit ausgeschaltet) &lt;br /&gt;
* gefixt BUG011_027 (Niedrige Farbqualität bei niedrigen Helligkeiten)&lt;br /&gt;
* gefixt BUG011_028 Fehler bei Zeitüberblendung - Auto-off-Animation ist nun unabhängig von Zeitüberblendung&lt;br /&gt;
* verbessert BUG011_29 Flackern be Zeitüberblendung reduziert (immer noch nicht perfekt!)&lt;br /&gt;
* gefixt BUG011_030 (SW Absturz wenn &amp;quot;falsche&amp;quot; Taste im Aus-Zustand gedrückt wurde (Statemachine wird nun immer geupdated))&lt;br /&gt;
* aktualisiertes Handbuch&lt;br /&gt;
**    --&amp;gt; neue Features&lt;br /&gt;
**    --&amp;gt; &amp;quot;2.1 Übersicht der möglichen Kommandos&amp;quot; enthält nun Platz für Benutzer zum Eintragen seiner Tastennamen&lt;br /&gt;
&lt;br /&gt;
==== SW V0.11 ====&lt;br /&gt;
[[Datei:Wordclock-0.11.zip]]&lt;br /&gt;
&lt;br /&gt;
Bitte README.txt lesen!&lt;br /&gt;
&lt;br /&gt;
Ergänzung:&lt;br /&gt;
im Verzeichnis &amp;quot;art&amp;quot; fehlte ein PDF, ohne das das Handbuch nicht gebaut werden kann.&lt;br /&gt;
[[Datei:regiomap.pdf]]&lt;br /&gt;
&lt;br /&gt;
Noch ein paar Tips zum Handbuch:&amp;lt;br&amp;gt;&lt;br /&gt;
Latex muss 3x ausgeführt werden, damit alles in dem Ausgabedokument stimmt.&lt;br /&gt;
Am besten TeXnicCenter benutzen und das beiliegende Projectfile (*.tcp) benutzen.&lt;br /&gt;
Dann ein Ausgabeprofil anlegen (ein vorhandenes kopieren), in dem man eine der bat-Dateien als LaTeX-Compiler angibt.&amp;lt;br&amp;gt;&lt;br /&gt;
Vorteil ist dann, dass man mittels der Buttons schneller durch die Ausgabe navigieren und zu Fehlermeldungen und Warnungen springen kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Änderungen:&lt;br /&gt;
* gefixt BUG08_002 (Helligkeitskontrolle funktioniert nicht)&lt;br /&gt;
* Kalibrierung der automaticshen Helligkeitsanpassung&lt;br /&gt;
**  --&amp;gt; neues IR-Kommando&lt;br /&gt;
**  --&amp;gt; neuer Eeprom-Parameter&lt;br /&gt;
**  --&amp;gt; neue Loggingoption&lt;br /&gt;
* an Code-Konfig anpassendes latex-basiertes Handbuch (siehe readme)&lt;br /&gt;
* IOs per IR ein/abschaltbar&lt;br /&gt;
**  --&amp;gt; neue IR-Kommandos&lt;br /&gt;
**  --&amp;gt; neue Eeprom-Parameter&lt;br /&gt;
* gefixt BUG09_022 (Automatische Abschaltung) geänderte Logik (-&amp;gt; Handbuch)&lt;br /&gt;
* Autosave optional (user.h USER_AUTOSAVE)&lt;br /&gt;
* Eeprom-parameter-Sicherung bei An/Aus IR-cmd&lt;br /&gt;
* Signalisierung im Auto-Aus-Zustand&lt;br /&gt;
* gefixt BUG010_023 (schnelle Modus-Umschaltung verhindert Fading)&lt;br /&gt;
* Schrittweite der Auschaltzeiten als define&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== SW V0.10 ====&lt;br /&gt;
[[Datei:Wordclock-0.10.zip]]&lt;br /&gt;
&lt;br /&gt;
Bitte README.txt lesen!&lt;br /&gt;
&lt;br /&gt;
Änderungen:&lt;br /&gt;
* abschaltbares &amp;quot;ES IST&amp;quot; via Sprach-Wahl-Taste für beide deutsche Front Designs &lt;br /&gt;
** (übernommen von wichtel - aber Reihenfolge geändert -&amp;gt; Handbuch)&lt;br /&gt;
* Bootloader Support:&lt;br /&gt;
**Wenn &#039;R&#039; über die UART empfangen wird, wird ein Watchdog-Reset ausgelöst.&lt;br /&gt;
**Der Watchdog wird direkt nach Systemstart deaktiviert.&lt;br /&gt;
* Indikator für Zeiteingabe definiert -&amp;gt; blinkendes &#039;Uhr&#039;, wenn keine Minutenwörter aktiv&lt;br /&gt;
* Helligkeit für Nachtstunden bei Zeiteingabe reduziert.&lt;br /&gt;
* Sicherung des Hauptmodus (Einfarb-, Farbwechsel- und Pulse-Modus) und des aktiven Farbprofils im EEPROM&lt;br /&gt;
* BAUD_ERROR Makro aktualisiert&lt;br /&gt;
* atmega88 Konfiguration entfernt&lt;br /&gt;
* DCF77 geändert, zwei erfolgreich empfangene Frames vor Zeitübernahme notwendig&lt;br /&gt;
* IRMP-Version 1.7.2:&lt;br /&gt;
** Bugfix: Timeout vor NEC repetition frames um &amp;quot;Geister-Kommandos&amp;quot; zu vermeiden&lt;br /&gt;
** einige weniger wichtige Protokolle hinzugefügt&lt;br /&gt;
* gefixt BUG09_018 (Zeitupdate während Zeiteingabe beinträchtigt Anzeige)&lt;br /&gt;
* gefixt BUG09_019 (gemeldet von Wichtel) (&amp;quot;Gesiter-Kommandos&amp;quot; siehe neue IRMP-Version)&lt;br /&gt;
* gefixt BUG09_020 (gemeldet von Roman) DCF-Initialisierung &amp;lt;=6 anstatt &amp;lt;=7&lt;br /&gt;
* gefixt BUG09_021 (Ambilight in SW an OUTG2 anstatt OUTG1)&lt;br /&gt;
* gefixt Fehler der in Mono-Color-Variante: zurückschalten in Normal-Mode forciert kein Display-Update&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Einstellungen können in der Main.h geändert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== SW V0.9 ====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-09.zip]]&lt;br /&gt;
&lt;br /&gt;
Bitte README.txt lesen!&lt;br /&gt;
&lt;br /&gt;
zusätzliche Features:&lt;br /&gt;
* Unterstützung für neue (3 sprachige) deutsche Front&lt;br /&gt;
* Unterstützung für TIX-Clock&lt;br /&gt;
* kurze Anzeige von Submodi (Farbprofilauswahl, Sprachvariante)&lt;br /&gt;
* Helligkeits-Offset wird abgespeichert&lt;br /&gt;
* 24h Zeiteingabe (8-20Uhr: hell, 20-8Uhr: dunkel)&lt;br /&gt;
* Standardeeprom-Werte im Flash&lt;br /&gt;
* Ein/Aus-Schalt-Zeiten&lt;br /&gt;
* Pulsierender Modus&lt;br /&gt;
* neue IRMP-Version&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Einstellungen können in der Main.h geändert werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Anmerkung: die vorkompilierten Hexfiles enthalten die 3-sprachig-deutsche Version. Wer noch eine alte Frontplatte hat, muss das Binary nach Ändern der Konfiguration (in der main.h) selbst kompilieren.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Bugfixes =====&lt;br /&gt;
Zum Anwenden der .patch-Files gibt es das patch-Tool, das mit dem AVR-GCC kommt und von der Kommandozeile aus erreichbar ist. Manual-Page zu patch: [http://linux.die.net/man/1/patch hier].&lt;br /&gt;
* V0.9 Patch 1 ([[Media:BUG09_008_hourbug_display_wc_ger3.c.patch|Patchfile]])&lt;br /&gt;
** fixt BUG09_008 (falsche Zeitanzeige)&lt;br /&gt;
** Hexfiles:&lt;br /&gt;
*** dreisprachige Front: [[Datei:wordclock_V0.9_Patch_1_ger3_mega168.hex]]&lt;br /&gt;
*** alte zweisprachige Front: [[Datei:wordclock_V0.9_Patch_1_ger_mega168.hex]]&lt;br /&gt;
* V0.9 Patch 2 ([[Media:BUG09_010_hourbug_display_wc_ger3.c.patch|Patchfile]] - basierend auf vorherigen patches)&lt;br /&gt;
** fixt BUG09_010 (EIN &amp;lt;-&amp;gt; EINS)&lt;br /&gt;
** Hexfiles (enthalten vorherige Patches)&lt;br /&gt;
*** dreisprachige Front: [[Datei:wordclock_V0.9_Patch_2_ger3_mega168.hex]]&lt;br /&gt;
*** alte zweisprachige Front: [[Datei:wordclock_V0.9_Patch_2_ger_mega168.hex]]&lt;br /&gt;
* V0.9 Patch 3 ([[Media:V0.9_patch3.patch|Patchfile]] - basierend auf vorherigen patches)&lt;br /&gt;
** fixed BUG09_009 (crashes after IR-Kommands) &lt;br /&gt;
** fixed BUG09_011 (training bug)&lt;br /&gt;
** fixed BUG09_012 (casing on include usermodes.c)&lt;br /&gt;
** fixed BUG09_013 (1:00 - 1:04  and 1:05-1:09  &#039;s&#039;)&lt;br /&gt;
** fixed BUG09_014 (brightness control does not work after setting time)&lt;br /&gt;
** fixed wrong command handler in display_x-header&lt;br /&gt;
** fixed default values for color profiles&lt;br /&gt;
** extracted inits of states from user_init to own routine in usermodes.c&lt;br /&gt;
** Hexfiles:&lt;br /&gt;
*** dreisprachige Front: [[Datei:wordclock_V0.9_Patch_3_ger3_mega168.hex]]&lt;br /&gt;
*** alte zweisprachige Front: [[Datei:wordclock_V0.9_Patch_3_ger_mega168.hex]]&lt;br /&gt;
* V0.9 Patch 4 ([[Media:BUG09_015_BUG09_016.patch|Patchfile]] - basierend auf vorherigen patches, [[Media:wcFirmware_v0.9_patch4.zip|komplette Sourcen]])&lt;br /&gt;
** fixed BUG09_015 (after enter OnOff-Time no further action is possible)&lt;br /&gt;
** fixed BUG09_016 (last Ir-Command is ignored in training)&lt;br /&gt;
** Hexfiles (enthalten vorherige Patches)&lt;br /&gt;
*** dreisprachige Front: [[Datei:wordclock_V0.9_Patch_4_ger3_mega168.hex]]&lt;br /&gt;
*** alte zweisprachige Front: [[Datei:wordclock_V0.9_Patch_4_ger_mega168.hex]]&lt;br /&gt;
* V0.9 Patch 5 ([[Media:DCF77_BUG09_017.patch|Patchfile]] - basierend auf vorherige Patches)&lt;br /&gt;
** fixed BUG09_017 (set second to 0, when new DCF77 time will take over - prevent a minute jump)&lt;br /&gt;
&lt;br /&gt;
==== V0.8 ====&lt;br /&gt;
[[Datei:Wordclock-08-src.zip]]&lt;br /&gt;
Bitte 00README.txt lesen!&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Bugs ===&lt;br /&gt;
;[bestätigt] &lt;br /&gt;
: der Bug konnte von den Entwicklern reproduziert werden&lt;br /&gt;
;[gefixt] &lt;br /&gt;
: der Bug wurde bereits gefixt, der Fix ist aber in noch keinem Release enthalten.&lt;br /&gt;
;&amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;[gefixt - Vx.y] &amp;lt;/span&amp;gt; &lt;br /&gt;
: der Bug wurde in Version x.y gefixt&lt;br /&gt;
;&amp;lt;span style=&amp;quot;color:#8f8f8f;&amp;quot;&amp;gt;&amp;lt;s&amp;gt;[widerlegt]&amp;lt;/s&amp;gt;&amp;lt;/span&amp;gt; &lt;br /&gt;
: der Bug konnte nicht bestätigt werden, oder es wurde eine andere Ursache gefunden&lt;br /&gt;
&lt;br /&gt;
==== Version 0.8 ====&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG08_001 - [bestätigt] [gefixt - V0.9]&lt;br /&gt;
** Helligkeitssteuerung per FB funktioniert nicht richtig&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG08_002 - [bestätigt]&lt;br /&gt;
** Helligkeitssteuerung per LDR funktioniert nicht richtig&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;[Ergänzt 22.5.10 von Wichtel] In pwm.c wird pwm_idx innerhalb pwm_set_brightness_step() falsch normiert:  [gefixt - V0.10]&lt;br /&gt;
*** pwm_idx % MAX_PWM_STEPS; ersetzen durch:&lt;br /&gt;
*** else if (pwm_idx &amp;gt;= MAX_PWM_STEPS ) pwm_idx = MAX_PWM_STEPS - 1;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG08_003 - [bestätigt] [gefixt - V0.9]&lt;br /&gt;
** OUT23 wird immer mit OUTL1 geschalten&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG08_004 - [bestätigt] [gefixt - V0.9]&lt;br /&gt;
** Helligkeitssteuerung: geänderter Wert wird nicht gespeichert&lt;br /&gt;
** nach Power-ON-Reset immer 100%&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#8f8f8f;&amp;quot;&amp;gt;&amp;lt;s&amp;gt;BUG08_005&amp;lt;/s&amp;gt; [widerlegt] (Fehler lag woanders)&lt;br /&gt;
** die Kommandos der FB gehen nach einem Power-ON-Reset manchmal verloren&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#8f8f8f;&amp;quot;&amp;gt;&amp;lt;s&amp;gt;BUG08_006 (reportet von panik)&amp;lt;/s&amp;gt; [widerlegt] (Fehler lag woanders)&lt;br /&gt;
** Die Uhr zeigt nach mehr als 10 Stunden Betrieb für wenige Minuten ein falsches Word mit halber Helligkeit (auf und abschwellend) an.&lt;br /&gt;
** Anzeige korrekt: FÜNF NACH DREI (Ossi-Modus ist permanent aktiv)&lt;br /&gt;
** jetzt beginnt zusätzlich das Word VIERTEL zu leuchten (halber Helligkeit auf und abschwellend)&lt;br /&gt;
** Nach wenigen Minuten ist wieder alles normal.&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#8f8f8f;&amp;quot;&amp;gt;&amp;lt;s&amp;gt;BUG08_007&amp;lt;/s&amp;gt; [widerlegt] (Fehler lag woanders)&lt;br /&gt;
** nach mehr als 12 Stunden Betrieb oft zusätzliche Anzeige der Wörter VIERTEL und NACH (jetzt mit voller Helligkeit bis zum nächsten Bildwechsel)&lt;br /&gt;
** z.B 20:15 Uhr --&amp;gt; Anzeige: ES IST VIERTEL NACH NEUN (Ossimodus aktiv)&lt;br /&gt;
** 20:05 Uhr --&amp;gt; Anzeige: ES IST FÜNF VIERTEL NACH ACHT(Ossimodus aktiv)&lt;br /&gt;
** 09:35 Uhr --&amp;gt; Anzeige: ES IST FÜNF VIERTEL NACH HALB ZEHN(Ossimodus aktiv)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Version 0.9 ====&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_008 - [bestätigt] [gefixt V0.9 Patch 1]&lt;br /&gt;
** in der 3-sprachigen deutschen Frontplatte wird die Stunde wird in allen Sprachmodi 5min zu spät hochgezählt&amp;lt;/span&amp;gt; &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;Der Fehler liegt in display_wc_ger3.c Zeile 127: das &amp;gt; muss durch ein &amp;gt;= ersetzt werden ([[Media:BUG09_008_hourbug_display_wc_ger3.c.patch|Patchfile]])&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_009 - [bestätigt] [gefixt V0.9 Patch 3]&lt;br /&gt;
** nach Systemstart (nach Ende des Blinken) führt Betätigung des Einfarbmodus-Knopfes (-&amp;gt; Farbprofilwahl) zum Absturz&lt;br /&gt;
** Workaround: zuerst in anderen Modus wechseln (zB. Demo)&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_010 - [bestätigt] [gefixt V0.9 Patch 2] &lt;br /&gt;
** Anzeige von EIN oder EINS vertauscht (&#039;eins&#039; wird angezeigt, wenn &#039;ein&#039; dastehen; vice versa) bei 3 sprachiger Front&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_011 - [bestätigt] [gefixt V0.9 Patch 3]&lt;br /&gt;
** IR-Training - bei falsch erkannten Kommandos (falsche Adresse) wird trotzdem hochgezählt.&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_012 - [bestätigt] [gefixt V0.9 Patch 3]&lt;br /&gt;
**Der Compiler meint: user.c:164:23: error: userModes.c: No such file or directory - Sollte das nicht usermodes.c heißen?&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_013 (gemeldet von Wichtel) - [bestätigt] [gefixt V0.9 Patch 3]&lt;br /&gt;
** Anzeige von EIN und EINS im Bereich von 0-4 und 5-9 min vertauscht, Zeile 153 in display_wc_ger3.c (mit Patch 2) muss lauten:&lt;br /&gt;
** if((hour==1 || hour==13) &amp;amp;&amp;amp; minutes==0){  // if &amp;quot;Es ist ein Uhr&amp;quot; &amp;lt;- remove &#039;s&#039; from &amp;quot;eins&amp;quot;&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_014 (gemeldet von Wichtel) - [bestätigt] [gefixt V0.9 Patch 3]&lt;br /&gt;
** Nach manueller Uhrzeiteinstellung keine Übernahme der manuell eingestellten Helligkeit, nach einmal Pulsmodus ein/aus wird sie wieder übernommen&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_015 (gemeldet von Wichtel) - [bestätigt] [gefixt V0.9 Patch 4]&lt;br /&gt;
**Nach einstellen von Ein/Ausschaltzeit keine Helligkeitssteuerung (Anmerkung von Vlad: --&amp;gt;BUG09_014), keine Modusumschaltung mehr möglich und keine Einblendung des Farbprofilnamens mehr&amp;lt;/span&amp;gt; &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_016 (gemeldet von Wichtel) - [bestätigt] [gefixt V0.9 Patch 4]&lt;br /&gt;
** Trainingsmodus erreicht letztes Kommando nicht, da curkey vor Schlussabfrage incrementiert wird.&lt;br /&gt;
** durch BUG09_011-fix entstanden&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_017 (gemeldet von Wichtel) - [bestätigt] [gefixt V0.9 Patch 5]&lt;br /&gt;
** Uhr geht bis zu einer Minute vor, da die Sekunden durch DCF77-Empfang nicht beeinflusst werden, zur Abhilfe in dcf77.c als Zeile 379 einfügen: (die derzeitige Zeile 379 wird entsprechend nach unten geschoben)&lt;br /&gt;
**  DateTime_p-&amp;gt;ss  = 0;&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_018 (gemeldet von Wichtel) - [bestätigt] [gefixt V0.10]&lt;br /&gt;
** Bei manueller Zeiteinstellung und abwarten des realen Minutenwechsels kehrt die Anzeige zur Uhrzeit zurück ohne den Einstellmodus zu beenden&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_019 (gemeldet von Wichtel) - [bestätigt] [gefixt V0.10]&lt;br /&gt;
** Zuletzt erfolgreich erkanntes Fernbedienkommando wird sporadisch mehrere Minuten nach dem letzten tatsächlichen Empfang erneut erkannt&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_020 (gemeldet von Roman) - [bestätigt] [gefixt V0.10]&lt;br /&gt;
** Fehler in der Initialisierung der DCF77 Struct. Zeile 106 muss wie folgt lauten:&lt;br /&gt;
**   for (i=0; i &amp;lt; 6; i++)&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_021 - [bestätigt] [gefixt V0.10]&lt;br /&gt;
** Ambilight ist in SW an OUTG2, anstatt OUTG1&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG09_022 (gemeldet von Wichtel) - [bestätigt] [gefixt V0.13]&lt;br /&gt;
** Nach manuellem Einschalten während Ausschaltzeit oder man. Ausschalten während Einschaltzeitdauer sind die Ein/ausschaltzeiten wirkungslos&lt;br /&gt;
** Nach erneutem manuellem Eingriff entsprechend programmiertem Zustand wirken sie wieder&lt;br /&gt;
** --&amp;gt; Plan: http://www.mikrocontroller.net/topic/156661?page=15#1795536&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Version 0.10 ====&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG010_023 (gemeldet von kingpin) [bestätigt] [gefixt]&lt;br /&gt;
** Schnelles schalten der Anzeigemodi, verhindert Fading (Uhrzeit, Farbe, Pulsen)&lt;br /&gt;
** Workaround: Modus wechseln/neu anwählen&lt;br /&gt;
** --&amp;gt; http://www.mikrocontroller.net/topic/goto_post/1840552&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG010_024 (gemeldet von matsch) [gefixt V0.13]&lt;br /&gt;
** bei Verwendung eines Farbprofils (bei mir Orange) ändert sich die Farbe kurz bei Uhrzeitwechsel. Der Farbwechsel betrifft nur die sich ändernden Wörter.&lt;br /&gt;
** Kommentar zum Bug --&amp;gt; http://www.mikrocontroller.net/topic/goto_post/1883590&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Version 0.11 ====&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG011_025 (gemeldet von Edimahler) [gefixt V0.12]&lt;br /&gt;
** Druck auf Taste &amp;quot;Helligkeit übernehmen&amp;quot; führt (meistens) dazu, dass die Software hängen bleibt. Keine weiteren Zeitwechsel mehr, FB wird nicht mehr erkannt, nur die Farbe schaltet noch durch (Regenbogenmodus)&lt;br /&gt;
** Workaround: Taste nicht drücken -&amp;gt; Helligkeit automatisch übernehmen lassen (?), Netzstecker ziehen und wieder einstecken.&lt;br /&gt;
** http://www.mikrocontroller.net/topic/156661?goto=new#2322140&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG011_026 (gemeldet von Edimahler) [gefixt V0.12]&lt;br /&gt;
** Ambilight wird beim automatischen Ausschalten nicht (in jedem Fall) mit ausgeschaltet&lt;br /&gt;
** Workaround: Ambilight manuell ausschalten&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG011_027 (gemeldet von Edimahler) [gefixt V0.12]&lt;br /&gt;
** Bei sehr niedrigen Helligkeiten werden alle Farben gräulich-weiss dargestellt (bedingt durch die immer kleiner werdende Auflösung der PWM und den gewählten PWM-Modus, wo immer alle LEDs minimal aufleuchten (schon öfter im Forum besprochen))&lt;br /&gt;
** Durch den neuen INVERSED PWM Modus konnte das Problem behoben werden, die Grundfarben sind nun rein.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG011_028 (gemeldet von Vlad Tepesch) [gefixt V0.12]&lt;br /&gt;
** Bei höher gewählten fade times als 1 Sekunde, wurde die Animation nicht mehr richtig dargestellt&lt;br /&gt;
** Die Abhängigkeiten zwischen den beiden Parametern wurde durch Eiinfügen eines weiteren &amp;quot;defines&amp;quot; behoben&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;* BUG011_029 (gemeldet von Edimahler) [gefixt V0.13]&lt;br /&gt;
** Bei den Zeitwechseln flackert manchmal die neue Zeit zuerst kurz auf, bevor der saubere Übergang stattfindet&lt;br /&gt;
** in Version 0.12 verbessert, aber noch nicht restlos ausgemerzt!&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG011_030 (gemeldet von Edimahler) [gefixt V0.12]&lt;br /&gt;
** Beim Empfang eines korrekten, aber anderen IR-Protokolls als die Power-Taste, wurde bei ausgeschalter Uhr die Statemachine nicht mehr regelmässig geupdated, was zum kompletten Blockieren der Uhr führte.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Version 0.12 ====&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#006f00;&amp;quot;&amp;gt;BUG012_031 (gemeldet von ht81 und bernd_m) [gefixt V0.13]&lt;br /&gt;
** Fehler in der Logik des Ambilight bei der automatischen Deaktivierung&lt;br /&gt;
** https://www.mikrocontroller.net/topic/goto_post/2534972&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
==== Version 0.13 ====&lt;br /&gt;
&lt;br /&gt;
=== Flashen mittels Bootloader ===&lt;br /&gt;
==== Bootloader von Hagen Re &amp;quot;AVRootloader&amp;quot;====&lt;br /&gt;
Bevorzugt wird der Bootloader von Hagen Re.&lt;br /&gt;
→ [[AVR-Bootloader_mit_Verschl%C3%BCsselung_von_Hagen_Re]]&lt;br /&gt;
&lt;br /&gt;
Dieser Bootloader zeichnet sich durch einen großen Funktionsumfang, einfache Inbetriebnahme, sowie komfortable Benutzung aus.&lt;br /&gt;
&lt;br /&gt;
Hagen Re war so freundlich und hat das OK zur Integration in die WordClock-Auslieferung gegeben. Dies hat den Vorteil, dass der fertig konfigurierte Bootloader, sowie die Windows vorkonfigurierte Flash-Anwendung beiliegen und nicht extra geladen werden müssen. &lt;br /&gt;
&lt;br /&gt;
Vielen Dank an Hagen für diesen tollen Bootloader!&lt;br /&gt;
&lt;br /&gt;
Die vorkompilierten WordClock-Hexfiles sollten sowohl mit, als auch ohne Bootloader funktionstüchtig sein.&lt;br /&gt;
Das senden eines &#039;R&#039; per UART löst ein Reset (und damit ein Starten des Bootloaders) aus.&lt;br /&gt;
&lt;br /&gt;
Verwendung des Bootloaders:&lt;br /&gt;
* setzten der BOOTRST-Fuse am AtMega168&lt;br /&gt;
** Damit ergibt sich folgende Konfiguration der Fuses: lfuse: 0xE2 hfuse: 0xDC efuse: 0xFC&lt;br /&gt;
* flashen des AVRootloader-hexfile auf bisherigem Weg&lt;br /&gt;
* Starten der AVRootloader.exe&lt;br /&gt;
* Auswahl des Com-Ports&lt;br /&gt;
* Baudrate auf 9600&lt;br /&gt;
* Sign auf WCMB (WordClock Main Board)&lt;br /&gt;
* &amp;quot;Connect to device&amp;quot; -&amp;gt; Button wird zu &amp;quot;Disconnect&amp;quot;&lt;br /&gt;
* Auswahl des Hexfiles&lt;br /&gt;
* Klick auf &amp;quot;Program&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
Das Tool ist so konfiguiert, dass es von sich aus ein &#039;R&#039; schickt, &lt;br /&gt;
um die WordClock zu resetten und den Bootloader zu betreten.&lt;br /&gt;
&lt;br /&gt;
==== Bootloader von Peter Dannegger &amp;quot;FastBoot&amp;quot;====&lt;br /&gt;
Um den ATmega168 mit dem Fastboot von Peter Dannegger zu flashen, muss vorab das FastBoot.hex eingespielt werden. Ebenso muss dann die eFuse auf 0xFC eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Um dann später eine neue SW zu flashen, muss dann nur noch das neue Hexfile mittels FBOOT übertragen werden.&lt;br /&gt;
&lt;br /&gt;
Im angehängten ZIP ist der FBOOT von Peter Dannegger und das HEX-File für den ATmega168 einfügt. &#039;&#039;&#039;&amp;gt;&amp;gt; [[Datei:WordClock_FastBoot.zip‎]] &amp;lt;&amp;lt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ist diese einmal auf dem uC, kann jederzeit einfach über die serielle Schnittstelle (COM 1) mittels einem RS-232/TTL Pegelwandler die neue Firmware eingespielt werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039; FBOOT.exe und die neue Firmware müssen in einem Verzeichnis liegen. Dann kann mittels &#039;&#039;FBOOT /Pwordcl~1.hex&#039;&#039; geflasht werden. FBOOT kann nicht mit langen Dateinamen umgehen!&lt;br /&gt;
&lt;br /&gt;
Ein &#039;&#039;&#039;bootloader-client&#039;&#039;&#039; für &#039;&#039;&#039;Linux&#039;&#039;&#039; ist [https://trac.fs.ei.tum.de/elektronik/browser/ventilator/userspace/lboot hier] zu finden. Credits: Bernhard Michler ([http://www.mikrocontroller.net/user/show/Boregard Boregard]), Andreas Butti, [http://www.mikrocontroller.net/user/show/ad-rem ad-rem].&lt;br /&gt;
&lt;br /&gt;
==== Bootloader von chip45.com &amp;quot;chip45boot2&amp;quot; ====&lt;br /&gt;
Bei diesem Bootloader muss die eFuse auf 0xF8 eingestellt werden und zusätzlich in main.h die Option &amp;quot;BOOTLOADER_RESET_WDT&amp;quot; abgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
Vorkonfigurierte HEX-Files und PC-Software sind hier zu bekommen: http://www.chip45.com/info/chip45boot2.html&lt;br /&gt;
&lt;br /&gt;
==== Bootloader von Karol Babioch &amp;quot;wordboot&amp;quot; ====&lt;br /&gt;
[https://github.com/Wordclock/wordboot wordboot] ist ein dediziert für das [https://github.com/Wordclock/firmware Wordclock] Projekt entwickelter Bootloader. Dieser basiert auf [https://code.google.com/p/optiboot/ optiboot] und wurde für die verwendete Hardware angepasst. Der Bootloader wird direkt von [http://www.nongnu.org/avrdude/ avrdude] unterstützt, und ist somit unabhängig von der verwendeten Plattform einsetzbar. In seiner ursprünglichen Form ist er für den ATmega328P entwickelt worden, da der ATmega168 für die Erweiterungen von o.g. Firmware-Version nicht mehr ausreichend war. Zum [[Datei:Wordboot_6_0.zip|Download]] gibt es allerdings auch eine für den ATmega168 kompilierte Version (ungetestet!).&lt;br /&gt;
&lt;br /&gt;
===== Eigenschaften =====&lt;br /&gt;
&lt;br /&gt;
* Implementiert das [http://www.atmel.com/Images/doc2525.pdf STK500 Protokoll] und ist somit kompatibel mit [http://www.nongnu.org/avrdude/ avrdude].&lt;br /&gt;
* Neben dem Lesen und Schreiben des Flash-Speichers, ist auch das Auslesen bzw. Beschreiben des EEPROM möglich.&lt;br /&gt;
* Relativ klein: Der Bootloader nimmt nur 512 Wörter in Anspruch und lässt damit genug Platz für die eigentliche Anwendung.&lt;br /&gt;
* Als einziger Bootloader zeigt er den aktuellen Status über die Minuten-LEDs des Frontpanels an. Beim Betreten des Bootloader bzw. beim Empfangen von Daten blinken diese in einer weißen Farbe, sodass ersichtlich wird, dass man sich im Bootloader-Modus befindet.&lt;br /&gt;
* Bietet einige Optionen, welche das Verhalten des Bootloaders beeinflussen und [https://github.com/Wordclock/wordboot#configuration hier] näher beschrieben werden.&lt;br /&gt;
* Komplett in C programmiert und nicht wie viele andere AVR ATmega Bootloader in Assembler. Dies bietet den Vorteil, dass das Ganze leichter verständlich und wartbar ist.&lt;br /&gt;
&lt;br /&gt;
===== Fuses =====&lt;br /&gt;
&lt;br /&gt;
Die folgenden Fuses müssen programmiert werden:&lt;br /&gt;
* &#039;&#039;&#039;BOOTRST = 0&#039;&#039;&#039; &#039;&#039;(Boot Reset vector Enabled)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;BOOTSZ = 01&#039;&#039;&#039; &#039;&#039;(Boot Flash section size = 512 words)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit ergibt sich für den ATmega168 folgender Wert für die &#039;&#039;&#039;efuse&#039;&#039;&#039;: &#039;&#039;0xFA&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Installation =====&lt;br /&gt;
&lt;br /&gt;
* [[Datei:Wordboot_6_0.zip|Archiv]] herunterladen&lt;br /&gt;
* Fuses wie oben angegeben programmieren&lt;br /&gt;
* Bootloader auf konventionellem Weg flashen, d.h. per ISP oder HVPP&lt;br /&gt;
* Die vier Minuten LEDs sollten nun beim Starten blinken&lt;br /&gt;
* Anwendung kann mittels avrdude programmiert werden, z.B. mit folgendem Befehl:&lt;br /&gt;
  &amp;lt;code&amp;gt;avrdude -p m328p -c arduino -b 9600 -P /dev/ttyUSB1 -U flash:w:Wordclock.hex&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Weitere Informationen =====&lt;br /&gt;
&lt;br /&gt;
Alle weiteren Informationen bezüglich dieses Bootloaders finden sich im Projekt [https://github.com/Wordclock/wordboot Repository].&lt;br /&gt;
&lt;br /&gt;
=== Flashen per Bluetooth ===&lt;br /&gt;
Bootloaden über Bluetooth wurde in diesem [http://www.mikrocontroller.net/topic/156661?goto=1710183#1710183 Post] erfolgreich implementiert, siehe auch [http://www.mikrocontroller.net/articles/Diskussion:Word_Clock_Variante_1 hier].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mechanik =&lt;br /&gt;
&lt;br /&gt;
Folgende Anleitung gilt für die Frontplatte aus Plexiglas und die Word Clock mit Ambilight, d. h. die Wandmontage erfolgt ohne Rahmen/Bilderrahmen.&lt;br /&gt;
Beim Bau meiner Word Clock habe ich definitiv mehr Zeit über mechanische Lösungen nachgedacht, als über die Elektronik/Programmierung. Vor allem die Recherche geeigneter Bezugsquellen hat Zeit gekostet und die Lieferzeit hat den Bau der Uhr sehr verzögert. Ich hoffe, dass diese Anleitung hilft, etwas Zeit zu sparen.&lt;br /&gt;
&lt;br /&gt;
== Vorbereiten der Zwischenplatte == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:1-mdf-spachtel.jpeg&lt;br /&gt;
Datei:2-gespachtelte-kante.jpeg|Die Seitenfläche nach den Auftragen der Spachtelmasse.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit die Zwischenplatte optisch gut zur Frontplatte passt, muss diese lackiert werden. Im vorliegenden Vorschlag wurde die Zwischenplatte an den Seiten mit wasserbasiertem Acryllack schwarz lackiert. &lt;br /&gt;
&lt;br /&gt;
Die MDF Platte kann grundiert oder gespachtelt werden. In diesem Beispiel wurde die Platte mit  &amp;quot;Holz und MDF Spachtel” (z. B. Decotric, siehe Amazon) vorbehandelt. Eine geeignete Grundierung wäre z. B. “MDF Grundierung Grund Vorbehandlung” von Molto. Die Grundierung ist leichter zu verarbeiten. Mit der Spachtelmasse kann man allerdings unerwünschte Löcher verschließen. Die Masse muss einige Stunden aushärten, bevor sie geschliffen werden kann. Am besten beginnt man daher den Bau mit der Word Clock mit dieser Vorarbeit. In der Wartezeit kann die Elektronik zusammengelötet werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:3-Kante-sw-gestrichen.jpeg|Die Zwischenplatte sollte vor der Montage der Elektronik vorbereitet werden. Der Mülleimer ist ein perfekter und stabiler Halter während des Streichen: einfach zu drehen, man macht sich die Finger nicht voll Farbe und man kann alle Seiten auf einmal streichen.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Aushärten wurde die Oberfläche mit Schmirgelpapier geschliffen (P240) und anschließend dreimal lackiert. Die erste und zweite Lackschicht wurde jeweils mit P400 Schmirgelpapier geglättet. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:4-platine-fertig-in-hand.jpeg|&lt;br /&gt;
Datei:5-platine-fertig-in-zwischenplatte.jpeg|&lt;br /&gt;
Datei:6-platine-fertig-in-zwischenplatte-ohne-fraesung.jpeg|&lt;br /&gt;
Datei:7-platine-fertign-in-zwischenplatten-mit-fraesung.jpeg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leider ist mir beim Einlöten der Komponenten nicht aufgefallen, dass die Batterie und IC2 (7805) sehr hoch sind. Da ich die Beinchen der Batterie schon zu kurz abgeschnitten hatte, konnte ich die Batterie nicht mehr einfach umbiegen, so dass dieses Problem nur noch durch angelötete Kabel zu lösen war. Die Batterie wird nun einfach neben die Steuerplatine gelegt. Den 7805 konnte ich durch Umbiegen etwas in seiner Höhe reduzieren. Der Platz für den umgebogenen 7805 wurde mit einer Fräse im Multitool/Dremel geschaffen.&lt;br /&gt;
&lt;br /&gt;
Im Nachhinein betrachtet hätte ich mir diese Mühe sparen können, da durch die Befestigung mit dem Spiegelbefestigungsset (siehe unten) die Höhe kein Problem mehr ist. Ebenfalls etwas zu spät habe ich im Forum Bilder einer Lösung gesehen, bei der die Ausfräsung für Batterie und 7805 in Richtung des äußeren Randes und nicht wie bei mir in Richtung der LEDs gelöst worden war. Im äußeren Rahmen ist genug Platz für eine Ausfräsung, die es erlaubt, die Batterie und den 7805 horizontal einzulöten.&lt;br /&gt;
&lt;br /&gt;
== Befestigung der Frontplatte (“Plexiglasvariante”) an der Zwischenplatte ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:8-holzbohrer-8mm-mit-tiefenmarkierung.jpeg|8 mm Holzbohrer mit improvisierter Tiefenmarkierung.&lt;br /&gt;
Datei:9-bohrung-fuer-magnet-1.jpeg|Fertige Bohrung. An der Kante unter dem Loch sieht man die Spachtelmasse. Während die Spachtelmasse noch trocknet, können bereits die Magnete montiert werden.&lt;br /&gt;
Datei:10-bohrung-fuer-magnet-2.jpeg|Zentral wird eine 2 mm Bohrung ergänzt, damit der Magnet bei Fehlpositionierung wieder ausgestossen werden könnte.&lt;br /&gt;
Datei:11-bohrung-fuer-magnet-3.jpeg|Zur Veranschaulichung: der Magnet könnte mit dem 2 mm Bohrer ausgestossen werden. &lt;br /&gt;
Datei:12-magnet-1.jpeg|&lt;br /&gt;
Datei:13-magnet-mit-werkzeug.jpeg|Die Magnete habe eine ganz gute Presspassung. Mit Hilfe eines Zwischenhölzchens zum Schutz des Magneten können sie in das Loch gehämmert werden.&lt;br /&gt;
Datei:14-magnet-2.jpeg|&lt;br /&gt;
Datei:15-magnet-3.jpeg|&lt;br /&gt;
Datei:16-magnet-4.jpeg|&lt;br /&gt;
Datei:17-magent-mit-kleinem-magnet-1.jpeg|Der 8 mm x 4 mm Magnet wird 0.5 mm unter die Oberfläche der Zwischenplatte gepresst, damit auch der 8 mm x 0.5 mm Magnet flächenbündig befestigt werden kann.&lt;br /&gt;
Datei:18-magent-mit-kleinem-magnet-2.jpeg|Hier ist der 8 mm x 0.5 mm Magnet in der Bohrung. Damit sich der 8 mm x 0.5 mm Magnet durch Verschieben von dem 8 mm x 4 mm Magneten lösen lässt, muss die Kante der Bohrung abgeschrägt werden.&lt;br /&gt;
Datei:19-anschraegung-fuer-kleinen-magnet.jpeg|Durch die Abschrägung am Rand der Bohrung (Universalmesser, Taschenmesser oder Dremel-Fräse) gleitet der 8 mm x 0.5 mm Magnet leicht aus der Befestigung und läßt sich so mit wenig Kraft vom 8 mm x 4 mm Magnet lösen.&lt;br /&gt;
Datei:20-alu-isolation-magnet-vor-klebung.jpeg|Vor dem Kleben wird die Holzoberfläche und der 8 mm x 4 mm Magnet mit Hilfe einer dünnen Folie (fixiert durch den 8 mm x 0.5 mm Magnet) isoliert (hier: Haushalts-Alu-Folie). Der Kleber wird sehr dünn aufgetragen, um Überschüsse zu vermeiden.&lt;br /&gt;
Datei:21-fertig-geklebt-magnete-frontplatte.jpeg|Rückseite der Frontplatte nach der Klebebefestigung der vier 8 mm x 0.5 mm Magneten. Alle vier Magnete wurden in einem Arbeitsgang geklebt. Die Ausrichtung der Plexiglasscheibe erfolgte von Hand. Die Oberfläche wurde mit einem alten Handtuch geschützt und mit Gewicht beschwert, während der Kleber auspolymerisierte.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Befestigung der Frontplatte an der Zwischenplatte wurden im Forum schon einige Lösungen besprochen.&lt;br /&gt;
&lt;br /&gt;
Man kann die Frontplatte z. B. mit Magneten befestigen oder direkt auf die Zwischenplatte kleben.&lt;br /&gt;
&lt;br /&gt;
Als Kleber wird meist ein Zweikomponentenkleber auf Epoxidharzbasis verwendet (z. B. Uhu Plus Sofortfest, Uhu Plus schnellfest, Uhu Plus Endfest 300...), da dieser keine Lösungsmittel enthält, die Plexiglas oder die Tinte des Frontplattendrucks anlösen. Im Forum wird bemerkt, dass der Kleber dünn aber vollflächig aufgetragen wurde. &lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird eine einfache Methode beschrieben, die Frontplatte mit Magneten zu befestigen.  Diese Methode hat den Vorteil, dass man die empfindliche Frontplatte abnehmen kann, wenn man an der Word Clock arbeitet. Die Magnete können ohne aufwendige Werkzeuge befestigt werden. &lt;br /&gt;
&lt;br /&gt;
Ich habe mich für runde Magnete entschieden, weil man diese mit einer einfachen Bohrung befestigen kann. Die Haftkraft von vier 8 mm x 4 mm Magneten reicht aus, die Plexiglas-Frontplatte sicher zu tragen. Ich habe die Haftkraft bewusst nicht überdimensioniert, da ich Bedenken habe, dass starke Magnete beim Abnehmen der Frontplatte die Farbschicht von der Plexiglasplatte beschädigen könnten. &lt;br /&gt;
&lt;br /&gt;
Ich verwende zwei Magnete. Der dickere Magnet wird in der Zwischenplatte versenkt. Der dünnere Magnet wird an die Frontplatte geklebt. Der dünnere Magnet hat den gleichen Durchmesser wie der dickere Magnet, er ist jedoch nur 0.5 mm dick. &lt;br /&gt;
&lt;br /&gt;
Ein wesentliches Argument für die Verwendung von zwei Magneten anstelle der im Forum beschriebenen Lösung “1 Magnet und eine angeklebte Beilagscheibe” ist die Positioniergenauigkeit. Bei meinen Versuchen mit der Kombination Metall + Magnet hatte ich immer das Problem, dass der Magnet leicht seitlich verschoben werden konnte. Dies ist bei der Kombination Magnet + Magnet nicht möglich. Der flache Magnet wurde ebenfalls bewusst ausgewählt. Der Grund ist, dass zwei aneinander haftende Magnete nur schwer in axialer Richtung getrennt werden können. Es ist dagegen relativ einfach, die beiden Magneten durch seitliche Verschiebung zu trennen. Um die Plexiglasscheibe mit angeklebten Magneten seitlich verschieben zu können, dürfen die Magnete, die auf das Plexiglas geklebt werden, nicht zu hoch sein. Da die Plexiglasplatte ohne Luftspalt bündig auf der Zwischenplatte aufliegen soll, muss der Platz für den 0.5 mm Magnet auf der Seite der Zwischenplatte geschaffen werden. &lt;br /&gt;
&lt;br /&gt;
Theoretisch müsste man für beide Magneten in die Zwischenplatte ein 8 mm Loch mit einer Tiefe von 0.5 mm + 4.0 mm = 4.5 mm bohren. Damit der 0.5 mm dicke Magnet durch Verschieben entfernt werden kann, wird der Rand der Bohrung so angeschrägt, dass der Magnet seitlich verschoben werden kann. &lt;br /&gt;
&lt;br /&gt;
Da ich keine Bohrständer habe, wurde die Bohrungen freihändig mit einem 8 mm Holzbohrer im Akkuschrauber ausgeführt. Mit Hilfe eines Klebestreifens wurde die ungefähre Bohrtiefe festgelegt. &lt;br /&gt;
Im Zentrum der 8 mm Sacklochbohrung wurde zusätzlich eine 2 mm Bohrung durch die Zwischenplatte angefertigt. In diese kann man von der Unterseite mit den 2 mm Bohrer stecken und bei Bedarf den Magneten wieder ausstoßen. Ursprünglich dachte ich, den 8 mm x 4 mm Magneten festkleben zu müssen. Die Passgenauigkeit war jedoch so gut, dass ich den 8 mm x 4 mm Magneten einfach in die Bohrung pressen konnten (mit Hilfe eines kleinen Hölzchens und eines kleinen Hammers). &lt;br /&gt;
&lt;br /&gt;
Der 8 mm x 0.5 mm Magnet wird gemeinsam mit dem 8 mm x 4 mm Magnet so in die Bohrung gepresst, dass seine Oberfläche mit der Zwischenplatte bündig abschließt. Anschließend wird der kleine Magnet mit einem spitzen Gegenstand (z. B. Taschenmesser) entfernt und der Rand abgeschrägt (Dremel und Schleifsteinchen bzw. Fräser). &lt;br /&gt;
&lt;br /&gt;
Vor der Klebebefestigung an der Plexiglasscheibe wird das Holz und der 8 mm x 4 mm Magnet mit einer dünnen Folie vor Kleberüberschuss geschützt. In meinem Fall habe ich Haushalts-Alu-Folie verwendet. Für die Klebung werden die 8 mm x 0.5 mm Magneten an dem fest gepressten 8 mm x 4 mm Magneten fixiert. Der Kleber wird dünn auf die Oberfläche des 8 mm x 0.5 mm Magneten aufgetragen, die Plexiglasscheibe korrekt positioniert und mit Hilfe von Gewichten während der Aushärtphase fixiert. Ich habe alle Magnete auf einmal geklebt. &lt;br /&gt;
&lt;br /&gt;
Die einzelnen Arbeitsschritte sind auf den Bildern zu erkennen.&lt;br /&gt;
&lt;br /&gt;
=== Bezugsquelle der Magnete ===&lt;br /&gt;
&lt;br /&gt;
Neotexx, Herweghstr. 11, 12487	Berlin ( http://www.neomagnete.com )&lt;br /&gt;
&lt;br /&gt;
Folgende Magnete wurden verwendet:&lt;br /&gt;
&lt;br /&gt;
* Cylinder 8x0.5 mm, Dimension: D8x0.5mm, NdFeB Magnet in N48 (1.42 Tesla), Magnetized Direction: through 0.5mm (axial), Coating: Nickel, item # Z-008-000.5-N &lt;br /&gt;
* Cylinder 8x4 mm, Dimension: D8x4mm, NdFeB Magnet in N48 (1.42 Tesla), Magnetized Direction: through 4mm, Coating: Nickel, item # Z-008-004-N&lt;br /&gt;
&lt;br /&gt;
Wer den Mindestbestellwert (10€) und die vergleichsweise hohen Versandkosten (5,50€) scheut, kann mir (User [http://www.mikrocontroller.net/user/show/Stoerte Stoerte]) eine PN-Schicken. Ich habe etwas großzügiger bestellt und würde die übrigen Magnete zu folgenden Paketen (Paket 2 für den Fall, dass man eine zweite Frontplatte zum Wechseln bestücken will) abgeben:&lt;br /&gt;
&lt;br /&gt;
* Paket 1: 4x D8x4mm + 4x D8x0.5mm = 4,50€ + 1,50€ Versand&lt;br /&gt;
* Paket 2: 4x D8x4mm + 8x D8x0.5mm = 6,00€ + 1,50€ Versand&lt;br /&gt;
&lt;br /&gt;
== Befestigung der Platinen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:22-bueroklammer-pin.jpeg|Befestigungspin aus Büroklammerdraht.&lt;br /&gt;
Datei:23-led-streifen-mit-pins.jpeg|Die Pins werden in der Ausfräsung verkeilt und fixieren die LED-Streifenplatinen, können aber jederzeit wieder leicht gelöst werden.&lt;br /&gt;
Datei:24-min-platine-mit-pin.jpeg|Auch die Kabel und Minuten-LED-Platinen können mit Pins fixiert werden.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An der Zwischenplatte müssen folgende Komponenten befestigt werden:&lt;br /&gt;
&lt;br /&gt;
* Steuerelektronik&lt;br /&gt;
* LED-Platinen Word Clock&lt;br /&gt;
* LED-Platinen Ambilight&lt;br /&gt;
* Netzteil&lt;br /&gt;
* DCF77-Modul&lt;br /&gt;
* Kabel&lt;br /&gt;
&lt;br /&gt;
Die einfachste Lösung ist die Klebebefestigung mit Heißkleber oder einem anderen geeigneten Kleber. Die Klebemethode hat jedoch den Nachteil, dass die Klebung nicht so leicht wieder gelöst werden kann. Aus diesem Grund wurde eine reversible Alternative gesucht. &lt;br /&gt;
&lt;br /&gt;
Die vorgeschlagene Methode wirkt zwar auf den ersten Blick nicht sehr professionell, funktioniert aber sehr gut. So musste ich einige Male Korrekturen an den LED Platinen vornehmen, weil sich z. B. bei meinen „Manipulationen“ Kabel gelöst haben. &lt;br /&gt;
&lt;br /&gt;
Die Lösung ist relativ einfach. Ein harter Draht (in meinem Fall 0,8 mm dicker Federdraht, wird z. B. bei Kieferorthopäden verwendet, als Alternative kann man aber auch Büroklammerdraht verwenden) wird etwas länger abgezwickt, als die Ausfräsung für die Platine oder die Kabel ist. Der Draht kann in die relativ weiche MDF Platte so verkeilt werden, dass die Platine oder Kabel gut halten. Es ist sinnvoll, den Draht an beiden Enden abzuzwicken. Dadurch entstehen zwei scharfe Enden, die sich leichter im MDF verankern lassen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:25-dcf-77-geklebt.jpeg|DCF-77 Modul und Ferritantenne. Befestigung mit Heisskleber.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Befestigung für die Ambilight-LED Streifen sowie  das DCF-77 Modul habe ich leider keine bessere Lösung gefunden, als die Befestigung mit Heißkleber. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:26-netzteil.jpeg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Steuerplatine wird durch die angeschlossenen Kabel sicher in ihrer Position gehalten. &lt;br /&gt;
&lt;br /&gt;
Das modifizierte Conrad-Netzteil hält durch Klemmpassung in der Aussparung. Achtung: an der Unterseite der Platine liegen die 220 V Anschlüsse frei. Das ist kein Problem, sobald die Uhr an der Wand befestigt ist. Um sicherzustellen, dass niemand aus Versehen die Platine von der Seite berühren kann, wurde das Oberteil des Gehäuses als Berührschutz belassen. Beachten Sie dies bitte bei der Montage. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:27-uhr-wand-mit-ambilight.jpeg|&lt;br /&gt;
Datei:28-uhr-wand-ohne-ambilight.jpeg|&lt;br /&gt;
Datei:29-uhr-wand-schraeg-1.jpeg|&lt;br /&gt;
Datei:30-uhr-wand-schraeg-2.jpeg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Lösung ist nur von Relevanz, wenn die Stromversorgung direkt hinter der Uhr möglich ist. Dann sieht die Lösung allerdings sehr elegant aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:31-netzteil-1.jpeg|&lt;br /&gt;
Datei:32-netzteil-2.jpeg|&lt;br /&gt;
Datei:33-netzteil-3.jpeg|&lt;br /&gt;
Datei:34-netzteil-4.jpeg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Vorbereitung musste das Netzteilgehäuse geöffnet werden. Folgende Bilder zeigen den Innenaufbau und sollen so das Öffnen des Gehäuses erleichtern helfen. Das Gehäuse ist fest verklebt. Der Kleber kann nicht aufgesprengt werden (vielleicht würde es gehen, wenn man den Kleber mit einer Heißluftpistole ausreichend erwärmen würde ?). Ich habe mich für die Lösung entschieden, das Gehäuse entlang der Klebenaht mit einer Puk-Metallsäge aufzusägen, da ich noch nicht wusste, wie das Netzteil aufgebaut ist. Heute würde ich nur noch die Steckerpins absägen. Als Alternative zu dieser brachialen Methode habe ich geprüft, ob man ein Netzteil selbst bauen könnte. Ich bin aber zu den Schluss gekommen, dass es nicht wirklich möglich ist, ein eigenes Netzteil so preiswert und auch so klein wie das Conrad-Netzteil zu bauen.&lt;br /&gt;
&lt;br /&gt;
== Verkabelung ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:35-starre-draehte.jpeg|Für den ersten Versuch hatte ich Einzelader-Schaltdraht direkt auf die LED-Streifen gelötet. Leider neigte der Schaltdraht dazu, an den ungünstigsten Stellen zu brechen, wenn ich die Platinen bewegte, was allein schon zum Löten erforderlich war. &lt;br /&gt;
Datei:36-fliegender-aufbau.jpeg|Fliegender Aufbau... für den ersten Systemtest.&lt;br /&gt;
Datei:37-stecker-an-led-platine.jpeg|Erst die Verwendung von abgewinkelten Steckverbindern (Stiftleiste RM 2,54, gewinkelt Rastermaß: 2.54 mm, in Kombination mit der passenden Buchsenleiste RM 2,54 Rastermaß: 2.54 mm, Alternative: Stiftleiste RM 2,54, gewinkelt Rastermaß: 2.54 mm Polzahl: 3, 72645 BKL Electronic) vereinfachte die Montage der RGB-Verbindungen drastisch. &lt;br /&gt;
Datei:38-verkabelung-1.jpeg|Zusätzlich zu den Steckverbindern wurden keine starren Einzelkabel mehr verwendet, sondern flexible Drähte (bei mir: recycelte IDE-Festplattenkabel, alternativ: Flachbandkabel, RM 1,27; Polzahl: 50, 0.09 mm², Grau Sterner Kabel, ich werde beim nächsten Mal dieses Kabel testen: Flachbandkabel 3 x 0.14 mm², Gelb, Rot, Grün,  Sterner Kabel, Conrad Best.-Nr.: 605819 - 62).&lt;br /&gt;
&lt;br /&gt;
Auch für die Anschlüsse der Kabel von den Buchsensteckern K7 und K8 an die LED-Streifenplatinen waren die Steckverbinder sehr hilfreich. Die Einzelstecker habe ich, weil ich keine Alternativen hatte/kannte, von Buchsenleisten abgetrennt, was doch recht aufwendig war. Kennt jemand eine professionellere Lösung (Name, Bezugsquelle?)&lt;br /&gt;
Datei:39-verkabelung-2.jpeg|Sobald die Funktion erfolgreich getestet wurde, können die Kabel eingekürzt und schöner verlegt werden. Eigentlich wollte ich das Klebeband durch Heisskleber ersetzen. Aber nichts ist bekanntlich beständiger als ein Provisorium.&lt;br /&gt;
Datei:40-ir-und-ldr.jpeg|Der LDR und der Infrarot-Empfänger werden an der Unterseite der Word Clock auf leeren Plätzen der Amibilight-Platine befestigt. Für den IR-Empfänger reicht doppelseitiges Klebeband, der LDR kann mit einfachem Klebeband an den Beinchen fixiert werden. &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P.N. (http://www.mikrocontroller.net/topic/156661#2511143) hat eine elegante Lösung zur Befestigung des LDR und TSOP vorgeschlagen:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;- Der TSOP sitzt bei mir hinter dem &amp;quot;S&amp;quot; (&amp;quot;WACHTZEHNRS&amp;quot;) und ist direkt&lt;br /&gt;
auf diese Streifenplatine eingelötet. Davor habe ich natürlich die&lt;br /&gt;
PWM-Leiterbahnen des letzten Feldes durchtrennt und die 3 Beinchen auf&lt;br /&gt;
Stiftleisten am Ende der Platine geroutet. Geht bei dem Layout ganz gut.&lt;br /&gt;
Der IR-Empfang ist auch durch die Frontplatte einwandfrei&lt;br /&gt;
&lt;br /&gt;
- Der LDR sitzt hinter dem &amp;quot;M&amp;quot; (&amp;quot;TGNACHVORJM&amp;quot;) und wurde ebenso an der&lt;br /&gt;
Steifenplatine befestigt und auf eine Stiftleiste gelegt. Zusätzlich hat&lt;br /&gt;
er noch einen &amp;quot;Schirm&amp;quot; aus einer Lochrasterplatine gegen Streulicht von&lt;br /&gt;
angrenzenden Buchstaben erhalten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Wandbefestigung der Uhr ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:41-spiegelblech-1.jpeg|miniatur|Minimal Montageset: Exzenterscheiben (oben), Spiegel-Haftmagnet (links und rechts aussen), Haftblech mit Kieme]]&lt;br /&gt;
[[Datei:42-spiegelblech-2.jpeg|miniatur|Das Haftblech mit Kieme wird mit der Metallsäge getrennt und Bohrungen zur Befestigung mit Schrauben werden ergänzt (rechts Original, links Modifikation)]]&lt;br /&gt;
[[Datei:43-spiegelhalterung-montiert.jpeg|miniatur|Fertig montierte Haftbleche]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Word Clock kann wie jedes Bild an der Wand befestigt werden. Eine elegante, bewährte und gut funktionierende Variante stellt die Befestigung mit einer sog. Spiegelbefestigung mit Haftmagneten dar. Die Komplettsets sind meist ziemlich teuer und die Befestigungsbleche sind für die Word Clock viel zu groß. &lt;br /&gt;
&lt;br /&gt;
Eine preisgünstige Lösung findet man bei:&lt;br /&gt;
&lt;br /&gt;
Leha-Technik&amp;lt;br/&amp;gt;&lt;br /&gt;
Burger Straße 63 A&amp;lt;br/&amp;gt;&lt;br /&gt;
42859 Remscheid&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.leha.de www.leha.de]&lt;br /&gt;
&lt;br /&gt;
Hier kann man die Einzelkomponenten kaufen. Wichtig sind nur die Exzenterscheiben (2 Stück), die Haftmagneten (2 Stück) und die Haftbleche mit Kieme (2 Stück). Die Schrauben und Dübel sollten sich in der Bastelkiste finden (ich habe 6er Dübel, mit 4 x 50 mm Schrauben verwendet). Die Exzenterscheiben haben einen entscheidenden Vorteil. Wenn der Bohrer etwas verläuft oder wenn schon die Messung ungenau ist, kann man die Befestigung mit der Exzenterscheibe immer noch schön waagerecht ausrichten. &lt;br /&gt;
&lt;br /&gt;
Theoretisch könnte man auf die Magneten verzichten. In meinem Fall war jedoch hinter der Uhr eine Stromversorgung und die Kabel waren etwas steifer als gewünscht. Das hatte zur Folge, dass die Uhr von den Kabeln von der Wand abgehoben wurde und somit leicht schräg stand. Die Magneten haben dieses Problem sehr elegant gelöst. &lt;br /&gt;
&lt;br /&gt;
Das Haftblech mit Kieme wurde mit einer Eisensäge geteilt. Der Teil mit der Kieme ist mit 2.5 cm breit genauso breit, wie der Steg für die Befestigung. Da ich im Zusammenhang mit MDF kein Vertrauen zu dem Kleber hatte, wurden zwei Bohrungen ergänzt (3,5 mm Metallbohrer, improvisiertes Versenken der Schrauben mit einem 6 mm Metallbohrer, ich habe keinen speziellen Versenkbohrer). Das Blech wurde dann geklebt und mit 3 x 20 mm Spax-Schrauben befestigt. Die MDF Platte wurde vorher mit einem 2 mm Bohrer vor gebohrt. &lt;br /&gt;
&lt;br /&gt;
Der untere, abgetrennte Teil des Haftbleches wurde für den Magneten verwendet. Seine Breite passte ebenfalls perfekt zu den Befestigungsstegen. Auch diese Bleche wurden zusätzlich mit Schrauben befestigt.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Anzahl x VPE !! Artikel !! Art.Nr.&lt;br /&gt;
|-&lt;br /&gt;
| 2 x Stück || Haftblech, mit Kieme - 70 x 70 mm (selbstklebend) 3 kg || 5208608&lt;br /&gt;
|-&lt;br /&gt;
| 2 x Stück || Spiegel-Haftmagnet || 5208601&lt;br /&gt;
|-&lt;br /&gt;
| 2 x Stück || Exzenterscheibe || 5208602&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Das erste Mal einschalten =&lt;br /&gt;
&lt;br /&gt;
=== LED-Streifen ===&lt;br /&gt;
&lt;br /&gt;
Nach dem Verlöten aller Bauteile der LED-Streifen sollten diese vor dem endgültigen Verbau noch geprüft werden:&lt;br /&gt;
&lt;br /&gt;
# Prüfung der drei PWM-Kanäle und der Steuerleitungen auf gegenseitige Kurzschlüsse&lt;br /&gt;
# Funktionsprüfung der LED-Streifen mittels direkter Versorgung durch ein Netzteil: Hierbei nacheinander die einzelnen Farben der jeweiligen Wörter anschließen und ggf. nacharbeiten, falls es &#039;mal dunkel bleiben sollte&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; &amp;quot;Beginner-Tipp&amp;quot;: Die mangelhaften Lötstellen findet man am besten, wenn man mit dem Diodentest des Multimeters die Lötpunkte der angrenzenden LEDs berührt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Steuerplatine ===&lt;br /&gt;
&lt;br /&gt;
Wenn alle Bauteile verlötet sind, sollten zur ersten Prüfung alle Sockel noch leer bleiben. Wer ein entsprechendes Netzteil hat, sollte den Strom auf ca. 50mA begrenzen. Wer dies nicht kann, sollte wenigstens ein (im Regelfall auf 200mA) abgesichertes Netzteil dazwischen schalten. Zum Bestücken der einzelnen Bauteile sollte stets die Spannungsversorgung unterbrochen werden.&lt;br /&gt;
&lt;br /&gt;
# Prüfen der Spannungsversorgung auf Kurzschluss&lt;br /&gt;
# Anlegen der Versorgungsspannung, am Spannungsregler sollten nun 5V anliegen. Tipp: Minus ist ganz außen, Plus ist die zweite Befestigung von außen. Kann man anhand der Unterseite der Platine kontrollieren. Im Schaltplan ist das bei der Belegung von KL1 nicht eindeutig zu erkennen!&lt;br /&gt;
# µC bestücken, die Stromaufnahme sollte nun knapp 20mA betragen&lt;br /&gt;
# Erst Fuses programmieren, dann Software flashen&lt;br /&gt;
# RTC, Schieberegister (74HCT595) und Treiber (ULN) einsetzen&lt;br /&gt;
# LED-Streifen anschließen&lt;br /&gt;
# Wenn alles funktioniert, dann blinken die 4 Minuten-LEDs nach dem Einschalten rund 5-6 mal gleichzeitig auf. Zu der Zeit fängt die RealTimeClock an zu ticken&lt;br /&gt;
# Während des Blinkens kann nun auch eine (beliebige) Taste auf der Fernbedienung gedrückt werden, und deren Anlernprozess gestartet werden (-&amp;gt; s. Manual). Für den Funktionstest muss keine dauerhafte Tastenbelegung gewählt werden, dies kann jederzeit nachgeholt werden.&lt;br /&gt;
# Wenn die FB angelernt ist, dann gibt es eine Taste, mit der alle Ausgänge (das heißt alle Wörter) nacheinander geschaltet werden (&amp;quot;Demo-Modus&amp;quot;). Den Demo-Modus kann man verlassen, in dem ein anderer Modus aktiviert wird. Drückt einfach im Anschluss an den Demo-Modus die Taste &amp;quot;Einfarb-/Modus/Farbprofile aktivieren&amp;quot;.&lt;br /&gt;
# Mit der Fernbedienung und der Uhr spielen ... :o)&lt;br /&gt;
# Nun kann das DCF-Modul angeschlossen werden (wenn möglich, per UART den DCF-Status loggen). Nach einiger Zeit (mehrere Minuten!) sollte die Uhr die aktuelle Zeit anzeigen, sofern auf der DCF-Seite alles klappt.&lt;br /&gt;
&lt;br /&gt;
Wenn eine Fernbedienung angelernt werden soll, dann musst man, während alle 4 Minuten-LEDs blinken, irgendeine Taste auf der Fernbedienung drücken. Wird die FB erkannt, dann hört das Blinken auf und die &amp;quot;eins&amp;quot; leuchtet. Jetzt musst man die Taste drücken, die zum Ein-/Ausschalten der Uhr verwendet werden soll. Als nächstes leuchtet die &amp;quot;zwei&amp;quot; usw..... --&amp;gt; Mehr dazu siehe Handbuch&lt;br /&gt;
&lt;br /&gt;
Sollte nach dem &amp;quot;Neustart&amp;quot; der Uhr keine LED mehr leuchten, KEINE PANIK... es kann sein, dass einfach die &amp;quot;Helligkeit&amp;quot; der LEDs so gering ist, dass Ihr sie einfach nicht seht.&lt;br /&gt;
&lt;br /&gt;
Tipp fürs erste Anlernen der FB: Einfach alle Tasten stur der Reihe nach durchdrücken. Dann kann man durch Zählen und Vergleichen mit der Tabelle im Handbuch solange &amp;quot;überleben&amp;quot;, bis man die Muse hatte, eine sinnvolle Belegung zu überlegen und auch zu dokumentieren!&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Abstimmungen =&lt;br /&gt;
Eine Stimme ist ein Strich. Nach 5 Strichen bitte ein Leerzeichen einfügen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== offen: ==&lt;br /&gt;
IR-FB Anlernphase deaktivierbar (Default / keine FB angelernt: anlernen aktiv): | &amp;lt;br&amp;gt;&lt;br /&gt;
ethernet ntp client: ||||| ||||| ||||| || &amp;lt;br&amp;gt;&lt;br /&gt;
Bewegungsmelder: ||||| ||||| ||||| ||||| ||||| ||||| |||&amp;lt;br&amp;gt;|&lt;br /&gt;
IR zum PC für Kommunikation/Bootloader |&amp;lt;br&amp;gt;&lt;br /&gt;
RFM12 für Kommunikation/Bootloader |||&amp;lt;br&amp;gt;&lt;br /&gt;
NTP Server (um eine genaue Zeit ins Netzwerk zu verteilen) |||&amp;lt;br&amp;gt;&lt;br /&gt;
Beim Start, alle LEDs einmal der Reihe nach Durchlaufen lassen zum Funktionstest (statt &amp;quot;Volldampfmodus&amp;quot;): ||||| ||||| ||||| | &amp;lt;br&amp;gt;&lt;br /&gt;
Ton zur vollen Stunde (Beep/Piezo): ||||| ||&amp;lt;br /&amp;gt;&lt;br /&gt;
ZBus (Ethersex) zum einstellen der Uhr über das Netzwerk, evt holen der Zeitdaten über ZBus von einem Zeitserver: || &amp;lt;br /&amp;gt;&lt;br /&gt;
zeitgesteuert Dunkelschalten wochentagsweise: |||| |||&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== bereits umgesetzt: ==&lt;br /&gt;
DCF: ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||| &amp;lt;br&amp;gt;&lt;br /&gt;
IR für Fernbedienung: ||||| ||||| ||||| || &amp;lt;br&amp;gt;&lt;br /&gt;
Ambilight: ||||| ||||| ||||| ||||| |||| &amp;lt;br&amp;gt;&lt;br /&gt;
zeitgesteuert Dunkelschalten (z.&amp;amp;nbsp;B. nachts &amp;quot;Aus&amp;quot;): ||||| ||||| ||||| &amp;lt;br&amp;gt;&lt;br /&gt;
Bluetooth: || (Posting: [http://www.mikrocontroller.net/topic/156661?goto=1710183#1710183 Bluetooth mit Debug, Bootloader und Autoreset])&amp;lt;br&amp;gt;&lt;br /&gt;
Möglichkeit, Zeiteinstellmodus bei &amp;quot;0 Minuten&amp;quot; von Normalmodus zu unterscheiden z.B. blinkendes &amp;quot;UHR&amp;quot; |||||&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;ES IST&amp;quot; soll man ein- oder ausschalten können: ||||| |&amp;lt;br&amp;gt;&lt;br /&gt;
Bluetooth per FB ein-/ausschalten: ||&amp;lt;br&amp;gt;&lt;br /&gt;
Taste &amp;quot;Speichern&amp;quot; auf FB statt automatisch |||(On Off speichert)&amp;lt;br&amp;gt;&lt;br /&gt;
kurzzeitiger &amp;quot;Volldampf-Modus&amp;quot; (alle Wörter an für bspw. 30sek): ||||| |||  - als Submodus des Demomodus, multiplexing, jeweils ein Kanal an jedem Treiber aktiv&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== An/Ausschalt-Logik ==&lt;br /&gt;
A: Manuell ausgeschaltete Uhr bleibt aus bei Erreichen der Einschaltzeit - hier könnte natürlich gleich der Stecker gezogen werden, sofern die Uhr nicht festeingebaut ist&lt;br /&gt;
&lt;br /&gt;
B: Manuell ausgeschaltete Uhr geht wieder an bei Erreichen der Einschaltzeit&lt;br /&gt;
&lt;br /&gt;
C: Es gibt eine OFF-Taste und eine STANDBY-Taste. Bei STANDBY schaltet sich die Uhr bei Erreichen der Einschaltzeit wieder ein, bei OFF bleibt sie aus.&lt;br /&gt;
&lt;br /&gt;
D: Die Variante A oder B lässt sich vor dem Kompilieren der Software als define individuell nach eigenem Gutdünken festlegen. (Viele andere Werte sind bereits heute so einstellbar in der SW)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A Strichliste: |&lt;br /&gt;
&lt;br /&gt;
B Strichliste: |||  &lt;br /&gt;
&lt;br /&gt;
C Strichliste: |||||  ||||| |||||&lt;br /&gt;
&lt;br /&gt;
D Strichliste: ||||&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Zurück zum Hauptartikel: [[Word Clock]]&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Timer und Uhren]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;br /&gt;
[[Kategorie:DCF77]]&lt;/div&gt;</summary>
		<author><name>Johnpatcher</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Wordboot_6_0.zip&amp;diff=84489</id>
		<title>Datei:Wordboot 6 0.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Wordboot_6_0.zip&amp;diff=84489"/>
		<updated>2014-08-15T13:43:06Z</updated>

		<summary type="html">&lt;p&gt;Johnpatcher: Selbst von mir zusammengestellt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Selbst von mir zusammengestellt.&lt;/div&gt;</summary>
		<author><name>Johnpatcher</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Unittests_mit_uCUnit&amp;diff=82908</id>
		<title>Unittests mit uCUnit</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Unittests_mit_uCUnit&amp;diff=82908"/>
		<updated>2014-05-05T16:17:34Z</updated>

		<summary type="html">&lt;p&gt;Johnpatcher: /* Prinzip */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Modultests (Unittests) haben sich in der Softwareentwicklung zum&lt;br /&gt;
Stand der Technik in der Softwarequalitätssicherung etabliert.&lt;br /&gt;
&lt;br /&gt;
Es gibt für die verschiedensten Programmiersprachen eine Reihe von&lt;br /&gt;
Unit-Testframeworks, die Modultests unterstützen. Für die Programmiersprache C,&lt;br /&gt;
die häufig bei Mikrocontrollern eingesetzt wird, gibt es mittlerweile auch eine&lt;br /&gt;
Reihe von Frameworks:&lt;br /&gt;
&lt;br /&gt;
* [http://check.sourceforge.net/ Check]&lt;br /&gt;
* [http://cunit.sourceforge.net/ CUnit]&lt;br /&gt;
* [http://www.jera.com/techinfo/jtns/jtn002.html MinUnit]&lt;br /&gt;
* [http://embunit.sourceforge.net/ EmbUnit]&lt;br /&gt;
* [http://www.ucunit.org/ uCUnit]&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Im folgenden soll es über die Verwendung von uCUnit gehen, einem speziellen&lt;br /&gt;
Unit-Testframework für Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
== uCUnit ==&lt;br /&gt;
&lt;br /&gt;
Das Unit-Testframework uCUnit wurde im Hinblick auf den Einsatz auf Mikrocontrollern entworfen:&lt;br /&gt;
&lt;br /&gt;
* Benötigt keine Standardbibliotheken&lt;br /&gt;
* Benötigt keine dynamische Speicherverwaltung&lt;br /&gt;
* Benötigt wenig Speicherplatz&lt;br /&gt;
* Portabel&lt;br /&gt;
* Anpassbar&lt;br /&gt;
* Einfach zu integrieren: Das ganze Framework besteht aus einer einzigen Headerdatei&lt;br /&gt;
&lt;br /&gt;
== Vor dem Start ==&lt;br /&gt;
&lt;br /&gt;
Zunächst lädt man sich die aktuelle Version (zur Zeit der Erstellung dieses Artikels v1.0)&lt;br /&gt;
von der Website herunter. Das Paket ist ein ZIP-Archiv. Dieses kann man an einen beliebigen&lt;br /&gt;
Ort entpacken. Darin enthalten ist bereits ein kleines Demonstrationsprojekt, das als Basis&lt;br /&gt;
für die eigene Testumgebung dienen kann.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen ==&lt;br /&gt;
&lt;br /&gt;
Da es für die unterschiedlichen Zielplattformen unterschiedliche Hardware gibt, muss man&lt;br /&gt;
ein paar Anpassungen an uCUnit vornehmen.&lt;br /&gt;
&lt;br /&gt;
uCUnit benutzt zur Hardwareabstraktion folgende Makros:&lt;br /&gt;
&lt;br /&gt;
* UCUNIT_Init(): Initialisierung der Hardware&lt;br /&gt;
* UCUNIT_Shutdown(): Kontrolliertes Herunterfahren&lt;br /&gt;
* UCUNIT_Safestate(): Bringt das System in einen sicheren Zustand, wenn ein Test fehlschlägt&lt;br /&gt;
* UCUNIT_Recover(): Holt das System aus dem sicheren Zustand&lt;br /&gt;
* UCUNIT_WriteString(msg): Kapselt die Funktion zur Ausgabe eines Strings an den Hostcomputer&lt;br /&gt;
* UCUNIT_WriteInt(n): Kapselt die Funktion zur Ausgabe eines Integerwertes an den Hostcomputer. Wird für die Zusammenfassung der Testergebnisse benötigt&lt;br /&gt;
&lt;br /&gt;
uCUnit benötigt für diese Makros konkrete Implementierungen. Im folgenden wird das&lt;br /&gt;
Beispielprojekt als Basis für die Anpassungen genommen.&lt;br /&gt;
&lt;br /&gt;
Im Beispielprojekt ist der hardwareabhängige Teil in System.h definiert und in&lt;br /&gt;
System.c als Stubs implementiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void System_Init(void);&lt;br /&gt;
void System_Shutdown(void);&lt;br /&gt;
void System_Safestate(void);&lt;br /&gt;
void System_Recover(void);&lt;br /&gt;
void System_WriteString(char * msg);&lt;br /&gt;
void System_WriteInt(int n);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über die defines in der sog. &amp;quot;Customzing Area&amp;quot; gibt man bekannt, welche Funktion für das&lt;br /&gt;
Makro aufgerufen werden soll. Der Präprozessor ersetzt dann die Makroaufrufe mit den&lt;br /&gt;
konkreten Funktionen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define UCUNIT_Init()           System_Init()&lt;br /&gt;
#define UCUNIT_Shutdown()       System_Shutdown()&lt;br /&gt;
#define UCUNIT_Safestate()      System_Safestate()&lt;br /&gt;
#define UCUNIT_Recover()        System_Recover()&lt;br /&gt;
#define UCUNIT_WriteString(msg) System_WriteString(msg)&lt;br /&gt;
#define UCUNIT_WriteInt(n)      System_WriteInt(n)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das mitgeliefert Beispiel lässt sich für den i386 mit dem GNU gcc kompilieren und direkt ausführen,&lt;br /&gt;
so dass man ein Gefühl dafür bekommt, wie die Ausgabe aussieht.&lt;br /&gt;
Im Verzeichnis arm befindet sich ein Makefile, das man mit Hilfe arm-elf-gcc für den&lt;br /&gt;
ARM Prozessor kompilieren kann und mit Hilfe von arm-elf-run auch ausführen kann.&lt;br /&gt;
&lt;br /&gt;
== Prinzip ==&lt;br /&gt;
&lt;br /&gt;
Während bei den üblichen Unit-Testframeworks sog. Assertions zum Einsatz kommen, wird&lt;br /&gt;
in uCUnit ein etwas anderes Konzept verwendet, das von &amp;quot;Design-by-Contract&amp;quot; inspiriert wurde.&lt;br /&gt;
&lt;br /&gt;
Assertions brechen das Programm ab - dies kann bei Embedded Systems je nach Anwendung und&lt;br /&gt;
Situation kritisch sein. Zunächst muss die Hardware in einen sicheren Zustand gebracht werden&lt;br /&gt;
oder kontrolliert heruntergefahren werden.&lt;br /&gt;
&lt;br /&gt;
In uCUnit sind die zentralen Element sog. Checks, die in einer Checkliste organisiert sind.&lt;br /&gt;
Zu Beginn einer Checkliste teilt man mit, welche Aktion im Falle eines fehlgeschlagenen Checks&lt;br /&gt;
ausgeführt werden soll.&lt;br /&gt;
&lt;br /&gt;
== Aufbau eines Testfalls ==&lt;br /&gt;
&lt;br /&gt;
Ein Testfall baut sich im Prinzip immer so auf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
Testfall Beginn&lt;br /&gt;
  /* Checkliste für Vorbedingungen */&lt;br /&gt;
  Checkliste Beginn ( Aktion )&lt;br /&gt;
    Check 1&lt;br /&gt;
    Check 2&lt;br /&gt;
    Check 3&lt;br /&gt;
    ...&lt;br /&gt;
  Checkliste Ende&lt;br /&gt;
&lt;br /&gt;
  Ausführung Code, Funktionsaufruf, etc.&lt;br /&gt;
&lt;br /&gt;
  /* Checkliste für Nachbedingungen */&lt;br /&gt;
  Checkliste Beginn ( Aktion )&lt;br /&gt;
    Check 1&lt;br /&gt;
    Check 2&lt;br /&gt;
    Check 3&lt;br /&gt;
    ...&lt;br /&gt;
  Checkliste Ende&lt;br /&gt;
Testfall Ende&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel Flugzeuglandung ==&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel verdeutlicht das Konzept:&lt;br /&gt;
&lt;br /&gt;
Vor einer Flugzeuglandung wird eine Checkliste abgearbeitet:&lt;br /&gt;
&lt;br /&gt;
# Ist das Fahrwerk ausgefahren und eingerastet?&lt;br /&gt;
# Sind die Landeklappen in der richtigen Stellung?&lt;br /&gt;
# Sind die Bremsen bereit?&lt;br /&gt;
&lt;br /&gt;
Erst wenn die komplette Checkliste ohne Fehler abgearbeitet ist, gibt es grünes&lt;br /&gt;
Licht zur Landung.&lt;br /&gt;
&lt;br /&gt;
Wenn man sich nun vorstellt, die Landung des Flugzeugs zu automatisieren,&lt;br /&gt;
könnte man eine Funktion PrepareLanding() schreiben. Diese soll die&lt;br /&gt;
notwendingen Tätigkeiten ausführen, die zur Landevorbereitung nötig sind.&lt;br /&gt;
&lt;br /&gt;
Die Implementierung der Funktion PrepareLanding() soll nun getestet&lt;br /&gt;
werden. Konkret würde das in etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void Test_PrepareLanding(void)&lt;br /&gt;
{&lt;br /&gt;
    UCUNIT_TestcaseBegin(&amp;quot;PrepareLanding()&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    /* Checkliste für Vorbedingungen */&lt;br /&gt;
    UCUNIT_ChecklistBegin(UCUNIT_ACTION_WARNING);         /* Fehlgeschlagene Checks werden nur ausgegeben */&lt;br /&gt;
    UCUNIT_CheckIsEqual(GEAR_STATUS_INSIDE, gear_status); /* Ist das Fahrwerk drinnen? */&lt;br /&gt;
    UCUNIT_CheckIsEqual(FLIGHT_ANGLE, landing_flaps);     /* Sind die Landeklappen im Normalzustand? */&lt;br /&gt;
    UCUNIT_CheckIsEqual(BREAK_STATUS_OPEN, break_status); /* Sind die Bremsen geöffnet? */&lt;br /&gt;
    UCUNIT_ChecklistEnd()&lt;br /&gt;
&lt;br /&gt;
    PrepareLanding();&lt;br /&gt;
&lt;br /&gt;
    /* Checkliste für Nachbedingungen */&lt;br /&gt;
    UCUNIT_ChecklistBegin(UCUNIT_ACTION_SAFESTATE);&lt;br /&gt;
    UCUNIT_CheckIsEqual(GEAR_STATUS_OUTSIDE, gear_status); /* Ist das Fahrwerk draussen? */&lt;br /&gt;
    UCUNIT_CheckIsEqual(LANDING_ANGLE, landing_flaps);     /* Sind die Landeklappen im richtigen Landewinkel? */&lt;br /&gt;
    UCUNIT_CheckIsEqual(BREAK_STATUS_READY, break_status); /* Sind die Bremsen bereit? */&lt;br /&gt;
    UCUNIT_ChecklistEnd();&lt;br /&gt;
&lt;br /&gt;
    UCUNIT_TestcaseEnd();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Code Coverage ==&lt;br /&gt;
&lt;br /&gt;
Für sicherheitskritische Systeme ist eine gewisse Testabdeckung vorgeschrieben. Hierfür&lt;br /&gt;
bietet uCUnit sogenannte Tracepoints. Diese werden in den Testcode eingebaut.&lt;br /&gt;
&lt;br /&gt;
Wenn ein Tracepoint ausgeführt wird, ändert er seinen Status. Dieser kann dann später mit Hilfe&lt;br /&gt;
von Checks abgefragt werden. Deutlicher wird die Verwendung, wenn man sich das mitgelieferte&lt;br /&gt;
Beispiel ansieht.&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
&lt;br /&gt;
In der Praxis hört man vielfach, dass man Embedded Systems nur schlecht testen kann, weil man&lt;br /&gt;
direkten Hardwarezugriff benötigt. Aber es gibt viele Funktionen, die keinen Hardwarezugriff&lt;br /&gt;
benötigen. Gerade im Bereich der digitalen Signalverarbeitung sind Algorithmen und Berechnungen&lt;br /&gt;
zu testen.&lt;br /&gt;
&lt;br /&gt;
Beispiele wären:&lt;br /&gt;
&lt;br /&gt;
* Ringpuffer Funktionen&lt;br /&gt;
* Berechnung von Checksummen&lt;br /&gt;
* FFT&lt;br /&gt;
* PID-Regler&lt;br /&gt;
* Filter&lt;br /&gt;
* Skalierung von Sensordaten&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Aber auch Treiber kann man testen, wenn man im Design des Treibers auf das Testen auslegt.&lt;br /&gt;
So kann z.&amp;amp;nbsp;B. ein Loopback-Interface verwendet werden. Das Zeichen das auf die Schnittstelle&lt;br /&gt;
geschrieben wird, muss auch wieder beim Einlesen ankommen.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist, z.&amp;amp;nbsp;B. Sensordaten aufzunehmen und diese als Array im Testfall&lt;br /&gt;
abzuarbeiten.&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von Unit-Testframeworks ist es möglich, Modultests zur&lt;br /&gt;
Qualitätssicherung durchzuführen. uCUnit bietet speziell angepasste Funktionen,&lt;br /&gt;
die man im Bereich von Embedded Systems und Mikrocontrollern einsetzen kann.&lt;br /&gt;
&lt;br /&gt;
Im Hinblick auf die Verwendung von Funktionen für mehrere Prozessoren,&lt;br /&gt;
müssen diese auf jeder Plattform korrekt funktionieren - und dafür sind Tests unerlässlich&lt;br /&gt;
wenn man keine bösen Überraschungen erleben möchte, die dann in tagelanger Sucherei im Code&lt;br /&gt;
enden.&lt;br /&gt;
&lt;br /&gt;
== Downloads == &lt;br /&gt;
&lt;br /&gt;
Homepage und Download: http://www.ucunit.org&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Check: http://check.sourceforge.net/&lt;br /&gt;
* CUnit: http://cunit.sourceforge.net/&lt;br /&gt;
* MinUnit: http://www.jera.com/techinfo/jtns/jtn002.html&lt;br /&gt;
* Embedded Unit: http://embunit.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
[[Category:1. Wettbewerb]][[Kategorie:C]]&lt;/div&gt;</summary>
		<author><name>Johnpatcher</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_f%C3%BCr_Einsteiger&amp;diff=80866</id>
		<title>STM32 für Einsteiger</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_f%C3%BCr_Einsteiger&amp;diff=80866"/>
		<updated>2014-01-15T13:07:54Z</updated>

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

		<summary type="html">&lt;p&gt;Johnpatcher: /* Englisch */ Bild der englischen Version im entsprechenden Artikel hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Was ist das? =&lt;br /&gt;
&lt;br /&gt;
[[Datei:wordclock-frontplatte-v2.png| |WordClock]]&lt;br /&gt;
&lt;br /&gt;
Es geht hier um folgenden Thread [1], in dem der Bau einer Uhr diskutiert wird. Als Inspiration kann diese [2] dienen. Es wird keine patentrechtlich bedenkliche Kopie :-)&amp;lt;br&amp;gt;&lt;br /&gt;
[1] [http://www.mikrocontroller.net/topic/156661#new Beitrag: Brauche Hilfe beim Bau einer Uhr]&amp;lt;br&amp;gt;&lt;br /&gt;
[2] [http://www.qlocktwo.com http://www.qlocktwo.com]&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://www.mikrocontroller.net/topic/gallery/156661 Bildergalerie zur Entstehungsgeschichte]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
= Frontplatte =&lt;br /&gt;
== Konzept ==&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/topic/156661#1481337 Brauche Hilfe beim Bau einer Uhr]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei interesse an einer Frontplatte kann man mir (Benutzer [http://www.mikrocontroller.net/user/show/ukw ukw]) eine Nachricht hinterlassen,&lt;br /&gt;
siehe auch [http://www.mikrocontroller.net/articles/Word_Clock#Sammelbestellung_Frontplatte Sammelbestellung Frontplatte].&lt;br /&gt;
&lt;br /&gt;
2 Versionen sind vorgesehen, jeweils in 45cm x 45cm&lt;br /&gt;
&lt;br /&gt;
* Deutsch mit Bezeichnung &amp;quot;viertel vor&amp;quot; und &amp;quot;drei Viertel&amp;quot; - per Software einstellbar&lt;br /&gt;
* Englisch&lt;br /&gt;
&lt;br /&gt;
Die Minutenanzeige (1 - 4 Minuten) werden jeweils mit einem Punkt an der Ecke der Frontplatte dargestellt.&lt;br /&gt;
----&lt;br /&gt;
=== Deutsch (3-sprachig) ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:WordClock-gelb.jpg|miniatur|3-sprachige Frontplatte]]&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version, die auch für die Sammelbestellung gilt:&lt;br /&gt;
&lt;br /&gt;
 E S K I S T L F Ü N F    &amp;lt;nowiki&amp;gt;==&amp;gt; ES IST FÜNF&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 Z E H N Z W A N Z I G    &amp;lt;nowiki&amp;gt;==&amp;gt; ZEHN ZWANZIG&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 D R E I V I E R T E L    &amp;lt;nowiki&amp;gt;==&amp;gt; DREI|VIERTEL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 T G N A C H V O R J M    &amp;lt;nowiki&amp;gt;==&amp;gt; NACH VOR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 H A L B Q Z W Ö L F P    &amp;lt;nowiki&amp;gt;==&amp;gt; HALB ZWÖLF&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 Z W E I N S I E B E N    &amp;lt;nowiki&amp;gt;==&amp;gt; ZW|EI|N|S|IEBEN&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 K D R E I R H F Ü N F    &amp;lt;nowiki&amp;gt;==&amp;gt; DREI FÜNF&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 E L F N E U N V I E R    &amp;lt;nowiki&amp;gt;==&amp;gt; ELF NEUN VIER&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 W A C H T Z E H N R S    &amp;lt;nowiki&amp;gt;==&amp;gt; ACHT ZEHN&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 B S E C H S F M U H R    &amp;lt;nowiki&amp;gt;==&amp;gt; SECHS UHR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist es möglich 3 regionale Sprechweisen darzustellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Folgende Schreibweisen werden unterstützt:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wessi-Modus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  es ist ein uhr&lt;br /&gt;
  es ist fünf nach eins&lt;br /&gt;
  es ist zehn nach eins&lt;br /&gt;
  es ist viertel nach eins&lt;br /&gt;
  es ist zehn vor halb zwei&lt;br /&gt;
  es ist fünf vor halb zwei&lt;br /&gt;
  es ist halb zwei&lt;br /&gt;
  es ist fünf nach halb zwei&lt;br /&gt;
  es ist zehn nach halb zwei&lt;br /&gt;
  es ist viertel vor zwei&lt;br /&gt;
  es ist zehn vor zwei&lt;br /&gt;
  es ist fünf vor zwei&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rhein-Ruhr-Modus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  es ist ein uhr&lt;br /&gt;
  es ist fünf nach eins&lt;br /&gt;
  es ist zehn nach eins&lt;br /&gt;
  es ist viertel nach eins&lt;br /&gt;
  es ist zwanzig nach eins&lt;br /&gt;
  es ist fünf vor halb zwei&lt;br /&gt;
  es ist halb zwei&lt;br /&gt;
  es ist fünf nach halb zwei&lt;br /&gt;
  es ist zwanzig vor zwei&lt;br /&gt;
  es ist viertel vor zwei&lt;br /&gt;
  es ist zehn vor zwei&lt;br /&gt;
  es ist fünf vor zwei&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ossi-Modus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  es ist ein uhr&lt;br /&gt;
  es ist fünf nach eins&lt;br /&gt;
  es ist zehn nach eins&lt;br /&gt;
  es ist viertel zwei&lt;br /&gt;
  es ist zehn vor halb zwei&lt;br /&gt;
  es ist fünf vor halb zwei&lt;br /&gt;
  es ist halb zwei&lt;br /&gt;
  es ist fünf nach halb zwei&lt;br /&gt;
  es ist zehn nach halb zwei&lt;br /&gt;
  es ist dreiviertel zwei&lt;br /&gt;
  es ist zehn vor zwei&lt;br /&gt;
  es ist fünf vor zwei&lt;br /&gt;
&lt;br /&gt;
Hier der aktuelle Entwurf der Buchstaben-Anordnung als Bild: &#039;&#039;&#039;[[Media:WordclockFront_gerV2.pdf]]&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
=== Deutsch (2-sprachig) ===&lt;br /&gt;
Eine ältere Version, die zu Referenzzwecken genannt werden sollte:&lt;br /&gt;
&lt;br /&gt;
 E S K I S T A F Ü N F    &amp;lt;nowiki&amp;gt;==&amp;gt; ES IST FÜNF&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 U Z E H N F M V O R G    &amp;lt;nowiki&amp;gt;==&amp;gt; ZEHN VOR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 D R E I V I E R T E L    &amp;lt;nowiki&amp;gt;==&amp;gt; DREI VIERTEL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 N A C H V O R H A L B    &amp;lt;nowiki&amp;gt;==&amp;gt; NACH VOR HALB&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 X F Ü N F R S Z W E I    &amp;lt;nowiki&amp;gt;==&amp;gt; FÜNF ZWEI&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 S I E B E N A V I E R    &amp;lt;nowiki&amp;gt;==&amp;gt; SIEBEN VIER&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 Z E H N T G S E C H S    &amp;lt;nowiki&amp;gt;==&amp;gt; ZEHN SECHS&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 L D R E I U A C H T J    &amp;lt;nowiki&amp;gt;==&amp;gt; DREI ACHT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 E L F N E U N E I N S    &amp;lt;nowiki&amp;gt;==&amp;gt; ELF NEUN EIN|S&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 B Z W Ö L F R H U H R    &amp;lt;nowiki&amp;gt;==&amp;gt; ZWÖLF UHR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Version enthält nur den Wessi- und den Ossimodus.&lt;br /&gt;
&lt;br /&gt;
Als Bild: &#039;&#039;&#039;[[Media:WordclockFront_ger.pdf]]&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
=== Englisch ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-frontpanel.png|miniatur|Frontplatte: English]]&lt;br /&gt;
&lt;br /&gt;
 I T K I S G H A L F E   &amp;lt;nowiki&amp;gt;==&amp;gt;  it_is half&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 T E N Y Q U A R T E R   &amp;lt;nowiki&amp;gt;==&amp;gt;  ten quarter&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 D T W E N T Y F I V E   &amp;lt;nowiki&amp;gt;==&amp;gt;  twenty|five&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 T O P A S T E F O U R   &amp;lt;nowiki&amp;gt;==&amp;gt;  to past four&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 F I V E T W O N I N E   &amp;lt;nowiki&amp;gt;==&amp;gt;  five two nine&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 T H R E E T W E L V E   &amp;lt;nowiki&amp;gt;==&amp;gt;  three twelve&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 B E L E V E N O N E S   &amp;lt;nowiki&amp;gt;==&amp;gt;  eleven one&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 S E V E N W E I G H T   &amp;lt;nowiki&amp;gt;==&amp;gt;  seven eight&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 I T E N S I X T I E S   &amp;lt;nowiki&amp;gt;==&amp;gt;  ten six&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 T I N E O I C L O C K   &amp;lt;nowiki&amp;gt;==&amp;gt;  o_clock&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und als PDF: &#039;&#039;&#039;[[Media:WordclockFront_eng.pdf]]&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Sammelbestellung (Plexiglas) ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-front-dia.jpg|miniatur|Frontplatte: Dia]]&lt;br /&gt;
[[Datei:Wordclock-front-full.jpg|miniatur|Frontplatte: Vollansicht]]&lt;br /&gt;
[[Datei:WordClock-gelb.jpg|miniatur|3-sprachige Frontplatte]]&lt;br /&gt;
&lt;br /&gt;
Stand Januar 2014:&lt;br /&gt;
&lt;br /&gt;
Die Frontplatten aus der letzten Sammelbestellung sind vergriffen. Aber es ist bereits eine neue Sammelbestellung geplant. Diese läuft bis zum 24.01.2014. Dann werde ich bestellen. Ich rechne mit der Lieferung Anfang Februar. Wer sich beteiligen möchte, sollte sich bei mir (Benutzer [http://www.mikrocontroller.net/user/show/ukw &#039;&#039;&#039;ukw&#039;&#039;&#039;]) melden.&lt;br /&gt;
&lt;br /&gt;
Die Platten bestehen aus einer Plexi-Scheibe (3mm) in der Größe 45cm x 45cm und werden im Siebdruckverfahren bedruckt. Dabei wird die Scheibe von hinten zunächst mit einer Mehrfach-Schicht schwarzer Farbe bedruckt, damit sie lichtdicht ist. Lediglich die Buchstaben und Minutenpunkte bleiben frei. Anschließend kommt noch optional eine dünne weiße Schicht komplett deckend über die schwarze Farbe, sodass sie als Diffusor für die Buchstaben und Minutenpunkte wirkt.&lt;br /&gt;
&lt;br /&gt;
Lediglich die Variante &#039;A&#039; ist vorgesehen:&lt;br /&gt;
&lt;br /&gt;
  - A: 45cm x 45cm mit weißer Schicht als Diffusor&lt;br /&gt;
&lt;br /&gt;
Der Preis dafür beträgt pro Stück 38,- EUR.&lt;br /&gt;
&lt;br /&gt;
Hinzu kommen noch 10 EUR Versandkosten für bis zu 4 Stück in einem Paket. Bei Versand in ein EU-Land kommen weitere 10 EUR hinzu, also insgesamt 20 EUR. Bei Versand in die Schweiz sind es 15 EUR zusätzlich, also insgesamt 25 EUR.&lt;br /&gt;
&lt;br /&gt;
Parallel zu dieser Sammelbestellung gibt es auch eine Sammelbestellung für die Platinen, siehe:&lt;br /&gt;
&lt;br /&gt;
[[Word_Clock_Variante_1#Sammelbestellung_der_Platine]]&lt;br /&gt;
&lt;br /&gt;
Die Frontplatte beinhalt alle 3 Sprachversionen:&lt;br /&gt;
&lt;br /&gt;
* Wessi-Modus (viertel nach/vor)&lt;br /&gt;
* Ossi-Modus (viertel/dreiviertel)&lt;br /&gt;
* Rhein-Ruhr-Modus (viertel nach/vor, zwanzig nach/vor)&lt;br /&gt;
&lt;br /&gt;
Wer an der Sammelbestellung teilnehmen möchte, kann sich bei mir (Benutzer [http://www.mikrocontroller.net/user/show/ukw ukw]) per PN melden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WICHTIG:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Frontplatte wird mit einer kaum wahrnehmbaren Schutzfolie auf der Vorderseite geliefert. Wenn man das nicht weiß, kann es so aussehen, als ob die Frontplatte &amp;quot;verkratzt&amp;quot; sei. Diese &amp;quot;Kratzer&amp;quot; sind aber nur auf der Schutzfolie, nicht auf der Platte selbst. Daher hier nochmal der ausdrückliche Hinweis: Bitte die Schutzfolie abziehen und sich dann freuen :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kleber welcher den Aufdruck nicht beschädigt:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- UHU plus endfest 300 2K-Epoxidkleber&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Sammelbestellung (Edelstahl) ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Edelstahl126.jpg|miniatur]][[Datei:Edelstahl139.jpg|miniatur]][[Datei:Edelstahl092.jpg|miniatur|Loch]][[Datei:Edelstahl116.jpg|miniatur|Buchstabe]]&lt;br /&gt;
Eckdaten der Edelstahlblende:&lt;br /&gt;
&lt;br /&gt;
  - Abmaße: ca. 450x450x1 mm &lt;br /&gt;
  - gelasert gem. dxf Vorgabe, &lt;br /&gt;
  - Material 1.4301-2G, &lt;br /&gt;
  - eins. K320 geschliffen/gebürstet, &lt;br /&gt;
  - ohne weitere Nachbearbeitung, &lt;br /&gt;
  - Layout unterscheidet sich von der Orginaluhr&lt;br /&gt;
&lt;br /&gt;
Verwendet wird hierbei die Schriftart Lucida Console allerdings erweitert. Die Schriftart hat Stege, so dass freie Inselteile (z.&amp;amp;nbsp;B. Innenteil O) nicht lose sind. Jeder Steg hat eine Breite von mind. 2mm.&lt;br /&gt;
[[Datei:Edelstahlfront_V2.png|miniatur|ohne]]&lt;br /&gt;
Die Buchstaben werden entsprechend ausgelasert und müssen von hinten noch mit einem Diffusor versehen werden. Der Diffusor ist nicht Bestandteil des Angebots. &lt;br /&gt;
&lt;br /&gt;
Hinweise zum Diffusor findet ihr hier: &amp;lt;br /&amp;gt;&lt;br /&gt;
http://christians-bastel-leben.blogspot.de/2012/04/diffusorfolien.html&lt;br /&gt;
&lt;br /&gt;
Er hat die Folien mit der schwarzen Platte getestet. Er sagt die besten Ergebnisse hatte er mit folgender Folie:&amp;lt;br /&amp;gt;&lt;br /&gt;
http://www.plexiglas-shop.com/DE/de/plexiglas-folie-5m9m5apyxic/plexiglas-folie-weiss-99532-gt-1-0-mm-iqq6a1wurpd~p.html&lt;br /&gt;
&lt;br /&gt;
Eine Plexiglasplatte hatte ich auch getestet, doch war meine zu breit und sah dann nicht gut aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aktueller Stand: 03.12.2013: Alle Frontblenden sind verschickt. Viel Spass damit und schickt mir doch Bilder eurer Uhren. Interessenten für eine weitere Sammelbestellung können sich gerne melden. Bei Interesse an einer Blende bitte eine Nachricht hinterlassen (Benutzer [http://www.mikrocontroller.net/user/show/hansa hansa]). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preise der Blenden (28.11.2013):&lt;br /&gt;
&lt;br /&gt;
  Frontblende:                  40 Euro (inkl.MwSt). Endgültiger Preis ist abhängig von der Anzahl Besteller.&lt;br /&gt;
  Verpackung :                   4,-  Euro (2 x 3mm MDF, als Rückwand verwendbar)&lt;br /&gt;
  Versand per DHL-online      :  6 Euro&lt;br /&gt;
  Versand in die Schweiz: Muss noch geprüft werden (kann direkt in der Schweiz verschickt werden)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für den Selbstnachbau hier die DXF-Datei [[Datei:EdelstahlFrontV2.dxf]]&lt;br /&gt;
&lt;br /&gt;
ACHTUNG: Diese Dateidaten müssen um Faktor 10 vergrössert werden!&lt;br /&gt;
Sonst kommt eine 45x45mm Platte an. 8-(&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Zwischenplatte =&lt;br /&gt;
Die Zwischenplatte befindet sich zwischen den LEDs und der Frontplatte. Sie schränkt die Leuchtweite der LEDs auf die einzelnen Buchstaben bzw. Wörter ein. Die folgenden Ausführungen und Maße beziehen sich auf eine 45x45cm große Front- und eine ebenso große Zwischenplatte.&lt;br /&gt;
&lt;br /&gt;
Bei Einzelbeleuchtung der Buchstaben kann für jeden Buchstaben ein Loch von ca. 24mm Durchmesser gebohrt werden. Die Positionierung kann dabei dieser Skizze entnommen werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:WordClock_Zwischenplatte.jpg|miniatur|ohne]]&lt;br /&gt;
&lt;br /&gt;
Wahlweise kann auch bei Gesamtbeleuchtung der einzelnen Wörter ein rechteckiger Ausschnitt erfolgen (z.&amp;amp;nbsp;B. bei Verwendung einer Hartschaumplatte). Der Aufbau kann dann ähnlich folgender Skizze erfolgen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:WordClock_Zwischenplatte_Kasten.jpg|miniatur|ohne]]&lt;br /&gt;
&lt;br /&gt;
Zusätzlich gibt es dazu noch eine Step Datei und eine 3D PDF Datei&lt;br /&gt;
&lt;br /&gt;
[[Datei:ZWISCHENPLATTE_UHR.STP]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:ZWISCHENPLATTE_UHR.pdf]]&lt;br /&gt;
&lt;br /&gt;
Wer mit der Oberfräse selber ran will hier die Frästiefen:&lt;br /&gt;
Plattenstärke 19 mm&lt;br /&gt;
Die Ausfräsungen für die LEDs sind 12 mm breit und 2 mm tief, die für die Kabel 12 mm breit und 8 mm tief, die &amp;quot;Taschen&amp;quot; für die Elektronik ist 15 mm tief und 34,7*200 mm.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== Sammelbestellung ==&lt;br /&gt;
Es wird ebenfalls eine Sammelbestellung für die 45er Zwischenböden aus MDF geben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:2010_WordClock_055.JPG|250px]]&lt;br /&gt;
[[Datei:2010_WordClock_057.JPG|250px]]&lt;br /&gt;
[[Datei:2010_WordClock_058.JPG|250px]]&lt;br /&gt;
[[Datei:2010_WordClock_059.JPG|250px]]&lt;br /&gt;
[[Datei:2010_WordClock_060.JPG|250px]]&lt;br /&gt;
[[Datei:2010_WordClock_061.JPG|250px]]&lt;br /&gt;
&lt;br /&gt;
Wem die Bilder zu klein sind, kann diese auch bei Flickr finden:&lt;br /&gt;
http://www.flickr.com/photos/wawibu/sets/72157623755645878/&lt;br /&gt;
&lt;br /&gt;
Auf den Bildern seht ihr den letzten Prototypen. Folgende Änderungen&lt;br /&gt;
werden in der finalen Version vorgenommen:&lt;br /&gt;
&lt;br /&gt;
* die &amp;quot;Taschen&amp;quot; sind nach vorne zu&lt;br /&gt;
* die &amp;quot;Taschen&amp;quot; werden über Kanalfräsungen miteinander verbunden&lt;br /&gt;
* die MinutenLEDs werden ebenfalls an die Kanalfräsungen angebunden&lt;br /&gt;
&lt;br /&gt;
Also im Großen und Ganzen werden die Platten dann ähnlich der von&lt;br /&gt;
Michael&lt;br /&gt;
&amp;gt;&amp;gt; http://www.mikrocontroller.net/topic/156661#1720539&lt;br /&gt;
&lt;br /&gt;
Vertiefungen von vorne für Magnete wird es nicht geben, da dafür das&lt;br /&gt;
Werkstück umgespannt und wieder ausgerichtet werden müsste. Der Aufwand&lt;br /&gt;
steht - nach meinem Verständnis - in keinem Verhältnis zu vier Löchern.&lt;br /&gt;
&lt;br /&gt;
Der Versand erfolgt jeweils einzeln verpackt, wobei bis zu 5&lt;br /&gt;
Zwischenböden als ein Paket versendet werden können (6 geht sicherlich&lt;br /&gt;
auch). Möchte nur das Paket nicht zu schwer machen.&lt;br /&gt;
&lt;br /&gt;
Da der Versand per DHL oder Hermes gleich teuer ist, habe ich mich für&lt;br /&gt;
DHL entschieden. Da habe ich gute Erfahrungen mit der Laufzeit und kann&lt;br /&gt;
die Pakete dann auch abholen lassen.&lt;br /&gt;
&lt;br /&gt;
=== 2te Sammelbestellung ===&lt;br /&gt;
&lt;br /&gt;
Auch die 2te Sammelbestellung der Zwischenböden ist nun abgeschlossen.&lt;br /&gt;
(Stand: 17.01.2011)&lt;br /&gt;
&lt;br /&gt;
=== 3te Sammelbestellung ===&lt;br /&gt;
Die dritte Sammelbestellung der Zwischenböden ist abgeschlossen (23.6.11).&lt;br /&gt;
&lt;br /&gt;
=== Aktuelle Sammelbestellung ===&lt;br /&gt;
Die Zwischenböden werden im Zuge der Sammelbestellungen für die Streifenplatinen angeboten.&amp;lt;br&amp;gt;Weitere Details hierzu sind im Word Clock Variante 1 Artikel zu finden oder hier: &amp;gt;&amp;gt; http://www.mikrocontroller.net/articles/Word_Clock_Variante_1#Sammelbestellung &amp;lt;&amp;lt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Elektronik &amp;amp; Software =&lt;br /&gt;
== [[Word Clock Variante 1|Variante 1: Getrennte Haupt- und Anzeigeplatine]] ==&lt;br /&gt;
&lt;br /&gt;
Die Elektronik besteht hier aus einem zentralen Teil mit Controller und Treibern und 11 Streifenplatinen mit den LEDs. Diese Variante ist bereits erprobt und betriebsbereit.&lt;br /&gt;
&lt;br /&gt;
== [[Word Clock Variante 2|Variante 2: All-In-One Lösung]] ==&lt;br /&gt;
&lt;br /&gt;
Bei der Variante 2 finden sich Steuerung und Anzeige auf einer einzigen (großen) Platine. Diese Variante befindet sich noch im Entwurfsstadium.&lt;br /&gt;
&lt;br /&gt;
== [[Word Clock Variante 3|Variante 3: 160x160mm Singleboard]] ==&lt;br /&gt;
&lt;br /&gt;
Variante 3 ist mit 160x160mm relativ kompakt und kommt auf einer eizelnen Platine unter. Diese Variante ist komplett funktionsfähig.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Word Clock als PC-Programm =&lt;br /&gt;
[http://bralug.de/wiki/Wort_Uhr Hier] ist der [http://bralug.de/wiki/Wort_Uhr Quelltext] zu einer X11-Version der Word Clock zu finden.&lt;br /&gt;
&lt;br /&gt;
Unter http://gallery.live.com/liveItemDetail.aspx?li=ff7bdb70-4c69-4e97-9a8a-2afb1a9fbea7 ist die Uhr als Gadget für Windows Vista/Windows 7 zu finden (leider offline...)&lt;br /&gt;
&lt;br /&gt;
[[Category:Timer und Uhren]]&lt;br /&gt;
[[Category:AVR-Projekte]]&lt;br /&gt;
[[Category:DCF77]]&lt;/div&gt;</summary>
		<author><name>Johnpatcher</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Wordclock-frontpanel.png&amp;diff=80859</id>
		<title>Datei:Wordclock-frontpanel.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Wordclock-frontpanel.png&amp;diff=80859"/>
		<updated>2014-01-14T19:27:20Z</updated>

		<summary type="html">&lt;p&gt;Johnpatcher: English frontpanel of the Wordclock.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;English frontpanel of the Wordclock.&lt;/div&gt;</summary>
		<author><name>Johnpatcher</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Arithmetik8&amp;diff=77624</id>
		<title>AVR-Tutorial: Arithmetik8</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Arithmetik8&amp;diff=77624"/>
		<updated>2013-07-16T23:54:31Z</updated>

		<summary type="html">&lt;p&gt;Johnpatcher: Rechtschreibfehler verbessert.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine der Hauptaufgaben eines Mikrokontrollers bzw. eines Computers allgemein, ist es, irgendwelche Berechnungen anzustellen. Der Löwenanteil an den meisten Berechnungen entfällt dabei auf einfache Additionen bzw. Subtraktionen. Multiplikationen bzw. Divisionen kommen schon seltener vor, bzw. können oft durch entsprechende Additionen bzw. Subtraktionen ersetzt werden. Weitergehende mathematische Konstrukte werden zwar auch ab und an benötigt, können aber in der Assemblerprogrammierung durch geschickte Umformungen oft vermieden werden.&lt;br /&gt;
&lt;br /&gt;
== Hardwareunterstützung ==&lt;br /&gt;
&lt;br /&gt;
Praktisch alle Mikroprozessoren unterstützen Addition und Subtraktion direkt in Hardware, das heißt: Sie haben eigene Befehle dafür. Einige bringen auch Unterstützung für eine Hardwaremultiplikation mit (so zum Beispiel der [[ATmega8]]), während Division in Hardware schon seltener zu finden ist.&lt;br /&gt;
&lt;br /&gt;
== 8 Bit versus 16 Bit ==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt des Tutorials wird gezielt auf 8 Bit Arithmetik eingegangen, um zunächst die Grundlagen des Rechnens mit einem µC zu zeigen. Die Erweiterung von 8 Bit auf 16 Bit Arithmetik ist in einigen Fällen wie Addition und Subtraktion trivial, kann sich aber bei Multiplikation und Division in einem beträchtlichen Codezuwachs niederschlagen.&lt;br /&gt;
&lt;br /&gt;
Der im Tutorial verwendete ATmega8 besitzt eine sog. 8-Bit Architektur. Das heißt, dass seine Rechenregister (mit Ausnahmen) nur 8 Bit breit sind und sich daher eine 8-Bit Arithmetik als die natürliche Form der Rechnerei auf diesem Prozessor anbietet. Berechnungen, die mehr als 8 Bit erfordern, müssen dann durch Kombinationen von Rechenvorgängen realisiert werden. Eine Analogie wäre z.&amp;amp;nbsp;B. das Rechnen, wie wir alle es in der Grundschule gelernt haben. Auch wenn wir in der Grundschule (in den Anfängen) nur die Additionen mit Zahlen kleiner als 10 auswendig gelernt haben, so können wir dennoch durch die Kombination von mehreren derartigen Additionen beliebig große Zahlen addieren. Das gleiche gilt für Multiplikationen. In der Grundschule musste wohl jeder von uns das &#039;Kleine Einmaleins&#039; auswendig lernen, um Multiplikationen im Zahlenraum bis 100 quasi &#039;in Hardware&#039; zu berechnen. Und doch können wir durch Kombinationen solcher Einfachmultiplikationen und zusätzlichen Additionen in beliebig große Zahlenräume vorstoßen.&lt;br /&gt;
&lt;br /&gt;
Die Einschränkung auf 8 Bit ist also keineswegs eine Einschränkung in dem Sinne, dass es eine prinzipielle Obergrenze für Berechnungen gäbe. Sie bedeutet lediglich eine obere Grenze dafür, bis zu welchen Zahlen in einem Rutsch gerechnet werden kann. Alles, was darüber hinausgeht, muss dann mittels Kombinationen von Berechnungen gemacht werden.&lt;br /&gt;
&lt;br /&gt;
== 8-Bit Arithmetik ohne Berücksichtigung eines Vorzeichens ==&lt;br /&gt;
&lt;br /&gt;
Die Bits des Registers besitzen dabei eine Wertigkeit, die sich aus der Stelle des Bits im Byte ergibt. Dies ist völlig analog zu dem uns vertrauten Dezimalsystem. Auch dort besitzt eine Ziffer in einer Zahl eine bestimmte Wertigkeit, je nach dem, an welcher Position diese Ziffer in der Zahl auftaucht. So hat z.&amp;amp;nbsp;B. die Ziffer 1 in der Zahl 12 die Wertigkeit &#039;Zehn&#039;, während sie in der Zahl 134 die Wertigkeit &#039;Hundert&#039; besitzt. Und so wie im Dezimalsystem die Wertigkeit einer Stelle immer das Zehnfache der Wertigkeit der Stelle unmittelbar rechts von ihr ist, so ist im Binärsystem die Wertigkeit einer Stelle immer das 2-fache der Stelle rechts von ihr.&lt;br /&gt;
&lt;br /&gt;
Die Zahl 4632 im Dezimalsystem kann also so aufgefasst werden:&lt;br /&gt;
&lt;br /&gt;
   4632  =     4 * 1000          ( 1000 = 10 hoch 3 )&lt;br /&gt;
            +  6 * 100           (  100 = 10 hoch 2 )&lt;br /&gt;
            +  3 * 10            (   10 = 10 hoch 1 )&lt;br /&gt;
            +  2 * 1             (    1 = 10 hoch 0 )&lt;br /&gt;
&lt;br /&gt;
=== Die Umwandlung von Binär in das Dezimalystem ===&lt;br /&gt;
&lt;br /&gt;
Völlig analog ergibt sich daher folgendes für z.&amp;amp;nbsp;B. die 8 Bit Binärzahl &amp;lt;b&amp;gt;0b10011011&amp;lt;/b&amp;gt; (um Binärzahlen von Dezimalzahlen zu unterscheiden, wird ein &amp;lt;b&amp;gt;0b&amp;lt;/b&amp;gt; vorangestellt):&lt;br /&gt;
&lt;br /&gt;
  0b10011011     =    1 * 128    ( 128 = 2 hoch 7 )&lt;br /&gt;
                   +  0 * 64     (  64 = 2 hoch 6 )&lt;br /&gt;
                   +  0 * 32     (  32 = 2 hoch 5 )&lt;br /&gt;
                   +  1 * 16     (  16 = 2 hoch 4 )&lt;br /&gt;
                   +  1 * 8      (   8 = 2 hoch 3 )&lt;br /&gt;
                   +  0 * 4      (   4 = 2 hoch 2 )&lt;br /&gt;
                   +  1 * 2      (   2 = 2 hoch 1 )&lt;br /&gt;
                   +  1 * 1      (   1 = 2 hoch 0 )&lt;br /&gt;
&lt;br /&gt;
Ausgerechnet (um die entsprechende Dezimalzahl zu erhalten) ergibt das&lt;br /&gt;
128 + 16 + 8 + 2 + 1 = 155. Die Binärzahl &amp;lt;b&amp;gt;0b10011011&amp;lt;/b&amp;gt; entspricht also der Dezimalzahl &amp;lt;b&amp;gt;155&amp;lt;/b&amp;gt;. Es ist wichtig, sich klar zu machen, dass es zwischen Binär- und Dezimalzahlen keinen grundsätzlichen Unterschied gibt. Beides sind nur verschiedene Schreibweisen für das Gleiche: Eine Zahl. Während wir Menschen an das Dezimalsystem gewöhnt sind, ist das Binärsystem für einen Computer geeigneter, da es nur aus den 2 Ziffern 0 und 1 besteht, welche sich leicht in einem Computer darstellen lassen (Spannung, keine Spannung).&lt;br /&gt;
&lt;br /&gt;
Welches ist nun die größte Zahl, die mit 8 Bit dargestellt werden kann? Dabei handelt es sich offensichtlich um die Zahl &amp;lt;b&amp;gt;0b11111111&amp;lt;/b&amp;gt;. In Dezimalschreibweise wäre das die Zahl&lt;br /&gt;
&lt;br /&gt;
    0b11111111   =   1  *  128&lt;br /&gt;
                   + 1  *  64&lt;br /&gt;
                   + 1  *  32&lt;br /&gt;
                   + 1  *  16&lt;br /&gt;
                   + 1  *  8&lt;br /&gt;
                   + 1  *  4&lt;br /&gt;
                   + 1  *  2&lt;br /&gt;
                   + 1  *  1&lt;br /&gt;
&lt;br /&gt;
oder ausgerechnet: &amp;lt;b&amp;gt;255&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird also mit 8 Bit Arithmetik betrieben, wobei alle 8 Bit als signifikante Ziffern benutzt werden (also kein Vorzeichenbit, dazu später mehr), so kann damit im Zahlenraum &amp;lt;b&amp;gt;0&amp;lt;/b&amp;gt; bis &amp;lt;b&amp;gt;255&amp;lt;/b&amp;gt; gerechnet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    Binär          Dezimal               Binär         Dezimal&lt;br /&gt;
&lt;br /&gt;
   0b00000000        0                 0b10000000       128&lt;br /&gt;
   0b00000001        1                 0b10000001       129&lt;br /&gt;
   0b00000010        2                 0b10000010       130&lt;br /&gt;
   0b00000011        3                 0b10000011       131&lt;br /&gt;
   0b00000100        4                 0b10000100       132&lt;br /&gt;
   0b00000101        5                 0b10000101       133&lt;br /&gt;
     ...                                      ...&lt;br /&gt;
   0b01111100      124                 0b11111100       252&lt;br /&gt;
   0b01111101      125                 0b11111101       253&lt;br /&gt;
   0b01111110      126                 0b11111110       254&lt;br /&gt;
   0b01111111      127                 0b11111111       255&lt;br /&gt;
&lt;br /&gt;
=== Die Umwandlung von Dezimal in das Binärsystem ===&lt;br /&gt;
&lt;br /&gt;
Aus dem vorhergehenden ergibt sich völlig zwanglos die Vorschrift, wie Binärzahlen ins Dezimalsystem umgewandelt werden können (nicht vergessen: Die Zahl selber wird ja gar nicht verändert. Binär- und Dezimalsystem sind ja nur verschiedene Schreibweisen): Durch Anwendung der Vorschrift, wie denn eigentlich ein Stellenwertsystem aufgebaut ist.&lt;br /&gt;
Aber wie macht man den umgekehrten Schritt, die Wandlung vom Dezimal ins Binärsystem. Der Weg führt über die Umkehrung des vorhergehenden Prinzips. Fortgesetzte Division durch 2&lt;br /&gt;
&lt;br /&gt;
Es sei die Zahl 92 ins Binärsystem zu wandeln.&lt;br /&gt;
&lt;br /&gt;
     92 / 2   =   46   Rest 0&lt;br /&gt;
     46 / 2   =   23   Rest 0&lt;br /&gt;
     23 / 2   =   11   Rest 1&lt;br /&gt;
     11 / 2   =    5   Rest 1&lt;br /&gt;
      5 / 2   =    2   Rest 1&lt;br /&gt;
      2 / 2   =    1   Rest 0&lt;br /&gt;
      1 / 2   =    0   Rest 1&lt;br /&gt;
&lt;br /&gt;
Die Division wird solange durchgeführt, bis sich ein Divisionergebnis von 0 ergibt. Die Reste, von unten nach oben gelesen, ergeben dann die Binärzahl. Die zu 92 gehörende Binärzahl lautet also 1011100. Es wird noch eine führende 0 ergänzt um sie auf die standardmässigen 8-Bit zu bringen: &amp;lt;b&amp;gt;0b01011100&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== 8-Bit Arithmetik mit Berücksichtigung eines Vorzeichens ==&lt;br /&gt;
&lt;br /&gt;
Soll mit Vorzeichen (also positiven und negativen Zahlen) gerechnet werden, so erhebt sich die Frage: Wie werden eigentlich positive bzw. negative Zahlen dargestellt? Alles was wir haben sind ja 8 Bit in einem Byte.&lt;br /&gt;
&lt;br /&gt;
=== Problem der Kodierung des Vorzeichens ===&lt;br /&gt;
&lt;br /&gt;
Die Lösung des Problems besteht darin, dass ein Bit zur Anzeige des Vorzeichens benutzt wird. Im Regelfall wird dazu das am weitesten links stehende Bit benutzt. Von den verschiedenen Möglichkeiten, die sich hiermit bieten, wird in der Praxis fast ausschließlich mit dem sog. 2-er Komplement gearbeitet, da es Vorteile bei der Addition bzw. Subtraktion von Zahlen bringt. In diesem Fall muß nämlich das Vorzeichen einer Zahl überhaupt nicht berücksichtigt werden. Durch die Art und Weise der Bildung von negativen Zahlen kommt am Ende das Ergebnis mit dem korrekten Vorzeichen heraus.&lt;br /&gt;
&lt;br /&gt;
=== 2-er Komplement ===&lt;br /&gt;
&lt;br /&gt;
Das 2-er Komplement verwendet das höchstwertige Bit eines Byte, das sog. MSB (= &amp;lt;b&amp;gt;M&amp;lt;/b&amp;gt;ost &amp;lt;b&amp;gt;S&amp;lt;/b&amp;gt;ignificant &amp;lt;b&amp;gt;B&amp;lt;/b&amp;gt;it) zur Anzeige des Vorzeichens. Ist dieses Bit 0, so ist die Zahl positiv. Ist es 1, so handelt es sich um eine negative Zahl. Die 8-Bit Kombination &amp;lt;b&amp;gt;0b10010011&amp;lt;/b&amp;gt; stellt also eine negative Zahl dar, &amp;lt;b&amp;gt;wenn und nur wenn diese Bitkombination überhaupt als vorzeichenbehaftete Zahl aufgefasst werden soll&amp;lt;/b&amp;gt;. Anhand der Bitkombination alleine ist es also nicht möglich, eine definitive Aussage zu treffen, ob es sich um eine vorzeichenbehaftete Zahl handelt oder nicht. Erst wenn durch den Zusammenhang klar ist, dass man es mit vorzeichenbehafteten Zahlen zu tun hat, bekommt das MSB die Sonderbedeutung des Vorzeichens.&lt;br /&gt;
&lt;br /&gt;
Um bei einer Zahl das Vorzeichen zu wechseln, geht man wie folgt vor:&lt;br /&gt;
* Zunächst wird das 1-er Komplement gebildet, indem alle Bits umgedreht werden. Aus 0 wird 1 und aus 1 wird 0&lt;br /&gt;
* Danach wird aus diesem Zwischenergebnis das 2-er Komplement gebildet, indem noch 1 addiert wird.&lt;br /&gt;
&lt;br /&gt;
Diese Vorschrift kann immer dann benutzt werden, wenn das Vorzeichen einer Zahl gewechselt werden soll. Er macht aus positiven Zahlen negative und aus negativen Zahlen positive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039; Es soll die Binärdarstellung für -92 gebildet werden. Dazu benötigt man zunächst die Binärdarstellung für +92, welche &amp;lt;b&amp;gt;0b01011100&amp;lt;/b&amp;gt; lautet. Diese wird jetzt nach der Vorschrift für 2-er Komplemente negiert und damit negativ gemacht.&lt;br /&gt;
&lt;br /&gt;
   0b01011100            Ausgangszahl&lt;br /&gt;
   0b10100011            1-er Komplement, alle Bits umdrehen&lt;br /&gt;
   0b10100100            noch 1 addieren&lt;br /&gt;
&lt;br /&gt;
Die Binärdarstellung für -92 lautet also &amp;lt;b&amp;gt;0b10100100&amp;lt;/b&amp;gt;. Das gesetzte MSB weist diese Binärzahl auch tatsächlich als negative Zahl aus.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039; Gegeben sei die Binärzahl &amp;lt;b&amp;gt;0b00111000&amp;lt;/b&amp;gt;, welche als vorzeichenbehaftete Zahl anzusehen ist. Welcher Dezimalzahl entspricht diese Binärzahl?&lt;br /&gt;
&lt;br /&gt;
Da das MSB nicht gesetzt ist, handelt es sich um eine positive Zahl und die Umrechnung kann wie im Fall der vorzeichenlosen 8-Bit Zahlen erfolgen. Das Ergebnis lautet also +56 ( = 0 * 128 + 0 * 64 + 1 * 32 + 1 * 16 + 1 * 8 + 0 * 4 + 0 * 2 + 0 * 1 )&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039; Gegeben sei die Binärzahl &amp;lt;b&amp;gt;0b10011001&amp;lt;/b&amp;gt;, welche als vorzeichenbehaftete Zahl anzusehen ist. Welcher Dezimalzahl entspricht diese Binärzahl?&lt;br /&gt;
&lt;br /&gt;
Da das MSB gesetzt ist, handelt es sich um eine negative Zahl. Daher wird diese Zahl zunächst negiert um dadurch eine positive Zahl zu erhalten.&lt;br /&gt;
&lt;br /&gt;
    0b10011001       Originalzahl&lt;br /&gt;
    0b01100110       1-er Komplement, alle Bits umdrehen&lt;br /&gt;
    0b01100111       2-er Komplement, noch 1 addiert&lt;br /&gt;
&lt;br /&gt;
Die zu 0b10011001 gehörende positive Binärzahl lautet also 0b01100111. Da es sich um eine positive Zahl handelt, kann sie wiederum ganz normal, wie vorzeichenlose Zahlen, in eine Dezimalzahl umgerechnet werden. Das Ergebnis lautet 103 ( = 0 * 128 + 1 * 64 + 1 * 32 + 0 * 16 + 0 * 8 + 1 * 4 + 1 * 2 + 1 * 1). Da aber von einer negativen Zahl ausgegangen wurde, ist &amp;lt;b&amp;gt;0b10011001&amp;lt;/b&amp;gt; die binäre Darstellung der Dezimalzahl -103.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039; Gegeben sei dieselbe Binärzahl &amp;lt;b&amp;gt;0b10011001&amp;lt;/b&amp;gt;. Aber diesmal sei sie als vorzeichenlose Zahl aufzufassen. Welcher Dezimalzahl entspricht diese Binärzahl?&lt;br /&gt;
&lt;br /&gt;
Da die Binärzahl als vorzeichenlose Zahl aufzufassen ist, hat das MSB keine spezielle Bedeutung. Die Umrechnung erfolgt also ganz normal: 0b10011001 = 1 * 128 + 0 * 64 + 0 * 32 + 1 * 16 + 1 * 8 + 0 * 4 + 0 * 2 + 1 * 1 = 153.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039; Wie lautet die Binärzahl zu -74?&lt;br /&gt;
&lt;br /&gt;
Da es sich hier offensichtlich im eine vorzeichenbehaftete Zahl handelt, müssen die Regeln des 2-er Komplemnts angewendet werden. Zunächst ist also die Binärrepräsentierung von +74 zu bestimmen, welche dann durch Anwendung des 2-er Komplements negiert wird.&lt;br /&gt;
&lt;br /&gt;
  74 / 2 = 37  Rest 0&lt;br /&gt;
  37 / 2 = 18  Rest 1&lt;br /&gt;
  18 / 2 =  9  Rest 0&lt;br /&gt;
   9 / 2 =  4  Rest 1&lt;br /&gt;
   4 / 2 =  2  Rest 0&lt;br /&gt;
   2 / 2 =  1  Rest 0&lt;br /&gt;
   1 / 2 =  0  Rest 1&lt;br /&gt;
&lt;br /&gt;
Die Binärdarstellung für +74 lautet daher &amp;lt;b&amp;gt;0b01001010&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    0b01001010     +74&lt;br /&gt;
    0b10110101     1-er Komplement, alle Bits umdrehen&lt;br /&gt;
    0b10110110     noch 1 addieren&lt;br /&gt;
&lt;br /&gt;
Die Binärdarstellung für -74 lautet daher &amp;lt;b&amp;gt;0b10110110&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arithmetikflags ==&lt;br /&gt;
&lt;br /&gt;
Im Statusregister des Prozessors gibt es eine Reihe von Flags, die durch Rechenergebnisse beeinflusst werden, bzw. in Berechnungen einfließen können.&lt;br /&gt;
&lt;br /&gt;
=== Carry ===&lt;br /&gt;
Das Carry-Flag &#039;&#039;&#039;C&#039;&#039;&#039; zeigt an, ob bei einer Berechnung mit vorzeichenlosen Zahlen ein Über- oder Unterlauf erfolgt ist, d.h. das Ergebnis der Berechnung liegt außerhalb des darstellbaren Bereiches 0...255.&lt;br /&gt;
&lt;br /&gt;
Wie das?&lt;br /&gt;
&lt;br /&gt;
Angenommen es müssen zwei 8-Bit-Zahlen addiert werden.&lt;br /&gt;
&lt;br /&gt;
    10100011&lt;br /&gt;
  + 11110011&lt;br /&gt;
   ---------&lt;br /&gt;
   110010110&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis der Addition umfasst neun Bit und liegt außerhalb des in einem Register darstellbaren Zahlenbereiches 0...255; die Addition &#039;&#039;ist übergelaufen&#039;&#039;.  &lt;br /&gt;
&lt;br /&gt;
Werden dieselben Zahlen subtrahiert,&lt;br /&gt;
&lt;br /&gt;
    10100011&lt;br /&gt;
  - 11110011&lt;br /&gt;
   ---------&lt;br /&gt;
    10110000&lt;br /&gt;
&lt;br /&gt;
verbleibt an der höchstwertigsten Stelle ein &amp;quot;geborgtes&amp;quot; Bit, welches durch das Carry angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
=== Signed- und Overflowflag ===&lt;br /&gt;
Wird mit vorzeichenbehafteten Zahlen gerechnet, so wird das Verlassen des 8-Bit-Zahlenbereiches -128...+127 durch die Flags &#039;&#039;&#039;S&#039;&#039;&#039; und &#039;&#039;&#039;V&#039;&#039;&#039; angezeigt. Der Prozessor selbst unterscheidet nicht zwischen vorzeichenlosen und -behafteten Zahlen. Der Programmierer legt durch Wahl der ausgewerteten Flags (C bei vorzeichenlosen bzw. S/V bei vorzeichenbehafteten) die Interpretation der Zahlen fest.&lt;br /&gt;
&lt;br /&gt;
=== Weitere Flags ===&lt;br /&gt;
Das Zero-Flag &#039;&#039;&#039;Z&#039;&#039;&#039; wird gesetzt, wenn das 8-Bit-Ergebnis der Berechnung null ist. Dies kann bei der Addition auch durch Überlauf geschehen, was durch ein zusätzliches Carryflag angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Das Negative-Flag &#039;&#039;&#039;N&#039;&#039;&#039; wird gesetzt, wenn im Ergebnis das höchstwertige Bit gesetzt ist. Bei vorzeichenbehafteter Arithmetik ist dies als negative Zahl zu interpretieren, sofern nicht durch das V-Flag ein Verlassen des Zahlbereichs angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Das Half-Carry-Flag &#039;&#039;&#039;H&#039;&#039;&#039; zeigt, analog zum Carry-Flag, einen Übertrag zwischen Bit 3 und 4 an. Dies kann in speziellen Anwendungen (z.&amp;amp;nbsp;B. zwei simultane Vier-Bit-Berechnungen mit einem Befehl) nützlich sein.&lt;br /&gt;
&lt;br /&gt;
=== Übersicht über die arithmetischen Flags ===&lt;br /&gt;
&lt;br /&gt;
Ergebnis des Befehls &#039;&#039;&#039;ADD Rd, Rr&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
          Rr|    0 |    1 |   64 |  127 |  128 |  129 |  192 |  255&lt;br /&gt;
   Rd       |(  +0)|(  +1)|( +64)|(+127)|(-128)|(-127)|( -64)|(  -1)&lt;br /&gt;
  ----------+------+------+------+------+------+------+------+------&lt;br /&gt;
    0 (  +0)|    Z |      |      |      |S N   |S N   |S N   |S N&lt;br /&gt;
    1 (  +1)|      |      |      | VN   |S N   |S N   |S N   |   CZ&lt;br /&gt;
   64 ( +64)|      |      | VN   | VN   |S N   |S N   |   CZ |   C&lt;br /&gt;
  127 (+127)|      | VN   | VN   | VN   |S N   |   CZ |   C  |   C&lt;br /&gt;
  128 (-128)|S N   |S N   |S N   |S N   |SV CZ |SV C  |SV C  |SV C&lt;br /&gt;
  129 (-127)|S N   |S N   |S N   |   CZ |SV C  |SV C  |SV C  |S NC&lt;br /&gt;
  192 ( -64)|S N   |S N   |   CZ |   C  |SV C  |SV C  |S NC  |S NC&lt;br /&gt;
  255 (  -1)|S N   |   CZ |   C  |   C  |SV C  |S NC  |S NC  |S NC&lt;br /&gt;
&lt;br /&gt;
Man erkennt: C=1 genau dann wenn die Addition Rd + Rr mit vorzeichenlosen Zahlen überläuft.  V=1 genau dann wenn die Addition mit vorzeichenbehafteten Zahlen überläuft.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ergebnis des Befehls &#039;&#039;&#039;SUB Rd, Rr&#039;&#039;&#039; bzw. &#039;&#039;&#039;CP Rd, Rr&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
          Rr|    0 |   63 |   64 |  127 |  128 |  191 |  192 |  255&lt;br /&gt;
   Rd       |(  +0)|( +63)|( +64)|(+127)|(-128)|( -65)|( -64)|(  -1)&lt;br /&gt;
  ----------+------+------+------+------+------+------+------+------&lt;br /&gt;
    0 (  +0)|    Z |S NC  |S NC  |S NC  | VNC  |   C  |   C  |   C&lt;br /&gt;
   63 ( +63)|      |    Z |S NC  |S NC  | VNC  | VNC  |   C  |   C&lt;br /&gt;
   64 ( +64)|      |      |    Z |S NC  | VNC  | VNC  | VNC  |   C&lt;br /&gt;
  127 (+127)|      |      |      |    Z | VNC  | VNC  | VNC  | VNC&lt;br /&gt;
  128 (-128)|S N   |SV    |SV    |SV    |    Z |S NC  |S NC  |S NC&lt;br /&gt;
  191 ( -65)|S N   |S N   |SV    |SV    |      |    Z |S NC  |S NC&lt;br /&gt;
  192 ( -64)|S N   |S N   |S N   |SV    |      |      |    Z |S NC&lt;br /&gt;
  255 (  -1)|S N   |S N   |S N   |S N   |      |      |      |    Z&lt;br /&gt;
&lt;br /&gt;
Man erkennt: C=1 genau dann wenn die Subtraktion Rd - Rr mit vorzeichenlosen Zahlen unterläuft; äquivalent dazu ist Rd &amp;lt; Rr (vorzeichenlos).  S=1 genau dann wenn die Subtraktion mit vorzeichenbehafteten Zahlen unterläuft bzw. Rd &amp;gt; Rr (vorzeichenbehaftet).&lt;br /&gt;
&lt;br /&gt;
== Inkrementieren / Dekrementieren ==&lt;br /&gt;
&lt;br /&gt;
Erstaunlich viele Operationen in einem Computer-Programm entfallen auf die Operationen &#039;Zu einer Zahl 1 addieren&#039; bzw. &#039;Von einer Zahl 1 subtrahieren&#039;. Dementsprechend enthalten die meisten Mikroprozessoren die Operationen &#039;&#039;Inkrementieren&#039;&#039; (um 1 erhöhen) bzw. &#039;&#039;Dekrementieren&#039;&#039; (um 1 verringern) als eigenständigen Assemblerbefehl. So auch der ATmega8.&lt;br /&gt;
&lt;br /&gt;
=== AVR-Befehle ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
        inc  r16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
        dec  r16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Operation ist einfach zu verstehen. Das jeweils angegebene Register (hier wieder am Register r16 gezeigt) wird um 1 erhöht bzw. um 1 verringert. Dabei wird die Zahl im Register als vorzeichenlose Zahl angesehen. Enthält das Register bereits die größtmögliche Zahl (0b11111111 oder dezimal 255), so erzeugt ein weiteres Inkrementieren die kleinstmögliche Zahl (0b00000000 oder dezimal 0) bzw. umgekehrt dekrementiert 0 zu 255.&lt;br /&gt;
&lt;br /&gt;
== Addition ==&lt;br /&gt;
Auf einem Mega8 gibt es nur eine Möglichkeit, um eine Addition durchzuführen: Die beiden zu addierenden Zahlen müssen in zwei Registern stehen.&lt;br /&gt;
&lt;br /&gt;
=== AVR-Befehle ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
     add  r16, r17      ; Addition der Register r16 und r17. Das Ergebnis wird&lt;br /&gt;
                        ; im Register r16 abgelegt&lt;br /&gt;
     adc  r16, r17      ; Addition der Register r16 und r17, wobei das Carry-Bit&lt;br /&gt;
                        ; noch zusätzlich mit addiert wird.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Addition zweier Register wird ein möglicher Überlauf in allen Fällen im Carry Bit abgelegt. Daraus erklärt sich dann auch das Vorhandensein eines Additionsbefehls, der das Carry-Bit noch zusätzlich mitaddiert: Man benötigt ihn zum Aufbau einer Addition die mehr als 8 Bit umfasst. Die niederwertigsten Bytes werden mit einem &amp;lt;b&amp;gt;add&amp;lt;/b&amp;gt; addiert und alle weiteren höherwertigen Bytes werden, vom Niederwertigsten zum Höchstwertigsten, mittels &amp;lt;b&amp;gt;adc&amp;lt;/b&amp;gt; addiert. Dadurch werden eventuelle Überträge automatisch berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
== Subtraktion ==&lt;br /&gt;
Subtraktionen können auf einem AVR in zwei unterschiedlichen Arten ausgeführt werden. Entweder es werden zwei Register voneinander subtrahiert oder es wird von einem Register eine konstante Zahl abgezogen. Beide Varianten gibt es wiederum in den Ausführungen mit und ohne Berücksichtigung des Carry Flags&lt;br /&gt;
&lt;br /&gt;
=== AVR-Befehle ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
     sub  r16, r17      ; Subtraktion des Registers r17 von r16. Das Ergebnis wird&lt;br /&gt;
                        ; im Register r16 abgelegt&lt;br /&gt;
     sbc  r16, r17      ; Subtraktion des Registers r17 von r16, wobei das Carry-Bit&lt;br /&gt;
                        ; noch zusätzlich mit subtrahiert wird. Das Ergebnis wird&lt;br /&gt;
                        ; im Register r16 abgelegt&lt;br /&gt;
     subi r16, zahl     ; Die Zahl (als Konstante) wird vom Register r16 subtrahiert.&lt;br /&gt;
                        ; Das Ergebnis wird im Register r16 abgelegt&lt;br /&gt;
     sbci r16, zahl     ; Subtraktion einer konstanten Zahl vom Register r16, wobei&lt;br /&gt;
                        ; zusätzlich noch das Carry-Bit mit subtrahiert wird.&lt;br /&gt;
                        ; Das Ergebnis wird im Register r16 abgelegt.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Multiplikation ==&lt;br /&gt;
Multiplikation kann auf einem AVR je nach konkretem Typ auf zwei unterschiedliche Arten ausgeführt werden. Während die größeren ATMega Prozessoren über einen Hardwaremultiplizierer verfügen, ist dieser bei den kleineren Tiny Prozessoren nicht vorhanden. Hier muß die Multiplikation quasi zu Fuß durch entsprechende Addition von Teilresultaten erfolgen.&lt;br /&gt;
&lt;br /&gt;
=== Hardwaremultiplikation ===&lt;br /&gt;
Vorzeichenbehaftete und vorzeichenlose Zahlen werden unterschiedlich multipliziert. Denn im Falle eines Vorzeichens darf ein gesetztes 7. Bit natürlich nicht in die eigentliche Berechnung mit einbezogen werden. Statt dessen steuert dieses Bit (eigentlich die beiden MSB der beiden beteiligten Zahlen) das Vorzeichen des Ergebnisses. Die Hardwaremultiplikation ist auch dahingehend eingeschränkt, dass das Ergebnis einer Multiplikation immer in den Registerpärchen &#039;&#039;r0&#039;&#039; und &#039;&#039;r1&#039;&#039; zu finden ist. Dabei steht das LowByte (also die unteren 8 Bit) des Ergebnisses in &#039;&#039;r0&#039;&#039; und das HighByte in &#039;&#039;r1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== AVR-Befehl ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
    mul   r16, r17      ; multipliziert r16 mit r17. Beide Registerinhalte werden&lt;br /&gt;
                        ; als vorzeichenlose Zahlen aufgefasst.&lt;br /&gt;
                        ; Das Ergebnis der Multiplikation ist in den Registern r0 und r1&lt;br /&gt;
                        ; zu finden.&lt;br /&gt;
&lt;br /&gt;
    muls  r16, r17      ; multipliziert r16 mit r17. Beide Registerinhalte werden&lt;br /&gt;
                        ; als vorzeichenbehaftete Zahlen aufgefasst.&lt;br /&gt;
                        ; Das Ergebnis der Multiplikation ist in den Registern r0 und r1&lt;br /&gt;
                        ; zu finden und stellt ebenfalls eine vorzeichenbehaftete&lt;br /&gt;
                        ; Zahl dar.&lt;br /&gt;
&lt;br /&gt;
    mulsu r16, r17      ; multipliziert r16 mit r17, wobei r16 als vorzeichenbehaftete&lt;br /&gt;
                        ; Zahl aufgefasst wird und r17 als vorzeichenlose Zahl.&lt;br /&gt;
                        ; Das Ergebnis der Multiplikation ist in den Registern r0 und r1&lt;br /&gt;
                        ; zu finden und stellt eine vorzeichenbehaftete Zahl dar.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multiplikation in Software ===&lt;br /&gt;
Multiplikation in Software ist nicht weiter schwierig. Man erinnere sich daran, wie Multiplikationen in der Grundschule gelehrt wurden:&lt;br /&gt;
Zunächst stand da das kleine Einmal-Eins, welches auswendig gelernt wurde. Mit diesen Kenntnissen konnten dann auch größere Multiplikationen angegangen werden, indem der Multiplikand mit jeweils einer Stelle des Multiplikators multipliziert wurde und die Zwischenergebnisse, geeignet verschoben, addiert wurden. Die Verschiebung um eine Stelle entspricht dabei einer Multiplikation mit 10.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039; Zu multiplizieren sei 3456 * 7812&lt;br /&gt;
&lt;br /&gt;
       3456     * 7812&lt;br /&gt;
       ---------------&lt;br /&gt;
      24192     &amp;lt;-+|||&lt;br /&gt;
  +    27648    &amp;lt;--+||&lt;br /&gt;
  +      3456   &amp;lt;---+|&lt;br /&gt;
  +       6912  &amp;lt;----+&lt;br /&gt;
      --------&lt;br /&gt;
      26998272&lt;br /&gt;
&lt;br /&gt;
Im Binärsystem funktioniert Multiplikation völlig analog. Nur ist hier das kleine Einmaleins sehr viel einfacher! Es gibt nur 4 Multiplikationen (anstatt 100 im Dezimalsystem):&lt;br /&gt;
&lt;br /&gt;
    0 * 0   = 0&lt;br /&gt;
    0 * 1   = 0&lt;br /&gt;
    1 * 0   = 0&lt;br /&gt;
    1 * 1   = 1&lt;br /&gt;
&lt;br /&gt;
Es gibt lediglich einen kleinen Unterschied gegenüber dem Dezimalsystem: Anstatt zunächst alle Zwischenergebnisse aufzulisten und erst danach die Summe zu bestimmen, werden wir ein neues Zwischenergebnis gleich in die Summe einrechnen. Dies deshalb, da Additionen von mehreren Zahlen im Binärsystem im Kopf sehr leicht zu Flüchtigkeitsfehlern führen (durch die vielen 0-en und 1-en). Weiters wird eine einfache Tatsache benutzt: 1 mal eine Zahl ergibt wieder die Zahl, während 0 mal eine Zahl immer 0 ergibt. Dadurch braucht man im Grunde bei einer Multiplikation überhaupt nicht zu multiplizieren, sondern eigentlich nur die Entscheidung treffen: Muss die Zahl geeignet verschoben addiert werden oder nicht?&lt;br /&gt;
&lt;br /&gt;
    0b00100011         * 0b10001001&lt;br /&gt;
    --------------------------------&lt;br /&gt;
      00100011          &amp;lt;--+|||||||&lt;br /&gt;
 +     00000000         &amp;lt;---+||||||&lt;br /&gt;
      ---------              ||||||&lt;br /&gt;
      001000110              ||||||&lt;br /&gt;
 +      00000000        &amp;lt;----+|||||&lt;br /&gt;
      ----------              |||||&lt;br /&gt;
      0010001100              |||||&lt;br /&gt;
 +       00000000       &amp;lt;-----+||||&lt;br /&gt;
      -----------              ||||&lt;br /&gt;
      00100011000              ||||&lt;br /&gt;
 +        00100011      &amp;lt;------+|||&lt;br /&gt;
      ------------              |||&lt;br /&gt;
      001001010011              |||&lt;br /&gt;
 +         00000000     &amp;lt;-------+||&lt;br /&gt;
      -------------              ||&lt;br /&gt;
      0010010100110              ||&lt;br /&gt;
 +          00000000    &amp;lt;--------+|&lt;br /&gt;
      --------------              |&lt;br /&gt;
      00100101001100              |&lt;br /&gt;
 +           00100011   &amp;lt;---------+&lt;br /&gt;
      ---------------&lt;br /&gt;
      001001010111011&lt;br /&gt;
&lt;br /&gt;
Man sieht auch, wie bei der Multiplikation zweier 8 Bit Zahlen sehr schnell ein 16 Bit Ergebnis entsteht. Dies ist auch der Grund, warum die Hardwaremultiplikation immer 2 Register zur Aufnahme des Ergebnisses benötigt.&lt;br /&gt;
&lt;br /&gt;
Ein Assembler Code, der diese Strategie im Wesentlichen verwirklicht, sieht z.&amp;amp;nbsp;B. so aus. Dieser Code wurde nicht auf optimale Laufzeit getrimmt, sondern es soll im Wesentlichen eine 1:1 Umsetzung des oben gezeigten Schemas sein. Einige der verwendeten Befehle wurden im Rahmen dieses Tutorials an dieser Stelle noch nicht besprochen. Speziell die Schiebe- (&amp;lt;b&amp;gt;lsl&amp;lt;/b&amp;gt;) und Rotier- (&amp;lt;b&amp;gt;rol&amp;lt;/b&amp;gt;) Befehle sollten in der AVR Befehlsübersicht genau studiert werden, um ihr Zusammenspiel mit dem Carry Flag zu verstehen. Nur soviel als Hinweis: Das Carry Flag dient in der &amp;lt;b&amp;gt;lsl&amp;lt;/b&amp;gt; / &amp;lt;b&amp;gt;rol&amp;lt;/b&amp;gt; Sequenz als eine Art Zwischenspeicher, um das höherwertigste Bit aus dem Register r0 beim Verschieben in das Register r1 verschieben zu können. Der &amp;lt;b&amp;gt;lsl&amp;lt;/b&amp;gt; verschiebt alle Bits des Registers um 1 Stelle nach links, wobei das vorhergehende MSB ins Carry Bit wandert und rechts ein 0-Bit nachrückt. Der &amp;lt;b&amp;gt;rol&amp;lt;/b&amp;gt; verschiebt ebenfalls alle Stellen eines Registers um 1 Stelle nach links. Diesmal wird aber rechts nicht mit einem 0-Bit aufgefüllt, sondern an dieser Stelle wird der momentane Inhalt des Carry Bits eingesetzt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
    ldi  r16, 0b00100011  ; Multiplikator&lt;br /&gt;
    ldi  r17, 0b10001001  ; Multiplikand&lt;br /&gt;
                          ; Berechne r16 * r17&lt;br /&gt;
&lt;br /&gt;
    ldi  r18, 8          ; 8 mal verschieben und gegebenenfalls addieren&lt;br /&gt;
    clr  r19             ; 0 wird für die 16 Bit Addition benötigt&lt;br /&gt;
    clr  r0              ; Ergebnis Low Byte auf 0 setzen&lt;br /&gt;
    clr  r1              ; Ergebnis High Byte auf 0 setzen&lt;br /&gt;
&lt;br /&gt;
mult:&lt;br /&gt;
    lsl  r0              ; r1:r0 einmal nach links verschieben&lt;br /&gt;
    rol  r1&lt;br /&gt;
    lsl  r17             ; Das MSB von r17 ins Carry schieben&lt;br /&gt;
    brcc noadd           ; Ist dieses MSB (jetzt im Carry) eine 1?&lt;br /&gt;
    add  r0,r16          ; Wenn ja, dann r16 zum Ergebnis addieren&lt;br /&gt;
    adc  r1,r19&lt;br /&gt;
&lt;br /&gt;
noadd:&lt;br /&gt;
    dec  r18             ; Wurden alle 8 Bit von r17 abgearbeitet?&lt;br /&gt;
    brne mult            ; Wenn nicht, dann ein erneuter Verschiebe/Addier Zyklus&lt;br /&gt;
&lt;br /&gt;
                         ; r0 enthält an dieser Stelle den Wert 0b10111011&lt;br /&gt;
                         ; r1 enthält 0b00010010&lt;br /&gt;
                         ; Gemeinsam bilden r1 und r0 also die Zahl&lt;br /&gt;
                         ; 0b0001001010111011&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Division ==&lt;br /&gt;
Anders als bei der Multiplikation, gibt es auch auf einem ATMega-Prozessor keine hardwaremässige Divisionseinheit. Divisionen müssen also in jedem Fall mit einer speziellen Routine, die im wesentlichen auf Subtraktionen beruht, erledigt werden.&lt;br /&gt;
=== Division in Software ===&lt;br /&gt;
&lt;br /&gt;
Um die Vorgangsweise bei der binären Division zu verstehen, wollen wir wieder zunächst anhand der gewohnten dezimalen Division untersuchen wie sowas abläuft.&lt;br /&gt;
&lt;br /&gt;
Angenommen es soll dividiert werden: 938 / 4 ( 938 ist der Dividend, 4 ist der Divisor)&lt;br /&gt;
&lt;br /&gt;
Wie haben Sie es in der Grundschule gelernt? Wahrscheinlich so wie der Autor auch:&lt;br /&gt;
&lt;br /&gt;
    938 : 4 = 234&lt;br /&gt;
   ---&lt;br /&gt;
   -8&lt;br /&gt;
   ----&lt;br /&gt;
    1&lt;br /&gt;
    13&lt;br /&gt;
   -12&lt;br /&gt;
    ---&lt;br /&gt;
     1&lt;br /&gt;
     18&lt;br /&gt;
    -16&lt;br /&gt;
     --&lt;br /&gt;
      2 Rest&lt;br /&gt;
&lt;br /&gt;
Der Vorgang war: Man nimmt die erste Stelle des Dividenden (9) und ruft seine gespeicherte Einmaleins Tabelle ab, um festzustellen, wie oft der Divisor in dieser Stelle enthalten ist. In diesem konkreten Fall ist die erste Stelle 9 und der Divisor 4. 4 ist in 9 zweimal enthalten. Also ist 2 die erste Ziffer des Ergebnisses. 2 mal 4 ergibt aber 8 und diese 8 werden von den 9 abgezogen, übrig bleibt 1.&lt;br /&gt;
Aus dem Dividenden wird die nächste Ziffer (3) heruntergezogen und man erhält mit der 1 aus dem vorhergehenden Schritt 13.&lt;br /&gt;
Wieder dasselbe Spiel: Wie oft ist 4 in 13 enthalten? 3 mal (3 ist die nächste Ziffer des Ergebnisses) und 3 * 4 ergibt 12. Diese 12 von den 13 abgezogen macht 1. Zu dieser 1 gesellt sich wieder die nächste Ziffer des Dividenden, 8, um so 18 zu bilden.&lt;br /&gt;
Wie oft ist 4 in 18 enthalten? 4 mal (4 ist die nächste Ziffer des Ergebnisses), denn 4 mal 4 macht 16, und das von den 18 abgezogen ergibt 2.&lt;br /&gt;
Da es keine nächste Ziffer im Dividenden mehr gibt, lautet also das Resultat:&lt;br /&gt;
938 : 4 ergibt 234 und es bleiben 2 Rest.&lt;br /&gt;
&lt;br /&gt;
Die binäre Division funktioniert dazu völlig analog. Es gibt nur einen kleinen Unterschied, der einem sogar das Leben leichter macht. Es geht um den Schritt: Wie oft ist x in y enthalten?&lt;br /&gt;
Dieser Schritt ist in der binären Division besonders einfach, da das Ergebnis dieser Fragestellung nur 0 oder 1 sein kann. Das bedeutet aber auch: Entweder ist der Divisior in der zu untersuchenden Zahl enthalten, oder er ist es nicht. Das kann aber ganz leicht entschieden werden: Ist die Zahl größer oder gleich dem Divisior, dann ist der Divisor enthalten und zum Ergebnis kann eine 1 hinzugefügt werden. Ist die Zahl kleiner als der Divisior, dann ist der Divisior nicht enthalten und die nächste Ziffer des Ergebnisses ist eine 0.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Es soll die Division 0b01101100 : 0b00001001 ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Es wird wieder mit der ersten Stelle begonnen und die oben ausgeführte Vorschrift angewandt.&lt;br /&gt;
&lt;br /&gt;
   0b01101101 : 0b00001001 = 0b00001100&lt;br /&gt;
                               ^^^^^^^^&lt;br /&gt;
                               ||||||||&lt;br /&gt;
     0                ---------+|||||||   1001 ist in 0 0-mal enthalten&lt;br /&gt;
    -0                          |||||||&lt;br /&gt;
    --                          |||||||&lt;br /&gt;
     0                          |||||||&lt;br /&gt;
     01               ----------+||||||   1001 ist in 1 0-mal enthalten&lt;br /&gt;
    - 0                          ||||||&lt;br /&gt;
     --                          ||||||&lt;br /&gt;
     01                          ||||||&lt;br /&gt;
     011              -----------+|||||   1001 ist in 11 0-mal enthalten&lt;br /&gt;
    -  0                          |||||&lt;br /&gt;
     ---                          |||||&lt;br /&gt;
     011                          |||||&lt;br /&gt;
     0110             ------------+||||   1001 ist in 110 0-mal enthalten&lt;br /&gt;
    -   0                          ||||&lt;br /&gt;
     ----                          ||||&lt;br /&gt;
     0110                          ||||&lt;br /&gt;
     01101            -------------+|||   1001 ist in 1101 1-mal enthalten&lt;br /&gt;
    - 1001                          |||&lt;br /&gt;
     -----                          |||&lt;br /&gt;
      0100                          |||&lt;br /&gt;
      01001           --------------+||   1001 ist in 1001 1-mal enthalten&lt;br /&gt;
     - 1001                          ||&lt;br /&gt;
      -----                          ||&lt;br /&gt;
      00000                          ||&lt;br /&gt;
      000000          ---------------+|   1001 ist in 0 0-mal enthalten&lt;br /&gt;
    -      0                          |&lt;br /&gt;
      ------                          |&lt;br /&gt;
      0000001         ----------------+   1001 ist in 1 0-mal enthalten&lt;br /&gt;
     -      0&lt;br /&gt;
      -------&lt;br /&gt;
            1 Rest&lt;br /&gt;
&lt;br /&gt;
Die Division liefert also das Ergebnis 0b00001100, wobei ein Rest von 1 bleibt. Der Dividend 0b01101101 entspricht der Dezimalzahl 109, der Divisor 0b00001001 der Dezimalzahl 9. Und wie man sich mit einem Taschenrechner leicht überzeugen kann, ergibt die Division von 109 durch 9 einen Wert von 12, wobei 1 Rest bleibt. Die Binärzahl für 12 lautet 0b00001100, das Ergebnis stimmt also.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
    ldi  r16, 109   ; Dividend&lt;br /&gt;
    ldi  r17,   9   ; Divisor&lt;br /&gt;
&lt;br /&gt;
                    ; Division r16 : r17&lt;br /&gt;
&lt;br /&gt;
    ldi  r18,   8   ; 8 Bit Division&lt;br /&gt;
    clr  r19        ; Register für die Zwischenergebnisse / Rest&lt;br /&gt;
    clr  r20        ; Ergebnis&lt;br /&gt;
&lt;br /&gt;
divloop:&lt;br /&gt;
    lsl  r16        ; Zwischenergebnis mal 2 nehmen und das&lt;br /&gt;
    rol  r19        ; nächste Bit des Dividenden anhängen&lt;br /&gt;
&lt;br /&gt;
    lsl  r20        ; das Ergebnis auf jeden Fall mal 2 nehmen,&lt;br /&gt;
                    ; das hängt effektiv eine 0 an das Ergebnis an.&lt;br /&gt;
                    ; Sollte das nächste Ergebnis-Bit 1 sein, dann wird&lt;br /&gt;
                    ; diese 0 in Folge durch eine 1 ausgetauscht&lt;br /&gt;
&lt;br /&gt;
    cp   r19, r17   ; ist der Divisor größer?&lt;br /&gt;
    brlo div_zero   ; wenn nein, dann bleibt die 0&lt;br /&gt;
    sbr  r20, 1     ; wenn ja, dann jetzt die 0 durch eine 1 austauschen ...&lt;br /&gt;
    sub  r19, r17   ; ... und den Divisor abziehen&lt;br /&gt;
&lt;br /&gt;
div_zero:&lt;br /&gt;
    dec  r18        ; das Ganze 8 mal wiederholen&lt;br /&gt;
    brne divloop&lt;br /&gt;
&lt;br /&gt;
                    ; in r20 steht das Ergebnis der Division&lt;br /&gt;
                    ; in r19 steht der bei der Division entstehende Rest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arithmetik mit mehr als 8 Bit ==&lt;br /&gt;
&lt;br /&gt;
Es gibt eine [[AVR_Arithmetik|Sammlung von Algorithmen zur AVR-Arithmetik]] mit mehr als 8 Bit, deren Grundprinzipien im wesentlichen identisch zu den in diesem Teil ausgeführten Prinzipien sind.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{Navigation_zurückhochvor|&lt;br /&gt;
zurücktext=Logik|&lt;br /&gt;
zurücklink=AVR-Tutorial: Logik|&lt;br /&gt;
hochtext=Inhaltsverzeichnis|&lt;br /&gt;
hochlink=AVR-Tutorial|&lt;br /&gt;
vortext=Stack|&lt;br /&gt;
vorlink=AVR-Tutorial: Stack}}&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR-Tutorial|Arithmetik8]]&lt;br /&gt;
[[Kategorie:AVR-Arithmetik]]&lt;/div&gt;</summary>
		<author><name>Johnpatcher</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-GCC-Tutorial/Assembler_und_Inline-Assembler&amp;diff=77623</id>
		<title>AVR-GCC-Tutorial/Assembler und Inline-Assembler</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-GCC-Tutorial/Assembler_und_Inline-Assembler&amp;diff=77623"/>
		<updated>2013-07-16T21:56:13Z</updated>

		<summary type="html">&lt;p&gt;Johnpatcher: Sämtliche Vorkommen von &amp;quot;avr/io.h&amp;quot; zu &amp;lt;avr/io.h&amp;gt; geändert, da es sich um eine vom System zur Verfügung gestellte Datei handelt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gelegentlich erweist es sich als nützlich, C- und Assembler-Code in einer Anwendung zu nutzen. Typischerweise wird das Hauptprogramm in C verfasst und wenige, zeitkritische oder hardwarenahe Operationen in Assembler.&lt;br /&gt;
&lt;br /&gt;
Die GNU-Toolchain bietet dazu zwei Möglichkeiten:&lt;br /&gt;
;Inline-Assembler: Die Assembleranweisungen werden direkt in den C-Code integriert. Eine Quellcode-Datei enthält somit C- und Assembleranweisungen&lt;br /&gt;
;Assembler-Dateien: Der Assemblercode befindet sich in eigenen Quellcodedateien. Diese werden vom GNU-Assembler (avr-as) zu Object-Dateien assembliert und mit den aus dem C-Code erstellten Object-Dateien zusammengelinkt.&lt;br /&gt;
&lt;br /&gt;
== Inline-Assembler ==&lt;br /&gt;
&lt;br /&gt;
Inline-Assembler bietet sich an, wenn nur wenig Assembleranweisungen benötigt werden. Typische Anwendung sind kurze Codesequenzen für zeitkritische Operationen, Takt-genaue Warteschleifen oder das Einfügen spezieller Instruktionen, die nicht durch reinen C-Code eingefügt werden können.&lt;br /&gt;
&lt;br /&gt;
Inline-Assembler wird mit &#039;&#039;&#039;asm&#039;&#039;&#039; oder &#039;&#039;&#039;asm volatile&#039;&#039;&#039; eingeleitet, zusätzlich gibt es das Ansi-konforme &#039;&#039;&#039;__asm__&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Assembler-Anweisungen werden als statisch konstanten String angegeben, der ähnlich wie bei einem &amp;lt;tt&amp;gt;printf&amp;lt;/tt&amp;gt; verwendet wird: %-Platzhalter werden durch die Werte der nachfolgenden C-Ausdrücke ersetzt und die resultierende Zeichenkette in die Assembler-Ausgabe des Compiler eingefügt. Ähnlich wie bei &amp;lt;tt&amp;gt;printf&amp;lt;/tt&amp;gt; gibt es auch bei Inline-Assembler Modifier, die es erlauben, Operanden in unterschiedlicher Weise darzustellen.&lt;br /&gt;
&lt;br /&gt;
Die Output-Operanden folgen auf das Assembler-Template und werden von diesem durch einen Doppelpunkt getrennt. Danach folgen – wieder durch einen&amp;amp;nbsp;:&amp;amp;nbsp;getrennt – die Input-Operanden. Danach eine Clobber-Liste sowie eine Liste mit Labels.&lt;br /&gt;
&lt;br /&gt;
Ein einfaches Beispiel für Inline-Assembler ist das Einfügen einer NOP-Anweisung (NOP steht für &#039;&#039;No OPeration&#039;&#039;). Dieser Assembler-Befehl benötigt auf einem AVR genau einen Taktzyklus, ansonsten hat er keinen Effekt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    /* Verzögern der weiteren Programmausführung um 2 Taktzyklen */&lt;br /&gt;
    asm volatile (&amp;quot;nop&amp;quot;);&lt;br /&gt;
    asm volatile (&amp;quot;nop&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Beispiel für mehrzeiligen Inline-Assembler dient eine präzise Delay-Funktion. Die Funktion erhält einen 16-Bit Wert als Parameter, und der Inline-Assembler dekrementiert diesen Wert so lange, bis er zu –1 unterläuft, was die Schleife beendet.&lt;br /&gt;
&lt;br /&gt;
Inline-Assembler hat hier den Vorteil, dass die Laufzeit – abgesehen von Interrupts, die gegebenenfalls während der Scheifenausführung auftreten – unabhängig von der Optimierungsstufe des Compilers und der Compiler-Version ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
static inline void __attribute__((always_inline))&lt;br /&gt;
delayloop16 (unsigned int count)&lt;br /&gt;
{&lt;br /&gt;
    /* Die Schleife dauert  4 * count + 3  Ticks */&lt;br /&gt;
&lt;br /&gt;
    asm volatile (&amp;quot;1:&amp;quot;           &amp;quot;\n\t&amp;quot;&lt;br /&gt;
                  &amp;quot;sbiw %0,1&amp;quot;    &amp;quot;\n\t&amp;quot;&lt;br /&gt;
                  &amp;quot;brcc 1b&amp;quot;&lt;br /&gt;
                  : &amp;quot;+w&amp;quot; (count));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Jede Anweisung wird mit &amp;lt;tt&amp;gt;&amp;quot;\n\t&amp;quot;&amp;lt;/tt&amp;gt; abgeschlossen. Der Zeilenumbruch teilt dem Assembler mit, dass ein neuer Befehl beginnt.&lt;br /&gt;
* Als Sprung-Label wurde eine Ziffer verwendet. Diese speziellen Labels sind mehrfach im Code verwendbar. Dies ist notwendig, wenn &amp;lt;tt&amp;gt;delayloop16&amp;lt;/tt&amp;gt; mehrfach verwendet wird und durch Inlining mehrfach in der Assembler-Ausgabe erscheint. Gesprungen wird jeweils zurück (&amp;lt;tt&amp;gt;b&amp;lt;/tt&amp;gt;) oder vorwärts (&amp;lt;tt&amp;gt;f&amp;lt;/tt&amp;gt;) zum nächsten auffindbaren Label.&lt;br /&gt;
* Das &amp;lt;tt&amp;gt;&amp;quot;+w&amp;quot;&amp;lt;/tt&amp;gt; wird als &#039;&#039;Inline-Assembler Constraint&#039;&#039; (Nebenbedingung) bezeichnet und legt fest, wie der Compiler mit dem Ausdruck &amp;lt;tt&amp;gt;count&amp;lt;/tt&amp;gt; umzugehen hat. &amp;lt;tt&amp;gt;w&amp;lt;/tt&amp;gt;&amp;amp;nbsp;steht für eine bestimmte Registerklasse, nämlich die Register R24...R31: SBIW brauch eines dieser Register mit gerader Registernummer. Dass die Registernummer gerade ist, ergibt sich daraus, dass das [http://gcc.gnu.org/wiki/avr-gcc#ABI avr-gcc ABI] dies für 16-Bit Werte so vorschreibt.&lt;br /&gt;
: Das &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt; vor der Registerklasse besagt, dass &amp;lt;tt&amp;gt;count&amp;lt;/tt&amp;gt; sowohl Eingabe als auch Ausgabe des Inline-Assembler ist und mithin vom Inline-Assembler verändert wird.  Es ist wichtig, dies dem Compiler mitzuteilen, damit er &amp;lt;tt&amp;gt;count&amp;lt;/tt&amp;gt; nicht an anderer Stelle wiederverwendet und damit falschen Code erzeugt.&lt;br /&gt;
&lt;br /&gt;
Das Resultat zeigt ein Blick in die Assembler-Datei, die der Compiler mit der Option &amp;lt;tt&amp;gt;-save-temps&amp;lt;/tt&amp;gt; nicht löscht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
	1:&lt;br /&gt;
	sbiw r24,1&lt;br /&gt;
	brcc 1b&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Siehe auch: &lt;br /&gt;
* [http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf Atmel: &#039;&#039;AVR 8-Bit Instruction Set&#039;&#039; (pdf)]&lt;br /&gt;
* [http://www.nongnu.org/avr-libc/user-manual/inline_asm.html AVR-Libc: &#039;&#039;Inline Assembler Cookbook&#039;&#039;:] Detaillierte Ausführungen zum Thema Inline-Assembler.&lt;br /&gt;
* [http://gcc.gnu.org/wiki/avr-gcc#Register_Layout GCC-Wiki: &#039;&#039;avr-gcc: Register Layout&#039;&#039;]: Das avr-gcc (Application Binary Interface (ABI).&lt;br /&gt;
* [http://www.roboternetz.de/wissen/index.php/Inline-Assembler_in_avr-gcc RN-Wissen: &#039;&#039;Deutsche Einführung in Inline-Assembler&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
== Assembler-Dateien ==&lt;br /&gt;
&lt;br /&gt;
:→ [http://www.nongnu.org/avr-libc/user-manual/assembler.html AVR-Libc Doku: avr-libc and assembler programs]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:Gcc-flow.svg|thumb|right|250px|Codeerzeugung mit den GNU-Tools]]&lt;br /&gt;
Assembler-Module werden analog zu C-Modulen übersetzte:  Während ein C-Modul &amp;lt;tt&amp;gt;modul.c&amp;lt;/tt&amp;gt; mittels&lt;br /&gt;
    avr-gcc -c modul.c  {{pale|(weitere Optionen)}}&lt;br /&gt;
zum Object übersetzt wird, ist der Compileraufruf für eine Assembler-Quelle &amp;lt;tt&amp;gt;modul.sx&amp;lt;/tt&amp;gt;&lt;br /&gt;
    avr-gcc -c modul.sx  {{pale|(weitere Optionen)}}&lt;br /&gt;
&lt;br /&gt;
Durch die Endung &amp;lt;tt&amp;gt;.sx&amp;lt;/tt&amp;gt; erkennt gcc, dass es sich bei der Datei um eine Assembler-Quelle handelt.&lt;br /&gt;
&lt;br /&gt;
Die Quelle wird zunächst präprozessiert, d.h. man kann Direktiven wie &amp;lt;tt&amp;gt;#include&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;#define&amp;lt;/tt&amp;gt; verwenden.  Danach wird die präprozessierte Datei an den Assembler übergeben.  Alternativ kann die Endung &amp;lt;tt&amp;gt;.S&amp;lt;/tt&amp;gt; verwendet werden.  Bei einer anderen Dateiendung kann das Quellformat mit &amp;lt;tt&amp;gt;-x&amp;lt;/tt&amp;gt; auf &#039;&#039;Assembler mit C-Präprozessor&#039;&#039; eingestellt werden:&lt;br /&gt;
    avr-gcc -x assembler-with-cpp -c modul.asm  {{pale|(weitere Optionen)}}&lt;br /&gt;
&lt;br /&gt;
Der Unterschied zwischen &amp;lt;tt&amp;gt;.sx&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;.S&amp;lt;/tt&amp;gt; einerseits und &amp;lt;tt&amp;gt;.s&amp;lt;/tt&amp;gt; andererseits ist dass für &amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt;-Dateien kein Präprozessor aufgerufen wird. s-Dateien werden zum Beispiel temporär von gcc erzeugt wenn eine C- oder C++-Quelle übersetzt wird. Der Compiler erzeugt keine Präprozessor-Direktiven und daher kann der Aufruf den Präprozessors nach dem Compilieren gespart werden was den Übersezuungsvorgang beschleunigt.&lt;br /&gt;
&lt;br /&gt;
In allen Fällen wird ein Modul &amp;lt;tt&amp;gt;modul.o&amp;lt;/tt&amp;gt; erzeugt, das genauso verwendet werden kann wie ein Modul, das aus C-Code oder C++-Code erzeugt wurde.  Soll die Object-Datei einen anderen Namen bekommen, dann dies mit &amp;lt;tt&amp;gt;-o dateiname&amp;lt;/tt&amp;gt; erreicht werden.&lt;br /&gt;
&lt;br /&gt;
Anhängig vom der verwendeten Build-Umgebung (eigenes Makefile, Mfile, Apache Ant, AVR Studio, Eclipe, Code::Blocks, Programmers Notepad, Shell-Skript, ...) wird die Assembler-Quelle zum Projekt hinzugefügt. Hierfür sei auf die Dokumentation der jeweiligen Entwicklungsumgebung verwiesen.&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
=== Verwenden der C-Runtime Umgebung ===&lt;br /&gt;
&lt;br /&gt;
=== Stand-Alone Assembler ===&lt;br /&gt;
&lt;br /&gt;
== Globale Variablen für Datenaustausch ==&lt;br /&gt;
&lt;br /&gt;
Oftmals kommt man um globale Variablen nicht herum, z.&amp;amp;nbsp;B. um den Datenaustausch zwischen Hauptprogramm und Interrupt-Routinen zu realisieren. &lt;br /&gt;
Hierzu muss man im Assembler wissen, wo genau die Variable vom C-Compiler abgespeichert wird.&lt;br /&gt;
&lt;br /&gt;
Hierzu muss die Variable, hier &amp;quot;zaehler&amp;quot; genannt, zuerst im C-Code als Global definiert werden, z.&amp;amp;nbsp;B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
volatile uint8_t zaehler;&lt;br /&gt;
&lt;br /&gt;
int16_t main (void)&lt;br /&gt;
{&lt;br /&gt;
    // irgendein Code, in dem zaehler benutzt werden kann&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im folgenden Assembler-Beispiel wird der Externe Interrupt0  verwendet, um den Zähler hochzuzählen. Es fehlen die Initialisierungen des Interrupts und die Interrupt-Freigabe, so richtig sinnvoll ist der Code auch nicht, aber er zeigt (hoffentlich) wie es geht.&lt;br /&gt;
&lt;br /&gt;
Im Umgang mit Interrupt-Vektoren gilt beim GCC-Assembler das Gleiche, wie bei C: Man muss die exakte Schreibweise beachten, ansonsten wird nicht der Interrupt-Vektor angelegt, sondern eine neue Funktion - und man wundert sich, dass nichts funktionert (vgl. das AVR-GCC-Handbuch).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
temp = 16&lt;br /&gt;
&lt;br /&gt;
.extern zaehler&lt;br /&gt;
&lt;br /&gt;
.global INT0_vect&lt;br /&gt;
INT0_vect:&lt;br /&gt;
&lt;br /&gt;
     push temp                      //; wichtig: Benutzte Register und das&lt;br /&gt;
     in temp,_SFR_IO_ADDR(SREG)     //; Status-Register (SREG) sichern!&lt;br /&gt;
     push temp&lt;br /&gt;
&lt;br /&gt;
     lds temp,zaehler               //; Wert aus dem Speicher lesen&lt;br /&gt;
     inc temp                       //; bearbeiten&lt;br /&gt;
     sts zaehler,temp               //; und wieder zurückschreiben&lt;br /&gt;
&lt;br /&gt;
     pop temp                       //; die benutzten Register wiederherstellen&lt;br /&gt;
     out _SFR_IO_ADDR(SREG),temp&lt;br /&gt;
     pop temp&lt;br /&gt;
     reti&lt;br /&gt;
&lt;br /&gt;
.end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Globale Variablen im Assemblerfile anlegen ===&lt;br /&gt;
&lt;br /&gt;
Alternativ können Variablen aber auch im Assemblerfile angelegt werden. Dadurch kann auf eine .c-Datei verzichtet werden. Für das obige Beispiel könnte der Quelltext dann die Dateien zaehl_asm.S und zaehl_asm.h abgelegt werden, so dass nur noch zaehl_asm.S mit kompiliert werden müsste.&lt;br /&gt;
&lt;br /&gt;
Anstatt im Assemblerfile über das Schlüsselwort &#039;&#039;.extern &#039;&#039; auf eine vorhandene Variable zu verweisen, wird dazu mit dem Schlüsselwort &#039;&#039;.comm&#039;&#039; die benötigte Anzahl von Bytes für eine Variable reserviert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zaehl_asm.S&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
temp = 16&lt;br /&gt;
&lt;br /&gt;
//; 1 Byte im RAM für den Zähler reservieren&lt;br /&gt;
.comm zaehler, 1&lt;br /&gt;
&lt;br /&gt;
.global INT0_vect&lt;br /&gt;
INT0_vect:&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Headerdatei wird dann auf die Variable nur noch verwiesen (Schlüsselwort &#039;&#039;extern&#039;&#039;):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zaehl_asm.h&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef ZAEHL_ASM_H&lt;br /&gt;
#define ZAEHL_ASM_H&lt;br /&gt;
&lt;br /&gt;
extern volatile uint8_t zaehler;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu globalen Variablen in C werden so angelegte Variablen nicht automatisch mit dem Wert 0 initialisiert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Variablen größer als 1 Byte ===&lt;br /&gt;
&lt;br /&gt;
Variablen, die größer als &#039;&#039;&#039;ein&#039;&#039;&#039; Byte sind, können in Assembler auf ähnliche Art angesprochen werden. Hierzu müssen nur genug Bytes angefordert werden, um die Variable aufzunehmen. Soll z.&amp;amp;nbsp;B. für den Zähler eine Variable vom Typ &#039;&#039;unsigned long&#039;&#039;, also &#039;&#039;uint32_t&#039;&#039; verwendet werden, so müssen 4 Bytes reserviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
...&lt;br /&gt;
// 4 Byte im RAM für den Zähler reservieren&lt;br /&gt;
.comm zaehler, 4&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die dazugehörige Deklaration im Headerfile wäre dann:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
extern volatile uint32_t zaehler;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Variablen, die größer als ein Byte sind, werden die Werte beginnend mit dem niederwertigsten Byte im RAM abgelegt. Das folgende Codeschnippsel zeigt, wie unter Assembler auf die einzelnen Bytes zugegriffen werden kann. Dazu wird im Interrupt nun ein 32-Bit Zähler erhöht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
temp = 16&lt;br /&gt;
&lt;br /&gt;
// 4 Byte im RAM für den Zähler reservieren&lt;br /&gt;
.comm zaehler, 4&lt;br /&gt;
&lt;br /&gt;
.global INT0_vect&lt;br /&gt;
INT0_vect:&lt;br /&gt;
&lt;br /&gt;
     push temp                      // wichtig: Benutzte Register und das&lt;br /&gt;
     in temp,_SFR_IO_ADDR(SREG)     // Status-Register (SREG) sichern !&lt;br /&gt;
     push temp&lt;br /&gt;
&lt;br /&gt;
     // 32-Bit-Zähler incrementieren&lt;br /&gt;
     lds temp, (zaehler + 0)        // 0. Byte (niederwertigstes Byte)&lt;br /&gt;
     inc temp&lt;br /&gt;
     sts (zaehler + 0), temp&lt;br /&gt;
     brne RAUS&lt;br /&gt;
	&lt;br /&gt;
     lds temp, (zaehler + 1)        // 1. Byte&lt;br /&gt;
     inc temp&lt;br /&gt;
     sts (zaehler + 1), temp&lt;br /&gt;
     brne RAUS&lt;br /&gt;
&lt;br /&gt;
     lds temp, (zaehler + 2)        // 2. Byte&lt;br /&gt;
     inc temp&lt;br /&gt;
     sts (zaehler + 2), temp&lt;br /&gt;
     brne RAUS&lt;br /&gt;
&lt;br /&gt;
     lds temp, (zaehler + 3)        // 3. Byte (höchstwertigstes Byte)&lt;br /&gt;
     inc temp&lt;br /&gt;
     sts (zaehler + 3), temp&lt;br /&gt;
     brne RAUS&lt;br /&gt;
	&lt;br /&gt;
RAUS:&lt;br /&gt;
     pop temp                       // die benutzten Register wiederherstellen&lt;br /&gt;
     out _SFR_IO_ADDR(SREG),temp&lt;br /&gt;
     pop temp&lt;br /&gt;
     reti&lt;br /&gt;
&lt;br /&gt;
.end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* 16-Bit / 32-Bit Variablen, Zugriff auf Arrays (Strings)&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.rn-wissen.de/index.php/Inline-Assembler_in_avr-gcc Roboternetz: Inline-Assembler in avr-gcc]&lt;br /&gt;
&lt;br /&gt;
=== Englisch ===&lt;br /&gt;
&lt;br /&gt;
; [http://nongnu.org/avr-libc/user-manual/ avr-libc-Manual]:&lt;br /&gt;
* [http://nongnu.org/avr-libc/user-manual/group__asmdemo.html Demo-Projekt: &#039;&#039;&amp;quot;Combining C and assembly source files&amp;quot;&#039;&#039;]&lt;br /&gt;
* [http://www.nongnu.org/avr-libc/user-manual/inline_asm.html Inline-Assembler Cookbook]&lt;br /&gt;
; [http://gcc.gnu.org/onlinedocs/gcc/ GCC-Manual]:&lt;br /&gt;
* [http://gcc.gnu.org/onlinedocs/gcc/Explicit-Reg-Vars.html#Explicit-Reg-Vars Variables in Specified Registers]&lt;br /&gt;
* [http://gcc.gnu.org/onlinedocs/gcc/Asm-Labels.html#Asm-Labels Controlling Names Used in Assembler Code]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:avr-gcc Tutorial]]&lt;/div&gt;</summary>
		<author><name>Johnpatcher</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Word_Clock_Variante_1_-_Software&amp;diff=76015</id>
		<title>Word Clock Variante 1 - Software</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Word_Clock_Variante_1_-_Software&amp;diff=76015"/>
		<updated>2013-05-28T18:48:37Z</updated>

		<summary type="html">&lt;p&gt;Johnpatcher: Erstellung einer Übersichtstabelle der verschiedenen Module&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel soll einen Einblick in die Software, die hinter der [[Word Clock Variante 1]] steckt, bieten. Neben einer kurzen Einführung in die Struktur und Funktionsweise der einzelnen Module, gibt es auf der entsprechenden [[Diskussion:Word Clock Variante 1 - Software|Diskussionsseite]] auch die Möglichkeit Fragen zum Quellcode zu stellen bzw. Verbesserungsvorschläge einzubringen. Dies erleichtert es den Entwicklern Änderungen am Quellcode unabhängig vom mittlerweile ziemlich umfangreichen [http://www.mikrocontroller.net/topic/156661 Forumsbeitrag] zu diskutieren.&lt;br /&gt;
&lt;br /&gt;
= Modularisierung =&lt;br /&gt;
&lt;br /&gt;
Der Quellcode besteht im Wesentlichen aus reinem C, insofern sind entsprechende Vorkenntnisse vorteilhaft. Das Projekt ist in verschiedene Module unterteilt, die weitestgehend unabhängig voneinander sind. Die einzelnen Module lauten:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Übersicht der verschiedenen Module&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Modul || Funktion || Dateien &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;BASE&#039;&#039;&#039; || Grundlegende Funktionen und Makros, die von anderen Modulen benötigt werden || &#039;&#039;base.c, base.h&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;COLOR_EFFECTS&#039;&#039;&#039; || Enthält Funktionen, die Farbanimationen ermöglichen || &#039;&#039;color_effects.c, color_effects.h&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;DCF77&#039;&#039;&#039; || Dekodierung und Zur­ver­fü­gung­stel­lung des DCF77 Zeitsignals || &#039;&#039;dcf77.c, dcf77.h&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;DISPLAY&#039;&#039;&#039; || Verantwortlich für die Umwandlung der Zeit in ein Bitmuster, welches über die Frontplatte angezeigt werden kann || &#039;&#039;display.c, display.h, display_tix.c, display_tix.h, display_tix_patterns.h, display_wc.c, display_wc_eng.c, display_wc_eng.h, display_wc_ger3.c, display_wc_ger3.h, display_wc_ger.c, display_wc_ger.h, display_wc.h&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;I2C-MASTER&#039;&#039;&#039; || Zurverfügungstellung von Funktionen, die den Umgang mit dem I2C Bus ermöglichen || &#039;&#039;i2c-master.c, i2c-master.h&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;I2C-RTC&#039;&#039;&#039; || Ermöglicht den lesenden bzw. schreibenden Zugriff auf die RTC || &#039;&#039;i2c-rtc.c, i2c-rtc.h&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IRMP&#039;&#039;&#039; || Ermöglicht den Umgang mit diversen IR Fernbedienungen || &#039;&#039;irmp.c, irmp.h, irmpconfig.h&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;LDR&#039;&#039;&#039; || Erfassung und Zurverfügungstellung der Helligkeit des Umgebungslichts || &#039;&#039;ldr.c, ldr.h&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MAIN&#039;&#039;&#039; || Enthält den Einstiegspunkt des Programms sowie die Applikationslogik, welche Gebrauch von den anderen Modulen macht und diese verbindet || &#039;&#039;main.c, main.h&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PWM&#039;&#039;&#039; || Generierung der PWM Signale zur Ansteuerung der RGB LEDs || &#039;&#039;pwm.c, pwm.h&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SHIFT&#039;&#039;&#039; || Ausgabe von Bitmustern an die Elektronik (Shiftregister), die die LEDs ansteuert || &#039;&#039;shift.c, shift.h&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SIMPLE_RANDOM&#039;&#039;&#039; || Einfacher Zufallsgenerator, der für den Narren-Modus im Displaymodul benötigt wird || &#039;&#039;simple_random.c, simple_random.h&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;TIMER&#039;&#039;&#039; || Anlaufpunkt für Dinge, die zeitlich regelmäßig ausgeführt werden sollen || &#039;&#039;timer.c, timer.h&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UART&#039;&#039;&#039; || Zurverfügungstellung der UART Hardware, um Zeichen zu empfangen bzw. zu versenden || &#039;&#039;uart.c, uart.h&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;USER&#039;&#039;&#039; || Verantwortlich für die Interaktion mit dem Benutzer, z.B. dem Anlernen der IR Befehle || &#039;&#039;user.c, user.h, usermodes.c&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;WCEEPROM&#039;&#039;&#039; || Funktionen, die das persistente Ablegen und Abfragen von Informationen im bzw. aus dem EEPROM ermöglichen || &#039;&#039;wceeprom.c, wceeprom.h&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Im Folgenden soll nun die genaue Funktionsweise der einzelnen Module näher erläutert werden:&lt;br /&gt;
&lt;br /&gt;
== DCF77 ==&lt;br /&gt;
&lt;br /&gt;
Zur Programmierung siehe den Artikel [[DCF77-Funkwecker mit AVR]]. Im Abschnitt &#039;&#039;Programmierung&#039;&#039; ist das Funksignal dokumentiert, zusammen mit einem Beispiel (Bitstrom und Bedeutung).&lt;br /&gt;
&lt;br /&gt;
Codebeispiel siehe &#039;&#039;[http://www.mikrocontroller.net/topic/25071 Codesammlung DCF 77]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Torsten Giese ([http://www.mikrocontroller.net/user/show/wawibu wawibu])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Automatische Helligkeitsregelung ==&lt;br /&gt;
&lt;br /&gt;
Die Helligkeit des Displays wird über einen LDR (z.B. LDR 07 von Reichelt) gesteuert.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Rene H. ([http://www.mikrocontroller.net/user/show/promeus promeus])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Uhrzeit ==&lt;br /&gt;
&lt;br /&gt;
Die Zeit wird von einer batteriegepufferten Maxim DS1307 Echtzeituhr (RTC), die  über [[I2C]] mit dem Microcontroller verbunden ist, zur Verfügung gestellt. Die Batterie soll bis zu 10 Jahre halten und wird direkt auf die Platine gelötet.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IR ==&lt;br /&gt;
&lt;br /&gt;
Es werden folgende Infrarot-Protokolle unterstützt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Protokoll || Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| SIRCS || Sony&lt;br /&gt;
|-&lt;br /&gt;
| 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;
| SAMSUNG || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| SAMSUNG32 || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| MATSUSHITA || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| 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;
| RECS80 || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| RECS80EXT || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| RC5 || Philips und andere europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| DENON || Denon&lt;br /&gt;
|-&lt;br /&gt;
| RC6 || Philips und andere europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| APPLE || Apple&lt;br /&gt;
|-&lt;br /&gt;
| NUBERT || Nubert, z.B. Subwoofer System&lt;br /&gt;
|-&lt;br /&gt;
| B&amp;amp;O || Bang &amp;amp; Olufsen (erst ab Version 1.0)&lt;br /&gt;
|-&lt;br /&gt;
| GRUNDIG || Grundig (erst ab Version 1.0)&lt;br /&gt;
|-&lt;br /&gt;
| NOKIA || Nokia, z.B. D-Box (erst ab Version 1.0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Über die automatische Erkennung des Protokolls werden die nötigen Tastatur-Befehl-Bits aus den Infrarot-Daten extrahiert - ohne Kenntnis, welche Tasten da eigentlich tatsächlich gedrückt wurden. So eine Tabelle würde den Speicher des µCs sprengen. Deshalb passiert die Zuordnung der Tasten zu WordClock-Befehlen in einer kleinen Anlernprozedur, die einmal nach dem ersten Bootvorgang ausgeführt werden muss.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile gibt es einen eigenen Artikel zum Infrarot-Fernbedienungsdecoder, siehe [http://www.mikrocontroller.net/articles/IRMP IRMP]&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
&lt;br /&gt;
Eine passende Fernbedienung gibt es bei &#039;&#039; [http://www.dealextreme.com/p/24-key-wireless-infrared-ir-remote-controller-for-rgb-led-light-bulb-1-cr2025-47019 DX] &#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/wikifiles/0/0e/Sku_47019_1.jpg &lt;br /&gt;
&lt;br /&gt;
Passend beschriftet werden kann die Fernbedienung mit folgenden Labels. Es gibt 2 Versionen der Scheckkartenfernbedienungen. Die erste passt für die DX Fernbedienung, diese ist etwas schmaler und länger. Einfach auf eine selbstklebende Folie drucken, ausschneiden und aufkleben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:WordClock_RC_Layout_DX.png|200px]]&lt;br /&gt;
[[Datei:WordClock_RC_Layout.png|200px]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== PWM ==&lt;br /&gt;
&lt;br /&gt;
Die PWM steuert die 3 RGB Kanäle. Damit ist freie Farbenwahl möglich.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Display ==&lt;br /&gt;
&lt;br /&gt;
Das Display wird nicht als 10x11 Matrix sondern wortweise angesteuert. Da die LEDs RGB-LEDs sind ergibt sich daraus für die 24 Wortteile und die 4 Minutenpunkte eine 28x3-Matrix.&lt;br /&gt;
&lt;br /&gt;
Die Farben sind kein Muss, in der Minimalbeschaltung können auch einfarbige LEDs zum Einsatz kommen.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Vlad Tepesch ([http://www.mikrocontroller.net/user/show/vlad_tepesch vlad_tepesch])&lt;br /&gt;
&lt;br /&gt;
=== Struktur ===&lt;br /&gt;
&lt;br /&gt;
Die display.h ist quasi die Basisklasse.&lt;br /&gt;
Dort ist definiert, welche Schnitsstellen eine Uhr anbieten muss.&lt;br /&gt;
Einige front-unabhängige Sachen sind hier bereits implementiert.&lt;br /&gt;
&lt;br /&gt;
Von ihr abgeleitet ist die display_tix und die display_wc,&lt;br /&gt;
wo entweder der gesamte Rest implementiert ist (TIX) oder wo weitere Ableitungen existieren (WC).&lt;br /&gt;
&lt;br /&gt;
Die display_wc implementiert die Teile die alle WC-Varianten gemeinsam haben.&lt;br /&gt;
Von ihr sind quasi die verschiedenen WC-Frontplatten abgeleitet.&lt;br /&gt;
&lt;br /&gt;
Die display_wc_xxx implentieren die Eigenheiten der speziellen Version, was neben ein paar Defines nur das Mapping Zeit → Ausgabemuster (display_getTimeState) ist und das Handling der Modus-Taste ist.&lt;br /&gt;
&lt;br /&gt;
=== Hinzufügen eigener WC-Frontplattenlayouts ===&lt;br /&gt;
&lt;br /&gt;
Prinzipiell sind folgende Schritte notwendig:&lt;br /&gt;
&lt;br /&gt;
# Kopieren und Umbenennen einer display_wc_xxx-Datei, die der eigenen Konfiguration am nächsten kommt (englisch, wenn nur eine Sprache, oder ger3 bei mehreren)&lt;br /&gt;
# in main.h define hinzufügen&lt;br /&gt;
# in display_wc.h oben das kopierte include unter Bedingung des gerade definiertne Defines hinzufügen&lt;br /&gt;
# anpassen des neuen headers&lt;br /&gt;
## Enumeration anpassen, Namen sind egal aber DWP_min1 - DWP_min4 müssen existieren. Auch sollten sie die Werte 24 - 28 haben. &amp;lt;br&amp;gt; Bei kleineren werden sonst die übrigen Shift-Register-ausgängen mit geschalten. &amp;lt;br&amp;gt; Höhere machen keinen Sinn, weil das heißen würde, das mehr Wörter als SR-Kanäle da sind.&lt;br /&gt;
## display_getMinuteMask und display_getHoursMask so anpassen, das alle Minuten, bzw Stundenkanäle gesetzt werden &amp;lt;br&amp;gt;&lt;br /&gt;
## display_getTimeSetIndicatorMask gibt die Bitmaske zurück, die bei Zeiteingabe 0 Minuten visualisieren soll (da sonst nix blinkt)&lt;br /&gt;
## display_getNumberDispalyState muss eine übergebene Zahl in ein Bild umwandeln, dass die übergebene Zahl erahnen lassen kann.&lt;br /&gt;
## Modus-Taste - am einfachsten nur Einträge in e_WcGerModes anpassen. Die Schaltung kann behalten werden. Man beachte, dass es doppelt so viele Modi gibt, wie in der Enumeration, da jeweils das Es_ist abgeschalten werden kann. Ist das nicht gewünscht, muss das Define DISPLAY_DEACTIVATABLE_ITIS auf 0 gestellt.&lt;br /&gt;
# anpassen der mapping-funktion Zeit → Ausgabemuster (display_getTimeState)&lt;br /&gt;
## komplett im Code oder mit look-Up-Tables&lt;br /&gt;
## Es sollte natürlich der aktuell ausgewählte Modus (g_displayParams-&amp;gt;mode) berücksichtigt werden&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Benutzer-Interaktion ==&lt;br /&gt;
&lt;br /&gt;
Mit der Fernbedienung ist folgendes möglich:&lt;br /&gt;
&lt;br /&gt;
* Einmaliges Anlernen der Fernbedienung&lt;br /&gt;
* Anpassen der automatischen Helligkeitssteuerung&lt;br /&gt;
* Einstellen des Farbprogramms (Übergänge etc)&lt;br /&gt;
* Stellen der Uhr (wenn kein DCF77-Modul angeschlossen)&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Vlad Tepesch ([http://www.mikrocontroller.net/user/show/vlad_tepesch vlad_tepesch])&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Timer und Uhren]]&lt;/div&gt;</summary>
		<author><name>Johnpatcher</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Word_Clock_Variante_1_-_Software&amp;diff=76013</id>
		<title>Word Clock Variante 1 - Software</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Word_Clock_Variante_1_-_Software&amp;diff=76013"/>
		<updated>2013-05-28T18:13:03Z</updated>

		<summary type="html">&lt;p&gt;Johnpatcher: Kurze Einführung zum Sinn dieser Seite erstellt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel soll einen Einblick in die Software, die hinter der [[Word Clock Variante 1]] steckt, bieten. Neben einer kurzen Einführung in die Struktur und Funktionsweise der einzelnen Module, gibt es auf der entsprechenden [[Diskussion:Word Clock Variante 1 - Software|Diskussionsseite]] auch die Möglichkeit Fragen zum Quellcode zu stellen bzw. Verbesserungsvorschläge einzubringen. Dies erleichtert es den Entwicklern Änderungen am Quellcode unabhängig vom mittlerweile ziemlich umfangreichen [http://www.mikrocontroller.net/topic/156661 Forumsbeitrag] zu diskutieren.&lt;br /&gt;
&lt;br /&gt;
= Module =&lt;br /&gt;
== DCF77 ==&lt;br /&gt;
&lt;br /&gt;
Zur Programmierung siehe den Artikel [[DCF77-Funkwecker mit AVR]]. Im Abschnitt &#039;&#039;Programmierung&#039;&#039; ist das Funksignal dokumentiert, zusammen mit einem Beispiel (Bitstrom und Bedeutung).&lt;br /&gt;
&lt;br /&gt;
Codebeispiel siehe &#039;&#039;[http://www.mikrocontroller.net/topic/25071 Codesammlung DCF 77]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Torsten Giese ([http://www.mikrocontroller.net/user/show/wawibu wawibu])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Automatische Helligkeitsregelung ==&lt;br /&gt;
&lt;br /&gt;
Die Helligkeit des Displays wird über einen LDR (z.B. LDR 07 von Reichelt) gesteuert.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Rene H. ([http://www.mikrocontroller.net/user/show/promeus promeus])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Uhrzeit ==&lt;br /&gt;
&lt;br /&gt;
Die Zeit wird von einer batteriegepufferten Maxim DS1307 Echtzeituhr (RTC), die  über [[I2C]] mit dem Microcontroller verbunden ist, zur Verfügung gestellt. Die Batterie soll bis zu 10 Jahre halten und wird direkt auf die Platine gelötet.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IR ==&lt;br /&gt;
&lt;br /&gt;
Es werden folgende Infrarot-Protokolle unterstützt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Protokoll || Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| SIRCS || Sony&lt;br /&gt;
|-&lt;br /&gt;
| 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;
| SAMSUNG || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| SAMSUNG32 || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| MATSUSHITA || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| 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;
| RECS80 || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| RECS80EXT || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| RC5 || Philips und andere europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| DENON || Denon&lt;br /&gt;
|-&lt;br /&gt;
| RC6 || Philips und andere europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| APPLE || Apple&lt;br /&gt;
|-&lt;br /&gt;
| NUBERT || Nubert, z.B. Subwoofer System&lt;br /&gt;
|-&lt;br /&gt;
| B&amp;amp;O || Bang &amp;amp; Olufsen (erst ab Version 1.0)&lt;br /&gt;
|-&lt;br /&gt;
| GRUNDIG || Grundig (erst ab Version 1.0)&lt;br /&gt;
|-&lt;br /&gt;
| NOKIA || Nokia, z.B. D-Box (erst ab Version 1.0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Über die automatische Erkennung des Protokolls werden die nötigen Tastatur-Befehl-Bits aus den Infrarot-Daten extrahiert - ohne Kenntnis, welche Tasten da eigentlich tatsächlich gedrückt wurden. So eine Tabelle würde den Speicher des µCs sprengen. Deshalb passiert die Zuordnung der Tasten zu WordClock-Befehlen in einer kleinen Anlernprozedur, die einmal nach dem ersten Bootvorgang ausgeführt werden muss.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile gibt es einen eigenen Artikel zum Infrarot-Fernbedienungsdecoder, siehe [http://www.mikrocontroller.net/articles/IRMP IRMP]&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
&lt;br /&gt;
Eine passende Fernbedienung gibt es bei &#039;&#039; [http://www.dealextreme.com/p/24-key-wireless-infrared-ir-remote-controller-for-rgb-led-light-bulb-1-cr2025-47019 DX] &#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/wikifiles/0/0e/Sku_47019_1.jpg &lt;br /&gt;
&lt;br /&gt;
Passend beschriftet werden kann die Fernbedienung mit folgenden Labels. Es gibt 2 Versionen der Scheckkartenfernbedienungen. Die erste passt für die DX Fernbedienung, diese ist etwas schmaler und länger. Einfach auf eine selbstklebende Folie drucken, ausschneiden und aufkleben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:WordClock_RC_Layout_DX.png|200px]]&lt;br /&gt;
[[Datei:WordClock_RC_Layout.png|200px]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== PWM ==&lt;br /&gt;
&lt;br /&gt;
Die PWM steuert die 3 RGB Kanäle. Damit ist freie Farbenwahl möglich.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Display ==&lt;br /&gt;
&lt;br /&gt;
Das Display wird nicht als 10x11 Matrix sondern wortweise angesteuert. Da die LEDs RGB-LEDs sind ergibt sich daraus für die 24 Wortteile und die 4 Minutenpunkte eine 28x3-Matrix.&lt;br /&gt;
&lt;br /&gt;
Die Farben sind kein Muss, in der Minimalbeschaltung können auch einfarbige LEDs zum Einsatz kommen.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Vlad Tepesch ([http://www.mikrocontroller.net/user/show/vlad_tepesch vlad_tepesch])&lt;br /&gt;
&lt;br /&gt;
=== Struktur ===&lt;br /&gt;
&lt;br /&gt;
Die display.h ist quasi die Basisklasse.&lt;br /&gt;
Dort ist definiert, welche Schnitsstellen eine Uhr anbieten muss.&lt;br /&gt;
Einige front-unabhängige Sachen sind hier bereits implementiert.&lt;br /&gt;
&lt;br /&gt;
Von ihr abgeleitet ist die display_tix und die display_wc,&lt;br /&gt;
wo entweder der gesamte Rest implementiert ist (TIX) oder wo weitere Ableitungen existieren (WC).&lt;br /&gt;
&lt;br /&gt;
Die display_wc implementiert die Teile die alle WC-Varianten gemeinsam haben.&lt;br /&gt;
Von ihr sind quasi die verschiedenen WC-Frontplatten abgeleitet.&lt;br /&gt;
&lt;br /&gt;
Die display_wc_xxx implentieren die Eigenheiten der speziellen Version, was neben ein paar Defines nur das Mapping Zeit → Ausgabemuster (display_getTimeState) ist und das Handling der Modus-Taste ist.&lt;br /&gt;
&lt;br /&gt;
=== Hinzufügen eigener WC-Frontplattenlayouts ===&lt;br /&gt;
&lt;br /&gt;
Prinzipiell sind folgende Schritte notwendig:&lt;br /&gt;
&lt;br /&gt;
# Kopieren und Umbenennen einer display_wc_xxx-Datei, die der eigenen Konfiguration am nächsten kommt (englisch, wenn nur eine Sprache, oder ger3 bei mehreren)&lt;br /&gt;
# in main.h define hinzufügen&lt;br /&gt;
# in display_wc.h oben das kopierte include unter Bedingung des gerade definiertne Defines hinzufügen&lt;br /&gt;
# anpassen des neuen headers&lt;br /&gt;
## Enumeration anpassen, Namen sind egal aber DWP_min1 - DWP_min4 müssen existieren. Auch sollten sie die Werte 24 - 28 haben. &amp;lt;br&amp;gt; Bei kleineren werden sonst die übrigen Shift-Register-ausgängen mit geschalten. &amp;lt;br&amp;gt; Höhere machen keinen Sinn, weil das heißen würde, das mehr Wörter als SR-Kanäle da sind.&lt;br /&gt;
## display_getMinuteMask und display_getHoursMask so anpassen, das alle Minuten, bzw Stundenkanäle gesetzt werden &amp;lt;br&amp;gt;&lt;br /&gt;
## display_getTimeSetIndicatorMask gibt die Bitmaske zurück, die bei Zeiteingabe 0 Minuten visualisieren soll (da sonst nix blinkt)&lt;br /&gt;
## display_getNumberDispalyState muss eine übergebene Zahl in ein Bild umwandeln, dass die übergebene Zahl erahnen lassen kann.&lt;br /&gt;
## Modus-Taste - am einfachsten nur Einträge in e_WcGerModes anpassen. Die Schaltung kann behalten werden. Man beachte, dass es doppelt so viele Modi gibt, wie in der Enumeration, da jeweils das Es_ist abgeschalten werden kann. Ist das nicht gewünscht, muss das Define DISPLAY_DEACTIVATABLE_ITIS auf 0 gestellt.&lt;br /&gt;
# anpassen der mapping-funktion Zeit → Ausgabemuster (display_getTimeState)&lt;br /&gt;
## komplett im Code oder mit look-Up-Tables&lt;br /&gt;
## Es sollte natürlich der aktuell ausgewählte Modus (g_displayParams-&amp;gt;mode) berücksichtigt werden&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Benutzer-Interaktion ==&lt;br /&gt;
&lt;br /&gt;
Mit der Fernbedienung ist folgendes möglich:&lt;br /&gt;
&lt;br /&gt;
* Einmaliges Anlernen der Fernbedienung&lt;br /&gt;
* Anpassen der automatischen Helligkeitssteuerung&lt;br /&gt;
* Einstellen des Farbprogramms (Übergänge etc)&lt;br /&gt;
* Stellen der Uhr (wenn kein DCF77-Modul angeschlossen)&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Vlad Tepesch ([http://www.mikrocontroller.net/user/show/vlad_tepesch vlad_tepesch])&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Johnpatcher</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Word_Clock_Variante_1_-_Software&amp;diff=76012</id>
		<title>Word Clock Variante 1 - Software</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Word_Clock_Variante_1_-_Software&amp;diff=76012"/>
		<updated>2013-05-28T18:00:34Z</updated>

		<summary type="html">&lt;p&gt;Johnpatcher: Kopie des entsprechenden Abschnitts aus dem Word Clock Variante 1 Artikel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Module =&lt;br /&gt;
== DCF77 ==&lt;br /&gt;
&lt;br /&gt;
Zur Programmierung siehe den Artikel [[DCF77-Funkwecker mit AVR]]. Im Abschnitt &#039;&#039;Programmierung&#039;&#039; ist das Funksignal dokumentiert, zusammen mit einem Beispiel (Bitstrom und Bedeutung).&lt;br /&gt;
&lt;br /&gt;
Codebeispiel siehe &#039;&#039;[http://www.mikrocontroller.net/topic/25071 Codesammlung DCF 77]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Torsten Giese ([http://www.mikrocontroller.net/user/show/wawibu wawibu])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Automatische Helligkeitsregelung ==&lt;br /&gt;
&lt;br /&gt;
Die Helligkeit des Displays wird über einen LDR (z.B. LDR 07 von Reichelt) gesteuert.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Rene H. ([http://www.mikrocontroller.net/user/show/promeus promeus])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Uhrzeit ==&lt;br /&gt;
&lt;br /&gt;
Die Zeit wird von einer batteriegepufferten Maxim DS1307 Echtzeituhr (RTC), die  über [[I2C]] mit dem Microcontroller verbunden ist, zur Verfügung gestellt. Die Batterie soll bis zu 10 Jahre halten und wird direkt auf die Platine gelötet.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IR ==&lt;br /&gt;
&lt;br /&gt;
Es werden folgende Infrarot-Protokolle unterstützt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Protokoll || Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| SIRCS || Sony&lt;br /&gt;
|-&lt;br /&gt;
| 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;
| SAMSUNG || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| SAMSUNG32 || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| MATSUSHITA || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| 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;
| RECS80 || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| RECS80EXT || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| RC5 || Philips und andere europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| DENON || Denon&lt;br /&gt;
|-&lt;br /&gt;
| RC6 || Philips und andere europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| APPLE || Apple&lt;br /&gt;
|-&lt;br /&gt;
| NUBERT || Nubert, z.B. Subwoofer System&lt;br /&gt;
|-&lt;br /&gt;
| B&amp;amp;O || Bang &amp;amp; Olufsen (erst ab Version 1.0)&lt;br /&gt;
|-&lt;br /&gt;
| GRUNDIG || Grundig (erst ab Version 1.0)&lt;br /&gt;
|-&lt;br /&gt;
| NOKIA || Nokia, z.B. D-Box (erst ab Version 1.0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Über die automatische Erkennung des Protokolls werden die nötigen Tastatur-Befehl-Bits aus den Infrarot-Daten extrahiert - ohne Kenntnis, welche Tasten da eigentlich tatsächlich gedrückt wurden. So eine Tabelle würde den Speicher des µCs sprengen. Deshalb passiert die Zuordnung der Tasten zu WordClock-Befehlen in einer kleinen Anlernprozedur, die einmal nach dem ersten Bootvorgang ausgeführt werden muss.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile gibt es einen eigenen Artikel zum Infrarot-Fernbedienungsdecoder, siehe [http://www.mikrocontroller.net/articles/IRMP IRMP]&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
&lt;br /&gt;
Eine passende Fernbedienung gibt es bei &#039;&#039; [http://www.dealextreme.com/p/24-key-wireless-infrared-ir-remote-controller-for-rgb-led-light-bulb-1-cr2025-47019 DX] &#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/wikifiles/0/0e/Sku_47019_1.jpg &lt;br /&gt;
&lt;br /&gt;
Passend beschriftet werden kann die Fernbedienung mit folgenden Labels. Es gibt 2 Versionen der Scheckkartenfernbedienungen. Die erste passt für die DX Fernbedienung, diese ist etwas schmaler und länger. Einfach auf eine selbstklebende Folie drucken, ausschneiden und aufkleben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:WordClock_RC_Layout_DX.png|200px]]&lt;br /&gt;
[[Datei:WordClock_RC_Layout.png|200px]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== PWM ==&lt;br /&gt;
&lt;br /&gt;
Die PWM steuert die 3 RGB Kanäle. Damit ist freie Farbenwahl möglich.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Display ==&lt;br /&gt;
&lt;br /&gt;
Das Display wird nicht als 10x11 Matrix sondern wortweise angesteuert. Da die LEDs RGB-LEDs sind ergibt sich daraus für die 24 Wortteile und die 4 Minutenpunkte eine 28x3-Matrix.&lt;br /&gt;
&lt;br /&gt;
Die Farben sind kein Muss, in der Minimalbeschaltung können auch einfarbige LEDs zum Einsatz kommen.&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Vlad Tepesch ([http://www.mikrocontroller.net/user/show/vlad_tepesch vlad_tepesch])&lt;br /&gt;
&lt;br /&gt;
=== Struktur ===&lt;br /&gt;
&lt;br /&gt;
Die display.h ist quasi die Basisklasse.&lt;br /&gt;
Dort ist definiert, welche Schnitsstellen eine Uhr anbieten muss.&lt;br /&gt;
Einige front-unabhängige Sachen sind hier bereits implementiert.&lt;br /&gt;
&lt;br /&gt;
Von ihr abgeleitet ist die display_tix und die display_wc,&lt;br /&gt;
wo entweder der gesamte Rest implementiert ist (TIX) oder wo weitere Ableitungen existieren (WC).&lt;br /&gt;
&lt;br /&gt;
Die display_wc implementiert die Teile die alle WC-Varianten gemeinsam haben.&lt;br /&gt;
Von ihr sind quasi die verschiedenen WC-Frontplatten abgeleitet.&lt;br /&gt;
&lt;br /&gt;
Die display_wc_xxx implentieren die Eigenheiten der speziellen Version, was neben ein paar Defines nur das Mapping Zeit → Ausgabemuster (display_getTimeState) ist und das Handling der Modus-Taste ist.&lt;br /&gt;
&lt;br /&gt;
=== Hinzufügen eigener WC-Frontplattenlayouts ===&lt;br /&gt;
&lt;br /&gt;
Prinzipiell sind folgende Schritte notwendig:&lt;br /&gt;
&lt;br /&gt;
# Kopieren und Umbenennen einer display_wc_xxx-Datei, die der eigenen Konfiguration am nächsten kommt (englisch, wenn nur eine Sprache, oder ger3 bei mehreren)&lt;br /&gt;
# in main.h define hinzufügen&lt;br /&gt;
# in display_wc.h oben das kopierte include unter Bedingung des gerade definiertne Defines hinzufügen&lt;br /&gt;
# anpassen des neuen headers&lt;br /&gt;
## Enumeration anpassen, Namen sind egal aber DWP_min1 - DWP_min4 müssen existieren. Auch sollten sie die Werte 24 - 28 haben. &amp;lt;br&amp;gt; Bei kleineren werden sonst die übrigen Shift-Register-ausgängen mit geschalten. &amp;lt;br&amp;gt; Höhere machen keinen Sinn, weil das heißen würde, das mehr Wörter als SR-Kanäle da sind.&lt;br /&gt;
## display_getMinuteMask und display_getHoursMask so anpassen, das alle Minuten, bzw Stundenkanäle gesetzt werden &amp;lt;br&amp;gt;&lt;br /&gt;
## display_getTimeSetIndicatorMask gibt die Bitmaske zurück, die bei Zeiteingabe 0 Minuten visualisieren soll (da sonst nix blinkt)&lt;br /&gt;
## display_getNumberDispalyState muss eine übergebene Zahl in ein Bild umwandeln, dass die übergebene Zahl erahnen lassen kann.&lt;br /&gt;
## Modus-Taste - am einfachsten nur Einträge in e_WcGerModes anpassen. Die Schaltung kann behalten werden. Man beachte, dass es doppelt so viele Modi gibt, wie in der Enumeration, da jeweils das Es_ist abgeschalten werden kann. Ist das nicht gewünscht, muss das Define DISPLAY_DEACTIVATABLE_ITIS auf 0 gestellt.&lt;br /&gt;
# anpassen der mapping-funktion Zeit → Ausgabemuster (display_getTimeState)&lt;br /&gt;
## komplett im Code oder mit look-Up-Tables&lt;br /&gt;
## Es sollte natürlich der aktuell ausgewählte Modus (g_displayParams-&amp;gt;mode) berücksichtigt werden&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Benutzer-Interaktion ==&lt;br /&gt;
&lt;br /&gt;
Mit der Fernbedienung ist folgendes möglich:&lt;br /&gt;
&lt;br /&gt;
* Einmaliges Anlernen der Fernbedienung&lt;br /&gt;
* Anpassen der automatischen Helligkeitssteuerung&lt;br /&gt;
* Einstellen des Farbprogramms (Übergänge etc)&lt;br /&gt;
* Stellen der Uhr (wenn kein DCF77-Modul angeschlossen)&lt;br /&gt;
&lt;br /&gt;
Softwareentwickler: Vlad Tepesch ([http://www.mikrocontroller.net/user/show/vlad_tepesch vlad_tepesch])&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Johnpatcher</name></author>
	</entry>
</feed>