Forum: Mikrocontroller und Digitale Elektronik [MSP430] Starthilfe zum MCP2515 CAN-Controller


von Roland N. (eroli)


Lesenswert?

Hallo zusammen,

mein MSP430(F5438) soll durch eine Kombination aus CAN-Controller 
MCP2515 und CAN-Transceiver SN65HVD230D erweitert werden. Bevor ich die 
neue Hardware nun aber verlöte, würde ich mich über eine Rückmeldung 
freuen, ob ich auch wirklich nichts vergessen habe.

Ich gehe die Pins mal entsprechend der Nummerierung durch:
MCP2515
1  - TXCAN - Verbunden mit Pin1 vom Transceiver (D_TO_TXCAN)
2  - RXCAN - Verbunden mit Pin4 vom Transceiver (R_TO_RXCAN)
3  - CLKOUT / SOF - nicht verbunden
4  - TX0RTS - nicht verbunden
5  - TX1RTS - nicht verbunden
6  - TX2RTS - nicht verbunden
7  - OSC2 - verbunden mit Quarz (16Mhz)
8  - OSC1 - verbunden mit Quarz (16Mhz)
9  - GND - verbunden mit GND
10 - VCC - verbunden mit VCC
11 - RX0BF - nicht verbunden
12 - INT - nicht verbunden
13 - SCK - verbunden mit UCA1CLK des MSP's (P3.6)
14 - SI - verbunden mit UCA1SIMO des MSP's (P5.6)
15 - SO - verbunden mit UCA1SOMI des MSP's (P5.7)
16 - CS - verbunden UCA1STE des MSP's (P5.5)
17 - RESET - verbunden mit dem Reset-Pin des MSP's

Der SN65HVD230D ist wie folgt verschaltet:
1 - D_TO_TXCAN - verbunden mit TXCAN vom MCP2515
2 - GND - verbunden mit GND
3 - VCC - verbunden mit VCC
4 - R_TO_RXCAN - verbunden mit RXCAN vom MCP2515
5 - VRET - nicht verbunden
6 - CANL - verbunden mit CAN-BUS (CANL)
7 - CANH - verbunden mit CAN-BUS (CANH)
8 - RSLOPE - verbunden mit GND (einfachste Möglichkeit für schnelle 
Baudrates?)

Ist es damit möglich anständig mit dem CAN-Controller zu arbeiten? Oder 
wäre es doch eine empfehlenswerte Idee die Pins TX0RTS, TX1RTS, TX2RTS, 
RX0BF, RX1BF und INT mit dem MSP430 zu verbinden?

Ferner frage ich mich, wozu die RTS und BF Register genau da sind? Diese 
sind doch nur erforderlich, wenn man mit Interrupts arbeiten möchte, 
oder? Es sollten sich aber doch auch alle Funktionen mittels des 
SPI-Interfaces realisieren lassen oder nicht?
(Ist mein SPI richtig verkabelt?)

Noch etwas: Sobald der MCP2515 eine CAN-Nachricht empfangen hat, ist 
dieser doch bestimmt dazu in der Lage einen Interrupt zu erzeugen. Muss 
ich dafür den Pin INT mit einen freien Pin meines MSP's verbinden oder 
benötige ich die anderen Pins dafür (TX?RTS, RX?BF)?

Durch die vielen Einstellungsmöglichkeiten des MCPs, tue ich mich etwas 
schwer mit dieser neuen Materie. Daher würde ich mich über jedes 
erklärendes Wort sehr freuen.

Ich bedanke mich bereits jetzt für jede nützliche Antwort :-)

PS: Wenn ihr einen Schaltplan anstatt der Liste bevorzugen würdet, kann 
ich euch den gerne auch noch nachliefern ;-)

von Max G. (l0wside) Benutzerseite


Lesenswert?

Ohne den Baustein im Detail zu kennen, ein paar Anmerkungen. Den MSP430 
kenne ich (und verstehe etwas von CAN), außerdem habe ich natürlich ins 
DB geschaut.

Roland M. schrieb:
> 17 - RESET - verbunden mit dem Reset-Pin des MSP's
Das ist eine schlechte Idee. Hänge den Reset an einen GPIO des MSP, dann 
kannst du den Baustein gezielt (de-)aktivieren.

> Der SN65HVD230D ist wie folgt verschaltet:
> 3 - VCC - verbunden mit VCC
Abblock-C nicht vergessen.
> 8 - RSLOPE - verbunden mit GND (einfachste Möglichkeit für schnelle
> Baudrates?)
Im Datenblatt steht was von 10k...100k, die Grafik passt aber nicht so 
recht dazu. Mache 10k rein, sie tun dir nicht weh.

> Ist es damit möglich anständig mit dem CAN-Controller zu arbeiten? Oder
> wäre es doch eine empfehlenswerte Idee die Pins TX0RTS, TX1RTS, TX2RTS,
> RX0BF, RX1BF und INT mit dem MSP430 zu verbinden?
Das hat Microchip doch schön beschrieben:
"When a message is moved into either of the receive buffers, the 
appropriate CANINTF.RXnIF bit is set. This bit must be cleared by the 
MCU in order to allow a new message to be received into the buffer. This 
bit
provides a positive lockout to ensure that the MCU has finished with the 
message before the MCP2515 attempts to load a new message into the 
receive buffer.
If the CANINTE.RXnIE bit is set, an interrupt will be generated on the 
INT
pin to indicate that a valid message has been received. In addition, the
associated RXnBF pin will drive low if configured as a receive buffer 
full pin. See Section 4.4 “RX0BF and RX1BF Pins” for details.

Du kannst dir also aussuchen, ob du /INT auswerten und dann per SPI 
nachschauen willst, was denn nun los  ist oder ob du es gerne 
mundgerecht per Leitung serviert hättest.
Wenn du per SPI permanent abfragst, kannst du vielleicht sogar auf /INT 
verzichten. Bei SPI fängt der Peripheriebaustein aber nicht von sich aus 
an zu reden, du musst ihn schon fragen.
Die Verdrahtung sieht ganz ok aus.

Auf Basis deiner Fragen habe ich die dumpfe Ahnung, dass du noch einiges 
vor dir hast. Viel Erfolg (das ist nicht ironisch gemeint).

Max

: Bearbeitet durch User
von Thomas F. (igel)


Lesenswert?

Wie mein Vorredner schon schrieb:

Widerstand an RSlope des Tranceivers. Ich nutze meist 680R.

Zum MSP430 Reset kann ich nichts sagen, ich nutze Atmegas. Bei denen 
hänge ich Reset des MCP2515 an den Reset des uC mit der Atmega-üblichen 
Beschaltung 10k Pull-Up und C nach GND.


Roland M. schrieb:
> Noch etwas: Sobald der MCP2515 eine CAN-Nachricht empfangen hat, ist
> dieser doch bestimmt dazu in der Lage einen Interrupt zu erzeugen. Muss
> ich dafür den Pin INT mit einen freien Pin meines MSP's verbinden oder
> benötige ich die anderen Pins dafür

Jep, Interrupt-Ausgang des CAN-Controllers an den uC. Der 
Interrupt-gesteuerte Empfang von Botschaften erleichtert m.E. die 
Programmierung und spart Rechenzeit.

von Gunther Mannigel (Gast)


Lesenswert?

Ich hatte mal einen F5508 mit einem MCP2515 und TJA1043 verwendet. Da 
musste noch ein RC-Glied zwischen MCP2515 und TJA1043 RX. Könnte sein, 
dass Du das auch gebrauchen könntest.

Gruß
Gunther

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.