Forum: Mikrocontroller und Digitale Elektronik IR Protokoll mit Python selbst schreiben


von Ernst H. (Firma: Laboratorium_S1) (ernst_haft)


Lesenswert?

Hallo liebes Forum,

wie ich bereits in einem meiner früheren Beiträge erwähnte plane ich 
mittels von Python und einem Raspberry Pi über IR Signale zu versenden. 
Dazu muss ich ein passendes Protokoll schreiben.

Bevor ich mich um die Programmierung auf der Empfängerseite kümmere, 
schreibe ich das Sender-Programm.

Kann ich das Modul "time" mit Python benutzen, oder ist das zu ungenau?
Was wären bessere Alternativen?

Wie lang soll ich einen Bit machen? Ich hätte die Bittlänge auf 0,5sec 
gesetzt.
Würde das Funktionieren?
Meine Nachrichten sind maximal 9 Bits lang.

Viele Grüße,
euer Ernst

von Stefan F. (Gast)


Lesenswert?

Ernst H. schrieb:
> Wie lang soll ich einen Bit machen?

Das kommt auf deinen Empfänger an. Die bekannten TSOP Empfänger aus der 
Unterhaltungselektronik arbeiten mit Bitraten von wenigen Kilohertz. 
Also sehr viel schneller als deine 0,5 Sekunden.

Ich denke nicht, dass du das Timing zuverlässig mit Python Code erzeugen 
kannst. Das ist eher der Job von einem C Modul oder Hardware.

von Max M. (sysadmin4444)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ernst H. schrieb:
>> Wie lang soll ich einen Bit machen?
>
> Das kommt auf deinen Empfänger an. Die bekannten TSOP Empfänger aus der
> Unterhaltungselektronik arbeiten mit Bitraten von wenigen Kilohertz.
> Also sehr viel schneller als deine 0,5 Sekunden.
>
> Ich denke nicht, dass du das Timing zuverlässig mit Python Code erzeugen
> kannst. Das ist eher der Job von einem C Modul oder Hardware.

Hätte auch vermutet, dass du dafür einen HW Baustein brauchen wirst.

von ...-. (Gast)


Lesenswert?

"Probieren geht über studieren", also Oszi oder LA an einen GPIO und 
dann testen, 0.1 sec, 0.2 sec etc, evtl kann man auch das SPI benutzen.

von Ernst H. (Firma: Laboratorium_S1) (ernst_haft)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ich denke nicht, dass du das Timing zuverlässig mit Python Code erzeugen
> kannst. Das ist eher der Job von einem C Modul oder Hardware.

Was ist ein HW-Baustein? Ich habe dazu nicht viel gefunden. Lediglich 
weiß ich jetzt, dass die ATtiny-Microcontroller scheinbar dazu gehören.

Auf C will ich nun nicht mehr umschwenken. Das heißt ich muss die 
Hardware ändern. Was genau muss ich da machen?

von Stefan F. (Gast)


Lesenswert?

Ernst H. schrieb:
> Was ist ein HW-Baustein? Ich habe dazu nicht viel gefunden.

Ein spezialisiertes Stück Hardware, dass die Daten seriell von deinem 
Python Programm empfängt und irgendwie in das Infrarot-Protokoll 
umsetzt. In der regel also etwas mit Mikrocontroller. Konnte man früher 
unter dem Namen "Irda" kaufen. Heute musst es wohl selbst konstruieren.

> Auf C will ich nun nicht mehr umschwenken.

Dann hat sich das Thema für dich erledigt. Es sei denn, du willst Geld 
für einen Basic Compiler (Bascom) ausgeben und das lernen. Mit Python 
alleine kommst du jedenfalls nicht weiter.

von Ernst H. (Firma: Laboratorium_S1) (ernst_haft)


Lesenswert?

Stefan ⛄ F. schrieb:
> Dann hat sich das Thema für dich erledigt. Es sei denn, du willst Geld
> für einen Basic Compiler (Bascom) ausgeben und das lernen. Mit Python
> alleine kommst du jedenfalls nicht weiter.

Wenn ich C verwende, spare ich mir dann die Umrüst-Arbeiten bei der 
Hardware?

von J. S. (jojos)


Lesenswert?


: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Ernst H. schrieb:
> Wenn ich C verwende, spare ich mir dann die Umrüst-Arbeiten bei der
> Hardware?

Theoretisch kannst du dir ein C Modul programmieren, dass du in dein 
Python Programm einbindest. Dazu musst du dich aber intensiv mit der 
Hardware befassen, auf der das ganze Läuft.

Oder dein Python Programm auf dem Raspberry Pi sendet die Daten seriell 
zu einem Hardware Modul, das du selbst auf Basis eines Mikrocontrollers 
baust und programmierst. Auch dafür brauchst du in der Regel C.

Ich würde mich nach fix und fertigen IR Adaptern umschauen, die vom 
Linux Betriebssystem unterstützt werden (Stichwort LIRC). Lies dazu
https://cool-web.de/raspberry/raspberry-pi-mit-infrarot-fernbedienung-fernsteuern.htm

von Norbert (Gast)


Lesenswert?

Ich stelle mir gerade diese wundervolle Stille und das gelegentlich 
gesprochene Wort vor…

Es ist die Stille die entsteht, wenn nur diejenigen Leute über etwas 
reden von dem sie auch Ahnung haben.
Und wenn ich mir die bisherigen Beiträge so ansehen…

Vor vielen Jahren begab es sich, das jemand die Frage nach der 
Geschwindigkeit gestellt hat. Die erzielbare Geschwindigkeit wenn man an 
einem raspi mit dem GPIO arbeitet.

