CANTransceiver

Gast #4101506
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
Gast #4101518
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.
#4101561
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.
Gast #4101620
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.
Gast #4101643
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.