Hallo, ich möchte die Kommunikation zwischen zwei Geräten untersuchen. Das Ziel ist es zunächst, diese nur zu verstehen. Später würde ich dann gerne eines der beiden Geräte durch einen eigenen µC ersetzen. Bei den Geräten handelt es sich um einen Handschalter mit LCD-Display und eine Motor-Steuerung von einem höhenverstellbaren Schreibtisch. Beide Einheiten sind mit einem 8-poligen Kabel verbunden. Als ersten Schritt habe ich mir einen Logic-Analyzer besorgt, und damit alle 8 Leitungen "angezapft". Auf den ersten Blick passiert eigentlich nur auf dem ersten Kanal etwas, auf den anderen Leitungen ist nur sporadisch etwas los. Eine Übersicht dessen, was auf Kanal 1 passiert, ist im ersten Bild zu sehen. Bild 2 zeigt vier dieser Peaks im Detail. Ich vermute, dass es sich hier um den Höhenwert handelt, der vom Motor-Controller zur Anzeige an den Handschalter gesendet wird. Doch wie geht es nun weiter? Leider bin ich absoluter Neuling, was solche Protokolle angeht. Hat jemand eine Idee, worum es sich hier handelt? Ist das etwas Bekanntes? Oder etwas Proprietäres? Wie könnte ich herausfinden, was hier wie gesendet wird?
Mit welcher Abtastrate hast du denn die Signale mitgeschnitten? Bei deinem 20s Ausschnitt kann man nicht viel sagen. Das was du da als Nadeln auf den anderen Kanälen siehst, kann schon eine komplette Kommunikation sein. Zoome da mal mehr rein. Oder poste mal das Salea File (über irgend ne Dropbox). Dann können wir selbst zoomen und suchen... ;-)
:
Bearbeitet durch User
Joe F. schrieb: > Oder poste mal das Salea File (über irgend ne Dropbox). Dann können wir > selbst zoomen und suchen... ;-) Hier ist es :-) (ist ja recht klein)
Was hast du denn in diesen 20s getan? Ich würde gucken dass ich mehrmals den gleichen Wert einstelle und dann vergleichen ob jedes mal die Gleiche Kommunikation stattfindet. Und dann würde ich gezielt einzelne Werte einstellen und diese verschiedenen Werte dann miteinander vergleichen. Wenn man weiß was übertragen wurde ist es wesentlich einfach so etwas zu entschlüsseln...
Hallo, bei den 8 Leitungen sollte man erstmal sehen, wie die auf beiden Seiten beschaltet sind. Sehr wahrscheinlich ist da mind. eine Masseleitung und evtl. auch eine Betriebsspannung dabei. Ist da ein Prozessor? Welcher Typ? Bei den Signalen kann man zumindest schauen, an welche Pins die gehen. Bei dem Impulsmustern kann es sich um eine asynchrone Übertagung handeln. Eine UART ist wahrscheinlich. Es sind wohl TTL-Pegel, oder? Messe mal die Breite der schmalsten Takte. Damit kann man die Baudrate ermitteln. Falls es das ist, was ich vermute, kannst du den Inhalt der Datentelegramme mit einem Terminalprog. mitlesen. Brauchst dazu evtl. mur einen Pegelwandler von TTL zu RS232. Gruß Öletronika
U. M. schrieb: > Eine UART ist wahrscheinlich. Das hatte ich auch vermutet. Die Salea-Software hat sogar einen Decoder mit Baudratenerkennung an Board, das schmeisst aber Fehler. Die Datenworte sehen auch nicht alle gleich breit aus.
:
Bearbeitet durch User
Die einzige Einstellung, die vielleicht irgend etwas Sinnvolles zeigt ist folgende: ASYNC Serial, 500 Baud, 15 Bits/Transfer, 1 Stop-Bit, No Parity, Most Significant Bit Sent First, Inverted Da käme dann das raus: 0x0837 0x082E 0x083F 0x002F 0x083E 0x0822 0x0833 0x0823 0x0032 0x002B 0x087E 0x002B 0x0A7D 0x083A 0x002A 0x083B 0x0023 0x0832 0x0822 0x0033 0x082A 0x003B 0x002B Ich weiss ja nicht, was du genau gemacht hast, aber evtl. ist die 0x08 0x00 die Richtung, und das untere Byte die Position? 0x0A im oberen Byte könnte heissen: Richtung 0x08 und am Anschlag...?
:
Bearbeitet durch User
Thomas Z. schrieb: > Was hast du denn in diesen 20s getan? Ich habe den Tisch von einer angezeigten Höhe von 90 cm nach oben fahren lassen. Am Ende stand er bei 110cm. Dazu habe ich den entsprechenden Schalter 4x betätigt, und bin jeweils 5cm gefahren. U. M. schrieb: > bei den 8 Leitungen sollte man erstmal sehen, wie die auf beiden Seiten > beschaltet sind. Sehr wahrscheinlich ist da mind. eine Masseleitung und > evtl. auch eine Betriebsspannung dabei. Genau, es sind Masse, VCC und ein paar N.C.s dabei. Letzten Endes scheinen nur vier Leitungen Daten zu übertragen. Ich werde das Logic-Analyzer-Projekt nachher mal entsprechend aufräumen. U. M. schrieb: > Ist da ein Prozessor? Welcher Typ? > Bei den Signalen kann man zumindest schauen, an welche Pins die gehen. Bisher habe ich die Gehäuse nicht geöffnet, sondern bin "minimalinvasiv" vorgegangen ;-) Joe F. schrieb: > Das hatte ich auch vermutet. > Die Salea-Software hat sogar einen Decoder mit Baudratenerkennung an > Board, das schmeisst aber Fehler. Das hatte ich auch anfangs versucht, bekomme aber auch nur Fehler angezeigt. Wäre wohl zu einfach gewesen ;-)
Hallo, nun bin ich schon ein ganzes Stück weiter :-) Alles was mir jetzt noch fehlt, ist herauszufinden, wie die aktuelle Höhe codiert ist. Folgendes weiß ich: - Das Steuergerät sendet die Höhe in einem 32-Bit Paket an die Anzeige - Die ersten 23 Bit sind immer gleich (spielen also keine Rolle) - Die letzten 9 Bit ändern sich, je nach Höhe Ich habe mehrere Messungen durchgeführt, und immer die folgenden Werte bekommen. Diese müssten also zuverlässig sein: Höhe Konstante 23-Bit Höhe in 9 Bit --------------------------------------------- 109cm: 10111111100111111111101 010010010 108cm: 10111111100111111111101 110010011 107cm: 10111111100111111111101 001010010 106cm: 10111111100111111111101 101010011 105cm: 10111111100111111111101 011010011 104cm: 10111111100111111111101 111010010 103cm: 10111111100111111111101 000110010 102cm: 10111111100111111111101 100110011 101cm: 10111111100111111111101 010110011 Doch wie ist die Höhe genau in diesen 9 Bit codiert? Ich erkenne da leider auf Anhieb kein Muster :-( (vorwärts? rückwärts? invertiert?)
Zunächst fällt mir auf, das das äusserste rechte Bit immer dann 1 ist, wenn die Anzahl der anderen 1-Bits gerade ist, wobei ich die Bits der "23-Bit-Konstante" nicht betrachtet habe. Wenn das rechte Bit aber eine Parität sein sollte, dann würde die Einbeziehung der 23-Bit höchstens die Parität noch einmal ändern. Weiter sehe ich, dass der Zahlenwert der restlichen 8 Bit proportional zu der Höhe ist, wenn man die Bit-Reihenfolge umdreht . Ich deute das hier einmal an: 101cm: 10111111100111111111101 01011001 1 10011010
Die Aussage, dass der Zusammenhang proportional ist, suggeriert evtl. dass der Zusammenhang linear ist. Aber das ist er offensichtlich nicht. Falls es nötig ist das zu erwähnen. Findet sich denn das Bitmuster einer integer 101 in der entsprechenden Zeile? Ich bin zu faul nachzusehen. Soweit ich das sehe, verändern sich (abgesehen von der "Parität") überhaupt nur die 4 linken Bits, was 16 mögliche Stufen ergibt. Die reichen ja für den Bereich von 101 bis 109cm. Ist das der gesamte Fahrbereich? Man muss einfach mal einige "triviale" Umstellungen ausprobieren und sich das Ergebnis mit gnuplot oder einem ähnlichen Programm ansehen.
Hi Klaus, danke für deine Überlegungen. Klaus schrieb: > Die reichen ja für den Bereich von 101 bis 109cm. Ist das der gesamte > Fahrbereich? Der ist noch ein bisschen größer. Er reicht ca. von 60cm bis 120cm. Hier noch ein paar kleinere Werte, die ich gerade gemessen habe: Höhe Konstante 23-Bit Höhe in 9 Bit --------------------------------------------- 65cm 10111111100111111111101 011111011 64cm 10111111100111111111101 111111010 63cm 10111111100111111111101 000000111 62cm 10111111100111111111101 100000110 Gerade der Sprung zwischen 63 und 64 cm sieht doch recht wirr aus...
Ich glaube es ist so: das letzte Bit ist ein Prüfbit Wenn du die letzten 9 Bit umdrehst, und nur die unteren 8 Bit davon anguckst, dann kommt etwas sinnvolles raus:
1 | Höhe Konstante 23-Bit Höhe in 9 Bit Höhe bit-reverted |
2 | ---------------------------------------------------------------------- |
3 | 109cm: 10111111100111111111101 010010010 0_10010010 = 0x92 = 146 |
4 | 108cm: 10111111100111111111101 110010011 1_10010011 = 0x93 = 147 |
5 | 107cm: 10111111100111111111101 001010010 0_10010100 = 0x94 = 148 |
6 | 106cm: 10111111100111111111101 101010011 1_10010101 = 0x95 = 149 |
7 | 105cm: 10111111100111111111101 011010011 1_10010110 = 0x96 = 150 |
8 | 104cm: 10111111100111111111101 111010010 0_10010111 = 0x97 = 151 |
9 | 103cm: 10111111100111111111101 000110010 0_10011000 = 0x98 = 152 |
10 | 102cm: 10111111100111111111101 100110011 1_10011001 = 0x99 = 153 |
11 | 101cm: 10111111100111111111101 010110011 1_10011010 = 0x9A = 154 |
So, und jetzt machst du folgendes, du ziehst diesen Wert von 255 ab, und hast die Höhe in cm. Bingo. Das was bei dir eine 0 ist scheint für das Gerät eine logische 1. Deswegen kannst du auch den Wert XOR 0xff nehmen, da kommt das gleiche raus, wie von 255 abziehen.
:
Bearbeitet durch User
Bingo, das ist es! Hier sind echt erfahrene Zahlenjongleure unterwegs ;-) Danke!
Boris P. schrieb: > Hier noch ein paar kleinere Werte, die ich gerade gemessen habe: > > Höhe Konstante 23-Bit Höhe in 9 Bit > --------------------------------------------- > 65cm 10111111100111111111101 011111011 > 64cm 10111111100111111111101 111111010 > 63cm 10111111100111111111101 000000111 > 62cm 10111111100111111111101 100000110 > > Gerade der Sprung zwischen 63 und 64 cm sieht doch recht wirr aus... Nicht wirklich, wenn Du beachtest, das 0100 0000 = 64dez und 0011 1111 = 63dez. Die Vermutung das die Bits im wesentlichen umgedreht und invertiert werden scheint mir um so zutreffender.
Da werden 3 Byte übertragen. Invertiere alle Bits. Dann steht da:
1 | Start |
2 | 8 daten |
3 | Parität |
4 | Stop |
5 | |
6 | Start |
7 | 8 Daten |
8 | Parität |
9 | Stop |
10 | |
11 | Start |
12 | 8 Daten (Höhe) |
13 | Parität |
14 | Stop |
:
Bearbeitet durch User
Auch wenn dieser Thread schon uralt ist: Die ersten 23 Bit sind nicht immer gleich. Das sind nur die ersten 12 Bit. In dem Protokoll werden 2 Nutzbytes übertragen. Abhängig vom 1. Byte steht die Information im 2. Byte. Wenn 1. Byte = 0 dann 2. Byte = Höhe. Ansonsten Negierung usw. wie schon beschrieben.
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.