Forum: Mikrocontroller und Digitale Elektronik UART kommunikation macht keinen Sinn


von Mathias B. (mathias_b305)


Angehängte Dateien:

Lesenswert?

Hallo

Problem:
Die daten in einer UART Kommunikation ergeben keinen sinn.

Genauer:
Ein Win Programm spricht mit einem Mikrocontroller, dieser schaltet dann 
die Uhrzeit auf einer Tafel.
PC und Kontroller sind über USB verbunden. Auf die Original Platine 
besteht kein zugriff. Als Gegenstück für den Datenverkehr wird ein 
FT232RL verwendet. Das Auslesen übernimmt dann Saleae Logic 8.

Übergeben wird ein 30 Byte Wort. Bei einer Änderung der Minuten 
verändern sich byte 23 & 24, bei einer Änderung der stunden Byte 
18,19,23,24
Um eine bessere Übersicht über die Bytes zu haben, Stellt ein Python 
Programm die Byte Worte in eine Zeile da. Den Input bekommt sie dabei 
aus einer CSV Datei die von V exportiert werden kann.

Kann mir jemand sagen ob ich einen felher beim Auslesen gemacht habe 
oder sollen die daten für Menschen nicht lesbar sein?

Tafel:
-Aufbau unbekannt
-vom Kontroller zur tafel gehen 2 Adern

Platine:
-FT232BL
-M430F149

Aufbaue:

PC--> USB-Kabel -> FT232RL -> Saleae Logic 8

von Thomas Z. (usbman)


Lesenswert?

Das sieht irgendwie nach DCF aus.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Mathias B. schrieb:
> Um eine bessere Übersicht über die Bytes zu haben, Stellt ein Python
> Programm die Byte Worte in eine Zeile da.
Übersichtlicher wäre hier eine Hex-Darstellung. Eine Suche in dieser 
0-1-Zahlenwüste ist ja umständlicher als die Nadel im Heuhaufen zu 
finden...

> Kann mir jemand sagen ob ich einen felher beim Auslesen gemacht habe
> oder sollen die daten für Menschen nicht lesbar sein?
Warum sollten sie für den Menschen lesbar sein?
Eine naheliegende Möglichkeit zum Schutz vor einem Nachbau ist das 
"Verschlüsseln" der Kommunikation.

> Kann mir jemand sagen ob ich einen felher beim Auslesen gemacht habe
Hast du dir das Timing der Bits und Worte mal auf dem Oszilloskop 
angeschaut? Nur, um sicher zu sein, dass die Baudrate passt...

> Bei einer Änderung der Minuten verändern sich byte 23 & 24,
> bei einer Änderung der stunden Byte 18,19,23,24
Irgenwie logisch, weil bei einer Stundenänderung ja auch die Minuten von 
59 auf 00 springen.
Kannst du auch sagen, welche Uhrzeit zu welchem Telegramm gehört? Und 
wie oft solche Telegramme gesendet werden?

von Mathias B. (mathias_b305)


Angehängte Dateien:

Lesenswert?

Lothar M. schrieb:
> Übersichtlicher wäre hier eine Hex-Darstellung. Eine Suche in dieser
> 0-1-Zahlenwüste ist ja umständlicher als die Nadel im Heuhaufen zu
> finden...

Orginal export aus Saleae :
1325_1330_bin.csv
1325_1330_hex.csv

vieleicht etwas übersichtlichere darstellung:
1325_1330_predit

Session_c1.sal :
Session aus dem Programm, lest sich damit wider herstellen.

Lothar M. schrieb:
> Hast du dir das Timing der Bits und Worte mal auf dem Oszilloskop
> angeschaut? Nur, um sicher zu sein, dass die Baudrate passt...
Bautrate ist in einer txt Datei im Programmordner hinterlegt (siehe 
anhang "Settings-COM4").

Die in dieser Antwort, angehängten Protokolle worden von 13:25 Uhr-13:30 
Uhr erstellt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Mathias B. schrieb:
> vieleicht etwas übersichtlichere darstellung:
> 1325_1330_predit
Und die muss jetzt noch übersichtlicher werden. Alles, was konstant ist, 
muss erstmal weg. Und dann muss die korrelierende Uhrzeit dazu, damit 
man erkennt, wann da was passiert:
1
13:25  0xdb, 0x2f      0xed, 0x2c
2
13:26  0xdb, 0x2f      0xfd, 0x5c
3
13:27  0xdb, 0x2f      0x87, 0x3d
4
13:28  0xdb, 0x2f      0xff, 0x52
5
13:29  0xdb, 0x2f      0xef, 0x22
6
13:30  0xcf, 0x43      0xbf, 0x95
7
13:31  0xcf, 0x43      0x86, 0x3a
In dieser reduzierten Form sieht man, dass da mehr als nur die 6 Minuten 
von 13:25 bis 13:30 drin sind und sich offenbar auch mitten in der 
Stunde überall was tut.

