Forum: Mikrocontroller und Digitale Elektronik MCP2515 CAN Problem (Arduino)


von Tobi O. (Firma: privat :)) (tobi1011)


Lesenswert?

Liebe Experten!

ich bin dabei, Daten über ein Arduino-CAN Modul Daten an ein 
"professionelles" CAN-USB Gerät zu senden. Habe alle möglichen Tests 
probiert, mein CAN-Modul auf dem Arduino Uno funktioniert (habe sogar 
ein zweites). Das Oszi spuckt auch was CAN-mäßiges daher bei allen CAN 
Modulen und dem USB Gerät mit Tx Modus.

Das Problem ist, dass zwischen dem CAN-USB Gerät und meinem CAN Modul 
keine Nachrichten erkannt werden. Beide Richtungen Tx/Rx auf beiden 
Geräten können nix miteinander anfangen (teilweise werden keine Errors 
angzeigt, nur wenn die Baudraten nicht übereinstimmen)... Leitungslänge 
ist 50cm mit 1x 120 Ohm.

Meine Frage ist, ob jemand Erfahrungen mit dem CAN Modul MCP2515 
zusammen mit industriellen CAN Geräten hat?
Habe auch noch verschiedene Libraries durchprobiert, alles erfolglos.

CAN MODUL:
MCP2515 
https://cdn-reichelt.de/documents/datenblatt/A300/SBC-CAN01-DATENBLATT.pdf
ARDUINO UNO (ATMEGA328P)

Besten Dank im Voraus!

von H.Joachim S. (crazyhorse)


Lesenswert?

Welches "professionelle CAN-USB-Gerät" ist es denn?

CANH/CANL vertauscht?
Masse mit verdrahtet?

von Tobi O. (Firma: privat :)) (tobi1011)


Lesenswert?

Hallo,

danke für die rasche Antwort.

Nein habe alles korrekt verdrahtet - die Komplexität dabei hält sich in 
Grenzen :D

Meine Bedenken sind nur, ob dieses "billige" CAN Modul das auch kann - 
dabei habe ich mal die Datenblätter durchforstet und die Frames, Pegel 
usw alles noch gegengecheckt - auch das sollte funktionieren.

Das professionelle Gerät ist von DeweSoft.

LG

von Tobi O. (Firma: privat :)) (tobi1011)


Lesenswert?

Also habe jetzt noch ein drittes Gerät getestet - Das Arduino CAN Modul 
kann's einfach nicht... Wandert gleich in die Tonne, Joy-it wird ab 
jetzt vermieden.

Werde mir mal ein anderes CAN Shield holen und dieses dann testen.

LG

von H.Joachim S. (crazyhorse)


Lesenswert?

Tobi O. schrieb:
> Das Arduino CAN Modul
> kann's einfach nicht...

Glaub ich nicht, das Problem wird wohl eher bei dir oder den blind 
verwendeten Bibliotheken liegen.
So ist das wohl in der Arduino-Welt...

Nimm dir die Schaltung des Teils zur Brust. Schau nach der 
Hardwareanbindung ob das alles so passt wie es die lib. Taktfrequenz des 
MCP2551 muss auch berücksichtigt werden.

von Tobi O. (Firma: privat :)) (tobi1011)


Lesenswert?

Naja, dass es an mir liegt, schließe ich niemals aus. Habe gerade die 
Geduld verloren...

Habe sogut wie alle Bibliotheken durchprobiert, mit dem Oszi messe ich 
ja auch immer was. Könnte nochmal probieren, ob dasselbe rauskommt mit 
unterschiedlichen Bibliotheken.

Mit Joy it habe ich mal eine schlechte Erfahrung mit einem PC gemacht - 
das habe ich jetzt emotional mitgetragen haha.

Ich werde mich die nächste Woche wiedermal dranmachen an meine 
Problemstellung, und die Bibliotheken besser studieren.


LG

von fchk (Gast)


Lesenswert?

Tobi O. schrieb:

> CAN MODUL:
> MCP2515
> https://cdn-reichelt.de/documents/datenblatt/A300/SBC-CAN01-DATENBLATT.pdf
> ARDUINO UNO (ATMEGA328P)

Ich habe eine Idee, wo das Problem liegt. Du benutzt die Schraubklemmen? 
Da sind aber nur zwei, also eine zu wenig. Du brauchst, CAN_H, CAN_L und 
GND. Ohne durchverbundenen GND funktioniert es nicht sicher.

Außerdem muss am Anfang und am Ende des CAN-Busses jeweils ein 120 Ohm 
Widerstand zwischen CAN_H und CAN_L sein. Wenn alles angeschlossen , 
aber ausgeschaltet (Wichtig!) ist, musst Du etwa 60 Ohm zwischen CAN_H 
und CAN_L messen. Im Ruhezustand müssen CAN_H und CAN_L auf 2.5V liegen.

fchk

von Einer K. (Gast)


Lesenswert?

H.Joachim S. schrieb:
> Glaub ich nicht, das Problem wird wohl eher bei dir oder den blind
> verwendeten Bibliotheken liegen.
> So ist das wohl in der Arduino-Welt...

Das Problem liegt öfter mal hier:
> 8MHz Kristalloszillator

Einige Libs(alle?) gehen von 16MHz aus, da weit üblicher.
Das muss also aufmerksam konfiguriert werden.

von Tobi O. (Firma: privat :)) (tobi1011)


Lesenswert?

