USB IR Remote Receiver

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Ein Infrarot-Multiprotokoll-Decoder in Kombination mit IRMP von Frank M. und V-USB für die USB Schnittstelle

Einleitung

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. Durch Irmp - der Infrarot-Fernbedienungsdecoder der mehrere Protokolle auf einmal decodieren kann, ist es möglich folgende Protokolle zu empfangen und auszuwerten:

Protokoll Hersteller
SIRCS Sony
NEC NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName und viele weitere japanische Hersteller.
SAMSUNG Samsung
SAMSUNG32 Samsung
MATSUSHITA Matsushita
KASEIKYO Panasonic, Technics, Denon und andere japanische Hersteller, welche Mitglied der "Japan's Association for Electric Home Application" sind.
RECS80 Philips, Nokia, Thomson, Nordmende, Telefunken, Saba
RECS80EXT Philips, Technisat, Thomson, Nordmende, Telefunken, Saba
RC5 Philips und andere europäische Hersteller
DENON Denon, Sharp
RC6 Philips und andere europäische Hersteller
RC6A Philips, Kathrein und andere Hersteller, z.B. XBOX
APPLE Apple
NUBERT Nubert, z.B. Subwoofer System
B&O Bang & Olufsen
GRUNDIG Grundig
NOKIA Nokia, z.B. D-Box
SIEMENS Siemens, z.B. Gigaset M740AV (ab ~15kHz, siehe Bemerkungen zu F_INTERRUPTS)
FDC FDC Keyboard (ab ~15kHz)
RCCAR RC Car: IR Fernbedienung für Modellfahrzeuge
JVC JVC
NIKON NIKON
RUWIDO RUWIDO (z.B. T-Home-Mediareceiver)
KATHREIN KATHREIN
NEC16 JVC
NEC42 JVC
LEGO Lego
THOMSON Thomson

Funktionen/Vorteile gegenüber anderen IR Empfängern

  • Der AVR-Source ist für fast alle Mikrochips einsetzbar
  • Bei vorhandenen modifizierten #bootloadHID kann schnell und einfach ein Firmware Update des Mikrochips über die USB Schnittstelle durchgeführt werden
  • Der Empfänger hat eine PowerOn Funktion um den Host per Fernbedienung ein/aus-schalten zu können (deaktivierbar)
  • Es sind keine speziellen Treiber notwendig, egal ob Windows XP oder Windows 7
  • Tastenentprellung im Mikrochip selber (einstellbar)
  • Durch die Verwendung der #USB IR Remote Receiver DLL hat der Benutzer leicht die Möglichkeit die dekodierten IR-Codes auszuwerten.

Arbeitsweise

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.

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.

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.

Durch Irmp lässt sich auch die Fernbedienung bereits im Gerät entprellen. Die Entprellung ist über den Settings/Optionen Dialog einstellbar.

Download

Stand vom 02.01.2012

Download des kompletten Paketes: [USB IR Remote Receiver Complete]

Dieser Download beinhaltet:

  • Release der USB IR Remote Receiver DLL
  • Sourcecode AVR USB IR Remote Receiver
  • Release AVR USB IR Remote Receiver für Atmega8 und Atmega168p
  • Sourcecode & Release AVR modifizierter bootloadHID v1.1 für Atmega8
  • Sourcecode & Release AVR modifizierter bootloadHID v1.1 für Atmega168p
  • Sourcecode & Release Visual Studio 2008 Demo Konsole Anwendung
  • Sourcecode & Release Delphi 2010 Demo Anwendung
  • Sourcecode & Release Visual Studio 2008 C# Demo Anwendung (Danke an Michael Kipp)


  • Plugin für EventGhost
  • Beschreibung in Englisch als Html

Änderungen:

Datum Änderung
02.01.2012 DLL:
  • v1.0.0.14, IR Polling entfernt, IRMP Logging per USB hinzugefügt

AVR:

  • v1.8, IR Polling entfernt, IRMP Logging per USB hinzugefügt. Source für AVR Studio v5 konvertiert.
26.10.2011 DLL:
  • v1.0.0.13, Neue Irmp Protokolle in die Standard Liste aufgenommen

AVR:

  • v1.7, IRMP Update auf 20.09.2011, neues Protokoll RUWIDO, KATHREIN, NEC16, NEC42, LEGO und THOMSON.
14.07.2011 DLL:
  • v1.0.0.12, Problem mit EventGhost behoben
