Forum: Mikrocontroller und Digitale Elektronik IR-Empfänger an COM-Port (PC)


von Peter K. (peter_kg)


Angehängte Dateien:

Lesenswert?

Hallo Forum,
ich habe gerade einen IR-Empfänger für einen PC zusammengelötet, der 
sich noch im Bau befindet. Für den Empfänger habe ich die offizielle 
LIRC-Anleitung benutzt: http://www.lirc.org/receivers.html

Weil ich möchte, dass es beim IR-Empfang auch eine optische Rückmeldung 
gibt, habe ich den Empfänger gemäß diesen Bauplans erweitert (ist extra 
für den LIRC-Bauplan gedacht):
http://how-to.wikia.com/wiki/How_to_build_a_LIRC_receiver_with_an_LED_indicator

Jetzt ist alles fertig und ich frage mich, ob die zweite Schaltung nicht 
einen Fehler enthält: Der Hex-Inverter ist direkt mit der DCD-Leitung 
vom Serial-Port verbunden. PC-Serial verwendet doch überall 10V! Bevor 
ich meinen Empfänger also anschließe, würde ich gerne wissen ob mir der 
(5V)-Hex-Inverter nicht durchbrennt. Eine 10V-Version des Bauteil ist 
mir nicht bekannt.

von Jim M. (turboj)


Lesenswert?

Peter K. schrieb:
> Der Hex-Inverter ist direkt mit der DCD-Leitung
> vom Serial-Port verbunden.

DCD ist ein Eingang und kein Ausgang. Da darf keine hohe Spannung 
anliegen - jedenfalls nicht vom PC aus.

von Peter K. (peter_kg)


Lesenswert?

Achso.

...Ich versteh' die Schaltung nicht: R1 ist ja ein Pull-Up. Wenn der 
IR-Empfänger..jetzt 0en und 1en sendet...als 0 und +5V...dann bekommt 
DCD wegen dem Pullup (liegt übrigens an der 10V-Leitung) doch niemals 
0V. DCD wird doch nie mit GND verbunden....oder?

von PittyJ (Gast)


Lesenswert?

Ich habe einfach einen normalen TSOP genommen (Ca 1 Euro) Dazu einen 
günstigen Arduino (15 Euro).
Die IR-Empfänger-SW gibt es frei im Netz. Das ganze kann dann an jeden 
PC über USB angeschlossen werden.
Ich bin also bei 16 Euro und 2 Stunden SW-Arbeit.
Das Ding läuft seit mehreren Jahren 24/7.
Eine optische Rückmeldung würde da über eine LED an einem GPIO gehen. Ca 
20 Minuten Aufwand.

von C.K. (Gast)


Lesenswert?

Ich habe die Schaltung auch mal vor langer langer Zeit verwendet.

Wird DCD auf Logisch 0 gesetzt, liegt da ungefähr +10V an.
(Bei einer Logischen 1 sind es -10V)

Die 5V Versorgunsspannung bekommst du über den 7805. Mit dem kannst du 
auch den Hex-Inverter mit 5V versorgen.

Das RTS-Signal wird dann über die PC-Software gepollt. Eine UART-Signal 
gibt es nicht.
Daher funktioniert das bei neueren PC meist nicht mehr, da die eventuell 
noch vorhandene RS232-Schnittstelle über ein USB-Baustein realisiert 
wurde, da moderne PC-Chipsätze keine native RS232-Controller mehr haben.

Aber USB-UART-Controller unterstützen Polling und Bit-Banging nur 
eingeschränkt. Weil es eigentlich nicht vorgesehen ist.

von Peter K. (peter_kg)


Lesenswert?

Ähm...die RTS-Leitung dient ausschließlich der Stromversorgung. Das ist 
in der Schaltung der Plus-Pol. Da wird nichts gepollt.