Er war aber nicht im Mikrocontroller Forum und hat nur dumm 
rumgeschwätzt, er hat es geprüft und gemessen:

https://codeandlife.com/2012/07/03/benchmarking-raspberry-pi-gpio-speed/

So hat er gelernt,

    GELERNT

das mit Python Code selbst auf einem uralten raspi durchaus 70kHz 
Schaltfrequenz möglich sind.
Und da hier in diesem Fall die Trägerfrequenz bei der IR Übertragung per 
HW erzeugt wird, geht es hier nur um (Daten)Bits und Bytes.
Das sollte selbst ein Anfänger Problemarm hinbekommen.

von devzero (Gast)


Lesenswert?

Es ist schlicht kein Timing garantiert und daher ist Bitbanging eine 
schlechte Idee. Sinnvoll waerte tatsaechlich einen uC zu programmieren, 
der z.B. per UART die Daten annimmt und dann in die Welt blinkt.

von Norbert (Gast)


Lesenswert?

devzero schrieb:
> Es ist schlicht kein Timing garantiert und daher ist Bitbanging
> eine
> schlechte Idee. Sinnvoll waerte tatsaechlich einen uC zu programmieren,
> der z.B. per UART die Daten annimmt und dann in die Welt blinkt.

Du möchtest dich mit Linux beschäftigen.

Insbesondere mit der Möglichkeit auf einem CPU-Kern nur (im Sinne von 
ausschließlich) dieses Programm mit höherer Priorität laufen zu lassen.

Dann möchtest du messen was denn so alles geschieht.

Anschließend würdest du gerne deinen Beitrag korrigieren (was als Gast 
nicht geht).

von ...-. (Gast)


Lesenswert?

Norbert schrieb:
> devzero schrieb:
>> Es ist schlicht kein Timing garantiert und daher ist Bitbanging
>> eine
>> schlechte Idee. Sinnvoll waerte tatsaechlich einen uC zu programmieren,
>> der z.B. per UART die Daten annimmt und dann in die Welt blinkt.
>
> Du möchtest dich mit Linux beschäftigen.
>
> Insbesondere mit der Möglichkeit auf einem CPU-Kern nur (im Sinne von
> ausschließlich) dieses Programm mit höherer Priorität laufen zu lassen.
>
> Dann möchtest du messen was denn so alles geschieht.
>
> Anschließend würdest du gerne deinen Beitrag korrigieren (was als Gast
> nicht geht).

Hab ich doch schon gesagt, wenngleich mit anderen Worten
Beitrag "Re: IR Protokoll mit Python selbst schreiben"

von Stefan F. (Gast)


Lesenswert?

devzero schrieb:
> Es ist schlicht kein Timing garantiert und daher ist Bitbanging eine
> schlechte Idee.

Eben! Genau deswegen werden selbst PC mit 4 Ghz Taktfrequenz und 12 
Kernen immer noch durch zahlreiche Mikrocontroller und Spezial IC 
unterstützt, wenn es darum geht, Signale zu erzeugen.

