Forum: Mikrocontroller und Digitale Elektronik Reverseengeneering von Nebelmaschienen Protokoll


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ben (rapierxbox)


Angehängte Dateien:

Lesenswert?

Hi, ich habe mir letztens eine günstige Nebelmaschine aus China gekauft. 
Ich möchte sie jetzt gerne mit einem ESP32 und einem Knopf steuern 
können. Momentan läuft sie über eine RF-Fernbedienung, die ein Funkmodul 
RX480RA (jlcpcb.com/kr/partdetail/C2886635) nutzt und mit 5V von der 
Nebelmaschine betrieben wird. Diese 5V sind verfügbar, sobald die 
Maschine aufgewärmt ist. Ich habe das Ganze mal an ein Oszilloskop 
angeschlossen und festgestellt, dass es auch ohne Knopfdruck viele Stör- 
bzw. Idle-Signale gibt. Ein Muster wiederholt sich dabei: [0.2ms an; 
0.36ms aus; 1.75ms an] mit einem Delay von 11.5ms zwischen den 
Wiederholungen. Die Fernbedienung hat einen SC2260 IC 
(sc-tech..cn/en/SC2260.pdf). Bei einem Knopfdruck wird ein 24-Bit-Signal 
gesendet, das so lange andauert, wie der Knopf gedrückt wird. Auf der 
Fernbedienung ist der dritte Adresspin auf 3V gezogen. Das 24-Bit-Signal 
startet mit einem 16-Bit-Header [0x5D55], der für das Adress-Coding 
steht, und die restlichen 8 Bits variieren je nach Knopf [0x0C 00001100; 
0xC0 11000000; 0x03 00000011; 0x30 00110000]. Dieses Paket wiederholt 
sich mit einem Delay von 20ms, solange der Knopf gedrückt ist. Wenn ich 
das gleiche Signal mit einem ESP32 und einem Level Shifter aussende, 
passiert nichts. Der Stecker sieht aus wie ein 3-Pin-DMX-Kabel, aber die 
Signale sind ganz anders. Es könnte sein, dass das erste Paket beim 
Drücken anders ist, aber ich habe es noch nicht geschafft, das zu 
messen. Ich werde jetzt auch mal die Nebelmaschiene aufmachen.
1
const uint16_t header = 0x5D55;
2
const uint8_t R = 0x03;
3
const uint8_t G = 0x0C;
4
const uint8_t B = 0xC0;
5
const uint8_t Fog = 0x30;
6
 
7
void setup() {
8
  pinMode(33, OUTPUT);
9
  Serial.begin(115200);
10
}
11
12
void playPacket(uint8_t data) {
13
  uint32_t packet = ((uint32_t)header << 8) | data;
14
  for (int i = 0; i < 24; i++) {
15
    if ((packet >> i) & 1) {
16
      digitalWrite(33, LOW);
17
      delayMicroseconds(2000); 
18
      digitalWrite(33, HIGH);
19
      delayMicroseconds(750); 
20
    } else {
21
      digitalWrite(33, LOW);
22
      delayMicroseconds(750);         
23
      digitalWrite(33, HIGH);
24
      delayMicroseconds(2000); 
25
    }
26
  }
27
}
28
29
void loop() {
30
  for (int i = 0; i < 200; i++) {
31
    playPacket(Fog);
32
    delayMicroseconds(20000); 
33
  }
34
}

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

wo ist der Satz mit dem Fragezeichen?

von Helmut -. (dc3yc)


Lesenswert?

Das Modul RX480RA ist ein OOK-Modul. Zum Decodieren würde ich einen 
SDR-Stick mit RTL_433 empfehlen. Übrigens ist auf deinem Foto ein 
315MHz-Modul zu sehen. Hast du das selbst aufgenommen? 315MHz-Module 
sind in der EU übrigens nicht zugelassen!

von Ben (rapierxbox)


Angehängte Dateien:

Lesenswert?

Okay, ich habe die Nebelmaschine geöffnet und einen 
Nuvoton-Mikrocontroller gefunden 
(nuvoton.com/export/resource-files/DS_N76E003_EN_Rev1.09.pdf). Das 
Signal ist mit dem Pin 11 oder 1 verbunden. Ich werde versuchen, den ROM 
zu dumpen. Es sieht auch so aus, als wäre neben dem Mikrocontroller ein 
Pin-Header vorhanden, um dies zu tun.

