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.
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
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!
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....
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.