Forum: Mikrocontroller und Digitale Elektronik CANTransceiver


von Sascha (Gast)


Lesenswert?

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

von npn (Gast)


Lesenswert?

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.

von Thomas F. (igel)


Lesenswert?

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.

von Bronco (Gast)


Lesenswert?

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.

von Sascha (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.