von Ben (rapierxbox)


Lesenswert?

Habe mich schon gewundert, weil das Oszi etwas um 300 MHz angezeigt hat. 
Neuer Grund für einen ESP!

von Georg G. (df2au)


Lesenswert?

Ben schrieb:
> Ich werde versuchen, den ROM zu dumpen.

Sieh dir vorher mal Seite 251 des Datenblattes an, Bit 1 der 
Konfiguration.
Viel Spaß.

von Ben (rapierxbox)


Lesenswert?

Oh...

von Ben (rapierxbox)


Lesenswert?

Helmut -. schrieb:
> Das Modul RX480RA ist ein OOK-Modul. Zum Decodieren würde ich einen
> SDR-Stick mit RTL_433 empfehlen. Übrigens ist auf deinem Foto ein
> 315MHz-Modul zu sehen. Hast du das selbst aufgenommen? 315MHz-Module
> sind in der EU übrigens nicht zugelassen!
Kannst du einen empfehlen?

: Bearbeitet durch User
von Harald A. (embedded)


Lesenswert?

Du hast doch alle 4 Signale als Transistorstufe im Zugriff. Setze da 
doch an und baue da die Elektronik an, die Du möchtest.

von Ben (rapierxbox)


Lesenswert?

Harald A. schrieb:
> Du hast doch alle 4 Signale als Transistorstufe im Zugriff. Setze
> da
> doch an und baue da die Elektronik an, die Du möchtest.

Würde gehen aber ist mir fast zu riskant da da direkt ohne große 
Separierung 220v anliegen.

von Björn W. (bwieck)


Lesenswert?

Ben schrieb:

> Würde gehen aber ist mir fast zu riskant da da direkt ohne große
> Separierung 220v anliegen.

Für sowas wurden Optokoppler erfunden.

von Harald A. (embedded)


Lesenswert?

Es scheint ja sogar galvanisch getrennt, aufgrund der Funkverbindung ist 
die Güte der Trennung allerdings fraglich.

Nimmste einen 74HC4052 Umschalter für RGB und ein OR aus zwei Dioden für 
den Nebel. Was willst Du am Ende erreichen? DMX?

von Ben (rapierxbox)


Lesenswert?

Harald A. schrieb:
> Es scheint ja sogar galvanisch getrennt, aufgrund der
> Funkverbindung ist
> die Güte der Trennung allerdings fraglich.
>
> Nimmste einen 74HC4052 Umschalter für RGB und ein OR aus zwei Dioden für
> den Nebel. Was willst Du am Ende erreichen? DMX?

Unter anderem... Könnte ich nicht eigendlich auch einfach an die schon 
vorhandenen Mosfets für Led und Rauch meinen Esp anschliessen? An der 5v 
Line von orginellen Reciver kann ich schauen ob aufgeheizt wurde.

von Harald A. (embedded)


Angehängte Dateien:

Lesenswert?

Hat die Fernbedienung einen kompletten AUS-Mode? Falls ja, könntest Du 
auch überall eine BAT54c einschleifen (siehe Bild, passt vom Layout 
ziemlich gut) und der freie Pin der Doppeldiode geht dann zu deinem ESP. 
Die Leiterbahn darunter auftrennen. Wozu? Du erhältst Dir die volle 
Funktionalität der FB und kannst parallel mit dem ESP steuern. Ist 
sozusagen ein Wired-OR. Den 4052 brauchst Du dann nicht.
Du könntest auch den Transistor rausnehmen und einen „Digitaltransistor“ 
wie z.B. PDTD123YT einsetzen. Dann nämlich stünden die Pads vom 
aktuellen Vorwiderstand für die Doppeldiode zur Verfügung, dann muss man 
nichts aufkratzen.

: Bearbeitet durch User
von Ben (rapierxbox)


Lesenswert?

