PDA

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



ba4_philipp
02.02.2006, 23:11
Hallo,

ich habe seit einiger Zeit zum Testen einen CAN Bus laufe. An dem hängen einige Mega8 (nach der Homepage von Kijon realisiert, nochmal vielen Dank). Die Mega8 laufen alle mit internen 1MHz und der Bus wie in Kijons Beispiel mit 125KBit/s

Jetzt wollte ich das ganze noch an den PC bringen. Dafür hab ich mir für den Mega8 einen 11,0592 MHz Quarz besorgt um 115K2 mit 0% Fehler betreiben zu können (seriell). Wenn ich nun eine CAN Platine mit der CAN Platine verbindet auf dem der Mega8 mit 11MHz läuft und die alte Platine eine Nachricht sendet kommt nix an und die Platine hört nicht auf zu senden (am Oszi gesehen, Signal sieht sonst ok aus).

Es verstehen sich nun 2 Platinen auf denen der Mega8 mit 1MHz läuft und es verstehen sich auch Platinen auf denen er mit 11MHz läuft aber gemischt geht es nicht? Woran kann das denn liegen?

Achja, der MCP2515 läuft in allen fällen an einem 16MHz Quarz

Vielen Dank schonmal
und gruß Philipp

ruediw
02.02.2006, 23:41
Hast Du die Baudrate für die CAN-Schnittstelle bei allen
Modulen auf den gleichen Wert eingestellt ?

Nach deinem Post (wenn Du dich nicht vertippt hast) laufen
die einen (alte) mit 125 kBits und die andern (neuen) mit 115K2.
das ist ca. 10 % Abweichung...

ba4_philipp
03.02.2006, 00:27
Oh, ne. Was ich meinte sind 115K2 statt 4800 an der seriellen. Die Software ist exakt die gleiche (also auch die Settings für den MCP)

Die einzige Änderung war, das setzen der Fusebits auf den externen Quarz und in der Software dann halt FCPU auch die neue Freq und die Baudrate hatte ich hochgesetzt (die von der seriellen, sollte also nix damit zu tun haben)

Vielen Dank schonmal

askazo
03.02.2006, 09:07
Hm, eigentlich sollte das funktionieren.
Ein paar Fragen:

- Kommuniziert die 11MHz-Platine problemlos über RS232 mit dem PC?

- Wenn Du die 11MHz Platine genauso betreibst, wie die 1MHz-Paltinene (also Fuse auf int. 1MHz umstellen, Software anpassen), läuft der CAN-Bus dann? Das würde Hardwarefehler ausschließen.

- Wenn Du die Platine nun wieder mit 11 MHz betreibst und von einer alten Karte Nachrichten über den CAN schickst, kannst Du am RXCAN-Pin vom MCP2515 (Pin 2) vernünftige Signale messen (muss so aussehen, wie das Signal an der CAN_L-Buchse)? Was misst Du am TXCAN-Pin (Pin 1)?

- Welche Frequenz hat SCK vom SPI-Interface (sollte 2.7648 MHz sein)? Sehen die Signale auf MOSI und MISO vernünftig aus?

Mehr fällt mir im Moment nicht ein...

askazo

ba4_philipp
03.02.2006, 12:58
Also:

Ich habe hier auf dem Schreibtisch eine Platine mit einem LCD und Tastern dran, da läuft eine Mega8 mit 1MHz. Dann auf dem Steckbrett einen mit 11MHz und serieller Verbindung zum PC und eine Platine auf der auch nochmal ein 11MHz Atmel ist mit PC Verbindung.

Beide Atmel mit PC Verbindung laufen Problemlos zum PC. Bei 11MHz mit 115K2 und bei 1MHz hab ich sie auf 4K8 beides ohne Probleme.

Wenn ich einen Mega8 neu flashe, Fusebits umstelle usw. Also so das er wieder mit 1MHz läuft kann ich ihn Problemlos auf dem Steckbrett und auch auf der PC Platine betreiben. Ein Hardware Problem kann man denke ich ausschließen.

Die CAN Übertragung an sich funktioniert ja auch zwischen 2 Atmels mit 11MHz, sieht auch alles sauber aus. Also muss das mit SPI usw eigenltich alles OK sein. Es funktioniert nur keine Verbindung von einem Mega8 der mit 11MHz läuft zu einem mit 1MHz.

