mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CANBus mit dsPIC30F4011 und MCP2551


Autor: Lorenz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin Neuling auf dem Gebiet der Controller-Programmierung, bitte also 
um Nachsicht.
Ich möchte ein CAN-Bus mit den oben genannten Bausteinen realisieren. 
Als Entwicklungsumgebung habe ich PIC C Compiler. Die Taktfrequenz des 
Oszilators beträgt 6MHz mit PLL8(clock=48MHz). Als Prototype-Llibrary 
verwende ich die mitgelieferte can-dsPIC30.c und can-dsPIC30.h.
Ich möchte eine Baudrate von 500kbit/s einstellen und habe mir mit Hilfe 
von dem Bit Timing Calculator von Microchip die BitTimings berechnen 
lassen.

Der Calculator berechnet folgende Werte(Tq=24):
BRP-1 1
Propagation Delay  7
Phase Segment 1          8
Phase Segment 2   8
Syncronization Jump Width (SJW)  1

In der Headerdatei setze ich die neuen Werte ein (Tq=24):
CAN_BRG_SYNCH_JUMP_WIDTH  1
CAN_BRG_PRESCALAR  1
CAN_BRG_PHASE_SEGMENT_1  8
CAN_BRG_PHASE_SEGMENT_2  8
CAN_BRG_PROPAGATION_TIME 7

Leider funktioniert der CAN-Bus mit diesen Einstellungen nicht. Was 
mache ich falsch?

Gruß Lorenz

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
orenz schrieb:

> Leider funktioniert der CAN-Bus mit diesen Einstellungen nicht. Was
> mache ich falsch?

Funktioniert der Loopback-Test?

Autor: Lorenz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist ein loopback test? und wie kann ich den durchführen?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CAN Controller auf "Kurzschluss" schalten, Frame senden, sehen ob er 
wieder reinkommt. Wenn das auch nicht geht, dann kämpft man nicht (nur) 
mit der Bitrate. Weil kein Bus beteiligt.

Siehe CiCTRL.REQOP=010 und Kap 23.5.3.

Autor: Lorenz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe gerade einen Link im Netz gefunden der die Problematik 
beschreibt.
http://www.ccsinfo.com/forum/viewtopic.php?t=43384
könnte das der Fehler bei mir sein?

wieso wird im code SJW auf null gesetzt, obwohl nach default 1 x Tq sein 
sollte?
---CAN_BRG_SYNCH_JUMP_WIDTH  0  //synchronized jump width (def: 1 x 
Tq)---
@A.K. Könnten Sie mir das erklären!

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lorenz schrieb:

> wieso wird im code SJW auf null gesetzt, obwohl nach default 1 x Tq sein
> sollte?

Ich habe den Thread nicht gelesen, erlaube mir aber drauf hinzuweisen, 
dass es einen Unterschied zwischen dem Wert der SJW und der Codierung im 
Register gibt. Als Wert ergibt 0 keinen Sinn, als Codierung schon.

Was den Rest angeht: Wenn der Loopback funktioniert, dann können wir 
weiter über die Bitratendefinition philosophieren. Solange der nicht 
funktioniert ist das sinnlos.

Autor: Lorenz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort. Also das Senden funktioniert, habe den 
CanTx mit einem Osziloskop geplottet und die Signalfolge scheint richtig 
zu sein. Ich sende eine Botschaft und die Signalfolge läuft periodisch 
weiter!

Eine Frage noch:
Entspricht die Codierung "0" dem SJW =1, oder z.B die Codierung des BRP 
"4" einem Prescaler von 5?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lorenz schrieb:

> Entspricht die Codierung "0" dem SJW =1,

Ja.

> oder z.B die Codierung des BRP "4" einem Prescaler von 5?

Nein. Da steckt ein Faktor 2 mit drin.

Solltest du es so weit geschafft haben, ohne einen Blick ins 
Referenzhandbuch des Controllers zu riskieren? Das steht da nämlich 
drin.

Auch ganz nützlich: Die AN754 von Microchip. Die Register dort sehen 
nicht exakt so aus wie beim PIC30, aber ähnlich genug.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, beliebter Fehler bei anfänglichen Tests: Ein CAN Bus mit nur 
einer Node, nämlich der sendenden, läuft unweigerlich auf einen Fehler 
beim Sender (ausser im sowieso busfreien Loopback-Mode). Mindestens eine 
zweite funktionsfähige Node muss aktiv(!) zuhören und bestätigen, dass 
was fehlerfrei vorbeikam, was sie auch dann tut, wenn nicht adressiert.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.