Und das musst du jetzt mal für ein paar Stunden machen. Und mal schauen, 
ob das jede halbe Stunde passiert bzw. ob sich da ein Muster jede Stunde 
wiederholt. Und am besten einen Tag später für die selbe Uhrzeit, damit 
du siehst, ob sich da am nächsten Tag nochmal was ändert.
Also einfach mal Puzzleteile sammeln, hin- und hersortieren und auf dich 
wirken lassen. Irgendwann gibt es ein Bild... ;-)

So wie ich das sehe, wird es später auch nötig sein, auf die binäre 
Darstellung zurückzugehen.

BTW: was ist übrigens dein Ziel, wenn du den Code entschlüsselt hast?

von Mathias B. (mathias_b305)


Lesenswert?

Lothar M. schrieb:
> BTW: was ist übrigens dein Ziel, wenn du den Code entschlüsselt hast?

Die Sachen wurden vor Jahren mal von einem Bastler erstellt, der nun 
verstorben ist. Wenn nun eines der Teile kaputt geht, gibt es keinen 
Ersatz.
Ziel = Ersatzteile

Vielen Dank, das du dir die Zeit genommen hast mir zu helfen.

von Erich (Gast)


Lesenswert?

Mathias B. schrieb:
> Problem:
> Die daten in einer UART Kommunikation ergeben keinen sinn.
>
> Genauer:
> Ein Win Programm spricht mit einem Mikrocontroller, dieser schaltet dann
> die Uhrzeit auf einer Tafel.

Also NOCH GENAUER:
Da es sich um ein offenbar funktionsfähiges Konstrukt handelt, ist ein 
Sinn drin.
Du hast den Sinn noch nicht erfasst.

Der Betreff ist also irreführend und falsch.

Gruss

von Holger L. (max5v)


Angehängte Dateien:

Lesenswert?

Ich wollte mir nicht extra ein Programm installieren, habe deswegen mit 
der .txt aus dem Eröffnungspost ein wenig in Word herumgespielt.

Das Protokoll scheint aus jeweils 6 Blöcken mit je 5 Byte zu bestehen.
Block 1 und 2 definieren Start sowie Ende, Block 2,3,4,5 die jeweiligen 
Daten für die einzelnen Segmente.

Block 2 z.B. Byte 1 Startbyte, Byte 2+3 Kennung, Byte 4+5 Zeitangaben

Block 1  Start 0s00000000, 0b00001001, 0b01001100, 0b10000110, 
0b00000110
Block 2  Daten  Stunde einer Stelle
Block 3  Daten  Stunde zehner Stelle
Block 4  Daten  Minuten einer Stelle
Block 5  Daten  Minuten sehner Stelle
Block 6  Ende   0b00000000, 0b00001010, 0b01010110, 0b11111111, 
0b00000110

Vielleicht hilft es ja.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Holger L. schrieb:
> Block 2  Daten  Stunde einer Stelle
> Block 3  Daten  Stunde zehner Stelle
Das passt dann aber nicht dazu, dass sich die "Stundensegmente" 
augenscheinlich zur halben Stunde auch ändern...

Wie gesagt: da braucht es noch Informationen. Wichtig ist, 
Wiederholungen zu finden. Blöd wäre, wenn es keine solchen stündlichen 
oder täglichen Wiederholungen gäbe.

Was ich noch testen würde:
Was passiert, wenn du genau so ein beliebiges mitgeschnittenes 
Datenpaket von deinem "Trace-PC" an die Anzeige schickst? Zeigt sie dann 
die Zeit an, zu der dieses Datenpaket mitgeschnitten wurde?

von Stefan (Gast)


Lesenswert?

Hallo,

ich habe mich erinnert so was schon mal gesehen zu haben!

Du musst die Daten in deinem File „1325_1330_predit“ in 5er Gruppen 
zerlegen!
Man erhält insgesamt 13 verschiedene 5er Gruppen:
Das sind:
0x0, 0x9, 0x4c, 0x86, 0x06,
0x0, 0x9, 0x52, 0xcf, 0x7f,
0x0, 0x9, 0x56, 0xff, 0xbb,
0x0, 0xa, 0x4c, 0xcf, 0x43,
0x0, 0xa, 0x4c, 0xdb, 0x2f,
0x0, 0xa, 0x52, 0x86, 0x3a,
0x0, 0xa, 0x52, 0x87, 0x3d,
0x0, 0xa, 0x52, 0xbf, 0x95,
0x0, 0xa, 0x52, 0xed, 0x2c,
0x0, 0xa, 0x52, 0xef, 0x22,
0x0, 0xa, 0x52, 0xfd, 0x5c,
0x0, 0xa, 0x52, 0xff, 0x52,
0x0, 0xa, 0x56, 0xff, 0x06,