von Norbert (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> devzero schrieb:
>> Es ist schlicht kein Timing garantiert und daher ist Bitbanging eine
>> schlechte Idee.
>
> Eben! Genau deswegen werden selbst PC mit 4 Ghz Taktfrequenz und 12
> Kernen immer noch durch zahlreiche Mikrocontroller und Spezial IC
> unterstützt, wenn es darum geht, Signale zu erzeugen.

Ja Ja. Und eine 4GHz CPU kann kein 4kHz Signal erzeugen ohne gleich 
ohnmächtig zu werden. Liegen ja auch nur 6 Größenordnungen dazwischen.

In den nächsten Folgen:
Warum man einen 38Tonner zum Brötchen holen braucht.

Wäsche trocknen leicht gemacht. Wir warten auf einen Tornado.

von Stefan F. (Gast)


Lesenswert?

Norbert schrieb:
> In den nächsten Folgen:
> Warum man einen 38Tonner zum Brötchen holen braucht.

Anders herum: Warum ein 38 Tonner kaum zum Brötchen holen geeignet ist.

von Jack V. (jackv)


Lesenswert?

Stefan ⛄ F. schrieb:
> Anders herum: Warum ein 38 Tonner kaum zum Brötchen holen geeignet ist.

… und warum’s aber trotzdem geht, wenn man es drauf anlegt. Genauso, wie 
man mit Python auf der entsprechenden Hardware (denn irgendwas mit 
IR-LED und Photodiode auf der einen, und PC-Schnittstelle auf der 
anderen Seite braucht man ja nunmal – ein Microcontroller mit 
Micropython böte sich daher an, wenn man nicht gleich einen Pi oder was 
Anderes mit GPIO und den passenden Libs nimmt) durchaus via Bitbanging 
die IR-Protokolle bedienen kann. Inspirationen finden sich z.B. auf 
Github.

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

auf den alten RPi war selbst lirc unzuverlässig wenn es mit Kodi genutzt 
wurde.
Ich habe ein RFM69 Funkmodul am RPi und die Software dafür lief zuerst 
in JavaScript, sogar als ISR. Die Reaktionszeiten waren mit 400..1200 µs 
zu langsam, in C dann bei <100 µs. Python mag jetzt schneller sein als 
JS, aber das läuft dann trotzdem noch im Userspace. Da würde ich die 
lirc Lösung allemale vorziehen.

Mit einem alten ESP8266 kann man ein IR-Wifi Gateway bauen, ein paar 
Zeilen aus Arduino Beispielcode ist da schnell zusammengeklickt. Damit 
kann vielleicht sogar ein RPi eingespart werden.

von Kreativ (Gast)


Lesenswert?

devzero schrieb:
> Es ist schlicht kein Timing garantiert und daher ist Bitbanging
> eine
> schlechte Idee. Sinnvoll waerte tatsaechlich einen uC zu programmieren,
> der z.B. per UART die Daten annimmt und dann in die Welt blinkt.

Oder man kodiert die Daten so das kein hoch genaues genaues Timing 
erforderlich ist und setzt noch eine Fehlerkorrektur drauf.

von Norbert (Gast)


Lesenswert?

Also noch einmal. Gaaaaanz langsam.

Wir haben 4 Kerne (in Worten VIER Kerne) die allesamt in der 
Größenordnung 10^9Hz laufen.
Einer dieser Kerne (sagen wir Nummer 4) ist dediziert dem Python 
Programm zugeordnet und läuft von mir aus auch noch mit erhöhter 
Priorität.
Linux (und Anwendungen) benutzen ausschließlich Kerne 1…3
Ja, Linux kann so etwas.

Bitte beantwortet mir schlüssig warum dieser eine Prozess nicht glatt 
wie Seide laufen soll und welcher Mechanismus eurer Meinung nach das 
Ding zum stottern bringen würde.

Ich bin - das muss ich ernsthaft gestehen - sehr, SEHR gespannt.

(Und ja, der alte RasPi 1 hatte nur einen Kern, aber von dem reden wir 
hier wohl eher nicht.)

von Stefan F. (Gast)


Lesenswert?

Python Programme rufen alle Nase lang Linux Funktionen auf. An der 
Stelle endet die Zuordnung zu einem exklusiven CPU Kern.

Das haben schon andere erfolglos versucht. Google einfach mal danach.

von Norbert (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Python Programme rufen alle Nase lang Linux Funktionen auf. An der
> Stelle endet die Zuordnung zu einem exklusiven CPU Kern.
>
> Das haben schon andere erfolglos versucht. Google einfach mal danach.

OK, da denken wir besser noch mal drüber nach, oder?

Wenn man zB. eine Funktion aus der libc aufruft, in welchem Kontext 
läuft das dann?

von Klaus S. (kseege)


Lesenswert?

Ernst H. schrieb:
> Kann ich das Modul "time" mit Python benutzen, oder ist das zu ungenau?

Wenn Du statt Raspberry Pi den Raspberry Pico nutzen würdest, wäre die 
Sachlage eindeutig. So hängt es von vielen Randbedingungen ab, die wir 
nicht kennen, da Du sie nicht erwähnst.

Es ist theoretisch machbar, gerade so eben. Deswegen hängt es 
hauptsächlich von Deinen Qualitätsansprüchen ab. Und "ungenau" ist nun 
einmal kein technisches Kriterium.

Fakt ist: Typischerweise macht man IR-Übertragung mit einer 
amplitudenmodulieren Trägerfrequenz. Die sollte typischerweise 
langzeitstabil sein, damit man bein Empfang eng filtern und Störungen 
eliminieren kann.

Wenn das nicht gebraucht wird, geht es problemlos. Dann baut man im 
Protokoll einen schön langen Korekturcode ein und wiederholt das Ganze 
permanent.

Empfehlen würde ich sowas niemandem, aber die Frage war, ob es wohl 
ginge. Wenn es störfest und schnell sein soll, gibt man sowas an einen 
uC ab, wie ja schon vielfach vorgeschlagen wurde. Aber um mal 
auszubrobieren, ob es wohl geht? Na klar! Sollte nicht länger als eine 
Stunde dauern. Thonny wurde extra für sowas erfunden.

Gruß Klaus (der soundsovielte)

P.S. Wenn ich aber ohne den 38-tonner nicht zu meinen Brötchen käme.
würde ich den wegen meiner Freßlust schon nehmen ;-)))

von Kaj (Gast)


Lesenswert?


von Kreativ (Gast)


Lesenswert?

Norbert schrieb:
> Also noch einmal. Gaaaaanz langsam.
>
> Wir haben 4 Kerne (in Worten VIER Kerne) die allesamt in der
> Größenordnung 10^9Hz laufen.
> Einer dieser Kerne (sagen wir Nummer 4) ist dediziert dem Python
> Programm zugeordnet und läuft von mir aus auch noch mit erhöhter
> Priorität.

Man kann auch ein RT-Linux drunter knallen, dann geht so einiges ohne 
einen kompletten Kern zu verbraten, allerdings ändert das nicht am 
nichtdeterministischen Verhalten von Python.

Aber der TO will ja mit einem Hammer eine Schraube rein drehen anstatt 
das richtige Werkzeug zu nutzen.

von Robert (Gast)


Lesenswert?

In seinen vorigen Threads wurden dem TO schon diverse einfache Hardware 
Lösungen empfohlen. Aber er mag es ja gerne kompliziert.

Beitrag "Fragen zur IR-Informationsübertragung"
Beitrag "Raspberry Pi (4B) mit NE555 38kHz modulieren"

von Norbert (Gast)


Lesenswert?

Kreativ schrieb:
> Man kann auch ein RT-Linux drunter knallen, dann geht so einiges ohne
> einen kompletten Kern zu verbraten,

Aha. Wir nähern uns langsam. Jetzt geht's also schon…
Nebenbei, wenn man einen Kern übrig hat (was in den meisten Fällen 
zutrifft), dann ergibt sich keinerlei Unterschied für das System.

> allerdings ändert das nicht am
> nichtdeterministischen Verhalten von Python.

