Guten Tag, ich habe angefangen mich mit CAN auseinanderzusetzen und möchte demnächst ein paar Nachrichten versenden und empfangen. Dazu verwende ich eine dsPIC30F4011 und einen MCP2551. Jetzt ist es so, dass der MCP2551 die Informationen vom controller erhält, diese passend umwandelt und auf den Bus schickt. Sollte der Bus belegt sein, bekomme ich die Nachricht als Fehler zurück und wird später erneut gesendet. Meine frage ist nun, wer kümmert sich darum, dass die Nachricht neu gesende wird? macht der MCP2551 automatisch? Oder muss man das im Code irgendwie berücksichtigen? Sascha
Sascha schrieb: > wer kümmert sich darum, dass die Nachricht neu gesende wird? Das macht normalerweise der CAN-Controller, nicht der Transceiver. Ich hab mir jetzt das Datenblatt vom dsPIC angeschaut, aber ich vermute mal, daß der einen CAN-Controller on board hat.
Sascha schrieb: > Meine frage ist nun, wer kümmert sich darum, dass die Nachricht neu > gesende wird? macht der MCP2551 automatisch? ein CAN-Transceiver wie MCP2551 ist lediglich eine Art Verstäerker oder Endstufe für die beiden CAN-Leitungen. Von sich aus macht der nichts. Eine nicht gesendete Botschaft wird vom CAN-Controller im dsPIC automatisch wiederholt bis diese gesendet und empfangen! wurde oder der CAN-Controller irgendwann mit Fehler aufhört.
Sascha schrieb: > Sollte der Bus belegt sein, bekomme > ich die Nachricht als Fehler zurück und wird später erneut gesendet. Ist so nicht ganz richtig. Beim CAN haben alle Nachrichten einen Identifier, der auch gleichzeitig die Priorität der Nachricht bestimmt. Falls zwei CAN-Knoten gleichzeitig senden wollen, setzt sich derjenige durch, dessen Nachricht die höhere Priorität (=niedrigerer Identifier) hat. Dies ist aber kein Fehler, sondern eine ganz normale Form der Arbitrierung. Der andere Knoten zieht sich zurück, bis der Bus wieder frei ist und versucht es dann automatisch nochmals. Einen Fehler gibt es nur dann, wenn Du von diesem Knoten (genauer gesagt: aus dem gleichen Messagebuffer des CAN-Controllers) eine weitere Nachricht senden willst, bevor es möglich war, die alte zu versenden. Der Sinn ist, dass Nachrichten mit höherer Prio vorrangig versendet werden.
Ah ja, eigentlich hätte ich das wissen müssen. Der MCP2551 ist nur der Verstärker. Das habe ich schonmal gelesen. Der Mikrocontroller hat den CAN-Controller in sich drinn (da dieser pins für TX und RX besitzt) hätte ich auch wissen müssen. @Bronco genau das habe ich gemeint. Also wenn die Priorität niedriger ist. Das hatte ich mir auch schon öfters angeguckt. Aber ich habe es falsch beschrieben. Trotzdem danke euch allen für eure Antworten.
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.