PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit CAN



ba4_philipp
24.10.2005, 22:33
Hallo,

ich habe auf meinem Steckboard 2 Mega8 am laufen. Ich habe alles so programmiert wie es auf Kijons Homepage beschrieben war. Nun habe ich an einem Mega8 ein MAX232 angeklemmt und lasse mir auf dem Terminal ausgeben wenn eine Nachricht reinkommt und was da so drin steht. Ein zweiter Mega8 liest einen Port ein und verschickt das ganze per CAN. Das alles ist auf meinem Steckboard aufgebaut. terminiert an beiden Seiten mit 120Ohm und funktioniert auch wunderbar.

Nun habe ich bei einem Board das ich schonmal auf Lochstreifen aufgebaut habe (hat ein LCD, diverse AD Eingänge werden benutzt usw) auch einen MCP2515 mit aufgelötet (das Board hat auch einen Mega8). Das sollte jetzt zB die Batteriespannung messen und per CAN verschicken. Ich habe also CANH und CANL mit ans Steckboard gelegt.

Er sendet nun auch, aber nur ein paarmal und dann hört er auf. Der Prozzesor schient aber weiterzulaufen, denn auf dem LCD ändert sich die Spannungsanzeige wenn ich die Eingangspannung ändere, es geht nur keine CAN nachricht mehr raus. Die software für CAN ist genau die gleiche wie in dem anderen Mega8 bei dem es funktioniert.

Woran könnte das liegen?

FoCus
25.10.2005, 10:27
Könnte es sein, dass du Anstelle eines AM8 einen AM8L drauf hast?
Ist deine Spannungsversorgung stabil?
Gehen die Daten an den MCP2515 definitiv raus?
Hast du die Möglichkeit mal einen Logic Analyzer dran zu hängen?
Kalte Lötstellen?
Kann es sein, dass einer der CAN Teilnehmer den Bus blockiert? Häng doch mal einen CAN/oder Logic Analyzer dran.
Wie sind die Pegel auf dem Bus, wenn nichtsmehr gesendet wird?
Du schreibst, es wird erst ein bisschen gesendet... kommt es auf der anderen Seite wirklich an?
Was sagt der JTAG (falls vorhanden) bleibt er evtl irgendwo hängen?
Sind die Abschlusswiderstände drin?
Welches BitTiming verrwendest du?
Und welche Busgeschwindigkeit?
Sind zwischen Bus und Board Optokoppler?

Da könnte nach deiner Beschreibung vieles in Frage kommen.

Gruss
Michael

ba4_philipp
25.10.2005, 12:10
Also ich habe leider weder logic analyzer noch CAN Analyer. Der Bus schient ja aber in Ordnung zu sein. Also nochmal zusammengefasst

- ein Knoten nur Empfänger mit Ausgabe auf ein Terminal
- ein Knoten Senden mit ID 500 (Dezimal) die Batteriespannung
- ein Knoten sendet mit ID 291 (Dezimal) seinen PORTD

Der Bus ist an beiden Enden mit 120 Ohm abgeschlossen. Lasse ich den Knoten mit ID 291 senden kommt auch alles an und es geht wunderbar. Dann habe ich den Knoten mit ID 291 auf Reset gelegt, damit ich am Terminal mehr Übersicht habe. Jetzt lasse ich den Knoten mit ID 500 senden. Das geht dann ein paarmal und dann hört er auf. Wenn ich zwischendurch ein Paket mit ID 291 senden lasse hört er sofort auf mit dem Senden.

Aufbau ist:
-3x ATMega8 16PI (laufen aber alle mit den internen 1MHz)
-3x MCP2515
-3x MCP2551

Vielen Dank schonmal
Gruß Philipp

Rage_Empire
25.10.2005, 12:13
Vieleicht erwartet er ein ACKN und wenn er das nicht bekommt, könnt ich mir vorstellen, daß er das senden einstellt. Vieleicht mußt noch irgendwas konfigurieren.

ba4_philipp
25.10.2005, 12:25
Ich habe sämtliche CAN funktionen in eine can.c gemacht und eine can.h

diese Datei habe ich bei allen 3 knoten eingebuden. Die CAN Funktionnen sollten also exakt die gleichen sein. Und ein Sender läuft ja ohne Probleme. Ich dachte das es evtl. Fehler auf der Leitung gibt und er sich deshalb abschaltet (CAN Bus ist bei mir zwar sehr kurz aber nicht twisted)

Kann man das auslesen?

