Hallo, Ich bin am "Reverse engineering" von einer kabelgebundenen Fernbedienung (RJ12 Stecker) für einen Spannungswandler. Anzeige erfolgt mittels Leds. Schaltplan und Datensignal habe ich angehängt. ERLEDIGT: - Battery SOC, RJ12 Pin 6, 0.5-0.75V Led 1-5, Beim Laden blinken restliche Leds - AC Load, RJ12 Pin 4, 0-1.5V Led 1-5, Ab 1.6V blinken alle (Überlast) - Led Power ON - Diode D1 ist überflüssig (Einseitig verbunden) UNKLAHR: - Verwendeter 14 Pin Microcontroller hat keine Markierung, möglicherweise AtTiny20 oder Sonix SN8P2711 - Datensignal für die Anzeige von Inverter OUT, AC IN, Bypass(NVS), Fault, AC Charge Leds. Das Datensignal (RJ12 Pin 2) scheint sehr simple zu sein aber ich kann das nicht einordnen. - Was ist eure Meinung dazu? - Warum ist pin 7+8(Datensignal) am MC über 1k Ohm Widerstand verbunden? Vielen Dank schonmal für eure Hilfe. Grüsse Ben
:
Bearbeitet durch User
Oberflächlich betrachtet scheint ein Paket aus 9 Pulsen zu bestehen, dann kommt eine etwas längere Pause. Innerhalb des Pakets gibt es nur zwei verschiedene Längen, die man als 0 und 1 interpretieren könnte.
Ben schrieb: > - Verwendeter 14 Pin Microcontroller hat keine Markierung, > möglicherweise AtTiny20 oder Sonix SN8P2711 Padauk PMS132B-S14?
:
Bearbeitet durch User
Ich kann da kurze (~32ms), mittlere (~63ms) und längere (~82ms) Intervalle mit niedrigem Pegel und nur sehr kurze (~20ms) mit hohem Signalpegel sehen. Die zeitlichen Verhältnisse im Bezug auf den sehr kurzen hohen Pegel sind ca. 1:1,5, 1:3 und 1:4. Rein aus dem Bauch raus würde ich die langen Intervalle als Pakettrenner annehmen, da es so aussieht, als wären sie am seltensten. Wenn da jetzt mehr als die beiden Zustände Idle und Laden signalisiert werden, dann bastel dir doch einen Sigrok Protokolldecoder (Sigrok scheinst du ja bereits zu nutzen), damit du besser loggen kannst, was da übertragen wird. Möglicherweise besteht trotz der simplen Anwendung eine Nachricht aus mehr als nur einem Byte, von daher würde ich eh nicht nur so einen kleinen Ausschnitt beleuchten.
Danke für eure Antworten. H. H. schrieb: > Padauk PMS132B-S14? Ist auch eine Möglichkeit. Sönke P. schrieb: > bastel dir doch einen Sigrok Protokolldecoder (Sigrok scheinst du ja bereits zu nutzen) Benutze Sigrock erlicherweise erst seit gestern. https://www.sigrok.org/wiki/Protocol_decoder_HOWTO habe ich gelesen aber deise Bemerkung irritiert mich: >Note: Do not start new protocol decoders by copying code from here. Instead, it's recommended to select an already existing decoder in the source code which is similar to the one you plan to write, and copy that as a starting point. Welcher Decoder soll das sein? Spontan würde ich https://sigrok.org/wiki/Protocol_decoder:Rc_encode nehmen welcher aber auch unnötig komplex ist. Kennt jemand gute Tutorials/Beispiele im Web? Bisher habe ich nichts gefunden ausser der allgemeinen Benutzung von Protokolldecoder. Sönke P. schrieb: > Möglicherweise besteht trotz der simplen Anwendung eine Nachricht aus > mehr als nur einem Byte, von daher würde ich eh nicht nur so einen > kleinen Ausschnitt beleuchten. Es ist gut möglich das es nur ein byte ist, denn die Leds(Inverter OUT, AC IN, Bypass(NVS), Fault, AC Charge) könnten als bit 1 oder 0 gesetzt sein.
Ich denke ich habe den Rest herausgefunden: - bit 1: Fault (Nicht getestet nur eine Ahnung) - bit 2: AC Charge oder Bypass (Sehe ich wenn der Akku voll geladen ist) - bit 3: Inverter OUT - bit 4: AC Charge oder Bypass (Sehe ich wenn der Akku voll geladen ist) - bit 5: AC IN Danke ihr habt mich auf die richtige Spur gebracht und ich habe was gelernt! phython auszug:
1 | def decode_bit(edges): |
2 | # 60.8 / 19.5 = 3.1179487179487179487179487179487 |
3 | # 62.95 / 19.4 = 3.2448453608247422680412371134021 |
4 | # 62.95 / 17.3 = 3.6387283236994219653179190751445 |
5 | aMin = 3.0 # min multiplier |
6 | aMax = 3.7 # max multiplier |
7 | |
8 | # 30.4 / 19.45 = 1.5629820051413881748071979434447 |
9 | # 32.6 / 19.45 = 1.6760925449871465295629820051414 |
10 | # 32.6 / 17.3 = 1.8843930635838150289017341040462 |
11 | bMin = 1.5 # min multiplier |
12 | bMax = 1.9 # max multiplier |
13 | |
14 | # 82.4 / 19.5 = 4.225641025641025641025641025641 |
15 | # 82.45 / 17.3 = 4.7658959537572254335260115606936 |
16 | # 84.6 / 17.3 = 4.8901734104046242774566473988439 |
17 | cMin = 4.2 # min multiplier |
18 | cMax = 4.9 # max multiplier |
19 | |
20 | |
21 | if (edges[1] >= edges[0] and (edges[1] >= edges[0] * aMin and edges[1] <= edges[0] * aMax)): |
22 | return 'A' |
23 | |
24 | elif (edges[1] >= edges[0] and (edges[1] >= edges[0] * bMin and edges[1] <= edges[0] * bMax)): |
25 | return 'B' |
26 | |
27 | elif (edges[1] >= edges[0] and (edges[1] >= edges[0] * cMin and edges[1] <= edges[0] * cMax)): |
28 | return 'C' |
29 | |
30 | else: |
31 | return 'U' |
:
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.