Also den gc kann man selbst auslösen wenn man es gerade mag.
Außerdem kann man ›thresholds‹ selbst festlegen, was aber in den meisten 
Fällen noch nicht einmal ansatzweise notwendig ist.
Und wenn man irgendwo durch null teilt oder anderen Blödsinn macht, 
gibt's 'ne Exception.

Jetzt wäre noch zu klären was sonst an Python ›nichtdeterministischer‹ 
als an anderen Sprachen ist. Da wäre ein wenig fundierte Information 
hilfreich!

von Stefan F. (Gast)


Lesenswert?

Norbert, probiere es doch einfach mal aus, dann weißt du warum wir 
abraten. Wie gesagt, andere haben das Experiment bereits hinter sich.

Ja es geht, aber eher Schlecht als Recht und mit großem Aufwand.

von Norbert (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Norbert, probiere es doch einfach mal aus, dann weißt du warum wir
> abraten. Wie gesagt, andere haben das Experiment bereits hinter sich.
>
> Ja es geht, aber eher Schlecht als Recht und mit großem Aufwand.

Stefan, ich habe das schon des Öfteren gemacht. Und ich kann sagen das, 
auf einem Linux System, auf die von mir oben geschilderte Art keine 
Probleme auffällig wurden.
Aber - ich nehme deinen Vorschlag gerne auf - bei nächster Gelegenheit 
wenn etwas Zeit ist werde ich mal die schlechtest mögliche Testversion 
mit einem Raspi 1B aufbauen. Ein Kern, 700MHz. Dann ein paar 
hunderttausend Pulse mit 1/2/5/10/20ms erzeugen und mit einem Pi pico 
(auf 10ns genau) messen.

von Stefan F. (Gast)


Lesenswert?

Norbert schrieb:
> ich habe das schon des Öfteren gemacht. Und ich kann sagen das,
> auf einem Linux System, auf die von mir oben geschilderte Art keine
> Probleme auffällig wurden.

Dann sei doch so nett und helfe dem Ernst dabei, es ebenso zu machen. 
Erkläre ihm, wie du das gemacht hast.

von Schlaumaier (Gast)


Lesenswert?

Für die Standard-Protokolle gibt es doch schon "halb"-fertige Lösungen.

Ich würde versuchen so eine zu nehmen und auf dein Protokoll anpassen, 
falls es eh nicht schon drin ist.

von Schlaumaier (Gast)


Lesenswert?


von Stefan F. (Gast)


Lesenswert?

Schlaumaier schrieb:
> Für die Standard-Protokolle gibt es doch schon "halb"-fertige Lösungen.

Hatten wir schon

Stefan ⛄ F. schrieb:
> Ich würde mich nach fix und fertigen IR Adaptern umschauen, die vom
> Linux Betriebssystem unterstützt werden (Stichwort LIRC). Lies dazu
> 
https://cool-web.de/raspberry/raspberry-pi-mit-infrarot-fernbedienung-fernsteuern.htm

Aber der TO (Ernst) ist wie in seinen beiden vorherigen Threads offenbar 
nicht an Lösungen interessiert. Sonst würde er die vorgeschlagenen 
Lösungen wenigstens mal ausprobieren.

von Klaus S. (kseege)


Lesenswert?

Stefan ⛄ F. schrieb:
> Aber der TO (Ernst) ist wie in seinen beiden vorherigen Threads offenbar
> nicht an Lösungen interessiert. Sonst würde er die vorgeschlagenen
> Lösungen wenigstens mal ausprobieren.

Er stellt gern Fragen und freut sich über unsere Antworten :-)
Und weil wir am Helfersyndrom leiden, geben wir gerne Antworten :-)))
Daran finde ich nichts Schlechtes, diesmal ganz "ernst". Und da hier ein 
offenenes Forum ist und er sich an die Regeln hält, verhält er sich 
korrekt. Daß wir es uns anders wünschten (inclusive mir!), ist unser 
Problem, nicht seines.

Gruß Klaus /der soundsovielte)

von c-hater (Gast)


Lesenswert?

Ernst H. schrieb:
> Hallo liebes Forum,
>
> wie ich bereits in einem meiner früheren Beiträge erwähnte plane ich
> mittels von Python und einem Raspberry Pi über IR Signale zu versenden.
> Dazu muss ich ein passendes Protokoll schreiben.

Das beginnt dann damit, erstmal die Eckwerte festzulegen, was es leisten 
können soll.

Sprich: Welcher Durchsatz über welche Entfernung soll erreicht werden 
und welche Datensicherheit ist erforderlich.

Bevor man diese drei Kennwerte nicht festgelegt hat, kann man kein 
Protokoll entwerfen und dementsprechend braucht man sich auch noch 
keinen Kopf darüber zu machen, wie man das Protokoll dann mit den 
gegebenen Möglichkeiten umsetzen könnte.

von J. S. (jojos)


Lesenswert?

Der dritte Thread zu der Frage, Unmengen an Vorschlägen bekommen und 
immer noch nichts probiert. Und dann ein eigenes Protokoll schreiben und 
Probleme mit GC und Jitter umschiffen?

von Klaus S. (kseege)


Lesenswert?

c-hater schrieb:
> Bevor man diese drei Kennwerte nicht festgelegt hat, kann man kein
> Protokoll entwerfen

Ich kann ein Protokoll entwerfen, ohne überhaupt einen einzigen Kennwert 
zu haben. Wo ist das Problem?

Gruß Klaus (der soundsovielte)

von Stefan F. (Gast)


Lesenswert?

Klaus S. schrieb:
> Ich kann ein Protokoll entwerfen, ohne überhaupt einen einzigen Kennwert
> zu haben. Wo ist das Problem?

