Hallo, ich habe mit dem ATMEGA48, dem MCP2515 und dem SN65HVD1050 einen CAN-Knoten aufgebaut. Diesen Knoten habe ich so konfiguriert, daß ich erst einmal nur am CAN-Bus lesend teilnehme. Mit einem CAN-Interface habe ich dann Nachrichten versendet. Das Problem: Die empfangenden Nachrichten hatten immer mindestens einen Bitfehler in der ID z.B. statt 0x635 wurde 0x63D gelesen. Auf der Suche nach der Ursache ist mir beim durchsehen der Konfiguration des MCP2515 aufgefallen, daß die Konfigurationswerte nicht mit den gesendeten Werten übereinstimmten. Um den Effekt darzustellen habe ich eine Schleife eingebaut, die Register des MCP2515 schreibt und dann wieder ausliest. (-> Oszilloskop-Screenshots) http://www.imagebam.com/image/0057e327876636 http://www.imagebam.com/image/a72fe127876637 http://www.imagebam.com/image/86081a27876638 http://www.imagebam.com/image/86081a27876638 http://www.imagebam.com/image/8b3a5127876639 http://www.imagebam.com/image/73ef2827876640 http://www.imagebam.com/image/56fd1d27876641 http://www.imagebam.com/image/229d9627876642 http://www.imagebam.com/image/91232327876643 Vor der while-Schleife hatte ich bereits den Filter für RXB0 gesetzt auf RXF0SIDH: 0xC6 (Maske: 0xFF) RXF0SIDH: 0xA0 (Maske: 0xFF) um bei meinem ursprünglichen Vorhaben nur die StandardID 0x635 zu empfangen. Ausgelesen aus den Registern des Filters habe ich aber das hier: http://www.imagebam.com/image/0e811d27876644 http://www.imagebam.com/image/f53fe227876645 Seltsamerweise entsprechen die Werte aus RXF0, denen die ich beim Lesen von RXB0 (siehe Anfangsproblem) bekomme. Ich habe zuerst Vermutet es liegt am Reset des MCP2515, aber da ich jetzt alle Varianten mit Softreset, Hardreset (15k, 1nF), sowie Reset per ATMega-Port-Pin ausprobiert habe schließe ich das aus.Diese Test habe ich auf 3 verschiedenen MCP2515 durchgeführt, aber bei allen war es der selbe Effekt. Also lange Rede kurzer Sinn. Aus irgendeinem Grund wird das zuletzt gesendete Nibbel verschluckt und vom MCP2515 als 0xF interpretiert. Hat jemand diesen Effekt auch schon bei sich beobachtet oder fällt jemandem etwas ein was ich übersehen haben könnte. Ok, vielen Dank fürs Zuhören! Mit freundlichem Gruß Michael
Der MCP2515 funktioniert am AVR. Ist also kein prinzipielles Problem, sondern eines bei dir. SPI falsch konfiguriert? Code?
Hallo A.K., das SPI-Interface funktioniert soweit ganz gut und die Timings des MCP2515 sind soweit auch eingehalten wie es die Spezifikation vorgibt (siehe Screenshots). Den Code habe ich trotzdem angehängt zur Kontrolle. Der Code sieht vor beide SPI-Interfaces des ATMega48 zu benutzen, je nach Wunsch. MfG
Sorry! Verwenden tue ich nur das Standard-SPI-Interface.
Evtl. hilft Euch noch der MCP2515-Intialisierungs-Code (siehe Anhang) und noch ein Screenshot vom Einschaltmoment. http://www.imagebam.com/image/02529f27897369 MfG
Hallo, ich habe das Problem mit den Registerdaten lösen können. Lösung: In spi_read() das Dummybyte auf 0xFF setzen und ein 10k Pull-DOWN-Widerstand an SO. Ich habe nochmal die Literatur gewälzt auf der mein Versuch basiert und da ich mich am Anfang am Tutorial vom kreativen-chaos orientiert habe (http://www.kreatives-chaos.com/artikel/ansteuerung-eines-mcp2515) ist mir in der Einleitung zum Register-Lesen das hier ins Auge gesprungen
1 | Um ein Byte zu empfangen muss man also ein Dummy-Byte |
2 | BELIEBIGEN Inhalts auf den Bus legen und dabei die Daten |
3 | auf der Empfangsleitung auswerten. |
Bei mir war das Dummybyte 0x00. Das hab ich geändert auf 0xFF und siehe da, die Registerdaten wurden teilweise richtig ausgegeben. Aber nur teilweise. Die Ausgaben des MCP2515 "zuckten" öfter mal auf fehlerhafte Bytes. Abhilfe hat hier ein Pull-Down-Widerstand gebracht. Noch ein Hinweis: Ich habe verschiedene Dummybytes ausprobiert, aber NUR 0xFF hat immer richtige Ergebnisse produziert, also stimmt die Aussage mit dem "beliebigen Inhalt" in dem oben genannten Tutorial für meinen Fall nicht so ganz. Trotzdem an dieser Stelle ein großes Danke an den Autoren des Tutorials, es war sehr hilfreich beim Einarbeiten in die Fähigkeiten des MCP2515. Im Anhang der funktionierende SPI-Code für den ATMega48. Mit freundlichem Gruß Michael
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.