<?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=188.155.9.7</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=188.155.9.7"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/188.155.9.7"/>
	<updated>2026-04-10T21:36:56Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=USB_IR_Remote_Receiver&amp;diff=64537</id>
		<title>USB IR Remote Receiver</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=USB_IR_Remote_Receiver&amp;diff=64537"/>
		<updated>2012-02-24T14:50:57Z</updated>

		<summary type="html">&lt;p&gt;188.155.9.7: /* Arbeitsweise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein Infrarot-Multiprotokoll-Decoder in Kombination mit [[IRMP]] von Frank M.  und [http://www.obdev.at/products/vusb/index-de.html V-USB] für die USB Schnittstelle&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Motivation für das Projekt war der veraltete Igor-IR Empfänger. Auch wie Frank M. in seinem Artikel beschreibt ist das RC5 Protokoll veraltet und findet in neuen Geräten fast keine Anwendung mehr. Auch habe ich mich für die USB Lösung entschieden, da heutzutage nicht mehr jedes PC-Mainboard über eine RS-232 Schnittstelle verfügt.&lt;br /&gt;
Durch Irmp - der Infrarot-Fernbedienungsdecoder der mehrere Protokolle auf einmal decodieren kann, ist es möglich folgende Protokolle zu empfangen und auszuwerten:&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, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| RC6 || Philips und andere europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| RC6A || Philips, Kathrein und andere Hersteller, z.B. XBOX&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&lt;br /&gt;
|-&lt;br /&gt;
| GRUNDIG || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| NOKIA || Nokia, z.B. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| SIEMENS || Siemens, z.B. Gigaset M740AV (ab ~15kHz, siehe Bemerkungen zu F_INTERRUPTS)&lt;br /&gt;
|-&lt;br /&gt;
| FDC || FDC Keyboard (ab ~15kHz)&lt;br /&gt;
|-&lt;br /&gt;
| RCCAR || RC Car: IR Fernbedienung für Modellfahrzeuge&lt;br /&gt;
|-&lt;br /&gt;
| JVC || JVC&lt;br /&gt;
|-&lt;br /&gt;
| NIKON || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| RUWIDO || RUWIDO (z.B. T-Home-Mediareceiver)&lt;br /&gt;
|-&lt;br /&gt;
| KATHREIN  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| NEC16  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| NEC42  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| LEGO   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| THOMSON || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Funktionen/Vorteile gegenüber anderen IR Empfängern ==&lt;br /&gt;
* Der AVR-Source ist für fast alle Mikrochips einsetzbar&lt;br /&gt;
* Bei vorhandenen modifizierten [[#bootloadHID]] kann schnell und einfach ein Firmware Update des Mikrochips über die USB Schnittstelle durchgeführt werden&lt;br /&gt;
* Der Empfänger hat eine PowerOn Funktion um den Host per Fernbedienung ein/aus-schalten zu können (deaktivierbar)&lt;br /&gt;
* Es sind keine speziellen Treiber notwendig, egal ob Windows XP oder Windows 7&lt;br /&gt;
* Tastenentprellung im Mikrochip selber (einstellbar)&lt;br /&gt;
* Durch die Verwendung der [[#USB IR Remote Receiver DLL]] hat der Benutzer leicht die Möglichkeit die dekodierten IR-Codes auszuwerten.&lt;br /&gt;
&lt;br /&gt;
== Arbeitsweise ==&lt;br /&gt;
Durch V-USB wird eine rein Softwaremässige USB Schnittstelle geschaffen. Somit können auch Mikrokontroller ohne USB-Schnittstelle wie z.B. der Atmega8-16 eingesetzt werden. Durch V-USB arbeitet der AVR als Low Speed USB 1.1 HID Gerät. Durch die Benutzung von Standard HID-Funktionen wird kein spezieller USB Treiber benötigt.&lt;br /&gt;
&lt;br /&gt;
Wenn ein IR-Code dekodiert wurde wird dieser per USB Interrupt Transfer vom Gerät an den Host gesendet. Die Auswertung des IR-Codes übernimmt der Host.&lt;br /&gt;
&lt;br /&gt;
Die PowerOn Funktion speichert den ersten empfangenen IR-Code im EEPROM. Wird dieser erneut empfangen wird der definierte Ausgang für die PowerOn Funktion für ~250ms auf +VCC geschaltet. Dieser IR-Code wird dann nicht mehr zum Host weiter gesendet. Die PowerOn Funktion lässt sich über den Settings/Optionen Dialog deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Durch Irmp lässt sich auch die Fernbedienung bereits im Gerät entprellen. Die Entprellung ist über den Settings/Optionen Dialog einstellbar.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Stand vom 02.01.2012&lt;br /&gt;
&lt;br /&gt;
Download des kompletten Paketes: &lt;br /&gt;
[[http://www.mikrocontroller.net/wikifiles/e/e5/USB_IR_Remote_Receiver_Complete.zip USB IR Remote Receiver Complete]]&lt;br /&gt;
&lt;br /&gt;
Dieser Download beinhaltet:&lt;br /&gt;
* Release der USB IR Remote Receiver DLL&lt;br /&gt;
&lt;br /&gt;
* Sourcecode AVR USB IR Remote Receiver&lt;br /&gt;
* Release AVR USB IR Remote Receiver für Atmega8 und Atmega168p&lt;br /&gt;
* Sourcecode &amp;amp; Release AVR modifizierter bootloadHID v1.1 für Atmega8&lt;br /&gt;
* Sourcecode &amp;amp; Release AVR modifizierter bootloadHID v1.1 für Atmega168p&lt;br /&gt;
&lt;br /&gt;
* Sourcecode &amp;amp; Release Visual Studio 2008 Demo Konsole Anwendung&lt;br /&gt;
* Sourcecode &amp;amp; Release Delphi 2010 Demo Anwendung&lt;br /&gt;
* Sourcecode &amp;amp; Release Visual Studio 2008 C# Demo Anwendung (Danke an Michael Kipp)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Plugin für EventGhost&lt;br /&gt;
&lt;br /&gt;
* Beschreibung in Englisch als Html&lt;br /&gt;
&lt;br /&gt;
Änderungen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Datum || Änderung&lt;br /&gt;
|-&lt;br /&gt;
| 02.01.2012 || DLL:&lt;br /&gt;
* v1.0.0.14, IR Polling entfernt, IRMP Logging per USB hinzugefügt&lt;br /&gt;
AVR:&lt;br /&gt;
* v1.8, IR Polling entfernt, IRMP Logging per USB hinzugefügt. Source für AVR Studio v5 konvertiert.&lt;br /&gt;
|-&lt;br /&gt;
| 26.10.2011 || DLL:&lt;br /&gt;
* v1.0.0.13, Neue Irmp Protokolle in die Standard Liste aufgenommen&lt;br /&gt;
AVR:&lt;br /&gt;
* v1.7, IRMP Update auf 20.09.2011, neues Protokoll RUWIDO, KATHREIN, NEC16, NEC42, LEGO und THOMSON.&lt;br /&gt;
|-&lt;br /&gt;
| 14.07.2011 || DLL:&lt;br /&gt;
* v1.0.0.12, Problem mit EventGhost behoben&lt;br /&gt;
|-&lt;br /&gt;
| 28.02.2011 || Demo:&lt;br /&gt;
* neuen Demo Source für Visual Studio 2008 C# aufgenommen. Danke an Michael Kipp für seine Arbeit&lt;br /&gt;
|-&lt;br /&gt;
| 27.02.2011 || DLL:&lt;br /&gt;
* v1.0.0.11, Problem mit EventGhost behoben, Problem mit InitNative/InitPAnsiChar behoben&lt;br /&gt;
|-&lt;br /&gt;
| 04.02.2011 || AVR:&lt;br /&gt;
* v1.6, Source und Release für Atmega8/Atmega168p.&lt;br /&gt;
* bootLoadHID v1.1 Source und Release für Atmega8/Atmega168p.&lt;br /&gt;
|-&lt;br /&gt;
| 27.01.2011 || DLL:&lt;br /&gt;
* v1.0.0.10, Neue Irmp Protokolle in die Standard Liste aufgenommen.&lt;br /&gt;
AVR:&lt;br /&gt;
* v1.5, IRMP Update auf 18.01.2011, neues Protokoll RC6A, JVC und NIKON.&lt;br /&gt;
|-&lt;br /&gt;
| 28.06.2010 || DLL:&lt;br /&gt;
* v1.0.0.9, Neue Irmp Protokolle in die Standard Liste aufgenommen.&lt;br /&gt;
AVR:&lt;br /&gt;
* v1.4, IRMP Update auf 26.06.2010, neues Protokoll FDC und RCCAR.&lt;br /&gt;
|-&lt;br /&gt;
| 06.06.2010 || DLL:&lt;br /&gt;
* v1.0.0.8, Protokolle die in der INI Datei fehlen werden nun automatisch eingetragen. Neue Irmp Protokolle in die Standard Liste aufgenommen.&lt;br /&gt;
AVR:&lt;br /&gt;
* v1.3, IRMP Update auf 02.06.2010, neues Protokoll NOKIA und SIEMENS&lt;br /&gt;
|-&lt;br /&gt;
| 18.05.2010 || DLL:&lt;br /&gt;
* v1.0.0.7, Grundig Protokoll für INI-Datei aufgenommen. Bei fehlender INI-Datei werden die Protokolle automatisch eingetragen. Beim manuellen Einfügen von &amp;quot;GRUNDIG=15&amp;quot; kann auch die alte v1.0.0.6 weiter verwendet werden. Siehe INI Beschreibung.&lt;br /&gt;
AVR:&lt;br /&gt;
* v1.2, IRMP Update auf 17.05.2010, neues Protokoll GRUNDIG, Bugfix SAMSUNG32&lt;br /&gt;
|-&lt;br /&gt;
| 09.05.2010 || DLL:&lt;br /&gt;
* v1.0.0.6, Bugfix für Standby - die Verbindung zum Gerät wurde nicht richtig getrennt&lt;br /&gt;
Sonstiges:&lt;br /&gt;
* Plugin für EventGhost wurde hinzugefügt&lt;br /&gt;
* Dokumentation überarbeitet&lt;br /&gt;
|-&lt;br /&gt;
| 02.05.2010 || Dokumentation überarbeitet, PonyProg2000 im Schaltplan aufgenommen.&lt;br /&gt;
|-&lt;br /&gt;
| 28.04.2010 || DLL:&lt;br /&gt;
* v1.0.0.5, Möglichkeit um die Firmware über den Settings/Optionen Dialog auf den Mikrochip programmieren zu können hinzugefügt.&lt;br /&gt;
&lt;br /&gt;
AVR:&lt;br /&gt;
* Bugfix der Entprellung&lt;br /&gt;
* Irmp Version Update auf 28.04.2010&lt;br /&gt;
* modifizierter bootloadHID um über den Settings/Optionen Dialog eine neue Firmware aufspielen zu können&lt;br /&gt;
|-&lt;br /&gt;
| 23.04.2010 || DLL:&lt;br /&gt;
* v1.0.0.4, Tasten Unterdrückung für träge Host Anwendung hinzugefügt&lt;br /&gt;
* Bugfix für Settings/Optionen Dialog und DVBViewer&lt;br /&gt;
&lt;br /&gt;
AVR:&lt;br /&gt;
* Bugfix der Entprellung wenn die Taste länger als 255 Wiederholungen gedrückt war&lt;br /&gt;
* Erkennung/Auswertung des PowerOn IR-Code optimiert&lt;br /&gt;
|-&lt;br /&gt;
| 16.04.2010 || DLL:&lt;br /&gt;
* v1.0.0.3, InitNative, InitPAnsiChar und Girder Unterstützung hinzugefügt&lt;br /&gt;
&lt;br /&gt;
AVR:&lt;br /&gt;
* Irmp Version Update auf 16.04.2010&lt;br /&gt;
|-&lt;br /&gt;
| 12.04.2010 || AVR:&lt;br /&gt;
* Irmp Version Update auf 12.04.2010, neues Protokoll B&amp;amp;Q&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== AVR Source ===&lt;br /&gt;
&lt;br /&gt;
Der Source kann mit [http://www.atmel.com/dyn/Products/tools_card.asp?tool_id=2725 AVR-Studio] und [http://winavr.sourceforge.net WinAVR] kompiliert werden.&lt;br /&gt;
Ab AVR v1.8 wird nun AVR Studio v5 benutzt und somit ist kein extra WinAVR mehr notwendig.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung IRMP ab 26.06.2010&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mittlerweile sind die unterstützen Protokolle von Irmp so viel geworden, dass nicht mehr alle in den Flash des Atmega8 mit dem Bootloader passen.&lt;br /&gt;
&lt;br /&gt;
Als Alternative kann der Atmega168p verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Man sollte also für seine eigene Verwendung die Protokolle in der &#039;&#039;&#039;irmpconfig.h&#039;&#039;&#039; aktivieren die man benötigt und den AVR Source neu kompilieren!&lt;br /&gt;
&lt;br /&gt;
Es ist eine fertige Version mit im Paket die auf den Atmega8 passt und diese Protokolle unterstützt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&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;
#define IRMP_SUPPORT_DENON_PROTOCOL             1       // DENON, Sharp         &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_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 (SAB2008)       &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_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_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_RUWIDO_PROTOCOL            0       // RUWIDO, T-Home       &amp;gt;= 15000                 ~550 bytes&lt;br /&gt;
#define IRMP_SUPPORT_LEGO_PROTOCOL              0       // LEGO Power RC        &amp;gt;= 20000                 ~150 bytes&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Konfigurationen AVR Source bootloadHID&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Auch die modifizierte Version des bootloadHID kann mit AVR-Studio und WinAVR kompiliert werden. Je nach Mikrochip muss die Bootloader Adresse in AVR-Studio eingestellt werden. Der Bootloader benötigt 2048 Bytes.&lt;br /&gt;
&lt;br /&gt;
In der Menüleiste unter &#039;&#039;Project&#039;&#039;-&amp;gt;&#039;&#039;Configuration Options&#039;&#039;-&amp;gt;&#039;&#039;Custom Options&#039;&#039;-&amp;gt;&#039;&#039;[Linker Options]&#039;&#039; die Zeile&lt;br /&gt;
&lt;br /&gt;
Atmega8:&lt;br /&gt;
&amp;lt;c&amp;gt;-Wl,--section-start=.text=0x1800&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atmega168p:&lt;br /&gt;
&amp;lt;c&amp;gt;-Wl,--section-start=.text=0x3800&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf die richtige Bootloader Adresse ändern.&lt;br /&gt;
&lt;br /&gt;
= Schaltplan des USB IR Remote Receiver =&lt;br /&gt;
[[Datei:USB_IR_Remote_Receiver_schematic.jpg|1000px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erläuterung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Z-Dioden ZD1 und ZD2 werden benötigt, um dem USB Standard zu entsprechen.&lt;br /&gt;
&lt;br /&gt;
Es können folgende IR Empfänger Dioden eingesetzt werden:&lt;br /&gt;
&lt;br /&gt;
    Vishay TSOP 1738, Vishay TSOP 1838, Vishay TSOP 11xx series, Siemens SFH 5110, Radio Shack 276-0137, Mitsumi IR Preamp KEY-COOSV (0924G),&lt;br /&gt;
    Toshiba TK19 444 TFMS 5360, Temic TFMS 5380 by Telefunken Semiconductors, Sharp IS1U60, Everlight IRM-8601S, Sony SBX 1620-12, Sharp GP1U271R&lt;br /&gt;
&lt;br /&gt;
Optional: R6 und OK1: diese Bauteile werden für die PowerOn Funktion benötigt um den Host PC über den Power Schalter ein/ausschalten zu können.&lt;br /&gt;
&lt;br /&gt;
Optional: J1: wird nur für den nicht modifizierten bootloadHID Bootloader benötigt.&lt;br /&gt;
&lt;br /&gt;
Optional: CN2, R8 und R9: werden nur benötigt falls man keinen Programmer hat und den Mikrochip mit PonyProg2000 über den LPT Port programmieren will.&lt;br /&gt;
&lt;br /&gt;
== Foto eines aufgebauten USB IR Remote Reciever ==&lt;br /&gt;
[[Datei:avr_hardware_front.jpg|300px]][[Datei:avr_hardware_back.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:USB_IR_Remote_Receiver_Top.jpg|300px]][[Datei:USB_IR_Remote_Receiver_Bot.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Plot USBIRRR Page 1.jpg|300px]][[Datei:Plot USBIRRR Page 2.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
= USB IR Remote Receiver DLL =&lt;br /&gt;
&lt;br /&gt;
Die inkludierte &#039;&#039;&#039;USB_IR_Remote_Receiver.dll&#039;&#039;&#039; übernimmt für den Anwender die Kommunikation des Host PCs mit der Hardware. Somit braucht sich der Anwender nicht um die Geräte Verbindung zu kümmern. Empfangene IR-Codes werden von der DLL an die Host-Anwendung per CallBack Funktion weiter gereicht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die DLL Unterstützt folgende Host-Anwendungen:&#039;&#039;&#039;&lt;br /&gt;
* [http://www.dvbviewer.com DVBViewer] als Input-Plugin: Die DLL muss sich im DVBViewer\Plugins Ordner befinden&lt;br /&gt;
* [http://www.promixis.com Girder] als Input-Plugin: Die DLL muss sich im Girder\Plugins Ordner befinden, es wird Girder ab Version 3.2.9 unterstüzt.&lt;br /&gt;
* [http://www.eventghost.org EventGhost] als Input-Plugin: Die DLL und die &#039;__init__.py&#039; muss sich im EventGhost\plugins\USBIRRemoteReceiver Ordner befinden&lt;br /&gt;
* Native: mit den Funktionen &#039;&#039;InitNative&#039;&#039; und &#039;&#039;InitPAnsiChar&#039;&#039; kann die DLL kann auch für selbst geschriebene Anwendungen verwendet werden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Settings/Optionen Dialog ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:MainScreen.jpg]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Settings/Optionen Dialog&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Objekt || Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| Device Connected  || Wenn das Gerät verbunden ist erscheint ein grünes Icon. auch wird die beinhaltete Irmp Version angezeigt. Auch die USB IR Remote Receiver Mikrochip Version wird angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| PowerOn Function Status || Wenn die PowerOn Funktion im Gerät aktiviert ist erscheint das grüne Icon. Mit dem Button kann man die Funktion im Gerät aktivieren/deaktivieren.&lt;br /&gt;
|-&lt;br /&gt;
| Disable PowerOn when initialized || Ist diese Option aktiviert, wird beim initialisieren des Gerätes durch die Host Anwendung die PowerOn Funktion deaktiviert. Beim Entladen der DLL oder bei Standby/Ruhezustand des Hosts-PCs wird die PowerOn Funktion wieder aktiviert um den PC wieder einschalten zu können. Somit kann die gleiche Taste auf einer Fernbedienung zum Einschalten des PC und in der Software für eine andere Funktion verwendet werden.&lt;br /&gt;
|-&lt;br /&gt;
| Received IR Code || Hier wird der zuletzt empfangene IR-Code angezeigt. Wenn der Settings/Optionen Dialog sichtbar ist wird der IR-Code nicht zur Host Anwendung weiter gerreicht und man kann verschiedene Tasten der Fernbedienung ausprobieren ohne in der Host Anwendung etwas auszulösen.&lt;br /&gt;
|-&lt;br /&gt;
| Trained IR Code || Hier wird der gespeicherte IR-Code, der für die PowerOn Funktion verwendet wird, angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| Read Trained IR Code || Hier kann der aktuelle gespeicherte IR-Code für die PowerOn Funktion aus dem EEPROM ausgelesen werden.&lt;br /&gt;
|-&lt;br /&gt;
| Clear Trained IR Code || Hier kann der aktuelle gespeicherte IR-Code für die PowerOn Funktion im EEPROM gelöscht werden. Bei nicht vorhanden sein eines IR-Codes im EEPROM wird automatisch der nächste empfangene IR-Code wieder abgespeichert. Dieser wird dann wieder für die PowerOn Funktion verwendet.&lt;br /&gt;
|-&lt;br /&gt;
| Enable IRMP Logging || Wenn die Fernbedinung von IRMP nicht erkannt wird kann man mit dieser Option die rohen IR Signale loggen. Der AVR Source muss dazu mit IRMP_LOGGING=1 kompiliert sein.&lt;br /&gt;
|-&lt;br /&gt;
| Minimum of Repeats || Hier kann die Entprellung der Fernbedienung eingestellt werden. Je höher dieser Wert ist um so mehr Wiederholungen des IR-Codes müssen vorkommen bis sie wieder ohne Einschränkungen zur Host Anwendung durchgelassen werden. Ein Wert von 0 bedeutet keine Entprellung. (Default 5)&lt;br /&gt;
|-&lt;br /&gt;
| Flash/Update Firmware || Diese Funktion ist ab USB IR Remote Receiver v1.1 oder wenn sich das Gerät im Bootloader Modus befindet verfügbar. Es wird ein neuer Dialog geöffnet wo es möglich ist eine Intel-HEX Datei auszuwählen und die Firmware des Gerätes zu erneuern.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IRMP Logging ==&lt;br /&gt;
Ist auf dem AVR eine Firmware mit der Kompileroption IRMP_LOGGING = 1 können die Rohdaten des IR Signales aufgezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Dazu muss im Optionen Dialog die Option &amp;quot;Enable IRMP Logging&amp;quot; aktiviert werden. Nun wird bei empfangenen Rohdaten eine Beschreibung der zuletzt gedrückten Taste auf der Fernbedienung verlangt. Die Rohdaten werden danach in das Textfile &amp;quot;IRMP_Log.txt&amp;quot; im selben Ordner wo sich die DLL befindet geschrieben.&lt;br /&gt;
&lt;br /&gt;
Dieses Textfile kann zur Analyse der IR Signale verwendet werden. Auch können die Rohdaten direkt mit der &amp;quot;irmp.exe&amp;quot; analysiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;C:\Program Files (x86)\DVBViewer\Plugins&amp;gt;irmp.exe &amp;lt;IRMP_Log.txt&lt;br /&gt;
-------------------------------------------------------------------&lt;br /&gt;
# 1&lt;br /&gt;
-------------------------------------------------------------------&lt;br /&gt;
# 02.01.12 17:18:32&lt;br /&gt;
00000010111111011000000001111111 p = 2, a = 0xbf40, c = 0x0001, f = 0x00&lt;br /&gt;
p = 2, a = 0xbf40, c = 0x0001, f = 0x01&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Flash/Update Firmware Dialog ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:FlashScreen.jpg]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Flash/Update Firmware Dialog&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Objekt || Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| Load Intel HEX File|| Hier kann die USB IR Remote Receiver Firmware einfach in das Gerät eingespielt werden. Die Firmware ist auf die Größe des verwendeten Mikrochips Flashes minus der Bootloader Größe (2048 Bytes) beschränkt. Beim Atmega8 sind es dann z.B. maximal Flash 8192 Bytes - Bootloader 2048 Bytes = 6144 Bytes. Beim Atmega168p sind es dann z.B. maximal Flash 16384 Bytes - Bootloader 2048 Bytes = 14336 Bytes.&lt;br /&gt;
Wenn das Gerät sich im Normal Betrieb befindet wird zuerst das Gerät neu gestartet um es in den Bootloader Modus zu versetzen. Danach wird die neue Firmware automatisch eingespielt. Nach dem Einspielen wird das Gerät neu gestartet und es sollte dann die neue Firmware automatisch gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Um die volle Funktion des Einspielen einer neuen Firmware zu haben sollte die modifizierte Version von [[#bootloadHID]] verwendet werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== USB IR Remote Receiver INI ==&lt;br /&gt;
Beim ersten mal Initialisieren der DLL wird eine &#039;&#039;USB_IR_Remote_Receiver.ini&#039;&#039; im gleichen Ordner wo sich die DLL befindet erzeugt.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;USB_IR_Remote_Receiver.ini&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Sektion || Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| [IRMP Protocols] || Hier wird die Liste der unterstützen Protokolle von Irmp eingetragen. Sollte ein neues Protokoll hinzukommen kann dies einfach hier ergänzt werden ohne das es nötig ist die DLL zu erneuern.&lt;br /&gt;
&lt;br /&gt;
Format:&lt;br /&gt;
&#039;&#039;Name_des_Protokolls&#039;&#039;=&#039;&#039;Irmp_ID&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
z.B.:&lt;br /&gt;
&#039;&#039;NEC&#039;&#039;=&#039;&#039;2&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [Settings] || &#039;&#039;&#039;Gerätverbindung Startverzögerung&#039;&#039;&#039;&lt;br /&gt;
Um der Host Anwendung genug Zeit zu lassen kann eine Startverzögerung zwischen Initialisieren und verbinden mit dem Gerät eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Format:&lt;br /&gt;
&#039;&#039;StartUpDelay&#039;&#039;=&#039;&#039;gewünschter_Wert_in_Millisekunden&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
z.B.:&lt;br /&gt;
&#039;&#039;StartUpDelay&#039;&#039;=&#039;&#039;2000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Default: 2000ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasten Unterdrückung&#039;&#039;&#039;&lt;br /&gt;
Sollte die verwendete Host Anwendung eher träge reagieren - d.h. nicht schnell genug sein um die empfangenen IR-Codes umzusetzen kann eine Tasten Unterdrückung zusätzlich aktiviert werden.&lt;br /&gt;
&lt;br /&gt;
Format:&lt;br /&gt;
&#039;&#039;Key Suppression&#039;&#039;=&#039;&#039;gewünschter_Wert_in_Millisekunden&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
z.B.:&lt;br /&gt;
&#039;&#039;Key Suppression&#039;&#039;=&#039;&#039;200&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Default: 0ms - deaktiviert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug LOG&#039;&#039;&#039;&lt;br /&gt;
Um das Debug Logmemo im Settings/Optionen Dialog anzuzeigen kann dieser Wert eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
Format:&lt;br /&gt;
&#039;&#039;Debug&#039;&#039;=&#039;&#039;0/1&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
z.B.:&lt;br /&gt;
&#039;&#039;Debug&#039;&#039;=&#039;&#039;0&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Default: 0 - deaktiviert&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= bootloadHID =&lt;br /&gt;
&lt;br /&gt;
Um einfach in das Gerät eine neue Firmware einspielen zu können wurde das Projekt [http://www.obdev.at/products/vusb/prjdetail.php?pid=32 bootloadHID] etwas verändert.&lt;br /&gt;
&lt;br /&gt;
Es kann nun aus der eigentlichen Firmware das Gerät in den Bootloader Modus gebracht werden ohne den Jumper setzen oder das Gerät aus/einstecken zu müssen.&lt;br /&gt;
&lt;br /&gt;
Das Gerät kann nun in den Bootloader Modus gebracht werden wenn:&lt;br /&gt;
* der Jumper gesetzt ist&lt;br /&gt;
* keine USB IR Remote Receiver Firmware im Flash ist&lt;br /&gt;
* die USB IR Remote Receiver Firmware den Bootloader Modus startet&lt;br /&gt;
&lt;br /&gt;
Bei einem leeren Gerät sollte zuerst mit einem Programmer oder mit PonyProg2000 über den LPT Port der Bootloader aufgespielt werden. Die USB IR Remote Receiver Firmware selber kann danach einfach über den Settings/Optionen Dialog eingespielt werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fuses&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Beim Bootloader ist es wichtig die Fuse Bits richtig zu setzten, denn ansonsten kann es nach dem ersten Update der Firmware vorkommen dass der Bootloader gelöscht wird. Wenn ein anderer Mikrochip als der Atmega8 verwendet wird muss gegebenfalls auch die Adresse des Bootloader angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;###############################################################################&lt;br /&gt;
# Configure the following variables according to your AVR. The example below&lt;br /&gt;
# is for an ATMega8. Program the device with&lt;br /&gt;
# make fuse  # to set the clock generator, boot section size etc.&lt;br /&gt;
# make flash # to load the boot loader into flash&lt;br /&gt;
# make lock  # to protect the boot loader from overwriting&lt;br /&gt;
&lt;br /&gt;
DEVICE = atmega8&lt;br /&gt;
BOOTLOADER_ADDRESS = 1800&lt;br /&gt;
F_CPU = 12000000&lt;br /&gt;
FUSEH = 0xc0&lt;br /&gt;
FUSEL = 0x9f&lt;br /&gt;
&lt;br /&gt;
# Fuse high byte:&lt;br /&gt;
# 0xc0 = 1 1 0 0   0 0 0 0 &amp;lt;-- BOOTRST (boot reset vector at 0x1800)&lt;br /&gt;
#        ^ ^ ^ ^   ^ ^ ^------ BOOTSZ0&lt;br /&gt;
#        | | | |   | +-------- BOOTSZ1&lt;br /&gt;
#        | | | |   + --------- EESAVE (preserve EEPROM over chip erase)&lt;br /&gt;
#        | | | +-------------- CKOPT (full output swing)&lt;br /&gt;
#        | | +---------------- SPIEN (allow serial programming)&lt;br /&gt;
#        | +------------------ WDTON (WDT not always on)&lt;br /&gt;
#        +-------------------- RSTDISBL (reset pin is enabled)&lt;br /&gt;
# Fuse low byte:&lt;br /&gt;
# 0x9f = 1 0 0 1   1 1 1 1&lt;br /&gt;
#        ^ ^ \ /   \--+--/&lt;br /&gt;
#        | |  |       +------- CKSEL 3..0 (external &amp;gt;8M crystal)&lt;br /&gt;
#        | |  +--------------- SUT 1..0 (crystal osc, BOD enabled)&lt;br /&gt;
#        | +------------------ BODEN (BrownOut Detector enabled)&lt;br /&gt;
#        +-------------------- BODLEVEL (2.7V)&lt;br /&gt;
###############################################################################&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Programmieren des Mikrochips mit PonyProg2000 über den LPT Port ==&lt;br /&gt;
Der Schaltplan enthält die Bauteile R8, R9 und CN2. Diese werden nur benötigt, wenn man über keinen Mikrochip Programmer verfügt. Ansonsten kann mit diesen 3 zusätzlichen Bauteilen der Mikrochip mit PonyProg2000 über den LPT Port eines PCs programmiert werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel eines LPT Kabels im Selberbau&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:LPT_cable.jpg]]&lt;br /&gt;
&lt;br /&gt;
Nach dem Download und Installieren von PonyProg2000 muss dies zuerst Kalibriert werden. Dazu in der Menüleiste auf &#039;&#039;Setup&#039;&#039;-&amp;gt;&#039;&#039;Calibration&#039;&#039; gehen und ausführen.&lt;br /&gt;
&lt;br /&gt;
Danach kann der Mikrochip eingestellt werden. Für Atmega8 in der Menüleiste &#039;&#039;Device&#039;&#039;-&amp;gt;&#039;&#039;AVR micro&#039;&#039;-&amp;gt;&#039;&#039;ATmega8&#039;&#039; auswählen.&lt;br /&gt;
&lt;br /&gt;
Dann kann das LPT Kabel mit dem Host PC Verbunden werden. Auch muss die USB Verbindung vorhanden sein, da der Mikrochip von dem USB-Port versorgt wird. Nun kann man die Verbindung mit dem Mikrochip mit &#039;&#039;Probe&#039;&#039; überprüfen.&lt;br /&gt;
[[Datei:I_O.JPG]]&lt;br /&gt;
&lt;br /&gt;
Sollten hier Probleme auftreten kann es helfen in der &#039;&#039;PONYPROG2000.INI&#039;&#039; den Wert &#039;&#039;AutoDetectPorts=YES&#039;&#039; auf &#039;&#039;NO&#039;&#039; umzustellen. Eventuell muss dann noch bei &#039;&#039;LPTPorts&#039;&#039; die LPT Port Adresse eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Wenn der Test OK verläuft kann nun die &#039;&#039;bootloadHID.hex&#039;&#039; Datei in der Menüleiste &#039;&#039;File&#039;&#039;-&amp;gt;&#039;&#039;Open Device File...&#039;&#039; geöffnet werden. Es sollten nun lauter FF zu sehen sein. Der Bootloader startet beim Atmega8 erst ab Adresse 0x1800!&lt;br /&gt;
&lt;br /&gt;
Nun sollten die Fuse Bits über die Menüleiste &#039;&#039;Command&#039;&#039;-&amp;gt;&#039;&#039;Security and Configuration Bits...&#039;&#039; eingestellt werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:fuses.JPG]]&lt;br /&gt;
&lt;br /&gt;
Dannach auf &#039;&#039;Write&#039;&#039; drücken um die Fuses auf dem Mikrochip zu setzten. Danach kann das Fuses-Fenster geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Nun in der Menüleiste über &#039;&#039;Command&#039;&#039;-&amp;gt;&#039;&#039;Write All&#039;&#039; die zuvor geöffnete bootloadHID.hex auf den Mikrochip programmieren. Wenn dieser Vorgang abgeschlossen wurde zuerst PonyProg2000 beenden, USB Verbindung trennen und dann das LPT Kabel entfernen. Wenn keine Probleme auftreten wird das LPT-Kabel und PonyProg2000 nun jetzt nicht mehr gebraucht.&lt;br /&gt;
&lt;br /&gt;
Nun kann der USB IR Remote Receiver über USB angeschlossen werden und es sollte sich ein USB Gerät Namens &#039;&#039;HIDBoot&#039;&#039; anmelden. Nun kann über den Settings/Optionen Dialog eine USB IR Remote Receiver Firmware aufgespielt werden.&lt;br /&gt;
&lt;br /&gt;
= Weblinks =&lt;br /&gt;
&#039;&#039;&#039;V-USB&#039;&#039;&#039;:&lt;br /&gt;
* http://www.obdev.at/products/vusb/index-de.html&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PonyProg2000&#039;&#039;&#039;:&lt;br /&gt;
* http://www.lancos.com/prog.html&lt;br /&gt;
&lt;br /&gt;
== Hardware / Projekte ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IRMP - Infrarot-Multiprotokoll-Decoder&#039;&#039;&#039;:&lt;br /&gt;
* [[IRMP]]&lt;br /&gt;
&lt;br /&gt;
= Danksagung =&lt;br /&gt;
Vielen Dank an das Forum + Community für deren Unterstützung!&lt;br /&gt;
&lt;br /&gt;
Auch speziellen Dank an Frank M. für sein Irmp.&lt;br /&gt;
&lt;br /&gt;
= Diskussion =&lt;br /&gt;
&lt;br /&gt;
Meinungen, Verbesserungsvorschläge oder Kritik kann im [http://www.mikrocontroller.net/topic/171111 Beitrag: USB IR Remote Receiver (V-USB + IRMP)] geäussert werden.&lt;br /&gt;
&lt;br /&gt;
Viel Spaß mit dem USB IR Remote Receiver!&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:USB]]&lt;br /&gt;
[[Kategorie:Infrarot]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>188.155.9.7</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=USB-Stick_am_Mikrocontroller&amp;diff=64532</id>
		<title>USB-Stick am Mikrocontroller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=USB-Stick_am_Mikrocontroller&amp;diff=64532"/>
		<updated>2012-02-24T10:23:21Z</updated>

		<summary type="html">&lt;p&gt;188.155.9.7: /* Hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Allgemeine Funktionsbeschreibung ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;- AVR/GCC-Version im Projektarchiv verfügbar -&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Projekt demonstriert an einem Hard- und Softwarebeispiel die Verwendung von [[USB]]-Sticks an Mikrocontrollersystemen. Es ist nicht als fertiges Projekt zu betrachten, sondern soll eine Grundlage zur Realisierung eigener Anwendungen sein. Die Software liegt in einer 8051er/SDCC und einer [[AVR-GCC]] Version vor.&lt;br /&gt;
&lt;br /&gt;
[[Bild:VNC Ansicht.png|framed|top|Ansicht des Testaufbaues]]&lt;br /&gt;
&lt;br /&gt;
Dazu ist ein USB-Hostcontroller erforderlich. Die meisten Mikrocontroller mit integrierten USB-Port, bzw. Lösungen mit FT232-Bausteinen, bieten keine Host-Funktionalität. Es wird der Typ VNC1L-1A von FTDI (Vinculum) eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Dieser IC hat folgende Eigenschaften:&lt;br /&gt;
* USB 2.0 Host- und Slave-Funktionalität&lt;br /&gt;
* 2 USB-Ports mit Low- und Full-Speed&lt;br /&gt;
* [[UART]]-, [[SPI]]- und Parallelinterface&lt;br /&gt;
* zusätzliche, frei verwendbare I/O-Ports&lt;br /&gt;
* integrierter 8Bit Mikrocontroller und 32Bit Aritmetik-Prozessor&lt;br /&gt;
* interner DMA-Controller, 64kByte Flash, 4kByte SRAM&lt;br /&gt;
* Firmware für FAT16 und FAT32 Support kostenfrei Verfügbar&lt;br /&gt;
* 3.3V (25mA) Versorgungsspannung, I/O-Pins sind 5V tolerant&lt;br /&gt;
* wenige externe Bauteile erforderlich&lt;br /&gt;
Leider ist der IC nur in SMD (LQFP-48 [[Gehäuse-Übersicht|Gehäuse]]) erhältlich.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Zum Einsatz kommt ein fertiges Modul VDIP1. Dieses enthält auf einer kleinen Platine einen VNC1L-1A mit allen erforderlichen Zusatzbauteilen. Werksmäßig ist auch die passende Firmware (VDAP) bereits programmiert.&lt;br /&gt;
&lt;br /&gt;
[[Bild:VNC VDIP1.png|framed|top|VDIP1-Modul]]&lt;br /&gt;
&lt;br /&gt;
* VNC1L-1A&lt;br /&gt;
* Quarz 12MHz (per interne PLL auf 48MHz vervielfacht)&lt;br /&gt;
* 3.3V Spannungsregler&lt;br /&gt;
* 2 Jumper für die Interfaceeinstellung&lt;br /&gt;
* USB-A Buchse&lt;br /&gt;
* komplette Schutzbeschaltung&lt;br /&gt;
* 2 Status-LEDs&lt;br /&gt;
* 2x 12 Stifte im DIP24 IC-Format &lt;br /&gt;
* VDAP Firmware und Bootloader bereits vorinstalliert&lt;br /&gt;
* Updatefähig über USB-Stick&lt;br /&gt;
&lt;br /&gt;
[http://www.vinculum.com/documents/schematics/VDIP1%20Schematic%20Prints.pdf VDIP1-Schaltung (PDF)] / &lt;br /&gt;
[http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_VNC1L.pdf VDIP1-Datenblatt (PDF)]&lt;br /&gt;
&lt;br /&gt;
Das VDIP1-Modul ist für Experimente gut geeignet, zumal es die VDAP-Firmware bereits enthält. (Das flashen eines leeren VNC1L-1A ist dagegen nicht gerade einfach!) Bezug ist über diverse Elektronikversender möglich. Preis: VDIP1 ca. 25 Euro, VNC1L-1A als einzelner IC ab ca. 10 Euro. Bezugsquellen befinden sich im Diskussionsbeitrag, siehe unten.&lt;br /&gt;
&lt;br /&gt;
Im Beispiel wurde als Zielsystem (8051) eine universelle Mikrocontroller-Platine [http://pro-51.eltra-tec.de PRO-51] mit 8051-Mikrocontroller verwendet. Es kann natürlich jeder andere Mikrocontroller eingesetzt werden. Besondere Leistung ist nicht erforderlich. Die Taktfrequenz beträgt im Bsp. 11.0592MHz und ist unkritisch. Ich habe die Frequenz auch mal Testweise auf 24MHz erhöht, was ohne Software-Änderung auch funktionierte.&lt;br /&gt;
&lt;br /&gt;
Für die AVR-Version habe ich einen ATmega644 verwendet.  Auch andere AVRs sollten funktionieren. Getestet mit unterschiedlichen Taktfrequenzen (1MHz, 8MHz, 11.0592MHz). Beim Einsatz des UART-Monitoring sollte unbedingt ein externer Quarz angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
[[Bild:VNC Stromlaufplan.png|400px|Stromlaufplan 8051]]&lt;br /&gt;
&lt;br /&gt;
[[Media:VNC Stromlaufplan.pdf|Stromlaufplan (8051) als PDF]].&lt;br /&gt;
&lt;br /&gt;
[[Bild:VNC AVR Stromlaufplan.png|400px|Stromlaufplan AVR]]&lt;br /&gt;
&lt;br /&gt;
[[Media:VNC AVR Stromlaufplan.pdf|Stromlaufplan (AVR) als PDF]].&lt;br /&gt;
&lt;br /&gt;
Zu Übertragung wird die SPI-Schnittstelle verwendet. Das SPI-Handling ist komplexer als beispielsweise die UART-Schnittstelle, hat aber den Vorteil, dass die wertvolle Mikrocontroller-UART für andere Anwendungen erhalten bleibt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nicht vergessen, die Jumper J3 und J4 des VDIP1-Moduls auf SPI zu stecken!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das VNC1L-1A SPI-Protokoll weicht erheblich von dem üblichen SPI ab. Es ist ehr eine Mischung aus SPI-, I2C- und UART-Eigenschaften und Bedarf einiger Aufmerksamkeit. Wenn es einmal läuft, dann jedoch sehr stabil und bis 12MHz Busfrequenz schnell. Delays sind kaum notwendig. Da immer 13 Bit übertragen werden, ist eine Hardware-SPI auf Mikrocontrollerseite nicht nutzbar. Das Timing wurde über normale Port-Pins per Software nachgebildet.&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller ist Master, der VNC1L-1A Slave. Zum senden eines Zeichens an den VNC1L-1A ist dies ideal, schwieriger erscheint das Empfangen von Zeichen vom VNC1L-1A, da dieser keinen Interrupt-Pin hat, welcher das Vorhandensein neuer Zeichen signalisiert. Der VNC1L-1A muss dennoch nicht ständig vom Mikrocontroller auf neue Zeichen gepollt werden, da er einen ziemlich großen FIFO hat. Ein &amp;quot;Buffer voll&amp;quot; wird vom Programm erkannt und entsprechend gewartet.&lt;br /&gt;
&lt;br /&gt;
Jedes übertragene Zeichen wird vom VNC1L-1A im Status-Bit sofort auf Akzeptanz bestätigt, ähnlich dem Acknowledgment-Bit des I2C-Buses. Ein nicht bestätigtes Zeichen wird erneut gesendet.&lt;br /&gt;
&lt;br /&gt;
Das Testsystem benutzt zur Anzeige ein alphanumerischen LC-Display mit 4x20 Zeichen, konkret ein DIP204-4 von EA, mit KS0073 Controller. Die Anschaltung und der Betrieb ist Standard und nicht Thema dieses Beitrages. Alle an den VNC1L-1A gesendeten und von ihm empfangenen Daten können bei Bedarf auf dem Display angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Ebenfalls möglich ist UART-Monitoring über die serielle Schnittstelle. Alle gesendeten und empfangenen Zeichen werden hierbei ebenfalls übertragen. &lt;br /&gt;
&lt;br /&gt;
Beide Funktionen sind hilfreich bei der Inbetriebnahme und zum verstehen der Arbeitsweise.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Es wird vorausgesetzt, das auf dem VNC1L-1A die VDAP Software bereits installiert ist. Dies ist auf einen VDIP1-Modul werkseitig der Fall. Meist ist jedoch eine ältere Version drauf. Das sollte man auch erstmal so lassen.&lt;br /&gt;
&lt;br /&gt;
Der Stick muss mit FAT16 oder FAT32 formatiert sein. Es wird nur die erste primäre Partition unterstützt. NTFS oder andere Dateisysteme werden nicht erkannt.&lt;br /&gt;
&lt;br /&gt;
Die VDAP-Firmware stellt praktisch alle Funktionen zum Zugriff auf dem USB-Stick bereit. Kenntnisse des FAT-Dateisystems sind nicht erforderlich. Die Firmware arbeitet im Prinzip wie ein Monitorprogramm mit DOS-ähnlichen Kommandos. Nach einem erfolgreichen Kommando meldet sich die Firmware mit einen &#039;D:\&amp;gt;&#039; zurück.&lt;br /&gt;
&lt;br /&gt;
Die Beispielprogramme sind in Ansi-C geschrieben und mit SDCC bzw. GCC kompiliert. Sie belegen inkl. der LCD-Funktionen und Test-Filedaten ca. 7Kbyte FLASH und 270Byte RAM (8051) und ca. 700Byte SRAM (AVR), mit Einsparpotential. (Auf PROGMEM-Nutzung wurde bisher verzichtet.) Eine Portierung auf andere Mikrocontroller sollte problemlos möglich sein. Spezielle SFR- und Zusatzkomponentennutzung wurde weitgehend vermieden. Das Programm dürfte leicht zu verstehen sein. Einige Erfahrungen sollten jedoch schon vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
Zunächst werden ein Reset des VNC1L-1A und einige Initialisierungen durchgeführt:&lt;br /&gt;
&lt;br /&gt;
* ECS - erweitertes Kommando-Set einstellen&lt;br /&gt;
* IPA - alle Zahlen werden als ASCII übertragen&lt;br /&gt;
* FWV - Anzeige der Softwareversion&lt;br /&gt;
* DIR - Anzeige des Stickinhaltes&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Wenn diese 4 Punkte funktionieren, kann man sich an ein Update der VDAP-Firmware trauen. Dazu die aktuelle Firmware von der [http://www.vinculum.com/FTFirmware.html Vinculum-Homepage] laden (endet mit .ftd), in &amp;quot;ftrfb.ftd&amp;quot; umbenennen und diese Datei ins Root des USB-Sticks kopieren. Der Bootloader flasht die Datei dann automatisch beim nächsten anstecken und quitiert den Vorgang mit der Anzeige CHANGE MAIN. Alle Funktionen habe ich mit der Version 3.66 und 3.68 ausprobiert.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Bild:VNC Monitor FW.png|top|Firmwaremeldung nach FWV-Kommando]]&lt;br /&gt;
&lt;br /&gt;
Die danach folgenden Softwareteile zeigen, wie man eine Datei auf dem USB-Stick erzeugt bzw. einliest. &#039;&#039;&#039;Hinweis! Nur 8.3 Dateinamen verwenden!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Besonderen Wert sollte man auf die elementaren SPI I/O-Funktionen &#039;&#039;&#039;vnc_wr_byte&#039;&#039;&#039; und &#039;&#039;&#039;vnc_rd_byte&#039;&#039;&#039; legen. Das Datenblatt des VNC1L-1A geht recht detailiert auf das Timing ein. Damit sollte man sich vorab gründlich beschäftigen. (Die Angaben zum SPI im Datenblatt des VDIP1 sind dagegen spärlich und teilweise falsch!)&lt;br /&gt;
&lt;br /&gt;
Die vollständigen Quelltexte sind im &#039;&#039;&#039;Projektarchiv&#039;&#039;&#039; (siehe unten), enthalten. Zusätzlich ist darin ein kleines Testprogramm (AVR) zur Überprüfung der elementaren SPI-Kommunikation enthalten. Es wird ständig ein E(cho) gesendet und empfangen. Dieses Progamm sollte man für den Einstieg und Inbetriebnahme als erstes verwenden. Man kann dann ziemlich sicher sein, dass die Hardware-Verbindung funktioniert.&lt;br /&gt;
&lt;br /&gt;
Das Video zeigt den Ablauf des Beispielprogrammes auf dem LC-Display. Die Pausen zwischen den einzelnen Kommandos wurden zur besseren Demonstration etwas vergrößert.&lt;br /&gt;
&lt;br /&gt;
[[Bild:VNC Youtube klein.png|top|100px|Video]] [http://www.youtube.com/watch?v=oUX1U1ipfQk Video ansehen] (Länge ca. 1 Minute auf www.youtube.de)&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Video zeigt zum Verständnis das Grundprinzip der Kommunikation mit dem VNC1L, hier über UART und Terminalprogramm auf einem PC.&lt;br /&gt;
&lt;br /&gt;
[[Bild:VNC Youtube klein.png|top|100px|Video]] [http://www.youtube.com/watch?v=r3fF48pI0Wo Video ansehen] (Länge ca. 1.5 Minuten auf www.youtube.de)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Auf die LCD-Ansteuerung wird hier nicht näher eingegangen.&#039;&#039;&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ausblick ==&lt;br /&gt;
&lt;br /&gt;
Die Software wurde mit folgenden USB-Sticks getestet:&lt;br /&gt;
* RUNDISK 512MB FAT16 - ok&lt;br /&gt;
* PLATINUM  2GB FAT32 - ok&lt;br /&gt;
* CNMEMORY  4GB FAT32 - ok&lt;br /&gt;
* TREKSTOR 16GB FAT32 - ok&lt;br /&gt;
* OCZ 8GB (RALLY DUAL-CANAL) FAT32 -  kein schreiben möglich&lt;br /&gt;
(VDAP-Firmware kann mit Dual-Canal-Technik offenbar nicht korrekt umgehen. Der Stick wird zwar erkannt, ein schreiben war mir jedoch nicht möglich.)&lt;br /&gt;
&lt;br /&gt;
FAT16-Systeme sind schneller als FAT32-Systeme. Ich habe während der Testphase, auch bei gravierenden Softwarefehlern, kein Dateisystem auf dem Stick demoliert, oder fremde Dateien beschädigt. Die VDAP-Firmware scheint recht stabil zu funktionieren. Trotzdem sollte man nicht seinen einzigen Backup-Stick zum testen verwenden...&lt;br /&gt;
&lt;br /&gt;
Mit dem VNC1L-1A können auch andere Geräte, wie z.&amp;amp;nbsp;B. USB-Drucker, Kameras und Handys angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Über Kommentare und Anregungen bin ich dankbar. Kontakt: Matthias Kahnt / matthiask (az51@gmx.net)&amp;lt;br&amp;gt;&#039;&#039;&#039;([http://www.mikrocontroller.net/topic/130381#new zum Diskussionsbeitrag im Forum])&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiterhin ist im &#039;&#039;&#039;&amp;quot;Embedded Projects Journal&amp;quot;&#039;&#039;&#039;, Ausgabe 4 ein Beitrag zum Thema &amp;quot;USB-Stick am Mikrocontroller&amp;quot; veröffentlicht wurden. Download: siehe unten.&lt;br /&gt;
&lt;br /&gt;
== Links / Download ==&lt;br /&gt;
* [[Media:VNC_Projektarchiv1_24.zip|Projektarchiv - USB-Stick am Mikrocontroller V1.24 - Stand: 16.11.2009 (8051- und AVR-Version)]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/130381#new Diskussions-Beitrag hier im Forum]&lt;br /&gt;
* [http://www.ixbat.de//files/admin/projekte/epjournal/EPJ_04_download.pdf Embedded Projects Journal, Ausgabe 4]&lt;br /&gt;
* [http://www.vinculum.com Vinculum-Homepage]&lt;br /&gt;
* [http://www.vinculum.com/downloads.html Vinculum-Downloadbereich]&lt;br /&gt;
* [http://www.vinculum.com/documents.html#vdatasheets Vinculum Datenblattbereich]&lt;br /&gt;
* [http://www.ftdichip.com FTDI-Homepage]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;br /&gt;
[[Kategorie:8051]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;br /&gt;
[[Kategorie:USB]]&lt;/div&gt;</summary>
		<author><name>188.155.9.7</name></author>
	</entry>
</feed>