Dann mach mal, zeige dem Ernst für seine Anwendung, wie es geht. 
Ansonsten ist dein Beitrag nur ein weiterer völlig nutzloser.

von Norbert (Gast)


Angehängte Dateien:

Lesenswert?

Stefan ⛄ F. schrieb:
> Norbert schrieb:
>> ich habe das schon des Öfteren gemacht. Und ich kann sagen das,
>> auf einem Linux System, auf die von mir oben geschilderte Art keine
>> Probleme auffällig wurden.
>
> Dann sei doch so nett und helfe dem Ernst dabei, es ebenso zu machen.
> Erkläre ihm, wie du das gemacht hast.

Ja aber gerne Stefan, sehr gerne. Und es ist ein einfaches Python 
Programm das auch noch jeder auf seinem Rechner nachvollziehen kann.
Da ich aber gerade keinen Raspi hier habe, für einen normalen Linux PC.
Die komplette Klasse, nur die zwei GPIO Befehle laufen auf einem 
normalen PC hier nicht.

Trotzdem, gerade das Timing sollte dennoch sehr schön ersichtlich sein.

Aufruf mit:
1
nice -n -10 ./programm.py | tee results.log

Ausreißer sind in der Ausgabe mit einem ›X‹ vermerkt. So kann man's 
prima ›greppen‹
Hab hier mal einen Zehntausender-Lauf auf dem ArbeitsPC gestartet.
10000  64bit  1ms
Nicht überraschend läuft das Ding fast 11 Minuten.
Hier sind die "Ausreißer" geloggt:
1
grep X results.log
1
/tmp/norbert$ grep X results.log 
2
Delta (64 × 1ms pulses): min:   0.1µs   avg:   6.1µs   max: 375.6µs  X
3
Delta (64 × 1ms pulses): min:   0.1µs   avg:   1.1µs   max:  54.9µs  X
4
Delta (64 × 1ms pulses): min:   0.2µs   avg:   0.7µs   max:  11.7µs  X
5
Delta (64 × 1ms pulses): min:   0.1µs   avg:   0.4µs   max:  10.2µs  X
6
Delta (64 × 1ms pulses): min:   0.1µs   avg:   0.6µs   max:  23.4µs  X
7
Delta (64 × 1ms pulses): min:   0.1µs   avg:   0.4µs   max:  11.0µs  X
8
Delta (64 × 1ms pulses): min:   0.1µs   avg:   0.6µs   max:  11.4µs  X
9
Delta (64 × 1ms pulses): min:   0.1µs   avg:   0.3µs   max:  11.3µs  X

Bei 10000 Stück 64bit pulsetrains habe ich ohne Kapriolen zu 
veranstalten:
1 echten Ausreißer
1 der 5% länger als gefordert ist
1 der 2% länger als gefordert ist
5 die 1-2% länger sind

Die ~9990 anderen sind unter 10µs Abweichung.
Danke für's zuhören.

von Stefan F. (Gast)


Lesenswert?

Norbert schrieb:
> Danke für's zuhören.

Cool, ich danke dir auch.

von Klaus S. (kseege)


Lesenswert?

Stefan ⛄ F. schrieb:
> Dann mach mal, zeige dem Ernst für seine Anwendung, wie es geht.
> Ansonsten ist dein Beitrag nur ein weiterer völlig nutzloser.

Ja, da gebe ich Dir völlig recht. Der ganze Thread ist vermutlich 
nutzlos. Ich hab Ernst bereits gesagt, was ich ich für sein Programm 
empfehlen würde (übrigens dasselbe wie Du).

Mich animieren nur völlig überzogene Behauptungen, die einfach 
grottenfalsch sind. Da es hier ein offenes Forum ist, versuche ich nur 
möglichst freundlich auf so etwas hinzuweisen. Aber Du scheinst wirklich 
recht zu haben, in diesem Forum ist das nutzlos, hier regiert die starke 
Meinung, die mit der Wirklichkeit nicht unbedingt übereinstimmen muß. 
:-) (Achtung:Sarkasmus!)
Ich werde es auch weiter aushalten, daß das so ist und werde nur ab und 
zu mal dazwischengrätschen. Versprochen! Peace!

Gruß Klaus (der soundsovielte)

von Jester (Gast)


Lesenswert?

Ernst H. schrieb:
> Wie lang soll ich einen Bit machen? Ich hätte die Bittlänge auf 0,5sec
> gesetzt.
> Würde das Funktionieren?
> Meine Nachrichten sind maximal 9 Bits lang.

Ja, das würde funktionieren. Wenn dir eine Datenrate von 2bit/sec 
reicht, würde ich das genau so implementieren.

von Frank K. (fchk)


Lesenswert?

Seit 30 Jahren gibts dafür standardisierte Verfahren. Nennt sich IRDA 
und funktionierte damals problemlos.

Siehe:
https://de.wikipedia.org/wiki/Infrared_Data_Association

Für den Pi gibts auch schon fertige Lösungen. Da muss der Laie nichts 
mehr zusammenpfuschen:

https://irdroid.eu/product/irda-pihat/

Wer mag, darf sich das ganze selber abpinnen:

https://github.com/Irdroid/irDA-piHAT

Man beachte: "No drivers required."

fchk

von Stefan F. (Gast)


Lesenswert?

Frank K. schrieb:
> Seit 30 Jahren gibts dafür standardisierte Verfahren. Nennt sich IRDA
> und funktionierte damals problemlos.

Auch darauf wies ich bereits in einer der ersten Antworten hin.
Beitrag "Re: IR Protokoll mit Python selbst schreiben"

