USBASP Einschalter

Aus easyVDR-Wiki
Zur Navigation springen Zur Suche springen

Allgemeines

Hier wird ein IR-Einschalter auf Grundlage des USBasp beschrieben. (http://www.fischl.de/usbasp/)
Die Kosten sollten sich im Rahmen von unter 10 € bewegen!!!
Die Stromversorgung erfolgt über USB bzw. die Standbyversorgung des USB-Ports.
Der Empfänger ist das Resultat einer Zusammenstellung verschiedener Projekte und Programme.

Forum:

Beschreibung der Funktionen

  • Infrarotsignale werden über USB übertragen (HID).
  • Dekodierung vollständig im IR-Einschalter (USB-IRMP)
  • Komplett quelloffen (open source)
  • Anlernbare Einschaltfunktionen (auch für Exoten wie Merlin)

Beschaffung

Der USBasp ist eigentlich ein AVR-Programmer. Er ist weit verbreitet und leicht und güstig beschaffbar. Auf ebay gibt es fertige USBasp für ca. $3,80 (USD) aus China. Dies entspricht ~3 €.
Die weiteren Bauteile können bei Reichelt, Conrad usw. besorgt werden.

Liste:

  • USBasp --> ebay.com (nicht ebay.de) und nach USBasp suchen. Der Versand kann bis zu 20 Werktage brauchen.
  • IR Detektor (z. B. TSOP1738 für 38 kHz (üblich), TSOP1756 (für MERLIN))
  • Optokoppler (z. B. CNY173 / CNY17III) oder wenn 4-Pin-Variante gewünscht z. B. PC 817
  • Widerstand 562 Ohm / 0,5 W
  • Widerstand 100 Ohm / 0,5 W
  • Elko-Kondensator 4,7 uF / 16 V
  • Pfostenstecker 10 Pol (siehe USBasp)
  • Flachbandkabel
  • Streifenrasterplatine (ca. 5 cm x 5 cm)

Schaltung

Schaltplan

Schaltplan des IR/Optokoppler Teils

Aufbau

Es gibt Verschieden Arten von IR-Detektoren. Oft verwechseln die Verkäufer diese oder kennen den Unterschied nicht (z. B. bei Conrad so geschehen).

Um den TSOPxxxx nicht durch falsche Beschaltung zu zerstören, ist hier Vorsicht angesagt.

Schaltplan des IR/Optokoppler Teils

TSOP17xx

!!!ACHTUNG!!!

Auf den Bildern ist sowohl der Optokoppler (hier der PC817) falsch herum eingezeichnet als auch die Widerstände vertauscht eingezeichnet worden.

!!!ACHTUNG!!!

Bestückungsseite:

Lochrasteraufbau des IR/Optokoppler Teils

Es sind 4 Schnitte auf der Platine nötig (rot):

Lochrasteraufbau des IR/Optokoppler Teils

TSOP48xx

!!!ACHTUNG!!!

Auf den Bildern ist sowohl der Optokoppler (hier der PC817) falsch herum eingezeichnet als auch die Widerstände vertauscht eingezeichnet worden.

!!!ACHTUNG!!!

Bestückungsseite:

Lochrasteraufbau des IR/Optokoppler Teils

Es sind 4 Schnitte auf der Platine nötig (rot):

Lochrasteraufbau des IR/Optokoppler Teils

Testen

Ob IR Signale ankommen kann anfangs mit dem folgenden Kommando getestet werden

sudo cat /dev/hidraw0

Software

Firmware

Um die Firmware flashen zu können muss Jumper 2 (J2) gesetzt (kurzgeschlossen sein). Da es für den Betrieb nicht schlimm ist wenn dieser dauerhaft gesetzt ist kann er mit einem Tropfen Lötzinn verbunden werden.

USBasp.jpg

In der Firmware muss die Konfiguration der Pins angepasst werden.

configUSBIRRemoteReceiver.h

#define SWITCH_PORT 		PORTB					/* PORTx - register for Switch output */
#define SWITCH_BIT  		PB4					/* bit where OK1 will be connected */
#define SWITCH_DDR  		DDRB					/* Switch data direction register */

irmpconfig.h

#define IRMP_PORT                               PORTB
#define IRMP_DDR                                DDRB
#define IRMP_PIN                                PINB
#define IRMP_BIT                                5

Evtl. noch die betreffenden Protokolle auswählen (z.B. RC5).

usbconfig.h

#define USB_CFG_IOPORTNAME      B
#define USB_CFG_DMINUS_BIT      0
#define USB_CFG_DPLUS_BIT       1

Download

#Download
sudo apt-get install git
mkdir ~/irmp
cd ~/irmp
git clone git://github.com/realglotzi/irmpusb
cd ~/irmp/irmpusb/
#Build
sudo apt-get install binutils-avr gcc-avr avr-libc
make

Flashen

Um zu einem funktionierenden Device zu gelangen genügt es die Basisfirmware (z.B. main.hex) zu flashen. Der Bootloader ist nicht nötig.

Hierfür kann z.B. der Burn-o-Mat verwendet werden (in Verbindung mit AVR-DUDE).

Ferner müssen noch die FUSES gesetzt werden.

HFUSE=0xc9
LFUSE=0xef


Flashtool installieren (Ubuntu 14.04): sudo apt-get install avr-dude

Testen: sudo avrdude -p atmega8 -c usbasp

Folgende Ausgabe sollte erscheinen:

	Reading | ################################################## | 100% 0.00s
	avrdude: Device signature = 0x1e9307 ...
	avrdude done.  Thank you.

Flashen: avrdude -p atmega8 -c usbasp -u -U flash:w:main.hex -U hfuse:w:0xc9:m -U lfuse:w:0xef:m

Fuses testen: sudo avrdude -p atmega8 -c usbasp

Daemon

Zu finden unter:

oder

Howto:

Das entsprechende Device ist zu wählen:

  irmplircd /dev/hidraw0

UDEV

KERNEL=="hidraw*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", RUN+="/bin/mkdir /var/run/lirc", RUN+="/usr/bin/irmplircd /dev/%k", RUN+="/bin/ln -s /var/run/lirc/lircd /dev/lircd"

UPSTART

Wenn irmplircd in /usr/bin/irmplircd

irmplircd.conf

# tty1 - getty
#
# This service maintains a getty on tty1 from the point the system is
# started until it is shut down again.

start on starting easyvdr-vdr or simu-start-vdr
stop on runlevel [016]

env LOGGER="logger -t irmplircd"

respawn
respawn limit 5 10
script
    $LOGGER /usr/bin/irmplircd -f `grep -l "USB IR Remote Receiver" /sys/class/hidraw/hidraw*/device/uevent | echo /dev/\`grep -E hidraw[0-9]+ -o\``
    exec /usr/bin/irmplircd -f `grep -l "USB IR Remote Receiver" /sys/class/hidraw/hidraw*/device/uevent | echo /dev/\`grep -E hidraw[0-9]+ -o\``
end script

ir_control

Ich habe ein kleines Programm geschrieben mit welchem man diverses Konfigurieren kann. Es soll die Funktionalität nachreichen welche sonst nur über die Windowssoftware des Erbauers möglich währe.

ir_control, 1.0.0 (20.05.2012) control the "USB IR Remote Receiver"
 (www.mikrocontroller.net/articles/USB_IR_Remote_Receiver).

ir_control [-h] | [-V] | [[[-d] | [-p[1|0]] | [-rCOUNT] | [-s] | [-t]] [-i]]

  -h              print this help and exit
  -V              print version and exit

  -d              delete the PowerOn IR code.
                  The next received code becomes the new PowerOn code
  -p [1|0]        set PowerOn (ON=1/OFF=0)
  -r COUNT        set repeat count (default=5)
  -s              status of: PowerOn (ON=1/OFF=0)
  -i              ignore device name. (just checks the vendor:device ID)
                  needs one of the other options.

irmp_exec

Ein weiteres Tool ist irmp_exec:

Diagnose

Unter Linux meldet sich das Gerät beim Einstecken so (/var/log/syslog bei Debian-artigen Systemen):


May 17 13:19:16 martin-VirtualBox kernel: [13996.333454] usb 2-2: new full-speed USB device number 3 using ohci-pci
May 17 13:19:16 martin-VirtualBox kernel: [13996.837834] usb 2-2: New USB device found, idVendor=16c0, idProduct=27d9
May 17 13:19:16 martin-VirtualBox kernel: [13996.837856] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
May 17 13:19:16 martin-VirtualBox kernel: [13996.837872] usb 2-2: Product: USB IR Remote Receiver
May 17 13:19:16 martin-VirtualBox kernel: [13996.837888] usb 2-2: Manufacturer: www.mikrocontroller.net/articles/USB_IR_Remote_Receiver
May 17 13:19:16 martin-VirtualBox kernel: [13996.892687] hid-generic 0003:16C0:27D9.0002: hiddev0,hidraw1: USB HID v1.01 Device
[www.mikrocontroller.net/articles/USB_IR_Remote_Receiver USB IR Remote Receiver] on usb-0000:00:06.0-2/input0
May 17 13:19:16 martin-VirtualBox mtp-probe: checking bus 2, device 3: "/sys/devices/pci0000:00/0000:00:06.0/usb2/2-2"
May 17 13:19:16 martin-VirtualBox mtp-probe: bus: 2, device: 3 was not an MTP device

Einrichtung

Wenn die Fernbedienung noch nicht ein easyVDR bekannt ist: Per SSH einloggen, den Menupunkt Experimental / IRMP-Keymapbuilder eine Keymap erzeugen und im Forum für andere bereitstellen


Tipps

Wenn man im Code der remote.conf die letzte Ziffer 0 mit einer 1 ersetzt funktioniert auch das gedrückt halten der Taste. Vom Vorteil bei Up , Down , Left und Right evtl noch bei der Gelben und Grünen Taste..

Power on setzen und abfragen (Easyvdr 2.0)
sudo ir_control -p 1
sudo ir_control -s

Fernbediungunstaste für Power-On neu anlernen (Easyvdr 2.0)
sudo ir_control -d
Anschließend die gewünschte Fernbedienungstaste drücken.


Tipps2

Der direkte Aufruf von Scripten für Nicht-VDR-Tasten klappt auch über /usr/bin/irexec -d /etc/lircrc - z.B.

begin
    prog   = irexec
    button = KEY_EJECT
   config = didi-eject
end

Links