28.02.2011 Demo:
  • neuen Demo Source für Visual Studio 2008 C# aufgenommen. Danke an Michael Kipp für seine Arbeit
27.02.2011 DLL:
  • v1.0.0.11, Problem mit EventGhost behoben, Problem mit InitNative/InitPAnsiChar behoben
04.02.2011 AVR:
  • v1.6, Source und Release für Atmega8/Atmega168p.
  • bootLoadHID v1.1 Source und Release für Atmega8/Atmega168p.
27.01.2011 DLL:
  • v1.0.0.10, Neue Irmp Protokolle in die Standard Liste aufgenommen.

AVR:

  • v1.5, IRMP Update auf 18.01.2011, neues Protokoll RC6A, JVC und NIKON.
28.06.2010 DLL:
  • v1.0.0.9, Neue Irmp Protokolle in die Standard Liste aufgenommen.

AVR:

  • v1.4, IRMP Update auf 26.06.2010, neues Protokoll FDC und RCCAR.
06.06.2010 DLL:
  • v1.0.0.8, Protokolle die in der INI Datei fehlen werden nun automatisch eingetragen. Neue Irmp Protokolle in die Standard Liste aufgenommen.

AVR:

  • v1.3, IRMP Update auf 02.06.2010, neues Protokoll NOKIA und SIEMENS
18.05.2010 DLL:
  • 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 "GRUNDIG=15" kann auch die alte v1.0.0.6 weiter verwendet werden. Siehe INI Beschreibung.

AVR:

  • v1.2, IRMP Update auf 17.05.2010, neues Protokoll GRUNDIG, Bugfix SAMSUNG32
09.05.2010 DLL:
  • v1.0.0.6, Bugfix für Standby - die Verbindung zum Gerät wurde nicht richtig getrennt

Sonstiges:

  • Plugin für EventGhost wurde hinzugefügt
  • Dokumentation überarbeitet
02.05.2010 Dokumentation überarbeitet, PonyProg2000 im Schaltplan aufgenommen.
28.04.2010 DLL:
  • v1.0.0.5, Möglichkeit um die Firmware über den Settings/Optionen Dialog auf den Mikrochip programmieren zu können hinzugefügt.

AVR:

  • Bugfix der Entprellung
  • Irmp Version Update auf 28.04.2010
  • modifizierter bootloadHID um über den Settings/Optionen Dialog eine neue Firmware aufspielen zu können
23.04.2010 DLL:
  • v1.0.0.4, Tasten Unterdrückung für träge Host Anwendung hinzugefügt
  • Bugfix für Settings/Optionen Dialog und DVBViewer

AVR:

  • Bugfix der Entprellung wenn die Taste länger als 255 Wiederholungen gedrückt war
  • Erkennung/Auswertung des PowerOn IR-Code optimiert
16.04.2010 DLL:
  • v1.0.0.3, InitNative, InitPAnsiChar und Girder Unterstützung hinzugefügt

AVR:

  • Irmp Version Update auf 16.04.2010
12.04.2010 AVR:
  • Irmp Version Update auf 12.04.2010, neues Protokoll B&Q

AVR Source

Der Source kann mit AVR-Studio und WinAVR kompiliert werden. Ab AVR v1.8 wird nun AVR Studio v5 benutzt und somit ist kein extra WinAVR mehr notwendig.


Achtung IRMP ab 26.06.2010

Mittlerweile sind die unterstützen Protokolle von Irmp so viel geworden, dass nicht mehr alle in den Flash des Atmega8 mit dem Bootloader passen.

Als Alternative kann der Atmega168p verwendet werden.

Man sollte also für seine eigene Verwendung die Protokolle in der irmpconfig.h aktivieren die man benötigt und den AVR Source neu kompilieren!

Es ist eine fertige Version mit im Paket die auf den Atmega8 passt und diese Protokolle unterstützt:

// typical protocols, disable here!             Enable  Remarks                 F_INTERRUPTS            Program Space
#define IRMP_SUPPORT_SIRCS_PROTOCOL             1       // Sony SIRCS           >= 10000                 ~150 bytes
#define IRMP_SUPPORT_NEC_PROTOCOL               1       // NEC + APPLE          >= 10000                 ~300 bytes
#define IRMP_SUPPORT_SAMSUNG_PROTOCOL           1       // Samsung + Samsung32  >= 10000                 ~300 bytes
#define IRMP_SUPPORT_MATSUSHITA_PROTOCOL        1       // Matsushita           >= 10000                  ~50 bytes
#define IRMP_SUPPORT_KASEIKYO_PROTOCOL          1       // Kaseikyo             >= 10000                 ~250 bytes
#define IRMP_SUPPORT_DENON_PROTOCOL             1       // DENON, Sharp         >= 10000                 ~250 bytes

