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
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);
Vielleicht liegt das Problem daran weil du den uC nicht über einen Quarz betreibst ? Timingprobleme also ?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.