Ich sehe nur keinerlei Reaktion vom TO, auf die man aufbauen könnte.

Vielleicht sammelt er seit 6 Monaten Vorschläge, die er demnächst als 
Buch verkauft "101 Möglichkeiten der IR Kommunikation". Reich wir er 
damit sicher  nicht.

von Robert (Gast)


Lesenswert?

Frank K. schrieb:
> Seit 30 Jahren gibts dafür standardisierte Verfahren. Nennt sich IRDA
> und funktionierte damals problemlos.
>
> Siehe:
> https://de.wikipedia.org/wiki/Infrared_Data_Association
>
> Für den Pi gibts auch schon fertige Lösungen. Da muss der Laie nichts
> mehr zusammenpfuschen:

IRDA wurde in den vorigen Threads auch schon mehrfach erwähnt, aber der 
TO möchte mindestens 2m überwinden. Ich kenne IRDA noch von früher 
(HP200LX), das funktionierte recht gut über ein paar Zentimeter direkte 
Sichtverbindung hinweg, aber 2m sehe ich schon als problematisch an.

Der TO möchte Daten von einem Raspberry Pi zu 1..n Raspberry Picos 
senden. Beide haben als standardisierte Schnittstelle ein Serial Comm 
Port. Warum der TO nicht einfach auf beiden Seiten eins der vielen 
angebotenen Funkmodule mit transparenter serielle Übertragung nimmt, 
sondern sich so auf die IR Übertragung fokusiert hat, das verstehe ich 
nicht. Natürlich kann es dafür einen guten Grund geben, aber ich habe in 
keinem der Threads einen Hinweis darauf gefunden.

von Ernst H. (Firma: Laboratorium_S1) (ernst_haft)


Lesenswert?

Frank K. schrieb:
> Seit 30 Jahren gibts dafür standardisierte Verfahren. Nennt sich IRDA
> und funktionierte damals problemlos.
>
> Siehe:
> https://de.wikipedia.org/wiki/Infrared_Data_Association
>
> Für den Pi gibts auch schon fertige Lösungen. Da muss der Laie nichts
> mehr zusammenpfuschen:
>
> https://irdroid.eu/product/irda-pihat/

Dieser Link sieht sehr vielversprechend aus
Stefan ⛄ F. schrieb:
> Ich sehe nur keinerlei Reaktion vom TO, auf die man aufbauen könnte.
>
> Vielleicht sammelt er seit 6 Monaten Vorschläge, die er demnächst als
> Buch verkauft "101 Möglichkeiten der IR Kommunikation". Reich wir er
> damit sicher  nicht.

Vielen Dank für die Antworten.
Ich werde jetzt mal einige der vorgeschlagenen Möglichkeiten 
ausprobieren.
Ihr hört von mir ;-)
Beste Grüße,
euer Ernst

von Stefan F. (Gast)


Lesenswert?

Robert schrieb:
> Der TO möchte

Was er möchte hat sich im Laufe der Zeit wohl mehrfach geändert. Ich 
habe das Gefühl, dass er selbst nicht mehr so richtig weiß, was er 
möchte, denn auf entsprechende Rückfragen und Vermutungen ist er nicht 
eingegangen.

Ernst H. schrieb:
>> 101 Möglichkeiten der IR Kommunikation
> Ich werde jetzt mal einige der vorgeschlagenen Möglichkeiten
> ausprobieren.

Gefällt dir der Buchtitel oder wie wirst du es nennen? :-)

von c-hater (Gast)


Lesenswert?

Robert schrieb:

> Der TO möchte Daten von einem Raspberry Pi zu 1..n Raspberry Picos
> senden. Beide haben als standardisierte Schnittstelle ein Serial Comm
> Port.

Das ist schonmal eine gute Beobachtung.

> Warum der TO nicht einfach auf beiden Seiten eins der vielen
> angebotenen Funkmodule

Da ist eben die unbeantwortete Frage, was genau erreicht werden soll, 
also die Frage nach den Kennwerten.

Fakt ist: um z.B. eine Fernbedienungsfunktion (über 
Wohnzimmer-Entfernungen mit einer überschaubaren Zahl von "Tasten") zu 
erreichen, braucht man ganz sicher keine Funkmodule. Auch kein IRDA.

Das geht ALLEIN über die UARTs, natürlich mit ein bissel zusätzlicher 
Elektronik, aber in einem sehr bescheidenem Umfang. Auf Senderseite ist 
das halt eine LED und ein Widerstand, auf Empfängerseite ein 
Fototransistor, drei Widerstände und ein Kondensator.

Ich habe jahrzehntelang meinen MP3-Player so gesteuert. Sender war ein 
bissel CMOS-Standardkram, Empfänger die UART eines gewöhnlichen 
PC-Boards.

Sowas geht, wenn man sich halt ein geeignetes Protokoll überlegt.

von Jester (Gast)


Lesenswert?

Ernst H. schrieb:
> Vielen Dank für die Antworten.
> Ich werde jetzt mal einige der vorgeschlagenen Möglichkeiten
> ausprobieren.
> Ihr hört von mir ;-)
> Beste Grüße,
> euer Ernst

Auch Dir alles Gute, Ernst!

Bis dann also im Thread #4: "Mit Python von einem Raspberry Pi 
IR-Signale senden - ganz ohne IR-Diode"

von Norbert (Gast)


Lesenswert?

Jester schrieb:
> Bis dann also im Thread #4: "Mit Python von einem Raspberry Pi
> IR-Signale senden - ganz ohne IR-Diode"