Laut der verlinkten Lirc-Anleitung werden auf der DCD-Leitung logisch 0 
und 1 mit den Spannungen  0V und 5V realisiert. Das verstößt tatsächlich 
gegen den RS232-Standard, weil eigentlich -3/+3V vorgesehen sind. In den 
meisten Fällen soll es aber trotzdem funktionieren.

Ich werde das einfach ausprobieren. Die Aussage von Jim fand ich im 
Internet bestätigt: DCD soll gar keine 10V bekommen. Daher wird die 
Schaltung schon irgendwie funktionieren...

: Bearbeitet durch User
von Peter K. (peter_kg)


Lesenswert?

Au Mann, Lirc ist ja 'ne Katastrophe!
Ich bin hier wirklich am verzweifeln: Bei den ganzen Bauanleitungen 
steht nirgends wie man denn das Lirc zum selbstgebauten Receiver denn 
nun konfiguriert!

Zu allem Überfluss haben die seit Version 0.9.3 (oder so) die ganzen 
Konfig-Dateien geändert. Im Internet ist kaum was dazu zu finden.
Einzige halbwegs brauchbare Quelle für (das alte!) Lirc: 
http://www.vdr-wiki.de/wiki/index.php/LIRC

Die Lirc-Webseite ist totaler Müll.

Benutze das aktuellste Debian und da ist Lirc 0.9.4 drin. Ich glaube das 
hat einen Fehler weil lirc-setup einfach abstürzt (irgendwelche 
Fehlermeldungen mit Python-Quelltext).
Wollte 0.9.10 von Hand kompilieren. Das hat sogar geklappt. Doch das 
installiert die ganzen Libs in die falschen Verzeichnisse. Hab da alles 
möglich probiert mit "LD_LIBRARY_PATH" und "LD_RUN_PATH" und am Ende 
sogar mit Softlinks von Hand. Die Geschichte endete mit einem 
Lirc-Service, der nicht starten will, weil er "maskiert" sei.

Jetzt bin ich wieder zurück auf Lirc 0.9.4 aus den Debian-Paketen und 
weiß nicht, wie man die serielle Schnittstelle angesprochen kriegt.

Es wird ein /dev/lirc0 angelegt, mode2 registriert aber nichts. Als 
Treiber habe ich devinput in der Config-Datei angegeben.
Außerdem wird am Ende der Config-Datei folgendes vor dem Lirc-Start 
ausgeführt:

setserial /dev/ttyS0 uart none; modprobe lirc_serial

lirc_serial existiert bei mir, allerdings nicht serial_ir. Angeblich 
würde das im neuen Lirc den Treiber lirc_serial ersetzen, wie hier 
behauptet:
https://www.vdr-portal.de/forum/index.php?thread/131832-ubuntu-18-04-lirc-serial/

Bei mir stimmt's nicht: serial_ir existiert im neuesten Debian und Lirc 
0.94 nicht. Ich bekomme keine Fehlermeldungen, gar nichts.

/sys/class/rc/rc0/ wird nicht erzeugt.

Lirc-Daemon läuft ganz normal und lässt sich auch starten, stoppen 
restarten.

von Peter K. (peter_kg)


Lesenswert?

Niemand? Serielles IR mit neuem Lirc? Noch keiner probiert? Auch 
Anleitungen/Links waeren hilfreich.

von Peter K. (peter_kg)


Lesenswert?

Ich habe inzwischen einen ersten Teilerfolg:
1
dmesg | grep lirc
2
[    4.464530] input: lircd-uinput as /devices/virtual/input/input15
3
[  489.838181] lirc_dev: IR Remote Control driver registered, major 247
4
[  489.841912] lirc_serial: module is from the staging directory, the quality is unknown, you have been warned.
5
[  490.796076] lirc_serial lirc_serial.0: auto-detected active high receiver
6
[  490.796432] lirc_serial lirc_serial.0: lirc_dev: driver lirc_serial registered at minor = 0

Mein IR-Empfaenger wird also erkannt: Als Active-High-Receiver!

