Hallo Ich übe jetzt schon ca. 1 Woche an der Kommunikation zwischen ATmega644PA und MCP2515 mit SPI, herum. Das Programm wurde in Atmel Studio 7 geschrieben und ist eigentlich ein Abbild vom MCP2515-Tutorial, der Seite: http://www.kreatives-chaos.com/artikel/ansteuerung-eines-mcp2515 Mein Programm Initialisiert der Reihe nach, SPI und dann den MCP2515. Am schluss der Initialisierung des MCP2515 möchte ich zu Testzweck den Registerwert von "CNF1" an PortA ausgeben. Leider ist die Ausgabe an PortA: 0b00000000 anstatt 0b00000111. Daher schliesse ich auf ein Problem mit der SPI-Kommunikation. Ich hab auch schon mit einem Oszilloskop jede einzellne SPI übertragung der MCP2515 Initialisierung angeschaut und notiert (PDF). Es müsste eigentlich soweit alles OK sein. Beim verwendeten CAN-SPI Board habe ich folgende switches, zur konfiguration der SPI-PORT-Pin auf ON geschaltet: 3, 5 und 8. Somit ist die PIN-Konfiguration: PB0 -> /CS PB5 -> MOSI PB6 -> MISO PB7 -> SCK Was auch noch speziell ist, dass vom CAN-SPI Board die /CS-Leitung auf PB0 geht. Beim ATmega644PA vom HW-SPI der /SS Pin aber auf PB4 wäre. Deshalb setze ich PB4 auf high in der SPI-Initialisierung, wiel das gemäss Datenblatt so sein muss für die korrekte Init. und danach wird PB4 auf low gesetzt und PB0 übernimmt die /SS funktion. Dies sollte doch so ohne weitere Probleme funktionieren, da ja die Daten auch über MOSI mit SCK raus gesendet werden. Ich finde einfach das Problem nicht. :-/ Könnte sich evtl. jemand mein Programm und die Angehängten Dokumente mal ansehen ob ein Problem besteht, dass ich nun schon seit sicher 4 Tagen übersehe? :-) Besten dank schon im Voraus für die Aufgewendete Zeit. Freundliche Grüsse Remo
Hi, bei meinem AtXMega war der uC zu schnell mit der Initialisierung. Ggf war der Takt am MCP2515 noch nicht ganz da. Ich hatte daher eine Verzögerung von 10 ms vor dem CAN init gemacht. Unter https://github.com/JackFrost80/Wasserzaehler-CAN-Modul/blob/master/CAN.cpp ist meine Init Routine für meine MCP2515, das lesen der Register sind noch Überbleibsel vom debuggen. Hast du mit dem Oszillator mal den CLKOUT gemessen ? Setz den mal auf einen anderen Wert als der Startwert, dann siehst du ob der MCP2515 die Kommunikation auf empfängt und verarbeitet. Gruß JackFrost
Hallo, als Master sollte der /SS Pin immer als Ausgang konfiguriert sein. MfG
Hallo Bastian und Christian Danke für eure Tips. Bastian W. schrieb: > bei meinem AtXMega war der uC zu schnell mit der Initialisierung. Ggf > war der Takt am MCP2515 noch nicht ganz da. Ich hatte daher eine > Verzögerung von 10 ms vor dem CAN init gemacht. Das habe ich doch mit:
1 | _delay_ms(1000); |
2 | |
3 | mcp2515_init(); |
auch gemacht und sogar 1000ms. Christian S. schrieb: > als Master sollte der /SS Pin immer als Ausgang konfiguriert sein. Das ist er doch, mit:
1 | DDR_CS |= (1<<P_CS)|(1<<4); |
2 | PORT_CS |= (1<<P_CS)|(1<<4); |
Oder könnt Ihr mir die jeweiligen Tips nochmals genauer erklären? Danke und Gruss Remo
Remo H. schrieb: > Das Programm wurde in Atmel Studio 7 geschrieben und ist eigentlich ein > Abbild vom MCP2515-Tutorial, der Seite: > http://www.kreatives-chaos.com/artikel/ansteuerung-eines-mcp2515 Und warum verwendest du nicht das Original? Das funktioniert jedenfalls. http://www.kreatives-chaos.com/artikel/universelle-can-bibliothek https://github.com/dergraaf/avr-can-lib
Hallo Harry Das ist ja schlussendlich das selbe. Es hat einfach noch ein bisschen Beigemüse. Übrigens ist es ja das original, einfach viel Überschaubarer. Aber wenn die SPI kommunikation nicht funktioniert wird es auch nicht gehen. Gruss Remo
Hallo Zusammen :-) Ich hab soeben einen Geistesblitz gehabt und siehe da es funktioniert! Das Problem lag wie so üblich zwischen den Ohren. ;-) Der Reseteingang, sprich PIN PB2 war immer auf 0V gezogen. Ich habe mich von der Beschriftung auf dem CAN-SPI Board verleiten lassen. Dort ist eben der Negierte CS Pin schön mit /CS angeschrieben und da RST ganz normal angeschrieben ist (ohne /), glaubte ich man aktiviert RST mit high pegel. Nach nochmaligem (nicht ersten mal) durchschauen des Datasheet's vom MCP2515 habe ich gesehen das RESET auch Negiert ist. Nun habe ich PB2 vor der MCP2515 Initialisierung auf high gesetzt und siehe da ES GEHT! Besten Dank allerseits für eure Bemühungen. Freundliche Grüsse Remo
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.