Harald A. schrieb:
> Hat die Fernbedienung einen kompletten AUS-Mode? Falls ja,
> könntest Du
> auch überall eine BAT54c einschleifen (siehe Bild, passt vom Layout
> ziemlich gut) und der freie Pin der Doppeldiode geht dann zu deinem ESP.
> Die Leiterbahn darunter auftrennen. Wozu? Du erhältst Dir die volle
> Funktionalität der FB und kannst parallel mit dem ESP steuern. Ist
> sozusagen ein Wired-OR. Den 4052 brauchst Du dann nicht.
> Du könntest auch den Transistor rausnehmen und einen „Digitaltransistor“
> wie z.B. PDTD123YT einsetzen. Dann nämlich stünden die Pads vom
> aktuellen Vorwiderstand für die Doppeldiode zur Verfügung, dann muss man
> nichts aufkratzen.

Würde wahrscheinlich den Transistor mit einem Digitaltransistor 
tauschen... Den Vorwiderstand würde ich dann ablöten und mein Kabel 
dranlöten. Eine Frage aber noch: Für was und wohin mit der Doppeldiode? 
Um den Transistor zu schützen oder am VCC vom ESP?

von Ben (rapierxbox)


Angehängte Dateien:

Lesenswert?

Also so

von Helmut -. (dc3yc)


Lesenswert?

Ben schrieb:
> Kannst du einen empfehlen?

Da tut's der billigste, z.b. 
https://www.amazon.de/RIWPKFH-Digital-Satellite-RTL2832-Receiver/dp/B0B13Y72CP/ref=sr_1_4 
oder https://www.ebay.de/itm/324824050551. Wenn du noch irgendwo einen 
DVBT-Stick herumliegen hast, tut's der auch. Die gibts auch manchmal 
gebraucht zum Spottpreis.

von Chris S. (schris)


Lesenswert?

Er kann doch den Empfänger direkt abhorchen oder ein Arduino 
dazwischenschalten. Der gepostet Code ist jedoch nicht correct, und da 
die Tribits relativ unüblich sind, zweifle ich auch etwas an die 
publizierte Bytefolge, kann jedoch korrekt sein.

von Ben (rapierxbox)


Angehängte Dateien:

Lesenswert?

Chris S. schrieb:
> Er kann doch den Empfänger direkt abhorchen oder ein Arduino
> dazwischenschalten. Der gepostet Code ist jedoch nicht correct, und da
> die Tribits relativ unüblich sind, zweifle ich auch etwas an die
> publizierte Bytefolge, kann jedoch korrekt sein.

Das ist ja mein Plan. Der Code ist schon richtig, der Pin ist nur 
umgekehrt, weil ich einen NPN-Stepup habe, aber auf dem Oszi sehe ich 
das Richtige. Habe nochmal nachgemessen und das Timing ein bisschen 
verändert. Aber muss es noch an der Nebelmaschiene testen.

von Ben (rapierxbox)


Angehängte Dateien:

Lesenswert?

Hier nochmal ein Bild von Reciver. Auf dem IC ist kein Marking:

von H. H. (hhinz)


Lesenswert?

Ben schrieb:
> Hier nochmal ein Bild von Reciver. Auf dem IC ist kein Marking:

Wird wohl ein WS480L sein.

von Georg G. (df2au)


Lesenswert?

Beachte bitte, dass der Empfänger einen relativ langen (einige ms) 
Vorspann braucht. Als Beispiel kannst du die OOK Protokolle der 
Wetterstationen ansehen.

Literatur:
https://forum.iobroker.net/topic/3478/l%C3%B6sung-dekodieren-t-h-sensor-wetterstation-hygrometer-von-bresser-angebot-bei-lidl-14-99-uvp-40-433mhz

https://www.langer-sebastian.de/funk-temperatursensoren-mit-arduino/

https://github.com/merbanan/OOK_gen

von Chris S. (schris)


Lesenswert?

Nein, du schiebst zuerst das LSb raus, also zuerst die Daten und dann 
den Header, ob die Reihenfolge auch invertiert ist, wahrscheinlich.
Weiters fehlt bei dir das Sync bit am Ende der 12 Tribit's.
Das Datenblatt gibt das Timing her, oder man verwendet die fertige lib 
von Arduino.

von Harald A. (embedded)


Angehängte Dateien:

Lesenswert?

