User Tools

Site Tools


hardware:controllers:ir-schreib-lesekopf-usb-ausgang

IR-Schreib-Lesekopf, USB-Interface

Hier der IR-Schreib-Lesekopf mit USB-Ausgang. Dieser ist für alle eHZ mit IR-Schnittstelle geeignet.

Features

  • Optischer Sensor mit USB-Schnittstelle
  • Schreib- und Lesefunktion
  • Einfache Montage am Zähler durch eingebauten Ringmagnet
  • Normgerechte Abmessungen
  • 2,50 Meter Anschlussleitung
  • Treiber für übliche Betriebssysteme

Preis

Sorry, aber aus Krankheitsgründen kann ich zur Zeit keine Bestellungen annehmen.
Udo


Bilder



Die einen Dauermagnet umgebenden Magnetfelder können empfindliche elektronische und mechanische Messgeräte beeinflussen oder sogar zerstören. Achten Sie auf ausreichenden Abstand (z.B. größer 2 m) insbesondere von Kredit- und EC-Karten, Datenträgern, Videokassetten, Monitoren, mechanische Uhren, Hörgeräten und Herzschrittmachern usw.).

Linux-Support

Wird der Lesekopf via USB an einen Linux-PC angeschlossen, bekommt er einen Gerätenamen. z.B. “/dev/ttyUSB0”. Werden noch andere USB-Geräte benutzt, die ebenfalls eine serielle Schnittstelle bereitstellen ( z.B ein 2. Lesekopf ) ist der Name der Schnittstelle nicht eindeutig.

Bei den meisten Distributionen sollte schon ein udev-script vorhanden sein, dass in