// more protocols, enable here!                 Enable  Remarks                 F_INTERRUPTS            Program Space
#define IRMP_SUPPORT_RC5_PROTOCOL               0       // RC5                  >= 10000                 ~250 bytes
#define IRMP_SUPPORT_RC6_PROTOCOL               0       // RC6 & RC6A           >= 10000                 ~250 bytes
#define IRMP_SUPPORT_JVC_PROTOCOL               0       // JVC                  >= 10000                 ~150 bytes
#define IRMP_SUPPORT_NEC16_PROTOCOL             0       // NEC16                >= 10000                 ~100 bytes
#define IRMP_SUPPORT_NEC42_PROTOCOL             0       // NEC42                >= 10000                 ~300 bytes
#define IRMP_SUPPORT_IR60_PROTOCOL              0       // IR60 (SAB2008)       >= 10000                 ~300 bytes
#define IRMP_SUPPORT_GRUNDIG_PROTOCOL           0       // Grundig              >= 10000                 ~300 bytes
#define IRMP_SUPPORT_SIEMENS_PROTOCOL           0       // Siemens Gigaset      >= 15000                 ~550 bytes
#define IRMP_SUPPORT_NOKIA_PROTOCOL             0       // Nokia                >= 10000                 ~300 bytes

// exotic protocols, enable here!               Enable  Remarks                 F_INTERRUPTS            Program Space
#define IRMP_SUPPORT_KATHREIN_PROTOCOL          0       // Kathrein             >= 10000                 ~200 bytes
#define IRMP_SUPPORT_NUBERT_PROTOCOL            0       // NUBERT               >= 10000                  ~50 bytes
#define IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL      0       // Bang & Olufsen       >= 10000                 ~200 bytes
#define IRMP_SUPPORT_RECS80_PROTOCOL            0       // RECS80 (SAA3004)     >= 15000                  ~50 bytes
#define IRMP_SUPPORT_RECS80EXT_PROTOCOL         0       // RECS80EXT (SAA3008)  >= 15000                  ~50 bytes
#define IRMP_SUPPORT_THOMSON_PROTOCOL           0       // Thomson              >= 10000                 ~250 bytes
#define IRMP_SUPPORT_NIKON_PROTOCOL             0       // NIKON camera         >= 10000                 ~250 bytes
#define IRMP_SUPPORT_NETBOX_PROTOCOL            0       // Netbox keyboard      >= 10000                 ~400 bytes (PROTOTYPE!)
#define IRMP_SUPPORT_FDC_PROTOCOL               0       // FDC3402 keyboard     >= 10000 (better 15000)  ~150 bytes (~400 in combination with RC5)
#define IRMP_SUPPORT_RCCAR_PROTOCOL             0       // RC Car               >= 10000 (better 15000)  ~150 bytes (~500 in combination with RC5)
#define IRMP_SUPPORT_RUWIDO_PROTOCOL            0       // RUWIDO, T-Home       >= 15000                 ~550 bytes
#define IRMP_SUPPORT_LEGO_PROTOCOL              0       // LEGO Power RC        >= 20000                 ~150 bytes

Konfigurationen AVR Source bootloadHID

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.

In der Menüleiste unter Project->Configuration Options->Custom Options->[Linker Options] die Zeile

Atmega8:

-Wl,--section-start=.text=0x1800

Atmega168p:

-Wl,--section-start=.text=0x3800

auf die richtige Bootloader Adresse ändern.

Schaltplan des USB IR Remote Receiver

USB IR Remote Receiver schematic.jpg

Erläuterung

Die Z-Dioden ZD1 und ZD2 werden benötigt, um dem USB Standard zu entsprechen.

Es können folgende IR Empfänger Dioden eingesetzt werden:

   Vishay TSOP 1738, Vishay TSOP 1838, Vishay TSOP 11xx series, Siemens SFH 5110, Radio Shack 276-0137, Mitsumi IR Preamp KEY-COOSV (0924G),
   Toshiba TK19 444 TFMS 5360, Temic TFMS 5380 by Telefunken Semiconductors, Sharp IS1U60, Everlight IRM-8601S, Sony SBX 1620-12, Sharp GP1U271R

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.