Ben schrieb:
> Eine Frage aber noch: Für was und wohin mit der Doppeldiode?
> Um den Transistor zu schützen oder am VCC vom ESP?

Mit der Doppeldiode wäre die Funktion entweder von der Funkfernbedienung 
ODER von deinem ESP aus steuerbar. Ein sogenanntes wired-OR. Die beiden 
Dioden entkoppeln den Nuvoton und den ESP voneinander. Du erhältst Dir 
also die gewohnte Funkionalität und ergänzt mit dem ESP. Das klappt aber 
nur, wenn es einen Betriebszustand gibt, wo der Nuvoton komplett ruhig 
ist, sonst würde der immer dazwischen funken.
Hätte ich so gemacht, da die Pads vom Vorwiderstand sich so schön 
anbieten für diesen Zweck. Siehe auch das Bild.
Letztlich gibt es aber auch andere Möglichkeiten, ganz wie Du möchtest.

Die 5V stehen erst an, wenn die Nebelmaschine fertig aufgeheizt hat? Ja, 
kannst Du ja als Signal einlesen. Nehme für deinen ESP doch einfach ein 
zusätzliches 5V Netzteil wie z.B. Meanwell APV-8-5, das dort eingebaute 
sieht etwas schwachbrüstig aus.

: Bearbeitet durch User
von Ben (rapierxbox)


Angehängte Dateien:

Lesenswert?

Georg G. schrieb:
> Beachte bitte, dass der Empfänger einen relativ langen (einige ms)
> Vorspann braucht. Als Beispiel kannst du die OOK Protokolle der
> Wetterstationen ansehen.

Da ist etwas dran mit dem Vorspann... Ich habe mein Oszilloskop auf 
Trigger mit über 20 ms High eingestellt und siehe da: Ein Vorspann ist 
vorhanden, aber nach dem Vorspann sehen die Daten irgendwie anders aus 
als die von den Repeat(Hold)-Paketen. Der Vorspann, der durchgehend High 
ist, ist etwa 75 ms lang. Danach kommt gefühlt nur Rauschen. Insgesamt 
ist das erste Paket etwa 250 ms lang, danach folgen die Repeat-Pakete. 
Aber die Daten nach diesem langen High kann ich beim besten Willen nicht 
entschlüsseln, da sie alle unterschiedlich lang sind.

von Chris S. (schris)


Lesenswert?

Es gibt keinen preamble, bzw das Preamble ist die erste Übertragung vor 
dem Sync.
Übertragen werden 8 Adress-tribit, dann 4 button-tribit gefolgt von 
einem Sync signal. Das Sync signal ist eine Zeiteinheit high und dann 31 
Zeiteinheiten Low. Eine Zeiteinheit ist ungefähr 460uS. Ein Frame 
besteht aus 4x 12 Tribit's sowie dem Sync. Das Preamble ist somit das 
Nutzsignal und es leicht möglich dass sich der Empfänger erst auf die 
letzte Wiederholung einschwingt.
Ein tribit ist folgendes:
0 = 1x Zeiteinheit high und 3x Zeiteinheit Low
1 = 3x Zeiteinheit high und 1x Zeiteinheit how
Sync = 1x Zeiteinheit high und 31x Zeiteinheit Low

Tribit 0 = 00
Tribit 1 = 11
Tribit F = 01.  F=Float
Tribit X = 10.  Kommt bei Fernsteuerungen vor welche einem Timerwert 
senden (1/2/3/4 hours)

Der Sendechip ist sc2260, der Empfänger ist sc2270 oder sc2272 (auch IR)
Für beides gibt es Datenblätter und auch beim pt2260, pr2262 sowie 
pt2272 reinschauen.

von Sigi S. (sermon)


Lesenswert?

Schiene, ja, nee, is klar...
Welchen Wiederstand hat die denn?

von Helmut -. (dc3yc)


Lesenswert?

Sigi S. schrieb:
> Wiederstand

Gar keinen, nur einen Widerstand!

von Sigi S. (sermon)


Lesenswert?

Helmut -. schrieb:
> Sigi S. schrieb:
>> Wiederstand
>
> Gar keinen, nur einen Widerstand!

Oh wahrlich, Du bist ein Schnellchecker!

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.