Forum: Mikrocontroller und Digitale Elektronik Kennt jemand diese Bitcodierung?


von Florian W. (flowe)


Angehängte Dateien:

Lesenswert?

Hallo,
für ein Projekt möchte ich den Durchfluss von Wasser und Temperatur 
steuern. Da ich günstig an ein digitales Steuerungssystem von Grohe 
gekommen bin versuche ich nun dieses Protokoll zur Ansteuerung selbst zu 
implementieren, bzw. falls das nicht möglich ist die entsprechenden 
Telegramme einfach zu kopieren.
Physikalischer Aufbau:
Stecker mit 3 Pins. Vcc GND Signal

Daten auf dem Oszi.
Wie man sieht sind die einzelnen Signale minimal 100µS. Ich dachte erst 
an 1-Wire aber das ist es wohl eher nicht. Möglicherweise ist es eine 
propritäre Geschichte. Seltsam ist auch, dass die Anzahl der "Bits" 
nicht konstant ist (vgl Durchflussbilder).
Ich vermute, dass im hinteren Teil eine Art CRC oder XOR Checksumme 
enthalten ist. Außerdem scheint das letzte Signal ein Ack von der 
Gegenstelle zu sein. Aber so lange ich nicht weiß wie die Bit von den 
physikalischen Signalen in logische Bits überführt werden sind das alles 
nur Vermutungen.

Vielleicht kennt jemand diese Art der Kodierung?

Vielen Dank schon mal...

: Bearbeitet durch User
von Pete K. (pete77)


Lesenswert?

Florian We schrieb:
> für ein Projekt möchte ich den Durchfluss von Wasser und Temperatur
> steuern. Da ich günstig an ein digitales Steuerungssystem von Grohe

Ich verstehe das Problem noch nicht ganz. Du hast ein Steuerungssystem 
günstig von Grohe erworben/bekommen, aber jetzt willst Du per Hand 
steuern?

Was ist denn das für ein System? RainBrain?

von Jaume (Gast)


Lesenswert?

Du solltest die Unterschiede aus den Stufen extrahieren und 
untereinander schreiben.

- langer Puls 1
- kurzer Puls 0

von Yalu X. (yalu) (Moderator)


Lesenswert?

Das scheinen CAN-Bus-Nachrichten mit jeweils 6 Datenbytes zu sein. Die
leicht unterschiedliche Länge kommt vom Bit-Stuffing.

von Mentos77 (Gast)


Lesenswert?

Hallo,
könnte rein von der Bitfolge CAN sein:
+ erste Bits immer gleich --> gleiche Botschaft-Id
+ gleich lange High Pulse, gefolgt von kurzen Low-Pulse --> Bit Stuffing
+ CRC am Ende
+ Bitanzahl variiert
+ Acknowledge am Ende
Dagegen spricht das normalerweise zwei Leitungen die Daten übertragen. 
Aber vielleicht wurde der Tranciever gespart und nur das TX-Signal wird 
über eine kurze Strecke übertragen.

Gruß
Mentos77

von Yalu X. (yalu) (Moderator)


Lesenswert?

Ergänzung zu meinem Beitrag von oben:

Ja, das sind tatsächlich CAN-Nachrichten. Neben der Bitzahl, der DLC und
den einzelnen Steuerbits stimmt auch die 15-Bit-CRC bei allen vier
Nachrichten, das kann fast kein Zufall sein.

: Bearbeitet durch Moderator
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Yalu X. schrieb:
> Ja, das sind tatsächlich CAN-Nachrichten. Neben der Bitzahl, der DLC und
> den einzelnen Steuerbits stimmt auch die 15-Bit-CRC bei allen vier
> Nachrichten, das kann fast kein Zufall sein.

 Richtiges CAN wird es wohl kaum sein.
 Bei CAN sind alle Layer streng definiert, vor allem was den Bus
 betrifft. Eine Leitung für Daten gibt es nicht, CAN-Low und CAN-High
 sind vorgeschrieben.

 Bitstuffing und Header mögen da ähnlich aussehen, aber CAN kann es
 trotzdem nicht sein.

: Bearbeitet durch User
von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

Ist ganz sicher was Proprietäres. Schaut euch nur das letzte highbit an. 
Der Pegel dieses Bits ist bei Telegrammen um ca.20% reduziert.