Optional: J1: wird nur für den nicht modifizierten bootloadHID Bootloader benötigt.

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.

Foto eines aufgebauten USB IR Remote Receiver

Avr hardware front.jpgAvr hardware back.jpg

USB IR Remote Receiver Top.jpgUSB IR Remote Receiver Bot.jpg

Plot USBIRRR Page 1.jpg Plot USBIRRR Page 2.jpg

Aufbau als Stick

USBIRRR Stick Bottom.jpg USBIRRR Stick Top.jpg USBIRRR Stick Case.jpg


Lochrasterplatine

Minimalbeschaltung ohne PowerOn und ISP-Port, USB auf Pinheader(oben), IR Receiver an Pinheader(unten), Jumper für Bootloader(mitte)

USB-IR-Remote-Receiver-Lochraster.png

USB IR Remote Receiver DLL

Die inkludierte USB_IR_Remote_Receiver.dll ü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.

Die DLL Unterstützt folgende Host-Anwendungen:

  • DVBViewer als Input-Plugin: Die DLL muss sich im DVBViewer\Plugins Ordner befinden
  • Girder als Input-Plugin: Die DLL muss sich im Girder\Plugins Ordner befinden, es wird Girder ab Version 3.2.9 unterstüzt.
  • EventGhost als Input-Plugin: Die DLL und die '__init__.py' muss sich im EventGhost\plugins\USBIRRemoteReceiver Ordner befinden
  • Native: mit den Funktionen InitNative und InitPAnsiChar kann die DLL kann auch für selbst geschriebene Anwendungen verwendet werden


Settings/Optionen Dialog

MainScreen.jpg

Settings/Optionen Dialog
Objekt Beschreibung
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.
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.
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.
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.
Trained IR Code Hier wird der gespeicherte IR-Code, der für die PowerOn Funktion verwendet wird, angezeigt.
Read Trained IR Code Hier kann der aktuelle gespeicherte IR-Code für die PowerOn Funktion aus dem EEPROM ausgelesen werden.
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.
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.
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)
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.

IRMP Logging

Ist auf dem AVR eine Firmware mit der Kompileroption IRMP_LOGGING = 1 können die Rohdaten des IR Signales aufgezeichnet werden.

Dazu muss im Optionen Dialog die Option "Enable IRMP Logging" 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 "IRMP_Log.txt" im selben Ordner wo sich die DLL befindet geschrieben.

Dieses Textfile kann zur Analyse der IR Signale verwendet werden. Auch können die Rohdaten direkt mit der "irmp.exe" analysiert werden:

C:\Program Files (x86)\DVBViewer\Plugins>irmp.exe <IRMP_Log.txt
-------------------------------------------------------------------
# 1
-------------------------------------------------------------------
# 02.01.12 17:18:32
00000010111111011000000001111111 p = 2, a = 0xbf40, c = 0x0001, f = 0x00
p = 2, a = 0xbf40, c = 0x0001, f = 0x01

Flash/Update Firmware Dialog

FlashScreen.jpg

Flash/Update Firmware Dialog
Objekt Beschreibung
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.

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.

Um die volle Funktion des Einspielen einer neuen Firmware zu haben sollte die modifizierte Version von #bootloadHID verwendet werden.

USB IR Remote Receiver INI

Beim ersten mal Initialisieren der DLL wird eine USB_IR_Remote_Receiver.ini im gleichen Ordner wo sich die DLL befindet erzeugt.

