Hallo, ich habe hier ein eigenartiges Problem (zumindest verstehe ich es nicht) mit einem Mega8 und einem MCP2515. Ich habe mehrere Module mit diesen beiden Bausteinen um sie mittels CAN zu verbinden. Dabei hat eins dieser Module einen Quarz mit 11,xx MHz damit der UART vernünftig läuft. Die anderen Module laufen mit dem RC Oszillator zwischen 1 und 8 MHz. Alle MCP2515 haben einen eigenen 16 MHz Quarz und die Bitrate sollte auf 125kbit/s eingestellt sein. Ich programmiere in C mit dem avr-gcc und verwende für alle Module die gleiche can.h und can.c in der die SPI Funktionen und andere CAN Funktionen stecken (also überall identisch) Das Problem ist nun, dass ich hier 2 Module auf dem Tisch habe mit unterschiedlichem Takt (einmal die 11MHz einmal 4) der Teiler für den SPI Takt ist auf beiden gleich eingestellt (also SPI am 11MHz schneller). Die beiden Platinen reden aber nicht miteinander. 2 Platinen bei denen jeder Mega8 auf der gleichen Frequenz läuft reden miteinander. Wie kann das kommen? Die Bitrate am CAN ist ja durch die Einstellung und den Quarz am MCP2515 festgelegt und die sind überall gleich. Nun dachte ich kommt es vielleicht zu Störungen durch die zu hohe SPI Taktrate, deshalb habe ich den SPI Teiler auf den Platinen mit 11MHz mal verdoppelt und dann läuft es nun reden alle miteinander. Aber wenn es wirklich Störungen waren, warum konnten dann 2 gleichgetaktete AVR miteinander reden? Außerdem stört es mich, dass zZ der SPI Bus nur mit ca. 180kHz läuft. Hat jmd eine Idee was da passiert? Vielen Dank Gruß Philipp PS: Ich habe mir mal angesehen wie das CAN Signal aussieht und es ist beim 11MHz Modul eindeutig schneller (höhere Bitrate)
Du schreibst hier einmal CAN und einmal SPI; welche der beiden Schnittstellen benutzt du denn jetzt? Die beiden haben nichts miteinander zu tun, weder von der Logik noch vom Protokoll. Je nach µC liegen sie vieleicht auf den gleichen Pins, können dann aber nicht gemeinsam genutzt werden. Gruß Ralph
@Ralph der MCP2515 ist ein CAN Controller der per SPI angeschlossen wird. Also zwischen MCP2515 und Mega8 (der hat keinen CAN) läuft SPI und zwischen den Modulen läuft CAN (per MCP2515) @Ale das hatte ich auch erst gedacht, aber warum funktioniert dann die Kommunikation zwischen 2 Modulen die beide mit hohem SPI Takt laufen? Das dürfte bei zu schlechtem Signal ja nicht funktionieren. Gruß Philipp
Dann wirst du dir die CAN Kommunikation mal sehr genau ansehen müssen. Ein Oszilloskop wird da nicht reichen. Ich denke da eher an CAN Diagnosetools wie zb Canalyzer von Vektor. Und durchforste mal die Datasheets vom MCP2515 welche SPI Bitraten zu welchen Canbitraten passen. Gruß Ralph
Beim MCP2515 hab ich im Datenblatt nur gelesen, dass der SPI Takt nicht über 10MHz liegen soll. Das erreiche ich mit dem Mega8 bei weitem nicht. Was soll auch der SPI Takt mit der CAN Bitrate zu tun haben?
es gibt da 2 mÖglichkeiten. 1. der MCP2515 hat auch nur einen Taktgenerator und muss beide Takte davon ableiten, also ergeben sich da Abhängigkeiten. 2. Die Daten von der einen Schnittstelle müssen in der verfügbaren Zeit bis zu den neuen Daten über die andere Schnittstelle übertragen sein, sonst drohen Datenverluste.
zu 1: Wenn er einen HW SPI hat, dann muss es keine Abhängigkeiten geben erkönnte es direkt reinshiften, der Takt kommt ja vom SPI Master. Diesbezüglich steht auch nichts im Datenblatt nur die Angabe, dass es mit bis zu 10MHz funktionieren soll. zu 2: Wenn es wirklich zu Datenverlust führen würde, dann würde das nicht erklären warum 2 Module die beide mit hohem SPI Takt laufen kommunizieren können. Im Datenblatt steht auch nur auf Seite 71 maximal 10MHz und keine Abhänfigkeit vom Takt.
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.