Forum: Mikrocontroller und Digitale Elektronik ATmega644PA und MCP2515 SPI Problem


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Remo H. (remoeggel)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

von Bastian W. (jackfrost)


Bewertung
0 lesenswert
nicht lesenswert
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

von Christian S. (roehrenvorheizer)


Bewertung
1 lesenswert
nicht lesenswert
Hallo,

als Master sollte der /SS Pin immer als Ausgang konfiguriert sein.

MfG

von Remo H. (remoeggel)


Bewertung
0 lesenswert
nicht lesenswert
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

von Harry L. (mysth)


Bewertung
0 lesenswert
nicht lesenswert
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

von Remo H. (remoeggel)


Bewertung
0 lesenswert
nicht lesenswert
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

von Remo H. (remoeggel)


Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.