Forum: Mikrocontroller und Digitale Elektronik MCP2515 CAN Controller


von Martin (Gast)


Lesenswert?

Hallo!

Ich bin dabei mir ein CAN mit MCP2515 CAN-Controllern, die über SPI an
eine ATmega16 angebunden sind, aufzubauen. Jedoch ist die
initialisierung des CAN controller aufgrund der vielen
configurationsregister ziemlich schwer zu überblicken (für mich). Das
gleiche gilt auch für das senden und empfangen von Messages. Nun wollte
ich fragen ob jemand schon erfahrungen mit diesem CAN controller gemacht
hat und eventuell ein C-Code (ich verwende WinAVR) beispiel posten
könnte?

danke und gruß,
martin

von Tobi (Gast)


Lesenswert?


von Martin (Gast)


Lesenswert?

@tobi

hab auch schon hier im forum danach gesucht, aber leider nicht's
passendes gefunden. im grunde geht's mir um die abfolge der
initialisation des MCP2515 und dann ums senden und empfangen von msgs.

gruß,
martin

von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe die Sourcen von Microchip für den MCP2510 an den MCP2515
angepaßt. Das MCP2515.h ist komplett neu. Ein kleines Beispiel ist auch
dabei. Ist für den ATmega128 geschrieben.


Gruss

Steffen

von Stefan Kleinwort (Gast)


Lesenswert?

Hi,

auf welchem Controller arbeitest Du?

Ich habe den MCP2515 am mega16 laufen ... bzw. fast am laufen ... im
übrigen habe ich etwas in Steffens Sourcen spickeln dürfen, was recht
nützlich war (danke nochmal, Steffen!).

Was sinnvoll ist: beschränke die Einstellungen auf Dinge, die Du
wirklich brauchst, z.B. NUR standard- oder NUR extended frames. Die
allermeisten Register brauchst Du gar nicht. Wenn z.B. die
Acceptance-Masken Null sind, dann empfängt er einfach alles, egal wie
die ganzen Filter stehen - ganz sinnvoll mindestens für den Anfang.

Wichtig ist auch, gerade am Anfang: wenn Du nur ein Gerät am Bus hast
(nämlich das, auf dem Du programmierst), versucht der MCP2515 die Daten
ständig zu wiederholen, da er kein ACK eines anderen Busteilnehmers
bekommt. Abhilfe: in CANCTRL auf Oneshot-Modus schalten (und später
nicht vergessen, den wieder zurückzunehmen).

@Steffen:
Hat die 1ms Verzögerung nach jedem Senden in Deinem Code einen
besonderen Grund?
> #ifdef PR_RTX
>    PR_Wait_Ticks( 10 );            // short delay
> #else
>    wait_ms( 1 );
> #endif


Viele Grüße, Stefan

von crazy horse (Gast)


Lesenswert?

Und warum nicht gleich den AT90CAN128?

von Stefan Kleinwort (Gast)


Lesenswert?

@crazy horse:
rein aus meiner Sicht:

* weil ich 2 CAN-Busse brauche
* weil ich den mega16 gerade auch in einem anderen Projekt verwende
  und nicht gerne mit 2 Architekturen gleichzeitig arbeiten will
* weil ich mit dem mega16 komfortabel per JTAG-Debug arbeiten kann
* und noch einen ganz wichtigen, rein persönlichen Grund sage ich
  lieber nicht ... ;-)

Viele Grüße, Stefan

von Steffen (Gast)


Lesenswert?

@Stefan:

die Wartezeiten ( 1ms ) waren am Anfang nur zum Test. Beim Schreiben
und Lesen sind dann etwa 100µs OK. Das war aber meine Erfahrung mit dem
Betriebssystem, das ich damals benutzt habe.

Gruss

Steffen

von Horst (Gast)


Lesenswert?

Oi

ich suchte vergeblich danach, wie man das Gespann mcp2515--mcp2551
gegen Spitzen schützen kann. Wäre sicherlich mit Optokopplern zu
machen. Ich habe bist jetzt den pca85c250 studiert. In dessen
Datenblatt ist es schön abgebildet, mit 2 Optokopplern zwischen
Controller und Transceiver. Kann ich dieselbe Beschaltung für den mcp
nehmen?

von cazy horse (Gast)


Lesenswert?

welche Spitzen meinst du denn? Echte, eingebildete oder
über-über-vorsichtig: es könnten ja irgendwann mal welche kommen?
Der CAN-Bus läuft in den dreckigsten Umgebungen aufgrund des
Übertragungsprinzips und der eingebauten Mechanismen. Wo ist dein
Problem wirklich?

von Horst (Gast)


Lesenswert?

na z.B. bei Blitzeinschlag dachte ich, um die weiteren ICs zu schützen.
Ich mein es ist ja nicht umsonst im Datenblatt des SJA1000. WObei beim
mcp2551 fehlt dieses Problem....

von Martin (Gast)


Lesenswert?

Ich glaube nicht, dass ein Optokoppler bei einem Blitzschlag wirklich
nützlich wäre, aber ich lasse mich gerne eines Besseren belehren.

Aber bevor du diesen Baustein verwendest schau dir zur Sicherheit die
Errata-Blätter an. Ich kann mich erinnern etwas gelesen zu haben, dass
man nur einen Transmit-Buffer verwenden darf, da es sonst zu
fehlerhaften Daten kommen kann. Also Vorsicht! Aber der 2515 ist auf
jeden Fall schon viel besser als der 2510. Der 2510 strotzte nur so von
Fehlern.

Tschüss, Martin

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.