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
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.
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).
Ä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?
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...
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.