USB_IR_Remote_Receiver.ini
Sektion Beschreibung
[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.

Format: Name_des_Protokolls=Irmp_ID

z.B.: NEC=2

[Settings] Gerätverbindung Startverzögerung

Um der Host Anwendung genug Zeit zu lassen kann eine Startverzögerung zwischen Initialisieren und verbinden mit dem Gerät eingestellt werden.

Format: StartUpDelay=gewünschter_Wert_in_Millisekunden

z.B.: StartUpDelay=2000

Default: 2000ms


Tasten Unterdrückung 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.

Format: Key Suppression=gewünschter_Wert_in_Millisekunden

z.B.: Key Suppression=200

Default: 0ms - deaktiviert


Debug LOG Um das Debug Logmemo im Settings/Optionen Dialog anzuzeigen kann dieser Wert eingetragen werden:

Format: Debug=0/1

z.B.: Debug=0

Default: 0 - deaktiviert

bootloadHID

Um einfach in das Gerät eine neue Firmware einspielen zu können wurde das Projekt bootloadHID etwas verändert.

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.

Das Gerät kann nun in den Bootloader Modus gebracht werden wenn:

  • der Jumper gesetzt ist
  • keine USB IR Remote Receiver Firmware im Flash ist
  • die USB IR Remote Receiver Firmware den Bootloader Modus startet

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.

Fuses

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.

###############################################################################
# Configure the following variables according to your AVR. The example below
# is for an ATMega8. Program the device with
# make fuse  # to set the clock generator, boot section size etc.
# make flash # to load the boot loader into flash
# make lock  # to protect the boot loader from overwriting

DEVICE = atmega8
BOOTLOADER_ADDRESS = 1800
F_CPU = 12000000
FUSEH = 0xc0
FUSEL = 0x9f

# Fuse high byte:
# 0xc0 = 1 1 0 0   0 0 0 0 <-- BOOTRST (boot reset vector at 0x1800)
#        ^ ^ ^ ^   ^ ^ ^------ BOOTSZ0
#        | | | |   | +-------- BOOTSZ1
#        | | | |   + --------- EESAVE (preserve EEPROM over chip erase)
#        | | | +-------------- CKOPT (full output swing)
#        | | +---------------- SPIEN (allow serial programming)
#        | +------------------ WDTON (WDT not always on)
#        +-------------------- RSTDISBL (reset pin is enabled)
# Fuse low byte:
# 0x9f = 1 0 0 1   1 1 1 1
#        ^ ^ \ /   \--+--/
#        | |  |       +------- CKSEL 3..0 (external >8M crystal)
#        | |  +--------------- SUT 1..0 (crystal osc, BOD enabled)
#        | +------------------ BODEN (BrownOut Detector enabled)
#        +-------------------- BODLEVEL (2.7V)
###############################################################################

Programmieren des Mikrochips mit PonyProg2000 über den LPT Port

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.

Beispiel eines LPT Kabels im Selberbau

LPT cable.jpg

Nach dem Download und Installieren von PonyProg2000 muss dies zuerst Kalibriert werden. Dazu in der Menüleiste auf Setup->Calibration gehen und ausführen.

Danach kann der Mikrochip eingestellt werden. Für Atmega8 in der Menüleiste Device->AVR micro->ATmega8 auswählen.

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 Probe überprüfen. I O.JPG

Sollten hier Probleme auftreten kann es helfen in der PONYPROG2000.INI den Wert AutoDetectPorts=YES auf NO umzustellen. Eventuell muss dann noch bei LPTPorts die LPT Port Adresse eingetragen werden.

Wenn der Test OK verläuft kann nun die bootloadHID.hex Datei in der Menüleiste File->Open Device File... geöffnet werden. Es sollten nun lauter FF zu sehen sein. Der Bootloader startet beim Atmega8 erst ab Adresse 0x1800!

Nun sollten die Fuse Bits über die Menüleiste Command->Security and Configuration Bits... eingestellt werden:

Fuses.JPG

Dannach auf Write drücken um die Fuses auf dem Mikrochip zu setzten. Danach kann das Fuses-Fenster geschlossen werden.

Nun in der Menüleiste über Command->Write All 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.

Nun kann der USB IR Remote Receiver über USB angeschlossen werden und es sollte sich ein USB Gerät Namens HIDBoot anmelden. Nun kann über den Settings/Optionen Dialog eine USB IR Remote Receiver Firmware aufgespielt werden.

Weblinks

github-Seite für dieses Projekt:

V-USB:

PonyProg2000:

Hardware / Projekte

IRMP - Infrarot-Multiprotokoll-Decoder:

Version auf Basis vom USBasp

Enthält auch ein Linux Kommandozeilen Tool:

Danksagung

Vielen Dank an das Forum + Community für deren Unterstützung!

Auch speziellen Dank an Frank M. für sein Irmp.

Diskussion

Meinungen, Verbesserungsvorschläge oder Kritik kann im Beitrag: USB IR Remote Receiver (V-USB + IRMP) geäussert werden.

Viel Spaß mit dem USB IR Remote Receiver!