Leider liefert mode2 immernoch keine Ausgabe.

Um bis hierhin zu kommen habe ich:
1
dpkg-reconfigure lirc
eingegeben und im Menue haendisch / manuell gewaehlt.
Anschliessend habe ich die Datei
1
/var/lib/setserial/autoserial.conf
veraendert und dort COM2 richtig konfiguriert:
1
/dev/ttyS1 uart none port 0x02f8 irq 3

Adresse und irq habe ich dafuer im bios nachgeguckt und ausserdem mit 
der Ausgabe von
1
setserial /dev/ttyS1
 verglichen (stimmte ueberein).

Dann habe ich noch die Datei
1
/var/lib/setserial/autoserial.conf
angepasst:
1
#
2
###AUTOSAVE###
3
###PORT STATE GENERATED USING AUTOSAVE-ONCE###
4
###AUTOSAVE-ONCE###
5
###AUTOSAVE-ONCE###
6
###AUTOSAVE###
7
#
8
# If you want to configure this file by hand, use 
9
# dpkg-reconfigure setserial
10
# and change the configuration mode of the file to MANUAL. If you do not do this, this file may be overwritten automatically the next time you upgrade the
11
# package.
12
#
13
/dev/ttyS1 uart none port 0x02f8 irq 3
14
/dev/ttyS0 uart 16550A port 0x03f8 irq 4 baud_base 115200 spd_normal skip_test
und schliesslich habe ich noch die Datei
1
cat /etc/modprobe.d/lirc.conf
erstellt, mit dem Inhalt:
1
alias char-major-61 lirc_serial
2
options lirc_serial irq=3 io=0x02f8

Was davon jetzt zur Erkennung meines IR-Empfaengers gefuehrt hat, kann 
ich leider nicht sagen. Sowohl Debian als auch Lirc haben ihre 
Konfigurationen geaendert, sodass jede Anleitung im Netz ein anderes 
Vorgehen beschreibt.

Meine /etc/lirc/lirc_options.conf:
1
cat ./lirc_options.conf
2
# These are the default options to lircd, if installed as
3
# /etc/lirc/lirc_options.conf. See the lircd(8) and lircmd(8)
4
# manpages for info on the different options.
5
#
6
# Some tools including mode2 and irw uses values such as
7
# driver, device, plugindir and loglevel as fallback values
8
# in not defined elsewhere.
9
10
[lircd]
11
nodaemon        = False
12
driver          = devinput
13
device          = /dev/lirc0
14
output          = /var/run/lirc/lircd
15
pidfile         = /var/run/lirc/lircd.pid
16
plugindir       = /usr/lib/x86_64-linux-gnu/lirc/plugins
17
permission      = 666
18
allow-simulate  = No
19
repeat-max      = 600
20
#effective-user =
21
#listen         = [address:]port
22
#connect        = host[:port]
23
#loglevel       = 6
24
#uinput         = ...
25
#release        = ...
26
#logfile        = ...
27
28
[lircmd]
29
uinput          = False
30
nodaemon        = False
31
32
# [modinit]
33
# Serial Port ausschalten, damit Kernel modul geladen werden kann
34
code = /bin/setserial /dev/ttyS1 uart none
35
# Kernel-Module laden
36
code1 = /sbin/modprobe lirc_serial
37
# Sony Protokol aktivieren. Je nach Fernbedieung was anderes eintragen
38
#code2 = /usr/bin/echo sony > /sys/class/rc/rc0/protocols
39
40
# code3 = /usr/bin/setfacl -m g:lirc:rw /dev/uinput
41
# code4 = ...
42
43
44
# [lircd-uinput]
45
release-timeout = 200


Leider funktioniert nichts automatisch: Ich muss an der Konsole 
folgendes Eintippen, damit /dev/lirc0 erzeugt wird und mode2 gestartet 
werden kann:
1
modprobe lirc-serial
2
systemctl restart lircd

