Forum: Mikrocontroller und Digitale Elektronik Probleme bei CAN Bus


von Johannes H. (findkeinnamen)


Angehängte Dateien:

Lesenswert?

Hallo,

ich hab im Moment das Problem, dass ich keine Nachrichten ueber den CAN 
Bus empfangen oder senden kann.
Ich verwende einen ATMega32 der ueber SPI mit einem MCP2515 verbunden 
ist. Als Bustreiber verwende ich einen MCP2551. Schaltplan befindet sich 
im Anhang. Hab hier kein Eagle deswegen mal schnell einen mit Powerpoint 
gemacht.

Ich benutze die Bibliothek die vom Roboterclub Aachen entwickelt wurde.
Beim Erstellen der Bibliothek bin ich schon auf das erste Problem 
gestossen.
Beim builden bekam ich einen Fehler das er die Funktionen spi_wait und 
spi_start nicht kannte. Ich hab dann den spi.h includiert und den 
Funktionsprototypen etwas geaendert. Seit dem funktioniert es. Kann auch 
einwandfrei Register beschreiben und auch die richtigen Werte auslesen.

Beim Erstellen der Bibliothek fuer einen AT90CAN128 bekam ich eine 
Fehlermeldung von WinAVR, dass dieser Kontroller nicht unterstuetzt 
wird. Kann aber eigentlich nicht sein.

Falls jemand aehnliche Probleme damit hatte oder eine bessere Loesung 
dafuer hat waere ich sehr dankbar.

Nun zu dem schwierigeren Problem.
Verwende ich den LOOPBACK Mode des MCP2551 funktioniert alles 
einwandfrei.
Sprich ich kann Nachrichten senden und empfang diese auch. Also habe ich 
den selben Aufbau auf einen weiteren Steckbrett aufgebaut um ma ein paar 
Nachrichten hin und herzuschicken. Aber es funktioniert nicht. Es wird 
zwar eine Nachricht in den Sendepuffer geschoben aber es gibt 
offentsichtlich Probleme beim Senden den das Fehlercounter Register wird 
hochgezaehlt. Die entsprechenden Flags werden gesetzt bis beim Ueberlauf 
der Controller dann in den Bus OFF Zustand geht. Ich verwende auf beiden 
Steckbrettern das selbe Programm, sodass das Bittiming ja in Ordnung 
sein muesste.

Ich werde auch mal das c.file mit dem Hauptprogramm anhaengen
Hat jemand eine Idee was ich falsch mache?

Gruss Johannes

von Johannes H. (findkeinnamen)


Lesenswert?

Hat den niemand eine Idee?
Oder benoetigt ihr noch mehr Informationen?

Hab selbst schon gemerkt, dass ich diese Zeile ueberfluessig ist.
Durch das ganze rumprobieren kommt halt sowas zustande.

if (can_check_message())
      PORTA ^= (1<<PA0);

uint8_t NewMessage = can_get_message(&recmsg);

von Michael (Gast)


Lesenswert?

Vielleicht liegt das Problem daran weil du den uC nicht über einen Quarz 
betreibst ? Timingprobleme also ?

von Joachim (Gast)


Lesenswert?

Ich kenne den CAN-Käfer nicht, doch vref und rs solltest du offen 
lassen.
Zum Rest kann ich nicht sagen, mösste es mir genauer ansehen.


Viele Grüße

von Helfender (Gast)


Lesenswert?

Hallo,

> Verwende ich den LOOPBACK Mode des MCP2551 funktioniert alles einwandfrei.

Logisch; der MCP2551 ist falsch angeschlossen (siehe Datenblatt!). TxD 
an TXCAN und RxD an RXCAN anschliessen, nicht anders rum.

> rs solltest du offen lassen.

Besser nicht; Anschluss an GND ergibt höchste Slew-Rate auf dem Bus (was 
für HiSpeed-CAN auch erforderlich ist). Also Rs so belassen. Aber Vref 
gehört nicht an 5V; es ist ein Ausgang.

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.