Geht. Über Vollast und Grundlast die Wärmeemission modulieren.

von Robert (Gast)


Lesenswert?

c-hater schrieb:
> Robert schrieb:
>
>> Der TO möchte Daten von einem Raspberry Pi zu 1..n Raspberry Picos
>> senden. Beide haben als standardisierte Schnittstelle ein Serial Comm
>> Port.
>
> Das ist schonmal eine gute Beobachtung.
>
>> Warum der TO nicht einfach auf beiden Seiten eins der vielen
>> angebotenen Funkmodule
>
> Da ist eben die unbeantwortete Frage, was genau erreicht werden soll,
> also die Frage nach den Kennwerten.

Ja, wenn Ernst den Kontext besser erklären würde, könnte man ihm auch 
besser helfen. Manchmal habe ich den Eindruck er weiß selbst nicht so 
genau wo die Reise hingehen soll.

> Fakt ist: um z.B. eine Fernbedienungsfunktion (über
> Wohnzimmer-Entfernungen mit einer überschaubaren Zahl von "Tasten") zu
> erreichen, braucht man ganz sicher keine Funkmodule. Auch kein IRDA.
>
> Das geht ALLEIN über die UARTs, natürlich mit ein bissel zusätzlicher
> Elektronik, aber in einem sehr bescheidenem Umfang. Auf Senderseite ist
> das halt eine LED und ein Widerstand, auf Empfängerseite ein
> Fototransistor, drei Widerstände und ein Kondensator.

Diverse Lösungen wurden ja schon in den vorigen Threads genannt. 
Allerdings glaube ich in der Zwischenzeit, daß ihn sowohl die Anzahl als 
auch die technischen Details der Vorschläge überfordert haben.

Deshalb empfehle ich ihm ein fertiges Modul zu nehmen. Ein Funkmodul, 
welches ich kenne, ist z.B. das JDY-41. Das kann transparente serielle 
Kommunikation, als auch 1 zu N Kommunikation, und zusätzlich können 8 
LEDs angeschlossen und per Kommando an-/abgeschaltet werden. Eventuell 
könnte der Raspberry Pico auf der Empfangsseite sogar entfallen. Aber 
dazu müsste Ernst schon etwas mehr Details bekannt geben.

von Ernst H. (Firma: Laboratorium_S1) (ernst_haft)


Angehängte Dateien:

Lesenswert?

c-hater schrieb:
> Fakt ist: um z.B. eine Fernbedienungsfunktion (über
> Wohnzimmer-Entfernungen mit einer überschaubaren Zahl von "Tasten") zu
> erreichen, braucht man ganz sicher keine Funkmodule. Auch kein IRDA.
>
> Das geht ALLEIN über die UARTs, natürlich mit ein bissel zusätzlicher
> Elektronik, aber in einem sehr bescheidenem Umfang. Auf Senderseite ist
> das halt eine LED und ein Widerstand, auf Empfängerseite ein
> Fototransistor, drei Widerstände und ein Kondensator.

Auf Senderseite habe ich 2 Transistoren, IR-LED und Widerstand, wie im 
Bild zu sehen ist.
Ein Bit wird also dann gesendet, wenn der GPIO-Pin als Ausgang schaltet.
Python scheint ungeeignet dafür zu sein (siehe 38-Tonner zum 
Brötchenholen).
Deshalb dachte ich, ich könnte C zum Programmieren der Empfängerseite 
nehmen, wenn ich die Beiträge hier richtig verstanden habe.
Auf der Empfängerseite habe ich einen TSOP4838 angeschlossen, sodass der 
OUT-Pin des TSOPs direkt an einen GPIO-Pin des Picos angeschlossen ist.

Die Nachrichten, die über IR gesendet werden sollen, würde ich nach 
folgendem Schema aufbauen:
--------------- |  Startbit | ID des Picos | Befehl | Stoppbit |
Anzahl der Bits |      1            4           3         1    | Gesamt: 
9

Robert schrieb:
> Deshalb empfehle ich ihm ein fertiges Modul zu nehmen. Ein Funkmodul,
> welches ich kenne, ist z.B. das JDY-41. Das kann transparente serielle
> Kommunikation, als auch 1 zu N Kommunikation, und zusätzlich können 8
> LEDs angeschlossen und per Kommando an-/abgeschaltet werden.

Bisher hielt ich Funkmodule für zu platzintensiv, wenn der Pico 
wegfallen könnte wäre das natürlich toll. Doch ich brauche die beim 
Pico vorhandene Zahl an GPIO-Pins.

Robert schrieb:
> Diverse Lösungen wurden ja schon in den vorigen Threads genannt.
> Allerdings glaube ich in der Zwischenzeit, daß ihn sowohl die Anzahl als
> auch die technischen Details der Vorschläge überfordert haben.

Nett, dass du dich sorgst. Noch allerdings verstehe ich das Meiste.

von c-hater (Gast)


Lesenswert?

Ernst H. schrieb:

> Auf Senderseite habe ich 2 Transistoren, IR-LED und Widerstand, wie im
> Bild zu sehen ist.

Vor allem sehe ich da: "PWM". Du brauchst keine PWM für meinen 
Vorschlag. Da wird nix moduliert, das passiert rein im Basisband. 
Sprich: Der UART-Ausgang ist direkt das Sendesignal. Ggf. bloß noch über 
einen entsprechenden Treiber mit ein bissel mehr LED-Power versehen, 
wenn der UART-Ausgang selber nicht genug Strom liefern kann.