$ ls -l /dev/serial/{by-path,by-id}/*

symlinks anlegt, die die geraete einmal ueber die position am bus (usb-port) und einmal ueber ihre seriennummer identifizieren.

Falls diese nicht vorhanden sind, oder man es noch eleganter haben moechte, kann man auch eine eigene udev-regel anlegen, die das Geraet (zB ueber die beim Silab-Chip vorhandene Seriennummer) identifiziert, und mit einem sprechenden, eindeutigen Namen versieht:

Folgendes Kommando ausführen: (ttyUSB0 ist evtl. anzupassen…)

/sbin/udevadm info --query=all --name=/dev/ttyUSB0

In der Ausgabe findet sich eine Zeile “E: ID_SERIAL_SHORT=ABC1234”. ABC1234 ist die Seriennummer des USB-Chips.

Nun kann man eine Datei “/etc/udev/rules.d/99-lesekopf.conf” mit folgendem Inhalt anlegen:

SUBSYSTEM=="tty", ATTRS{product}=="CP2104 USB to UART Bridge Controller", ATTRS{serial}=="ABC1234", NAME="lesekopf0"

Ergänzend ist zu erwähnen, dass je nach Linux Distribution die udev-“Rules”-Datei, also z.B. “/etc/udev/rules.d/99-lesekopf.conf” nicht mit “.conf”, sondern mit “.rules” enden muss, damit der udev-Dienst diese Datei auch berücksichtigt. Dies betrifft unter anderem Ubuntu und Debian. Siehe debian-wiki (en).

Nach dem die Datei angelegt wurde noch kurz den udev-Dienst neu starten/laden (z.B. “/etc/init.d/udevd reload”) und man kann über /dev/lesekopf0 auf den Lesekopf zugreifen. Egal, welche anderen ttyUSB Geräte es noch gibt :-)

Bei Ubuntu 12.10 folgendes:

SUBSYSTEM=="tty", ENV{ID_SERIAL_SHORT}=="ABC1234", SYMLINK+="lesekopf0"

legt einen sym. Link “/dev/lesekopf0” auf das eigentliche Device an.

den udev-Dienst dann mit

sudo udevadm trigger

die neue Regel anwenden lassen.

Hinweis zum Betrieb mit Pogoplug V2/V3

Versuche mit Pogoplug V2, Feroceon 88FR131 [56251311] revision 1 (ARMv5TE) haben ergeben, dass ältere Kernel Probleme mit der Initialisierung des CP2104 haben und obwohl der IR-Kopf einen Gerätenamen, z.B. “/dev/ttyUSB0” bekommt und scheinbar korrekt ansprechbar ist, gelingt es nicht Signale zu empfangen oder zu senden. Der Bug wurde ab Kernel 3.3 korrigiert, man sollte also auf einen aktuellen Kernel achten. Silabs stellt einen modifizierten Treiber für Kernelversionen 2.6.x zur Verfügung. Dieser kann per insmod eingebunden werden. http://www.silabs.com/Support%20Documents/Software/Linux_2.6.x_VCP_Driver_Source.zip

Testmöglichkeiten unter Linux

Will man schnell prüfen ob der IR-Kopf in Verbindung mit einem Zähler funktioniert und wie die Daten aussehen die Empfangen werden, so gibt es verschiedene Möglichkeiten, wobei minicom die naheliegenste ist. Wenn Binärdaten übermittelt werden wird es ein wenig spannender, denn diese sind unter minicom nicht von etwa gestörten Daten zu unterscheiden. Es kann daher sinnvoll sein, die Daten mit einem Skript abzufangen. Im Rahmen der Tests mit dem oben genannten Pogoplug V2 und einen EMH eHZ haben sich folgende Zeilen als hilfsreich erwiesen. Für andere Zähler ist deren Übertragungsverfahren und das Datenformat zu beachten.

Aufgrund der Zugriffsrechte unter Linux ist zu beachten, dass der gerade genutze user die serielle Schnittstelle benutzen darf. Root darf das immer, aber besser ist es dem normalen Benutzer die Gruppe uucp zuzuordnen.

Serielle Schnittstelle einstellen

Unter vielen anderen Möglichkeiten bietet sich für die Konfiguration der seriellen Schnittstelle das Utility stty an und sollte im Zweifelsfall nachinstalliert werden. Um sich die vielen Optionen und Parameter einzusparen, bietet sich folgende Vorgehensweise an (als Schnittstelle soll /dev/ttyUSB0 dienen):

  1. man stellt die richtige Daten unter minicom ein und verlässt dieses ohne Reset (Ctrl-A, Q)
  2. dann exportiert man die Einstellungen mittels stty -g -F /dev/ttyUSB0
  3. das Ergebnis wird dann beim Aufruf von stty verwendet

Für 9600 8N1 würde solch ein Aufruf wie folgt aussehen:

stty -F /dev/ttyUSB0 1:0:8bd:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0

Die Befehlszeile kann natürlich auch in Skripte übernommen werden.

In vzlogger ist für das Protokoll “sml” 8N1 und für “d0” 7E1 der Defaultwert und braucht nicht extra eingestellt werden.

Serielle Schnittstelle auslesen

Hat man die richtige Einstellung gefunden, dann reicht ein

cat /dev/ttyUSB0

oder für binäre Daten

cat /dev/ttyUSB0 | od -tx1

um zu sehen was über die serielle Schnittstelle empfangen wird.
Um die Einstellungen auch nach erneutem Booten zu haben kann man diese in /etc/rc.local eintragen.

Die Ausgabe sollte dann für binäre Daten so aussehen:

0000000 1b 1b 1b 1b 01 01 01 01 76 07 00 0a 00 6f 31 74
0000020 62 00 62 00 72 63 01 01 76 01 01 07 00 0a 00 20
0000040 10 7c 0b 06 45 4d 48 01 04 c5 6b 7d ce 01 01 63
0000060 86 9d 00 76 07 00 0a 00 6f 31 75 62 00 62 00 72
0000100 63 07 01 77 01 0b 06 45 4d 48 01 04 c5 6b 7d ce
0000120 07 01 00 62 0a ff ff 72 62 01 65 00 20 79 be 7a
...

Der Treiber fuer den verwendeten Silabs cp2104 USB-Seriell Wandler ist in Linux Kernel Versionen bis 3.2 DEFEKT, Das Geraet wird zwar erkannt, aber das Einstellen der Baudrate funktioniert nicht. Das Problem ist erst in Linux ab Kernel-Version v3.3-rc2 behoben
Details: https://bugzilla.kernel.org/show_bug.cgi?id=42586

Windows und das Linux vom Raspberry Pi sind davon nicht betroffen.

Silabs stellt Treiber für alle gängigen Betriebssysteme zur Verfügung:
https://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx

hardware/controllers/ir-schreib-lesekopf-usb-ausgang.txt · Last modified: 2016/07/02 10:23 by udo1