von (prx) A. K. (prx)


Lesenswert?

Marc Vesely schrieb:
> Eine Leitung für Daten gibt es nicht, CAN-Low und CAN-High
>  sind vorgeschrieben.

Bei Single Wire CAN auch?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Marc Vesely schrieb:
>  Richtiges CAN wird es wohl kaum sein.

Habe ich das irgendwo geschrieben? Ich habe nur geschrieben, dass es
sich um CAN- Nachrichten handelt.

>  Bei CAN sind alle Layer streng definiert, vor allem was den Bus
>  betrifft.

Was die Leitung(en) und die elektrischen Parameter der Signale betrifft,
lässt der Standard mehrere Alternativen zu. Die Übertragung muss nicht
einmal elektrisch, sondern darf auch optisch (über Lichtwellenleiter)
erfolgen.

>  Eine Leitung für Daten gibt es nicht, CAN-Low und CAN-High
>  sind vorgeschrieben.

Nein.

Hier ist ein Bisschen Lesestoff zu dem Thema:

  http://www.can-cia.org/index.php?id=systemdesign-can-physicallayer#c2068

Wenn du's genauer wissen möchtest, musst du dir die einschlägigen Normen
besorgen.

Ob der physical Layer einem der in dem Link genannten Standards (z.B.
SAE J2411 single wire) entspricht oder nicht, ist hier aber ziemlich
belanglos, da sich der TE ausschließlich für das eingesetzte Protokoll
interessiert. Und das ist eben das beim CAN verwendete.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Winfried J. schrieb:
> Ist ganz sicher was Proprietäres. Schaut euch nur das letzte highbit an.
> Der Pegel dieses Bits ist bei Telegrammen um ca.20% reduziert.

Das kommt daher, dass dieses Bit (ACK) nicht vom Sender, sondern vom
Empfänger der Nachricht auf den Bus geschrieben wird. Da können sich
kleinere Unterschiede im Signalpegel ergeben.

Das ist ein weiteres Indiz dafür, dass hier das CAN-Protokoll verwendet
wird.

: Bearbeitet durch Moderator
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

A. K. schrieb:
> Bei Single Wire CAN auch?

 Natürlich nicht, aber Single Wire habe ich nur beim Fensterheber und
 manch älteren Klimaanlagen in Autos gesehen.
 Und CAN mit 9600B oder 10KB erschien mir auch nicht besonders logisch.
 Deswegen habe ich CAN ausgeschlossen.

Yalu X. schrieb:
> Ob der physical Layer einem der in dem Link genannten Standards (z.B.
> SAE J2411 single wire) entspricht oder nicht, ist hier aber ziemlich
> belanglos, da sich der TE ausschließlich für das eingesetzte Protokoll
> interessiert. Und das ist eben das beim CAN verwendete.

 Naja, wenn du die einzelnen bits dekodiert hast...
 Ich habe es nicht getan, glaube dir aber aufs Wort.

von Florian W. (flowe)


Lesenswert?

Ok das hilft mir schon mal weiter. Dann werde ich mir mal Can ein 
bischen näher anschauen.
Vielen Dank für eure Hilfe.

Wünsche euch ein schönes Wochenende...

von Florian W. (flowe)


Lesenswert?

Yalu X. schrieb:
> Hier ist ein Bisschen Lesestoff zu dem Thema:
>
>   http://www.can-cia.org/index.php?id=systemdesign-can-physicallayer#c2068

Wenn ich versuche die Frames anhand des hier angegebenen Schemas zu 
dekodieren komme ich auf nicht sinnvolle Ergebnisse.

Könntest du mir sagen nach welchem Schema du das dekodiert hast? Oder 
brauche ich da wirklich gleich die ganze Norm?

Grüße Florian

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Lesenswert?

Florian We schrieb:
> Wenn ich versuche die Frames anhand des hier angegebenen Schemas zu
> dekodieren komme ich auf nicht sinnvolle Ergebnisse.

Nimm einfach die Wikipedia-Seite, da steht alles Wichtige drin:

  http://de.wikipedia.org/wiki/Controller_Area_Network#Frame-Aufbau