FoCus
25.10.2005, 13:06
Ich weiß nicht wie das bei deinem CANController ist, arbeite mit dem SJA1000 aber evtl verparametrierst du die Akzeptanzmasken..
Das mit dem ACK klingt auch ganz gut.

Wenn du mit dem CANBus rumhantierst ist ein CANAnalyzer extrem hilfreich... auf kurz oder lang würde ich mir auf jeden fall einen anschaffen..

Hast du mal probiert, den überflüssigen Node von der Leitung zu nehmen?

Ich tipp irgendwie auf unsaubere Pegel...ist nur eine Vermutung.
Hast du die Pegel schonmal nachgemessen, wenn nichtmehr gesendet wird?


Gruss
Michael

ba4_philipp
25.10.2005, 19:53
So ich habe den den Bus nun in richtige Anordnung gebracht. Aber das Problem ist fast das gleiche. Ich kann jetzt mit beiden Stationen senden. Mein LCD Board sendet nun auch fleißig und hört nciht nach ein paarmal auf. Allerdings stellt es seinen Dienst sofort ein wenn die andere Station etwas sendet. Der CAN Bus scheint soweit OK zu sein, denn diese Station die das senden der anderen unterbricht kann auch weiterhin etwas senden.

Die Stationen müssen übrigens auch nicht gleichzeitig senden. Wenn das LCD Board noch gar nicht gesendet hatte, die andere Station aber, dann sendet das LCD Board auch nix mehr.

Auf dem Bus messe ich solange es noch geht und danach (jeweils ohne traffic) 2,5V gegen masse an beiden Leitungen (also 0 auf der leitung)

ba4_philipp
25.10.2005, 21:47
So habe die Platine nochmal nachgelötet, da sollten auf keinen Fall kalte Lötstellen sein. Wenn ich den Atmel aus dem Sender rausnehme, der immer geht und ihn in das LCD Board stecke hat er genau die gleichen Probleme. Er sendet nur ein paar Nachrichten und dann ist schluß. Habe auch schon den MCP2515 und den Transceiver getauscht, aber keine verbesserung.

Es kann ja an der Schaltung nix grundlegend falsch, denn einige Nachrichten gehen ja raus.

Bin langsam am verzweifeln :(

Kjion
25.10.2005, 21:52
Hast du dir mal die Fehlercodes ausgeben lassen ?? Der MCP2515 gibt ja eigentlich relativ genau aus was nicht stimmt :-) Insbesondere die Fehlerzähler sollten Interessant sein ...

MfG Kjion

ba4_philipp
25.10.2005, 22:11
Wie kann ich den denn auslesen?

ba4_philipp
25.10.2005, 23:18
So beim Versuch 0x1C, 0x1D und 0x2D auszulesen, dachte ich erst die wären dann alle 0. Aber als ich zB R0BCTRL auch noch auslesen wollte. Hab ich festgestellt. Das ich die Register nicht mehr lesen kann wenn das Problem ausftritt. Der Mega8 meint dann das Register sei auch 0 (ist es ja aber nicht).

Also irgendwie reißt die SPI Verbindung auf dem Board ab. Woran könnte das bloß liegen?

Kjion
25.10.2005, 23:23
Einfach das Register TEC bzw. REC lesen ( Adresse 0x1C und 0x1D ) :-)

Im Datenblatt gibts sogar eine eigenes Kapitel dazu: "ERROR DETECTION" ab Seite 60.

MfG Kjion

PS: Hmm, verdammt zu langsam

ba4_philipp
25.10.2005, 23:31
Ja danke das hatte ich gelesen. Siehe POst über Dir.

Vielen dank übrigens für die schnelle Hilfe

Kjion
25.10.2005, 23:40
Hast du alle entsprechenden Pins des SPI Interface konfiguriert ?? Bei SPI wird dies im Gegensatz zu UART oder TWI nämlich nicht automatisch gemacht ...

Bei mir habe ich den Pullup der MISO aktiviert, so dass wenn der MCP2515 nicht ansprechbar ist der Wert 0xff gelesen werde würde.

Kannst ja mal versuchen immer mal wieder irgendwelche Werte in eine beliebiges Register zu schreiben und wieder auszulesen und Fehlermeldungen ausgeben wenn das mal nicht funktionieren sollte...

MfG Kjion

ba4_philipp
26.10.2005, 00:05
Es scheint nun zu gehen :) Ich würde zwar eigentlich lieber nicht sagen woran es lag, aber ich hatte den !Reset nicht beschaltet. Ich Esel

Vielen Dank an alle die so klasse geholfen haben

Und vor allem an Kijon, durch seine Homepage hab ich das ganze überhaupt erst so schnell ans laufen bekommen