Forum: Mikrocontroller und Digitale Elektronik Probleme mit MCP2515


von Georg I. (dschi-ai)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!

Ich beschäftige mich gerade mit dem CAN-Bus und habe mir hierzu ein paar 
Platinen mit Mega16/MCP2515/MCP2551 hergestellt. Um das Rad nicht neu 
erfinden zu müssen, habe ich die Lib von Creatives-Chaos verwendet. 
Allerdings bekomme ich sie nicht zum Laufen.  Init etc. läuft, aber bei 
mcp2515_static_filter bleibt er hängen. Er wartet in der Funktion auf 
das Bit OPMOD2, welches aber nie gesetzt wird.
Sämtliche Versuche, abgesehen von dem bei der Initialisierung (init 
liefert true zurück), in einen anderen Operation-Mode zu wechseln, 
scheitern kläglich. Die REQOPx Bits lassen sich setzen (bestätigt durch 
lesen der Register), führen aber zu nichts.

Es hatte schon einmal jemand das Problem hier: 
Beitrag "Problem mit CAN Interface MCP2515/2551"
tobias_k73 hat aber leider nicht auf eine Anfrage geantworten, immerhin 
scheint er das Problem gelöst zu haben.

Weiß jemand weiter?

MfG, GI

von cskulkw (Gast)


Lesenswert?

Hast Du den Reset-PIN am MCP angeschlossen?

Denn nach dem Reset soll sich der MCP ohnehin im Konfigurationsmodus 
befinden. Das entspräche dem geforderten Bit OPMOD2.

Wenn sich der Controler nicht im Konfigurationsmodus befindet, dann 
lassen sich folgende Register nicht beschreiben:

CNF1, CNF2, CNF3
• TXRTSCTRL
• Filter Registers
• Mask Registers

siehe dazu auch Datenblatt Punkt 9.0 Modes of operation. (Seite ist 
versionsabhängig)


Verfügt der MCP über seinen eigenen Takt?

Hast Du schon irgend ein Byte auslesen können, dass nicht Null war? -> 
eventuell ein Register beschreiben,dass nicht vom 
Konfigurationsregistern abhängt. Dann funktioniert die Kommunikation. 
Ggf. zur Fehlersuche, Codestelle auskommentieren, wo der µC stehen 
bleibt.


Auch wenn Du jetzt eine andere Antwort erwartest. Es braucht seine Zeit 
Code zu rewieven, um mögliche Fehler zu finden. Aber da andere mit der 
Bibliothek erfolgreich waren, würde ich erst einmal die Hardware 
checken.

von Georg I. (dschi-ai)


Lesenswert?

Hardware sollte in Ordnung sein, SPI läuft (ich kann Register lesen, 
diese liefern plausible Ergebnisse), RESET ist fest auf VCC...
Ich habe alles zig mal überprüft, ich kann keinerlei Fehler erkennen.

Er setzt in can_static_filter() REQOP2 (durch auslesen des Registers 
überprüft), wechselt aber nie in den config-Modus (wartet also unendlich 
auf OPMOD2).

von Georg I. (dschi-ai)


Lesenswert?

Ähm...ääähm... Faszinierend. der oben beschriebene Fehler tritt nicht 
auf, wenn ich die CAN-Verbindung zu den anderen Platinen(baugleich, 
Software gleich) unterbreche. Warum, wieso, weshalb?

von cskulkw (Gast)


Lesenswert?

Da gab es letztes so einen Threas mit dem CAN128, der nach dem Reset auf 
den CAN-Leitung etwas zuckte. Dadurch entstanden gleich an den anderen 
CAN-Knoten eine Menge Error-Frames.

Aber ganz ehrlich, ich habe nicht diese Probleme und kann während des 
Betriebs den Reset durchführen. Da hackt auch nichts.

Ich habe mal versucht nachzuvollziehen, was da in Deinem Code abgeht. Da 
sind mir einige Aufrufe nciht plausibel. Von woher wird 
mcp2515_static_filter aufgerufen. Was macht canstat() usw...

von Georg I. (dschi-ai)


Lesenswert?

mcp2515_static_filter() wird aus main nach dem init aufgerufen.
canstat() gibt nur den Inhalt von CANSTAT auf dem uart aus, rein für 
Debug Zwecke.
Wer vielleicht die main() sucht, die ist in node.c (die eigentliche 
main.c)

von Georg I. (dschi-ai)


Lesenswert?

Es läuft jetzt. Woran das überaus nervige Problem lag, welches mich seit 
Tagen beschäftigt? Falsch einsortierte Widerstände die ich als 
Terminierung verwendet hab. (120k) Richtige 120R und nun sendet und 
empfängt es wie ein Weltmeister. Ich bin begeistert!

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.