Beachte, dass im dortigen Diagramm nur 1 Datenbyte übertragen wird
(DLC=1), bei dir sind es aber 6 Datenbytes (DLC=6). Deswegen sind bei
dir die Nachrichten länger.

Im folgenden ist gezeigt, wie die vier Nachrichten aus deinen Oszi-
Screenshots dekodiert werden.

Zeile 1: Dateiname

Zeile 2: Signalform

Zeile 3: Zugehörige Bits in negativer Logik (high=0, low=1)

Zeile 4: Position der Stopfbits (erscheinen immer nach 5 gleichen Bits)

Zeile 5: Entstopfte Nachricht (alle Stopfbits sind entfernt)

Danach:  Unterteilung in die einzelnen Elemente mit den jeweiligen
         numerischen Werten (Big-Endian)

1
Durchfluss_Stufe_8.png:
2
—_—_———_——__————__—————_———_—————_——_—_—————_—__—_——_—————_—————_—————_——_——___—_———___—_—__________
3
0101000100110000110000010001000001001010000010110100100000100000100000100100111010001110101111111111
4
                        ^         ^          ^             ^     ^     ^
5
0101000100110000110000000010000000101000000110100100000000000000000100111010001110101111111111
6
|<—————————>|||<——><——————><——————><——————><——————><——————><——————><—————————————>||<—————><—>
7
|Identifier |||DLC Data    Data    Data    Data    Data    Data    CRC            ||EOF    IFS
8
|(0x513)    |||(6) (0x01)  (0x01)  (0x40)  (0xD2)  (0x00)  (0x00)  (0x4E8E)       ||  
9
Start       ||Reserved                                                            |ACK-Delimiter
10
            |IDE                                                                  ACK-Slot
11
            RTR
12
13
14
Durchfluss_Stufe_7.png:
15
—_—_———_——__————__—————_———_—————_——_—_—————_—_—__—_—————_—————_—————_————_——_————____——_—__________
16
0101000100110000110000010001000001001010000010101101000001000001000001000010010000111100101111111111
17
                       ^         ^          ^            ^     ^     ^
18
0101000100110000110000000010000000101000000101101000000000000000000010010000111100101111111111
19
|<—————————>|||<——><——————><——————><——————><——————><——————><——————><—————————————>||<—————><—>
20
|Identifier |||DLC Data    Data    Data    Data    Data    Data    CRC            ||EOF    IFS
21
|(0x513)    |||(6) (0x01)  (0x01)  (0x40)  (0xB4)  (0x00)  (0x00)  (0x243C)       ||  
22
Start       ||Reserved                                                            |ACK delimiter
23
            |IDE                                                                  ACK slot
24
            RTR
25
26
27
Durchfluss_Stufe_6.png:
28
—_—_———_——__————__—————_———_—————_——__—_——_——____—————_—————_—————_—————_—__—_—_____———___—__________
29
01010001001100001100000100010000010011010010011110000010000010000010000010110101111100011101111111111
30
                       ^         ^                    ^     ^     ^     ^           ^
31
0101000100110000110000000010000000110100100111100000000000000000000011010111110011101111111111
32
|<—————————>|||<——><——————><——————><——————><——————><——————><——————><—————————————>||<—————><—>
33
|Identifier |||DLC Data    Data    Data    Data    Data    Data    CRC            ||EOF    IFS
34
|(0x513)    |||(6) (0x01)  (0x01)  (0xA4)  (0xF0)  (0x00)  (0x00)  (0x35F3)       ||  
35
Start       ||Reserved                                                            |ACK delimiter
36
            |IDE                                                                  ACK slot
37
            RTR
38
39
40
42_.png:
41
—_—_———_——__————__—————_———_—————_——_—_———_—_____—————_—————_—————_—————_————__—_____—_———_—__________
42
010100010011000011000001000100000100101000101111100000100000100000100000100001101111101000101111111111
43
                       ^         ^               ^    ^     ^     ^     ^            ^
44
0101000100110000110000000010000000101000101111100000000000000000000000110111111000101111111111
45
|<—————————>|||<——><——————><——————><——————><——————><——————><——————><—————————————>||<—————><—>
46
|Identifier |||DLC Data    Data    Data    Data    Data    Data    CRC            ||EOF    IFS
47
|(0x513)    |||(6) (0x01)  (0x01)  (0x45)  (0xF0)  (0x00)  (0x00)  (0x0DF8)       ||  
48
Start       ||Reserved                                                            |ACK delimiter
49
            |IDE                                                                  ACK slot