fchk schrieb:

> Ich habe eine Idee, wo das Problem liegt. Du benutzt die Schraubklemmen?
> Da sind aber nur zwei, also eine zu wenig. Du brauchst, CAN_H, CAN_L und
> GND. Ohne durchverbundenen GND funktioniert es nicht sicher.

hm, werde ich auf jeden Fall probieren - zwischen den beiden CAN-USB 
Geräten ging es mit dem gleichen Kabel tadellos, ohne GND dazwischen. 
Natürlich habe ich die beiden am gleichen PC betrieben - das wäre der 
dann gleiche GND. amKopfkratz

@Arduino Fanboy:
Ja das hatte ich bereits in einigen Foren mitgekriegt - auf dem 
Oszillator steht SW-65-16M  --> klingt für mich nach 16MHz (google 
liefert nix dazu).

Komme wie gesagt nächste Woche wieder dazu, halte Euch am laufenden!

Danke und noch schönen Nikolo :D

LG Tobi

: Bearbeitet durch User
von Thomas F. (_thomas_)


Lesenswert?

H.Joachim S. schrieb:
> Nimm dir die Schaltung des Teils zur Brust. Schau nach der
> Hardwareanbindung ob das alles so passt wie es die lib. Taktfrequenz des
> MCP2551 muss auch berücksichtigt werden.

Genau, das ist ein häufiges Problem: in der Lib ist als Standardtakt 16 
Mhz eingestellt, auf dem CAN-Modul ist jedoch ein anderer Quarz verbaut.
Siehe: https://www.fischl.de/usbtin/#troubleshooting

von Einer K. (Gast)


Lesenswert?

Tobi O. schrieb:
> klingt für mich nach 16MHz
Das von dir verlinkte Produkt Datenblatt sagt was anderes.

Aber, wie auch immer .....

von Tobi O. (Firma: privat :)) (tobi1011)


Lesenswert?

Arduino Fanboy D. schrieb:
> Das von dir verlinkte Produkt Datenblatt sagt was anderes.

Stimmt, da steht 8Mhz, aber wenn man schaut, stehen auf Website und 
Datenblatt was verschiedenes. Die Abbildung vom Datenblatt zeigt auch 
einen 8MHz Oszillator.

Auf meinem steht nix von 8, nur von 16M...

von Werner R. (wt_r)


Lesenswert?

Hallo Tobi,

der MCP2515 hat die Betriebsart Loop-Back-mode. Damit kannst du deinen
CAN-Modul ohne externen CAN-Busteilnehmer testen (Acknowlwdge wird 
simuliert).

In dieser Betriebsart wird die gesendete CAN-Message intern als 
CAN-Message
empfangen. Damit kannst du deinen CAN-Modul einschliesslich Software 
testen.

Noch ein spezieller Hinweis zur Initialisierung des MCP2515. Wenn du
einen RESET-Befehl (0xC0) an den MPC2515 sendest, um den MCP2515 in den
COnfiguration-Mode zu setzen, solltest du mindestens 10ms warten, bis du
weitere Befehle an den MCP2515 sendest.

Gruß  Werner

von Tobi O. (Firma: privat :)) (tobi1011)


Lesenswert?

Hallo Werner!

Danke für deine Antwort! Ja der loopback funktioniert einwandfrei. Den 
Reset brauche ich ja nur ein einziges Mal zur Initialisierung oder?

Gedenke das mcp2515-board nur als Sender zu verwenden, um ein paar Daten 
vom microcontroller weiterzuschieben.

Lg

von H.Joachim S. (crazyhorse)


Lesenswert?

Tobi O. schrieb:
> Ja der loopback funktioniert einwandfrei.

Also mit ziemlicher Sicherheit ein Problem der Taktfrequenz. Kannst ja 
das "fremde" Gerät mal auf halbe Baudrate setzen. Das passt dann, wenn 
die Initialsierung des MCP von 16MHz ausgeht, tatsächlich aber nur mit 
8MHz läuft.

von Werner R. (wt_r)


Lesenswert?

Tobi O. schrieb:
> Hallo Werner!
>
> Danke für deine Antwort! Ja der loopback funktioniert einwandfrei. Den
> Reset brauche ich ja nur ein einziges Mal zur Initialisierung oder?
>

Hallo Tobi,

ja, den RESET brauchst du in der Regel nur für den Configuration Mode.

Wenn dein Modul im Loop Back Mode funktioniert, liegt dein Problem
wahrscheinlich im BIT-Timing bzw. in der falschen Baudrate.
Bei wieviel Prozent liegt denn der Sample Point ?

Gruß

Werner

von Tobi O. (Firma: privat :)) (tobi1011)


Lesenswert?

So liebe mikrocontroller.net Helfer -

Es funktioniert nun einwandfrei - habe CAN_L und CAN_H doch nochmal 
vertauscht und siehe da... Das Ding ist, es steht vlt sogar falsch auf 
dem CAN Shield drauf - habe alle Dokumentationen durchgeschaut, so wie 
es jetzt funktioniert, ist es eigentlich verkehrt rum verdrahtet...

An der Baudrate lag es nicht - der Oszilalla hat 16MHz...

Manch andrer möge sich doof vorkommen, aber mei - jetzt geht es!

Danke an Eure Unterstützung! Ich hoffe irgendwann selbst genug Erfahrung 
zu haben und andere hier unterstützen zu können.

Macht's gut und bis bald!

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.