Forum: Mikrocontroller und Digitale Elektronik Zustände aus CAN Message extrahieren


von Markus (Gast)


Lesenswert?

Guten Morgen Gemeinde!
Ich bräuchte einmal eure Hilfe im Bezug auf das Handling einer CAN 
Message.
Folgendes ist gegeben!
Ich bekomme über den CAN Bus eine Nachricht in welcher Zustände von 
Tasten übertragen werden. Jeweils ein Byte überträgt zwei Tasten, sprich 
ich könnte max. 16 Tasten auswerten. Für eine Taste wird jeweils ein 
nibble genutzt d.h.
wenn eine Nachricht zum Beispiel 0x11 enthält sind Taste 1 und 2 high. 
Oder anders 0x10 dann Taste 1 low Taste 2 high.
Wie kann ich jetzt am einfachsten in meiner Applikation einer Variable 
den Zustand high bzw. low zuweisen.

von Christian (Gast)


Lesenswert?

Meinst du sowas in der Art:

VariableTaste1 = 0x11 & 0xF
VariableTaste2 = (0x11 >> 8) & 0xF

Oder geht es dir eher um das handling der CAN message?

Christian

von Markus (Gast)


Lesenswert?

Also das CAN Handling mit Nachrichten abhohlen zwischenspeichern und so 
weiter klappt eigentlich. Habe auch kein Problem z.B. Variablen zu 
verarbeiten die über den Bus kommen, aber gerade habe ich wohl ein Brett 
vorm Kopf.
Also die Sache die du aufgeführt hast geht schon in die Richtung in der 
ich Suche!

von Christian (Gast)


Lesenswert?

Klappt es denn, dass du einzelne Bytes in der Botschaft ausliest und 
darauf zugreifst bzw sie einer Variablen zuweist, oder hast du bisher 
nur immer die gesamten Daten (max 8Byte) ausgelesen?

übrigens:
> Jeweils ein Byte überträgt zwei Tasten,

Warum das denn überhaupt? Hast du einfluss darauf? Ist ja nicht gerade 
sparsam....

von Markus (Gast)


Lesenswert?

Also auf die Übertragung habe ich keinen Einfluss. Eine Message kann ja 
8 Byte Übertragen. Natürlich könnte man das auch auf bit ebene machen 
aber das ist nicht notwendig weil die Buslast relativ gering ist mit 
knapp 10%.
Eigentlich brauche ich nur die Info wie ich die nibble einzel 
extrahieren kann.

von Christian (Gast)


Lesenswert?

Byte1 = (Message >> 24) & 0xFF;
Byte2 = (Message >> 16) & 0xFF;
Byte3 = (Message >>  8) & 0xFF;
Byte4 =  Message & 0xFF;

So wie ich dich verstanden habe sind die Stati immer in Bit 0 und Bit 4 
eines Bytes enthalten. ( also wenn beide Tasten gedrückt sind --> 0001 
0001)

Die einzelnen Bits kriegst du dann wie folgt raus (hab mich beim letzten 
Post vertippt):

VariableTaste1 = ByteX & 0x1;
VariableTaste2 = (ByteX >> 4) & 0x1;

So funktioniert das dann für alle Statusvariablen für die einzelnen 
Taster. Du musst nur wissen welches Bit genau für welchen Taster steht.

Christian

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.