Das letzte Byte in jeder Gruppe ist die 8Bit-CRC jeder Gruppe berechnet 
über die ersten 4-Byte nach dem sogenannten „CRC8 (ITU-T)-Polynom“ 
(x8+x2+x+1).

Habs extra für alle 13 nachgerechnet!
Den Inhalt (d.h. die Bedeutung) der ersten 4 Byte musst du selber 
herausfinden.

Gruss

von Stefan (Gast)


Lesenswert?

Hallo,
kurzer Nachtrag: da der Startwert der CRC-Berechnung 0x00 ist spielt das 
erste byte in jeder Gruppe mit ebenfalls 0x00 keine Rolle. D.h die 
Berechnung der CRC kann auch nur über Byte 2,3,4 erfolgen.

Gruss

von Mario M. (thelonging)


Lesenswert?

Lothar M. schrieb:
> damit man erkennt, wann da was passiert:
> 13:25  0xdb, 0x2f      0xed, 0x2c
> 13:26  0xdb, 0x2f      0xfd, 0x5c
> 13:27  0xdb, 0x2f      0x87, 0x3d
> 13:28  0xdb, 0x2f      0xff, 0x52
> 13:29  0xdb, 0x2f      0xef, 0x22
> 13:30  0xcf, 0x43      0xbf, 0x95
> 13:31  0xcf, 0x43      0x86, 0x3a

Die Minuten-Einer und die Bytes in der dritten Spalte sehen aus wie 
Siebensegmentcodes mit gesetztem Bit 7.

von Wolfgang (Gast)


Lesenswert?

Mathias B. schrieb:
> Das Auslesen übernimmt dann Saleae Logic 8.
>
> Übergeben wird ein 30 Byte Wort. Bei einer Änderung der Minuten
> verändern sich byte 23 & 24, bei einer Änderung der stunden Byte
> 18,19,23,24

Dann häng doch mal statt irgendwelchen rumkonvertieren Texten eine 
.logicdata Datei an, die ein paar Minuten mindestens über einen 
Stundenwechsel (mit Angabe der Uhrzeit) enthält.

von Mario M. (thelonging)


Lesenswert?

Schön wäre auch mal ein gutes Foto des ganzen Aufbaus, damit man eine 
Vorstellung bekommt, über was hier gerätselt wird.

von Viktor K. (Gast)


Lesenswert?

Es werden Pakete mit je 30 Byte übertragen, das ergibt sechs 5-er 
Gruppen:

1. Gruppe enthält in 4.Byte die 7-Segment-Daten Stunden zehner Stelle
2. Gruppe Stunden einer Stelle
3. Gruppe ??
4. Gruppe Minuten zehner Stelle
5. Gruppe Minuten einer Stelle
6. Gruppe ??

Die Bytes 1 bis 3 in jeder Gruppe könnten Adresse sein und Byte 5 ist 
CRC

Gruß
Viktor

von Viktor K. (Gast)


Lesenswert?

Beispiel für 7-Segment Zuordnung:
1
            g f e d c b a
2
0x86 = 0b 1 0 0 0 0 1 1 0 (entspricht einer 1 auf 7-Segment-Anzeige)
3
   a
4
  ---
5
f| g |b
6
  ---
7
e|   |c
8
  ---
9
   d

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Nochmal kurz draufgeschaut... ;-)
1
       min10  cs       min1   cs 
2
xx:25  0xdb, 0x2f      0xed, 0x2c
3
xx:26  0xdb, ..        0xfd, 0x5c
4
xx:27  0xdb,           0x87, 0x3d
5
xx:28  0xdb,           0xff, 0x52
6
xx:29  0xdb,           0xef, 0x22
7
xx:30  0xcf, 0x43      0xbf, 0x95
8
xx:31  0xcf, ..        0x86, 0x3a
9
10
hier jetzt mal die Minuten 10er:
11
12
            g f e d c b a
13
0xdb = 0b 1 1 0 1 1 0 1 1 (entspricht einer 2 auf 7-Segment-Anzeige)
14
   a
15
  ---
16
f    |b
17
g --- 
18
e|    c
19
  ---
20
   d
21
22
            g f e d c b a
23
0xcf = 0b 1 1 0 0 1 1 1 1 (entspricht einer 3 auf 7-Segment-Anzeige)
24
   a
25
  ---
26
f    |b
27
g --- 
28
e    | c
29
  ---
30
   d
Und das jetzt zum Gegenchecken noch über einen Stundenwechsel und einen 
Zehnstundenwechsel und du hast das Protokoll in der Tasche.

Viktor K. schrieb:
> Die Bytes 1 bis 3 in jeder Gruppe könnten Adresse sein
Da wäre jetzt interessant, zu wissen, wie die Anzeige aufgebaut ist. 
Vielleicht gibt es dort tastäschlich Jumper oder Schalter, in denen sich 
diese Bits wiederfinden...

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.