Hallo
Nach einem Hinweis hier in Forum habe ich mit meinem kleinen
LogicAnalyzer die Befehle der Fernbedienung an einen RGB Controller
ausgelesen.
Das war ja noch recht einfach und ich glaube zu verstehen was ich getan
habe.
Jetzt habe ich mit den Befehl für die Farbe Rot mal als Datei
exportiert:
1
Time[s],Value,ParityError,FramingError
2
-0.009035416666667,'0',,Error
3
0.004481000000000,'0',,Error
4
0.005641041666667,'0',,Error
5
0.006776000000000,'0',,Error
6
0.007860125000000,'0',,Error
7
0.009019208333333,'0',,Error
8
0.010154583333333,'0',,Error
9
0.011237083333333,'0',,Error
10
0.012397333333333,'0',,Error
11
0.013531958333333,'0',,Error
12
0.015774000000000,'0',,Error
13
0.017992916666667,'0',,Error
14
0.020284833333333,'0',,Error
15
0.022527458333333,'0',,Error
16
0.024743791666667,'0',,Error
17
0.027038625000000,'0',,Error
18
0.029254833333333,'0',,Error
19
0.031497291666667,'0',,Error
20
0.032658083333333,'0',,Error
21
0.033792625000000,'0',,Error
22
0.034875291666667,'0',,Error
23
0.037170041666667,'0',,Error
24
0.039412041666667,'0',,Error
25
0.040547041666667,'0',,Error
26
0.042790083333333,'0',,Error
27
0.043923083333333,'0',,Error
28
0.046165250000000,'0',,Error
29
0.048383875000000,'0',,Error
30
0.050651208333333,'0',,Error
31
0.051784833333333,'0',,Error
32
0.052919500000000,'0',,Error
33
0.055135208333333,'0',,Error
34
0.056296958333333,'0',,Error
35
0.058514541666667,'0',,Error
36
0.099018625000000,'0',,Error
37
0.110292541666667,'0',,Error
38
0.667000958333333,'255',,
Meine große Frage ist: Wie bekomme ich daraus einen Code für meinen
Arduino?
Danke Dirk
P.S.
Die Software ist Salea Logic und ich habe keine Einstellung verändert
Dirk schrieb:> Meine große Frage ist: Wie bekomme ich daraus einen Code für meinen> Arduino?
Daraus gar nicht. Was du da exportiert hast, ist im wesentlichen eine
Liste mit Abtastzeitpunkten zu denen das Signal offensichtlich 0 war,
bis auf die letzte Zeile, die aber vom Timestamp völlig aus der Reihe
liegt.
> P.S.> Die Software ist Salea Logic und ich habe keine Einstellung verändert
Das hättest du vielleicht vor dem Export tun sollen.
>Das war ja noch recht einfach und ich glaube zu verstehen was ich getan>habe.
Es ist ja wirklich schön, dass Du weist, was Du tust!
Vielleicht lässt Du uns ja an Deinem Wissen teilhaben?
Ich jedenfalls habe, wie der eine oder andere auch, keinen Dingsbums.
Ich weiß auch nicht, wie Du an die Daten gekommen bist.
Vielleicht beschreibst Du mal den Versuchs- bzw. Messaufbau.
Muss aber nicht sein.
Klar kann man dumm einfach nur die Timings samplen und wieder
rausnudeln, so wie es diverse lernfähige Fernbedienungen auch machen.
Solange es sich aber nur im einn Typ handelt, ist es deutlich
sinnvoller, sich aus den Timings das das zugrunde liegende
Modulationsschema rauszuziehen und wie die Struktur der Bits in dem
Codeword ist.
Dirk schrieb:> Das war ja noch recht einfach und ich glaube zu verstehen was ich getan> habe.
Ich verstehe es nicht und ich habe schon dutzende IR-FBs
reverse-engineered und Empfänger/Sender in SW dafür geschrieben... Der
Dump macht keinen Sinn, weil es keine Info über die Längen der 1-Pulse
gibt. Ist auch recht unwahrscheinlich, dass ein Codeword fast 60ms
dauert.
Nabend
Also mein Messaufbau war dann doch recht einfach:
Das Gehäuse von dem Controller geöffnet und drei Leitungen zu der IR
Diode gefunden.
(Damit ist es scheinbar keine Diode mehr?)
Die Mittlere Leitung liegt auf GND.
Also die GND Klemme des LA auf die Mitte gesetzt und erst die eine,
dann die andere Leitung auf einen Kananl des LA gelegt.
Bei einem Kanal kam nix an, bei dem anderen das, was ich exportiert
habe.
Als ich geschrieben habe, dass och verstanden habe was ich da mache,
meinte ich, dass ich mit dem LA die Befehle, die die IR Diode empfängt
und an den Chip im Controller weitergibt sichtbar machen kann.
Es scheint aber nicht so einfach zu sein, wie ich es mir gedacht habe,
daher frage ich nach.
Ich habe mal eine Screenshon angehängt,
vielleicht ist der aussagekräftiger als die Textdatei.
Wenn mir jemand mit den Einstellungen helfen kann, wenn notwendig, wäre
ich sehr dankbar.
In meiner blauäugigkeit würde ich jetzt einfach mal versuchen das so
nachzubauen:
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(9);
digitalWrite(ledPin, HIGH);
delay(4.5);
digitalWrite(ledPin, LOW);
delay(0.5);
und so weiter.
Danke Dirk
Dirk schrieb:> Das Gehäuse von dem Controller geöffnet und drei Leitungen zu der IR> Diode gefunden.> (Damit ist es scheinbar keine Diode mehr?)
Bingo, vmtl. ein integrierter IR-Receiver, der einen gefilterten,
demodulierten Manchester-Code an den Controller gibt.
Der genaue Typ (Aufdruck) des Receivers verrät die Trägerfrequenz, nach
Abzählen der Bits in der Sendung etc. kommt man evt. auf ein bekanntes
Protokoll.
Dirk schrieb:> Bei einem Kanal kam nix an, bei dem anderen das, was ich exportiert> habe.
Das sieht danach aus:
http://www.instructables.com/id/Reverse-Engineering-RGB-LED-Bulb-with-IR-remote/> In meiner blauäugigkeit würde ich jetzt einfach mal versuchen das so> nachzubauen:
Das wird nichts, bei einer einfachen IR-LED musst Du die 38kHz selbst
erzeugen. High-Pegel in Deinem Screenshot entspricht "LED dunkel", die
Low-Pegel sind die 38kHz-Bursts.
Hmmm schrieb:> Das wird nichts, bei einer einfachen IR-LED musst Du die 38kHz selbst> erzeugen. High-Pegel in Deinem Screenshot entspricht "LED dunkel", die> Low-Pegel sind die 38kHz-Bursts.
Die 38kHz muss man nur erzeugen, wenn man mit dem µC-Signal eine
IR-Diode zur Fernsteuerung betreiben möchte. Falls man den IR-Empfänger
vom Controler entfernt und statt dessen dort ein mit dem µC selbst
generiertes Signal einspeist, muss man genau das Signal nachbauen, was
man jetzt mit dem LA misst.
Dirk schrieb:> Ich habe mal eine Screenshon angehängt,> vielleicht ist der aussagekräftiger als die Textdatei.
Jedenfalls allemal besser als eine Textdatei ohne nützlichen Inhalt ;-)
Der eine oder andere würde wohl auch etwas mit der Capture-Datei
anfangen können. Dann kann man gleich rein gucken und muss sie nicht
erst wieder mühsam visualisieren. (Vorher Trigger festlegen und
Aufzeichnungslänge passend setzen)
Für den Export probier doch mal sinnvolle Einstellungen, i.e.
- Zeitmarken für den relevanten Zeitbereich setzen (Taste 1, 2)
Beim Export
- Kanalauswahl auf den Kanal mit dem Signal beschränken
- Samples zwischen den Zeitmarken
- Ausgabe der Flanken (Output one Row per Change)
Ist das dieses Ding hier?
https://www.led-universum.de/led-universum-24-tasten-fernbedienung-fuer-rgb-led-streifen.html
Die Controller benutzen das gute alte NEC Protokoll mit Geräte Adresse
0xEF00.
Die Tasten sind von links nach rechts und von oben nach unten
durchnummeriert. Oben links fängt es mit Code 0x0000 an, die ON Taste
hat z.B. Code 0x0003. Reines Rot mit 0x0004 und reines Blau mit 0x0006.
Tipp: Lade dir auf deinen Arduino IRMP mit vielen freigeschalteten
Protokollen und hänge ein LC Display mit dran. Dann hast du einen recht
universellen IR Dekoder.
Joachim B. schrieb:> dann ist es NEC und IRMP ist gut geeignet.
Mit den Dingern und IRSND habe ich mal eine nette kleine Kickerarena
ausgestattet. IRSND wird von Piezoscheiben hinter den Toren getriggert
und blinkt rot beim Tor für das rote Team und blau für das blaue Team.
Dreimal flashen, dann schaltet es wieder auf weiss :-)
Wolfgang schrieb:> Hmmm schrieb:> Das wird nichts, bei einer einfachen IR-LED musst Du die 38kHz selbst> erzeugen. High-Pegel in Deinem Screenshot entspricht "LED dunkel", die> Low-Pegel sind die 38kHz-Bursts.>> Die 38kHz muss man nur erzeugen, wenn man mit dem µC-Signal eine> IR-Diode zur Fernsteuerung betreiben möchte.
Klar, ich ging bloss bei der Bezeichnung "ledPin" davon aus, dass eine
IR-LED verwendet werden soll.
Ich hab jetzt nicht jeden Link verfolgt, aber hat dem TO eigentlich
schon jemand mal gesagt, dass sein Logic-Mitschnitt wertlos ist?
Für mich sieht das nicht wie ein UART-signal aus. Also sollte er doch
erstmal den Analyser auf einfaches Samplen stellen (wenn er kein Oszi
hat) um Herauszufinden, ob es
IRDA ist (kurze Impulse von etwa 1µs)
oder ein Frequenzsignal (High/low etwa 50%)
Und dann dementsprechend weiter zu forschen.
Achim S. schrieb:> Ich hab jetzt nicht jeden Link verfolgt, aber hat dem TO eigentlich> schon jemand mal gesagt, dass sein Logic-Mitschnitt wertlos ist?
So schlecht sieht das doch gar nicht aus
Dirk schrieb:> LA.jpg
Nach der undurchsichtigen Zeitauflistung war ja der Plot
vom Analyzer etwas aufschlussreicher.
Aber was soll jetzt
> digitalWrite(ledPin, HIGH);> delay(1000);> digitalWrite(ledPin, LOW);> delay(9);> digitalWrite(ledPin, HIGH);> delay(4.5);> digitalWrite(ledPin, LOW);> delay(0.5);
für dein Vorhabeb bringen?
Ein IR-Signal wird für die im Code vorgesehene Dauer von Logisch
NULL mit z.B. 36 kHz pulsierend eingeschaltet, für die Dauer von
Logisch EINS macht es Pause.
Dein L.A.-Plot zeigt die Umhüllende davon (oder, je nach Abtastrate
vielleicht auch irreführende Alias-Signale)...
Sollte der Plot stimmen, hast du auf den ersten Blick nach einer
Startsequenz (lange NULL, etwa halb so lange EINS eine Codierung
des Signals mit variabler Pausendauer.
Die Länge der Pause entspricht einer EINS, oder einer NULL im
eigentlichen FB-Code.
Bevor du mit dem delay-Unsinn lospfriemelst, schau dir erst mal
ALLE möglichen Codes an und such mal nach dem Muster:
Meist ist ein Teil des Codes für das GERÄT (Adresse = konstant)
und ein Teil der eigentliche BEFEHL (bei jedem Befehl anders).
Wenn du das ermittelt hast, überlegen wir uns mal eine
Strategie, die ganzen FB-Knöpfe OPTIMIERT und WIRKSAM zu senden!
Für die Erfassung des ECHTEN IR-Signals könnte ich auch noch eine
Schaltung anbieten. Denn:
Je näher am Original-Signal, desto klappt's. ;-)