Moin! Ich habe folgendes Problem: Beim MCP 2515 (CAN-Controller) gibt es zwei Register, in denen die Adresse des Absenders steht. Da die Adresse etwas komisch aufgeteilt ist, würde ich sie gerne für Normalsterbliche lesbarer machen. RXB0SIDL hat in den Bits <7:5> die Bits <2:0> der Adresse stehen. Im RXB0SIDH stehen die Bits <10:3>. Mein Code sieht wie folgt aus: SIDL = read_MCP(RXB0SIDL);// unteres Adress-Byte einlesen SID<2:0> SIDL = SIDL>>5; // die obersten 3 Bit nach unten verschieben SIDH = read_MCP(RXB0SIDH);// oberes Adress-Byte einlesen SID<10:3> i = SIDH<<3; j = (i | SIDL); // die unteren 5 Bit von SIDH mit modifiziertem SIDL verodern i = SIDH>>5; SIDH = i;// SID modifizieren Dass man das einfach machen kann, weiß ich. Mit den unteren Bits von SIDL funktioniert das auch wunderbar, leider werden die oberen Bits aber nicht übertragen. Ich steh momentan etwas auf dem Schlauch. Es wäre schön, wenn mir jemand einen Hinweis geben könnte, was ich falsch mache. An den Typen liegt es nicht. Die sind alle gleich. Vielen Dank! Gruß Rahul
SIDL = read_MCP(RXB0SIDL); SIDH = read_MCP(RXB0SIDH); Adresse = ((SIDL >> 5) & 7) | (SIDH << 3);
Lösung gefunden: SIDL = (( SIDL >> 5 ) | (SIDH <<3)); SIDH = (SIDH >>5); Es war ein Problem der Schieberichtung... Jetzt fehlt nur noch der Rückweg...
Die Information in den Dateien mcp2510.zip und mcp2515.zip von kvaser.com und die Beispiele von microchip.com ersparen das "Erfinden neuer Raeder".
Leider muß ich gewisse Räder neu erfinden, da die Leute (bis jetzt einer), der die PC-Seite programmieren soll, nicht wirklich Ahnung hat, was er überhaupt machen will/soll. Das Semester ist fast vorbei, und er hat nur ein paar schöne Bilder in VB gemalt...
Aber genau die Routinen die notwendig sind, um die CAN-IDs fuer standard oder extended Frames zwischen unsigned long und den MCP-Registern hin und herzuschieben, gehoeren wahrscheinlich kaum zu den Dingen, die man neu erfinden "muß". Was das mit der PC-Seite zu tun hat, versteh' ich grad' nicht, aber auch egal. Whatever, sollte ja nur ein Tipp sein, um Zeit zu sparen.
Naja, warum soll ich in irgendwelchen Bibliotheken suchen, wenn mir die Lösung selber einfallen kann (s.o.). Das Protokoll für die PC-Seite muß so einfach wie möglich gehalten werden. Deswegen passiert die Bit-Verschiebungkomplett im Mikrocontroller... Ich hatte vorhin einfach nur ein Brett vor dem Kopf...
>Deswegen passiert die Bit-Verschiebungkomplett im >Mikrocontroller... Hm? Das muss sie doch so oder so... So weit ich das in Erinnerung habe, sind in einem der Register noch die Flags für Extd/Std-Frames enthalten usw. Aber das hat doch überhaupt nichts mit der PC-Seite zu tun!?!?
Naja, man könnte die Register so wie sie sind an den PC weiterleiten (CANSniffer), und die "Zerlegung" dort machen. Damit wäre die PC-Programmierseite aber etwas überfordert...
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.