Wenn der mit 1MHz dann eine Nachricht sendet hört er nicht mehr auf. Ich habe das TX Error Register mal auf dem LCD anzeigen lassen und das zählt dann langsam hoch. Obwohl auf dem Oszi die CAN Signale gut aussehen. Als ob er kein ACK oder so erhalten würde.

Warum sollte SCK denn 2,7MHz haben?. Ich habe den Teiler in beiden Fällen auf 2 gestellt. Also sollte der SPI einmal mit 500KHz laufen und eimal mit 5,5MHz. Die 5,5MHz scheinen ja aber kein Prob zu sein, weil 2 Platinen CAN Pakete tauschen können bei denen es auf 5,5MHz läuft.

Vielen Dank schonmal
Gruß Philipp

ba4_philipp
03.02.2006, 13:11
Habe mal ein Bild vom CAN Bus gemacht.

http://coserv.dyndns.org/pics/can_problem.JPG

So sieht ein Signal aus, das nicht ankommt. Besonder komisch finde da im 3. Kästchen von hinten. Dieser minimaler "Auschlag" in die falsche Richtung. Sowas gibt es nicht wenn die Kommunikation funktioniert.

Gruß Philipp

askazo
03.02.2006, 17:10
Warum sollte SCK denn 2,7MHz haben?.
Ich war davon ausgegangen, dass Du dem Code von Kijon beibehalten hattest, er hatte den Teiler auf 4 stehen.

Zurück zum Problem:
Für mich sieht das so aus, als hättest Du CAN_H und CAN_L irgendwo verdreht. Dieser letzte Ausschlag dürfte das ACK vom Empfänger sein. Da das Signal in die falsche Richtung geht, würde ich sagen, dass Du CAN_H des Senders mit CAN_L des Empfängers verbunden hast und umgekehrt. Wenn beide 11MHz - Platinen 100% gleich sind, ist der Dreher auf beiden drauf, daher können sie miteinander kommunizieren.

askazo

ba4_philipp
03.02.2006, 19:52
Es sind alle Schaltungen 100% gleich. Ich benutze die gleiche Platine, setze nur beim Atmel die Fusebits für 1MHz und flashe es neu mit FCPU entsprechend. Also da kann sich am CAN nix verdreht haben.

Das hatte ich aber auch mal probiert. Wenn ich die beiden Leitungen vertausche führt das auch nicht zum Erfolg.

Das ist echt komisch. Weil die Hardware 100%ig gleich ist (es ist ja sogar dieselbe)

Gruß Philipp

ruediw
03.02.2006, 21:04
Könnte es sein das es in Timing Problem ist ?
--> Verzögerungszeiten

ba4_philipp
03.02.2006, 22:07
inwiefern meinst Du? Bin für jeden Tip dankbar. Hab echt keine Ahnung an was das liegen kann.

Werde gleich mal den SPI Takt runtersetzen (also Teiler hoch) obwohl ich nicht glaube das das ein Problem ist, weil zwei 11MHz Controller ja Daten austauschen können.

Ich verstehe auch echt nicht wie der Controller Takt einfluß auf den Can Controller haben kann. Das einzige was sich da verändert ist die Geschwindigkeit des SPI Buses. Laut Datenblatt kann der MCP2515 aber bis 10MHz und ich bin bei max 5,5.

Vielen Dank
Gruß Philipp