50
            RTR


Die CRCs kannst du mit den hier geposteten C-Funktionen berechnen lassen
und auf Richtigkeit prüfen:

  http://can-bus.996267.n3.nabble.com/How-CRC-for-CAN-bus-is-calculated-td4034.html

: Bearbeitet durch Moderator
von Soul E. (Gast)


Lesenswert?

Marc Vesely schrieb:

>  Richtiges CAN wird es wohl kaum sein.

Highspeed-CAN wird es nicht sein, richtig. Es gibt aber noch eine uralte 
Norm, die mit umgedrehten TTL-Pegeln arbeitet. High (dominant) wird 
aktiv getrieben, Low (rezessiv) über einen Widerstand eingestellt.

Hier das Datenblatt eines passenden Transceivers: 
http://www.nxp.com/documents/data_sheet/AU5790.pdf

Das System findet man noch in Nutzfahrzeugen und in Heizungssteuerungen.

von Florian W. (flowe)


Lesenswert?

@ Yalu X.
Wow echt vielen Dank für die Mühe (allerdings passt die Zuordung der 
Bits nicht zu den Bildern ;) ). Ich hatte die Invertierung nicht gemacht 
und bin dann nicht klar gekommen. Jetzt schaut das ganze schon besser 
aus.
Hast du das von Hand gemacht oder hast du dafür ein Tool (Bereiche und 
Kennzeichnung)

@soul eye
Danke für den Tip. Aber kennst du auch einen den man noch irgendwo 
kaufen kann? Oder kann ich diesen CAN Typ auch mit einem anderen Typ von 
Transceiver betreiben?

Grüße Florian

von Soul E. (Gast)


Lesenswert?

Ich glaube nicht, das wir von den Dingern irgendwo noch welche haben. 
Ein CANcab dafür habe ich aber noch...


Für den Privatgebrauch könntest Du einen (PNP-)Transistor gegen Plus und 
einen Widerstand gegen Masse schalten. Mehr macht der Transceiver ja 
auch nicht. Die ganzen Schutzschaltungen fehlen dann natürlich. Der 
Transistor wird dann mit TxCAN so angesteuert, dass er bei einem 
dominanten Pegel (TxCAN low) schaltet. Bei rezessivem Pegel (TxCAN high) 
zieht der Widerstand den Bus auf Masse.

Das empfangene Signal geht dann über einen Inverter auf RxCAN.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Florian We schrieb:
> (allerdings passt die Zuordung der
> Bits nicht zu den Bildern ;)

Oh ja, da ist leider etwas durcheinander geraten. Als ich den letzten
Beitrag zusammenschrieb, wusste ich nicht mehr, in welcher Reihenfolge
ich die Oszi-Bilder drei Tage zuvor ausgewertet habe. Man kann die
Bitmuster aber leicht anhand der letzten paar Bits den einzelnen Bildern
zuordnen.

> Hast du das von Hand gemacht oder hast du dafür ein Tool (Bereiche und
> Kennzeichnung)

Von Hand. Man könnte natürlich auch ein kleines Tool schreiben, das eine
Datei mit den Oszi-Messwerten einliest und die Dekodierung automatisch
durchführt. Das würde vor allem bei der zeitlichen Quantisierung des
Signals einiges an Arbeit sparen.

von Florian W. (flowe)


Lesenswert?

Yalu X. schrieb:
> Man kann die
> Bitmuster aber leicht anhand der letzten paar Bits den einzelnen Bildern
> zuordnen.

Hab ich auch so gemacht. War kein Problem. Also nochmal vielen vielen 
Dank für die Mühe... (An alle die geantwortet haben)

Grüße Florian

von Tobias K. (kurzschluss81)


Lesenswert?

Zu der Frage mit welchem Transciever man das hinbekommt.
Es gibt CAN Low Speed Transciever die auch problemlos mit  einer 
Eleitung arbeiten. Die melden dann meist nur einem Pin das ein Fehler 
vorliegt.
z.B. der TJA1055 kan dies. Den gibt es in der 5V und in der 3,3V Version

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.