Weiss jemand, wie es von hier aus weitergeht? Gerne wuerde ich Input im 
mode2 sehen. Auch der fehlende Autostart geht mir auf die Nerven. Ich 
nutze das neueste Debian 9 (Stretch) und Lirc 0.9.4.c.

: Bearbeitet durch User
von my2ct (Gast)


Lesenswert?

C.K. schrieb:
> Das RTS-Signal wird dann über die PC-Software gepollt.

Bist du sicher, dass beim deinem PC die RTS-Leitung ein Eingang ist?
Bei jedem anderen PC ist das ein Ausgang.
https://de.wikipedia.org/wiki/RS-232#Verkabelung_und_Stecker

Es macht auch ausgesprochen wenig Sinn, eine über eine Diode an den 
Spannungsregler angeschlossene Leitung zu pollen.
Wirf mal einen Blick in die Software, bevor du solche Gerüchte in die 
Welt setzt :-(

von Peter K. (peter_kg)


Lesenswert?

Habe jetzt auf Lirc 0.10.1 upgedatet, indem ich in den apt-quellen 
(/etc/apt/sources.list) "stretch" durch "testing" ersetzt und
1
apt-get update
 ausgefuehrt habe. Danach lirc 10 installiert und die sources.list 
wieder zurueck-geaendert auf "stretch".

Am Verhalten von Lirc hat sich dadurch nichts geandert. Jedoch bekomme 
ich beim Booten nun folgende Meldung:
1
[    2.528280] systemd[1]: lircd-setup.service: Cannot add dependency job, ignoring: Unit lircd-setup.service is masked.
2
[    2.528476] systemd[1]: lircd-setup.service: Cannot add dependency job, ignoring: Unit lircd-setup.service is masked.
3
[    4.382574] input: lircd-uinput as /devices/virtual/input/input15

Der manuelle Aufruf von lircd mit
1
modprobe lirc_serial
2
systemctl restart lircd

funktioniert aber immernoch:
1
[  342.696769] lirc_dev: IR Remote Control driver registered, major 247
2
[  342.699322] lirc_serial: module is from the staging directory, the quality is unknown, you have been warned.
3
[  343.660075] lirc_serial lirc_serial.0: auto-detected active high receiver
4
[  343.660335] lirc_serial lirc_serial.0: lirc_dev: driver lirc_serial registered at minor = 0
mode2 erkennt immernoch keine Eingaben.

von Joachim B. (jar)


Lesenswert?

Peter K. schrieb:
> ich habe gerade einen IR-Empfänger für einen PC zusammengelötet

vielleicht willst du dich hier mal einlesen?
http://pofahl.de/irdeo/

Das Teil hatte ich erfolgreich für den PC nachgebaut

von Wolfgang (Gast)


Lesenswert?

Peter K. schrieb:
> mode2 erkennt immernoch keine Eingaben.

Und du bist dir sicher, dass deine serielle Schnittstelle RTS und DCD 
unterstützt?

von Peter K. (peter_kg)


Lesenswert?

@Joachim B: Vielen Dank. Das sieht ziemlich cool aus und ist sicher ein 
schoenes Projekt. Die Platine ist sehr aufgeraeumt und durch den 
eingebauten Sender auch noch multifunktional. Das Problem ist nur, ich 
baue hier gerade einen HTPC und da muss alles so klein wie moeglich 
sein. Ausserdem will ich ja jetzt wissen, ob mein eigener Empfaenger nun 
funktioniert oder nicht.

@Wolfgang:
Nein, bin ich nicht.
Ich kann nur sagen, dass es ein altes ITX-Mainboard von Asus ist, das 
zwei serielle Schnittstellen und eine parallele hat. Dabei ist COM2 
intern (Pin-Header) und COM1 ganz normal extern. Der Parallel-Port ist 
ganz normal extern.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Peter K. schrieb:
> Ich kann nur sagen, dass es ein altes ITX-Mainboard von Asus ist, das
> zwei serielle Schnittstellen und eine prarallele hat.

Dann verbinde doch mal ein Terminalprogramm (z.B. HTerm) mit der 
Schnittstelle und guck dir an, ob du RTS steuern und über DCD zurück 
lesen kannst (mit Brücke RTS-DCD).

Bei einer seriellen Schnittstelle auf dem Mainboard ist die Chance 
ziemlich groß, dass das funktioniert. Anders sähe das evtl. bei 
sparsamen USB-Seriell-Wandlern aus.

von Joachim B. (jar)


Lesenswert?

Peter K. schrieb:
> @Joachim B: Vielen Dank. Das sieht ziemlich cool aus und ist sicher ein
> schoenes Projekt. Die Platine ist sehr aufgeraeumt und durch den
> eingebauten Sender auch noch multifunktional. Das Problem ist nur, ich
> baue hier gerade einen HTPC und da muss alles so klein wie moeglich
> sein.

ich habe es auf einer Lochrasterplatine in eine Streicholzschachtel 
gebaut, ist doch klein und passt in ein HTPC Gehäuse.

von Peter K. (peter_kg)


Lesenswert?

Wolfgang schrieb:

> Dann verbinde doch mal ein Terminalprogramm (z.B. HTerm) mit der
> Schnittstelle und guck dir an, ob du RTS steuern und über DCD zurück
> lesen kannst (mit Brücke RTS-DCD).

Tja, dazu muesste ich wissen, wie das geht.

@ Joachim B: Toll! Ich kauf jetzt aber nicht die ganzen Teile und mach 
ein neues Projekt auf. Ich habe ja auch einen Receiver gebaut...und den 
wuerde ich gerne benutzen.

von Joachim B. (jar)


Lesenswert?

Peter K. schrieb:
> Ich habe ja auch einen Receiver gebaut...und den
> wuerde ich gerne benutzen.

Peter K. schrieb:
> Für den Empfänger habe ich die offizielle
> LIRC-Anleitung benutzt

ach was, nun gut, dem "Schaltbild" fehlt offensichtlich die nötige 
Filterung 100 Ohm auf 4,7µF
http://static.electro-tech-online.com/imgcache/2638-tsop1738.GIF
oder
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTBA4_WCq_6g3tM0yj_8CIsdOQCsDpXCKOh-m51w6e7s-c3Aon3Mw

ferner hast du doch Problemchen? oder verstehe ich dein Thread falsch?

Wolfgang schrieb:
> Und du bist dir sicher, dass deine serielle Schnittstelle RTS und DCD
> unterstützt?
Peter K. schrieb:
> @Wolfgang:
> Nein, bin ich nicht.

dann solltest du das klären, auch die Pegelfrage, TTL oder V24

von Peter K. (peter_kg)


Lesenswert?

Ich habe mal gemessen: an der RTS-Leitung liegen -11V, obwohl doch da 
+11V drangehoeren! Alle Leitungen der Bauteile und auch DCD haben 0,07V. 
Der Receiver bekommt also seine 5V gar nicht. Wieso auch? Der 
Spannungsregler kriegt ja die 11V verkehrtrum.

Jetzt frag ich mich, welcher Software-Teil die Pins denn richtig 
schalten sollte, so dass RTS konstant +11V liefert und DCD gepollt wird. 
Sollte das das Debian machen oder Lirc? mode2 liefert ja die 
Sensoreingaben VOR dem Lirc. Lirc muss fuer mode2 also nicht laufen.

Dass mit dem Kondensator verstehe ich nicht: Da ist doch einer in der 
Schaltung, hinter dem Spannungsregler.

von Peter K. (peter_kg)


Lesenswert?

Antwort gefunden: http://lirc.org/receivers.html

>The power for the circuit comes from the RTS line of the serial port. D1 protects 
the circuit from the negative voltage that is usually on the RTS pin. The LIRC 
driver will change the serial port settings on initialization so that the circuit 
will get the necessary positive voltage.

Ich habe also ein Lirc-Problem.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Peter K. schrieb:
> Ich habe mal gemessen: an der RTS-Leitung liegen -11V, obwohl doch da
> +11V drangehoeren!

Läuft denn die zugehörige Software auf dem PC?

von Peter K. (peter_kg)


Lesenswert?

Ja klar, Lirc. Moeglicherweise habe ich es nicht richtig konfiguriert. 
Das ist ja mein Problem: Die 0.9.x-er Versionen sind kaputtprogrammiert. 
Bei einigen von ihnen geht Seriel angeblich nicht, bei anderen geht 
lirc-setup nicht, bei allen werden neue Config-Dateien verwendet. 
Nirgendwo gibt es aktuelle Anleitungen. Wirklich schlimm!

von Peter K. (peter_kg)


Lesenswert?

Kurze Rueckmeldung: Ich hab's an's Laufen gekriegt. Der Linux-Kernel hat 
einen Fehler, der Lirc an der seriellen Verbindung hindert. Welche 
Versionen genau betroffen sind kann ich nicht sagen. Mit 4.10 wurden 
Probleme gemeldet. Ich hatte 4.09 drauf. Angeblich soll es ab 4.17 
wieder gehen.

Meine Version ist jetzt 4.19. Damit laeuft's auf jeden Fall.
AUSSERDEM habe ich den Empfaenger direkt an 5V vom Netzteil 
angeschlossen UND auch GND an GND vom Netzteil! Mit dem Serial-Port ist 
also nur noch DCD verbunden.
Am GND vom Serial Port hatte ich knapp 3V gegen Masse gemessen. Sobald 
der Empfaenger am echten GND vom Mainboard lag, erwachte der Empfaenger 
zum Leben.

Wichtig auch: Im Debian muss eine Datei /etc/modprobe.d/serial_ir.conf 
angelegt werden:
1
# Config f COM2 (/dev/ttyS1):
2
options serial_ir irq=3 io=0x2f8

Dann muss nur noch die Datei /etc/lirc/lirc_options.conf

angepasst werden:

driver auf default und der Aufruf von setserial sind wichtig. Hier die 
ganze Datei:
1
/home/minimpc# cat /etc/lirc/lirc_options.conf
2
# These are the default options to lircd, if installed as
3
# /etc/lirc/lirc_options.conf. See the lircd(8) and lircmd(8)
4
# manpages for info on the different options.
5
#
6
# Some tools including mode2 and irw uses values such as
7
# driver, device, plugindir and loglevel as fallback values
8
# in not defined elsewhere.
9
10
[lircd]
11
nodaemon        = False
12
driver          = default
13
device          = /dev/lirc0
14
output          = /var/run/lirc/lircd
15
pidfile         = /var/run/lirc/lircd.pid
16
plugindir       = /usr/lib/x86_64-linux-gnu/lirc/plugins
17
permission      = 666
18
allow-simulate  = No
19
repeat-max      = 600
20
#effective-user =
21
#listen         = [address:]port
22
#connect        = host[:port]
23
#loglevel       = 6
24
#uinput         = ...
25
#release        = ...
26
#logfile        = ...
27
28
[lircmd]
29
uinput          = False
30
nodaemon        = False
31
32
# [modinit]
33
code = /bin/setserial ttyS1 uart none
34
code1 = /sbin/modprobe lirc_dev
35
code2 = /sbin/modprobe serial_ir
36
code3 = echo 'lirc' > /sys/class/rc/rc0/protocols
37
38
# [lircd-uinput]
39
release-timeout = 200

Bei mir ist der Serial-Port COM2. Wenn das einer nachmachen will und 
COM1 benutzt:
In vielen Faellen ist COM1 bei /dev/ttyS0, hat die Adresse 0x03f8 (oder 
0x3f8) und IRQ4. Die eben erwaehnten Dateien muessen entsprechen 
angepasst werden.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.