ba4_philipp
04.02.2006, 00:05
So Teiler von 2 auf 4 zu setzen hat wie erwartet keinen Erfolg gebracht :(

So hab nun keine Idee mehr was man noch probieren kann

Schönen Abend noch
Philipp

askazo
04.02.2006, 09:21
Verbinde doch bitte noch mal eine 11MHz Platine mit einer 1MHz Platine und messe mal die Pins 1 und 2 vom MCP2515 auf der 11MHz Platine.
Kommen die Daten an Pin 2 vernünftig an? Sendet der MCP ein Acknowledge auf Pin 1?

askazo

ba4_philipp
04.02.2006, 12:45
Was genau müsste ich denn da sehen können? Also ich habe mal bei der 11MHz Platine am MCP gemessen und dort liegen an beiden Pins (1&2) Rechtecksignale an. An Pin 2 mit höherer Frequenz. Klingt für mich alles ok.

Vielen Dank schonmal
und Gruß Philipp

askazo
04.02.2006, 17:33
Hört sich eigentlich ok an.
An Pin 1 müsste ein Signal anliegen, das so ähnlich aussieht wie das weiter oben von Dir gepostete.
Wenn Du Pin 1 und 2 gleichzeitig misst, muss auf pin 1 ein Rechteckimpuls kommen, sobald das Signal auf Pin 2 aufhört. Der Impuls muss 7,8 us lang sein.

Ich habe mir gerade Dein Scope-Bild von oben noch mal genauer angeschaut. Der letzte Impuls (was eigentlich das ACK vom Empfänger sein sollte) ist ein ganzes Stück kürzer als die davor. Ich würde sagen, dass die Baudrate der beiden Karten nicht übereinstimmt. Ich habe mir das Datenblatt vom MCP noch nicht so genau angeschaut - kann es sein, dass die SPI-Frequenz Auswirkungen auf die CAN-Frequenz hat?

askazo

ba4_philipp
06.02.2006, 00:25
So hab nochmal ins Datenblatt gesehen. Die SPI Freq hat mit dem CAN Bit Timing wirklich nix zu tun. Gleich gesetzt ist es auch bei allen Boards (ist ja die gleiche Software) und der gleiche Quarz ist auch überall am MCP (16MHz).

Was Pin 1&2 betrifft, so eine Flanke beim Eingang wirklich ca 8µs lang (können gut die 7,8 sein habe die Auflösung nicht so groß gestellt damit ich das Ding finde). Das Signal was aus dem Controll raus geht ist tatsächlich nur 6µs lang.

Was ich jetzt aber nicht verstehe ist warum der 11MHz CAN Controller das Paket nicht an den Atmel weitergibt wenn er doch scheinbar versucht ein ACK dafür zu setzen (auch wenn es zu kurz ist) ??

Also so wie es aussieht sind die Bitzeiten beim CAN Controller der am 11MHz Atmel hängt wirklich kürzer. Nur woran kann das liegen?

Vielen Dank schonmal bis hierhin
Gruß Philipp

askazo
06.02.2006, 08:35
Was Pin 1&2 betrifft, so eine Flanke beim Eingang wirklich ca 8µs lang (können gut die 7,8 sein habe die Auflösung nicht so groß gestellt damit ich das Ding finde).
8µs stimmt exact. Ich Depp hatte mit 128 kB/s gerechnet, statt mit 125.
Bei 125 kB/s hast Du also eine Bitzeit von genau 8µs.


Was ich jetzt aber nicht verstehe ist warum der 11MHz CAN Controller das Paket nicht an den Atmel weitergibt wenn er doch scheinbar versucht ein ACK dafür zu setzen (auch wenn es zu kurz ist) ??
Der Controller sendet kein ACK, sondern ein Not Acknoledge. Für ein ACK muss der Impuls in die andere Richtung gehen.


Also so wie es aussieht sind die Bitzeiten beim CAN Controller der am 11MHz Atmel hängt wirklich kürzer. Nur woran kann das liegen?Tja, das ist jetzt die großer Frage. Wenn die Oszillatorfrequenz für den MCP stimmt (noch mal nachgemessen?) kann ich mir nur noch vorstellen, dass Du entweder aus versehen was an den Timing-Registern vom MPC verstellt hast, oder dass bei der SPI-Übertragung irgendwas verloren geht. Überprüfe doch noch mal die Registereinstellungen und setze evtl. mal ein wait zwischen die einzelnen mcp2515_write_register-Anweisungen.

askazo

ba4_philipp
06.02.2006, 14:04
Es scheint so gewesen zu sein wie du sagst. Bei der SPI Übertragung muss irgendwas immer schiefgegangen sein. Warscheinlich sind 5,5MHz auf dem SPI etwas zu hoch für eine Lochstreifenplatine und schon gar für das Steckbrett. Habe jetzt Testweise den SPI auf einen Teiler von 32 (also ca 340KHz) und damit klappt es.

Werde mich jetzt mal nach oben tasten. Hast du evtl. einen Tipp was man da benutzen kann, damit es noch sicher auf Lochstreifenplatinen funktioniert? Auch im Auto usw?

Vielen Dank für die Hilfe
schönen Tag noch Philipp