Und klar: da dann die UART das gesamte nötige Timing macht, kann 
natürlich auch ein Python-Programm der Sender sein. Es schickt halt 
einfach einen Datenblock an das UART-Device. Das kümmert sich um den 
Rest. Nämlich diesen Datenblock "lückenlos" auszugeben.

von Ernst H. (Firma: Laboratorium_S1) (ernst_haft)


Lesenswert?

c-hater schrieb:
> Vor allem sehe ich da: "PWM". Du brauchst keine PWM für meinen
> Vorschlag.

Anders wird der TSOP das Signal doch nicht erkennen, oder?

von Robert (Gast)


Lesenswert?

Ernst H. schrieb:
> Bisher hielt ich Funkmodule für zu platzintensiv, wenn der Pico
> wegfallen könnte wäre das natürlich toll. Doch ich brauche die beim
> Pico vorhandene Zahl an GPIO-Pins.

JDY-41: 22x15x2mm

> Nett, dass du dich sorgst. Noch allerdings verstehe ich das Meiste.

Aha, und deshalb hast du den Basiswiderstand beim unteren Transistor in 
deiner Zeichnung weggelassen.

von Ernst H. (Firma: Laboratorium_S1) (ernst_haft)


Lesenswert?

Robert schrieb:
> Aha, und deshalb hast du den Basiswiderstand beim unteren Transistor in
> deiner Zeichnung weggelassen.

Eine kleine Aufmerksamkeitsübung ;-)
In der Schaltung an sich habe ich diesen natürlich verwendet.

von Jester (Gast)


Lesenswert?

Ernst H. schrieb:
> Robert schrieb:
>> Aha, und deshalb hast du den Basiswiderstand beim unteren Transistor in
>> deiner Zeichnung weggelassen.
>
> Eine kleine Aufmerksamkeitsübung ;-)
> In der Schaltung an sich habe ich diesen natürlich verwendet.

Und wo war jetzt gleich noch mal das Problem?

So, wie sich das ließt, tut nun ja alles - oder?

von c-hater (Gast)


Lesenswert?

Ernst H. schrieb:

> c-hater schrieb:
>> Vor allem sehe ich da: "PWM". Du brauchst keine PWM für meinen
>> Vorschlag.
>
> Anders wird der TSOP das Signal doch nicht erkennen, oder?

Nix TSOP. Auch der Empfang passiert rein im Basisband. Fototransister 
mit kleiner Anpassschaltung -> UART-RX.

Der Rest besteht in einem entsprechenden Design des Protokolls und 
entsprechender Software.

Aber, wie eingangs gesagt: nur für Entfernungen im Wohnzimmerbereich und 
eine sehr überschaubare Zahl zu unterscheidender Codes geeignet. So was 
um die 8, vielleicht auch noch 16. Sonst wird's wahlweise zu langsam 
oder zu störungsanfällig.

Im Original hatte ich 7 Nutz-Codes (Cursor-Kreuz + OK + zwei Tasten für 
"Spezialfunktionen") und einen Repeat-Code. Über die "Leitung" gehen 
dazu zwei Bytes pro Code (8N1 mit 300Baud).

Den Originalcode des Empfängers (war für ein P90-Board unter DOS) habe 
ich leider nicht mehr. Aber ich habe noch den Code für die V2. Der war 
dann für einen P200 unter Win98. Das Protokoll und die Codes waren aber 
unverändert zur Urversion, denn tatsächlich war auch die gesamte 
Hardware unverändert, mit Ausnahme der schnelleren CPU und einer 
Speicher-Aufrüstung.

Von dem Sender weiß ich nichtmal mehr, wie der genau aufgebaut war. Es 
war jedenfalls noch kein µC, sondern irgendwas mit (sehr wenigen) 
4000er-CMOS-Steinen. Wenn ich mich richtig erinnere, waren das zwei. Ein 
4x-Gatter (4001, 4011 oder 4030) und ein Zähler (möchte wetten: 4017). 
Die restliche Logik war wired-OR oder irgendwas in der Art. Heute würde 
ich natürlich einen ATtiny13 für sowas benutzen, aber damals(tm) hatte 
ich mit µC noch nicht so sehr viel am Hut...

Ich müsste mich erstmal wieder sehr tief da reindenken, um aus den 
verwendeten Codes die Schaltung des Senders zu rekonstruieren. Ganz 
sicher waren die Codes jedenfalls so gewählt, dass sie sowohl bezüglich 
der Übertragungsstrecke möglichst "gut" als auch möglichst einfach per 
"Klingel-Elektronik" zu generieren waren.

Ist aber im Kontext diese Threads eh' irrelevant, der TO möchte das ja 
von einem Pi versenden. Also: befülle zwei Bytes RAM und lasse das 
UART-Device diesen Puffer versenden. Fertisch.

von Ernst H. (Firma: Laboratorium_S1) (ernst_haft)


Lesenswert?

c-hater schrieb:
> Aber, wie eingangs gesagt: nur für Entfernungen im Wohnzimmerbereich und
> eine sehr überschaubare Zahl zu unterscheidender Codes geeignet. So was
> um die 8, vielleicht auch noch 16. Sonst wird's wahlweise zu langsam
> oder zu störungsanfällig.

Solange das Meter sind, reicht diese Entfernung definitiv für mich. Ich 
plane mit maximalen Distanzen von 2m.

von c-hater (Gast)


Lesenswert?

Ernst H. schrieb:

> Solange das Meter sind, reicht diese Entfernung definitiv für mich.

Mein Wohnzimmer hatte damals ca. 25m². Von der Couch bis zum MP3-Player 
waren es ca. 3,5m. Egal, wie rum ich auf der Couch lag... ;o)

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.