Hallo zusammen ich habe ein MCP 2551 Board gekauft, um es mit meinem PIC18F45K80 zu verwenden. Ich möchte eine LED, die mit dem MCP-Board verbunden ist, über das CAN-Protokoll steuern. Eine CAN-Nachricht hat verschiedene Felder in einer Nachricht wie Start of Frame, Identifier, Control Field, Data Field, CRC, Acknowledgment und End of Frame. Jeder Knoten hat einen eindeutigen Identifikator, und ein Knoten weiß, ob eine Nachricht für ihn bestimmt ist, indem er die Nachrichten-ID überprüft. Ich bin mir bei der Nachrichten-ID für meinen Fall nicht sicher. Was wäre die Nachrichten-ID für meinen Fall und wer entscheidet darüber?
Im Endeffekt derjenige der die Messages verwaltet. Bist du alleine der Verwalter, kannst Du nehmen was Du möchtest. Vielleicht mal etwas über Arbitrierung auf den CAN Informieren. https://kfz-aufgaben.de/can/Arbitrierung.455.0.html
Wenn du nicht selber die Nachrichten-ID verwaltest (Sender und Empfänger) dann wahrscheinlich ein höheres Protokoll. zB. CANopen oder J1939 um mal nur zwei zu nennen. Dann hast du keine oder nur sehr eingeschränkte Wahlmöglichkeiten.
:
Bearbeitet durch User
Das wurde Dir doch bereits ausführlich erklärt: https://www.eevblog.com/forum/microcontrollers/can-message-id/
Claude M. schrieb: > Ich möchte eine LED, die mit dem MCP-Board verbunden ist, über das > CAN-Protokoll steuern. An das MCP-Board kannst du keine LED anschließen. Da ist nur der Transceiver drauf. An dieses Board musst du noch ein Controller-Board anschließen, nicht nur für die LED, sondern auch für die Implementierung der CAN-Logik. Der Transceiver macht nämlich nur die Umsetzung von analoger Busspannung auf digitale Spannungswerte. Claude M. schrieb: > Eine CAN-Nachricht hat verschiedene Felder in einer Nachricht wie Start > of Frame, Identifier, Control Field, Data Field, CRC, Acknowledgment und > End of Frame. Ja ... Claude M. schrieb: > Jeder Knoten hat einen eindeutigen Identifikator Nein. Oder vielmehr: Der pure CAN Standard kennt und beschreibt ein solches Konzept nicht. Du kannst jedem deiner Knoten einen solchen Identifikator irgendwie zuweisen. CAN macht da gar nichts. Claude M. schrieb: > und ein Knoten weiß, ob eine Nachricht für ihn bestimmt ist, indem er > die Nachrichten-ID überprüft Die meisten Implementierungen des CAN-Protokolls, ob in Hardware oder Software, erlauben es, Filter zu definieren, so dass die Anwendung nur Nachrichten bekommt die diese Filter passieren. Vielfach operieren diese Filter auf dem Identifier-Teil der CAN-Frames. Du kannst also den Identifier dazu nutzen, eine Empfängeradresse zu kodieren. Das ist aber völlig dir überlassen. Es sei denn natürlich, du möchtest mit den optionalen höheren Protokollschichten wie CANopen kompatibel bleiben. Dieses Vorgehen hätte allerdings den Nachteil, dass zwei Sendungen an denselben Empfänger denselben Identifier hätten, und dann wird die Arbitrierungslogik von CAN scheitern. Alternativ könnte der Sender in der ID auch die Art und Quelle der Nachricht kodieren. Und der Empfänger würde die für ihn interessanten Quellen und Arten filtern. Es ist dir überlassen. LG, Sebastian
:
Bearbeitet durch User
Sebastian W. schrieb: > Claude M. schrieb: >> Eine CAN-Nachricht hat verschiedene Felder in einer Nachricht wie Start >> of Frame, Identifier, Control Field, Data Field, CRC, Acknowledgment und >> End of Frame. > > Ja ... Allerdings spielen diese bei der Nutzung eigentlich keine Rolle. Um die kümmert sich der CAN-Controller. > Claude M. schrieb: >> Jeder Knoten hat einen eindeutigen Identifikator > > Nein. Oder vielmehr: Der pure CAN Standard kennt und beschreibt ein > solches Konzept nicht. Du kannst jedem deiner Knoten einen solchen > Identifikator irgendwie zuweisen. CAN macht da gar nichts. Eigentlich ist die ID auch eher dafür gedacht, den Inhalt zu kennzeichnen. Das heißt, es wird für jede ID definiert, welche Werte damit übertragen werden und in welchem Format. Wer die Botschaft sendet, ergibt sich daraus eher indirekt (Die Außentemperatur wird natürlich vom Außentemperatursensor gesendet), und empfangen tut sich jeder, der sich für einen der enthaltenen Werte interessiert. > Dieses Vorgehen hätte allerdings den Nachteil, dass zwei Sendungen an > denselben Empfänger denselben Identifier hätten, und dann wird die > Arbitrierungslogik von CAN scheitern. Es hat auch den Nachteil, dass der empfangende Knoten entweder nur insgesamt 8 Bytes an möglichen Daten empfangen kann oder man die festes Zuordnung zwischen ID und Format der Daten über Bord werfen muss. In letzterem Fall muss man dann noch ein Transportprotokoll wie z.B. ISO 15765-2 auf die CAN-Kommunikation oben drauf setzen. > Alternativ könnte der Sender in der ID auch die Art und Quelle der > Nachricht kodieren. Und der Empfänger würde die für ihn interessanten > Quellen und Arten filtern. Es ist dir überlassen. Das ist in der Regel der bessere Weg.
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.