Hallo liebe Community, nachdem ich die SPI Kommunikation zwischen RIO und dem MCP2515 modul hinbekommen habe (siehe diesen Thread Beitrag "MCP2515 SPI Kommunikation myRIO vs. Arduino" ) bin ich nun endlich so weit die Register des CAN controllers zu setzen. Ich habe die Register nun genau so gesetzt wie es der Arduino tut, bei dem ich den Controller auch schon erfolgreich getestet habe. Bild 1 (RIO) Bild 3 (Arduino). Leider bekomme ich beim RIO auf dem CAN nur Error frames. (siehe Bild 2). Man sieht auch, dass beim RIO das Error Register rapide hoch zählt und den Controller sofort auf "bus-off" setzt. Ich kann mir aber nicht erklären warum. Die Fehlerbehandlung des MCP Datenblatts ist leider auch mager zu dem Thema. Weiß jemand was die Voraussetzung ist um das Fehlerregister hoch zu zählen ? Im oben angeführten Thread war noch von einem Pegelwandler für den SPI die Rede. Kann das auch dazu führen, dass bei zu niedrigem SPI Pegel die CAN Nachrichten nicht richtige generiert werden ? Kann ich mir aber nicht vorstellen, da ich ja zumindest Error frames sehe. Zu den Bilder. Bild1: Zeigt alle Register direkt vor der "transmit"-Funktion, welche das TXB1CTRL.TXREQ bit auf 1 setzt (beginne senden von CAN Nachricht). Direkt daneben alle Register nach der transmit-Funktion. Ablauf: CAN controller initialisieren -> 3* Funktion "CAN Nachricht senden" (Deshalb sind auch alle 3 TX Register mit CAN Nachrichten fefüllt) Bild2: "Pinout" und CAN Modul Bild3: Register vom Arduino. Vor und Nach transmit Funktion. Ich habe versucht den Thread kurz zu halten in der Hoffnung alle Informationen sind einigermaßen rüber gekommen :) Falls nicht last es mich wissen. Ich hoffe von euch hat jemand ein Idee was ich hier falsch mache. Viele Grüße
Hast du einen zweiten Teilnehmer am Bus? Sonst gibts kein ack, Fehler für den Sender.
H.Joachim S. schrieb: > Hast du einen zweiten Teilnehmer am Bus? Sonst gibts kein ack, Fehler > für den Sender. Das führt "nur" zu Error Passive und dauerhafter Sendewiederholung. Max schrieb: > Man sieht auch, dass beim RIO das Error Register rapide hoch zählt und > den Controller sofort auf "bus-off" setzt.
Als zweiten Teilnehmen habe ich einen Kvaser Memorator welchen ich auch beruflich nutze. https://www.kvaser.com/product/kvaser-memorator-professional-hshs/ Der erkennt aber auch nur "Error Frames".
> Man sieht auch, dass beim RIO das Error Register rapide hoch zählt und > den Controller sofort auf "bus-off" setzt. Ich kann mir aber nicht > erklären warum. Die Fehlerbehandlung des MCP Datenblatts ist leider auch > mager zu dem Thema. > Weiß jemand was die Voraussetzung ist um das Fehlerregister hoch zu > zählen ? Die Fehlerzähler werden bei Kommunikationsfehlern auf dem CAN Bus erhöht. Der TX Error Counter bei Sendefehler und der EX Error Counter bei Empfangsfehlern. Hierfür gibt es noch spezielle Regeln. Findet man in vielen in CAN einführenden Artikeln. > Im oben angeführten Thread war noch von einem Pegelwandler für den SPI > die Rede. Kann das auch dazu führen, dass bei zu niedrigem SPI Pegel die > CAN Nachrichten nicht richtige generiert werden ? Kann ich mir aber > nicht vorstellen, da ich ja zumindest Error frames sehe. SPI und CAN sind zwei Paar Schuhe. Wenn die Register die erwarteten Werte enthalten, klappts mit der SPI Übertragung. Wenn du Spannungsmäßig ungünstig liegst (z.B. wegen 3.3V/5V) kann dies zu sporadischen Fehlübertragungen auf SPI Seite führen. > Zu den Bilder. > Ich hoffe von euch hat jemand ein Idee was ich hier falsch mache. Bei CAN Kommunikationsfehlern mußt Du den CAN näher betrachten und Details berichten. Die ersten Schritte wären: - Verdrahtung kontrollieren, Abschlußwiderstände? - Bitrate nachmessen Wird das Board allein betrieben und der Abschlußwiderstand (jumper) ist aktiv, darf der CAN nur bis Error Passive gehen.
Steffen R. schrieb: > Die ersten Schritte wären: > - Verdrahtung kontrollieren, Abschlußwiderstände? > - Bitrate nachmessen Abschlusswiderstände hab ich dran (120 Ohm). Nochmals extra mit Multimeter nachgemessen. Bitrate siehe Bild 4. 4us zwischen Zwei Samples => 250 000 bps. Sofern der Analyzer den Error frame richtig erkennt, wovon ich aber ausgehe. Edit: Sorry weiß nicht warum die Bilder jetzt mehrfach hochgeladen wurden
:
Bearbeitet durch User
Zum Spaß mal den Loopback Modus getestet. Sieht meines Erachtens auch gut aus.
Erich M. schrieb: > Bitrate siehe Bild 4. 4us zwischen Zwei Samples => 250 000 bps. Aber zwischen A1 und A2 ist doch kein Bit zu sehen??? Speziell Channel 0 zeigt ein viel kürzeres Bit? An welcher Stelle mißt du? Das kann ich den Bildern nicht so richtig entnehmen. CANRX und CANTX? Für die Bitzeitmessung sollte das Kvaser Interface aus sein.
Ich hab leider kein Oszi an dem man das Timing richtig ablesen könnte. Ich habe als Vergleich nur die Tatsache, dass der Controller funktioniert, wenn ich ihn am Arduino betreibe. An Hand der Register sieht man ja, dass das Bittiming für RIO und Arduino das gleiche ist. Anbei nochmal nen Analyzer Trace wenn ich den Controller an den Arduino hänge.
Erich M. schrieb: > Ich hab leider kein Oszi an dem man das Timing richtig ablesen könnte. Häng deinen Logiganalyzer an CANRX und CANTX des CAN Controllers. Kannst Du A1 und A2 verschieben? Aktuell messen sie den Abstand der "Punkte". Diese geben anscheinend den Samplepoint entsprechend der vermeintlich erkannten oder selbst eingestellten Bitrate an. Und hiermit scheint er bei dem fehlerhaften Signal Probleme zu haben oder sich an Channel 1 zu orientieren. Kannst Du mehr zum Messaufbau im Fehlerfall schreiben? Auch jetzt im Gutfall schreibst du nichts dazu. Channel 0 diesmal offen?
Sorry hab eben erst gecheckt, dass du nicht CAN H und L meinst sondern die Leitung vom Controller zum Transceiver. Habe folgendes gemacht. MCP2515 modul and Arduino Mega (VCC 3,3V). CAN H und CAN L sowie CANTX und CANRX an den Analyzer. Channelbezeichnungen stehen im Screenshot. Direkt nach dem Analyzer hab ich den Kvaser angeschlossen um nochmal die Nachricht zu überprüfen. Rate 250 kbps.
:
Bearbeitet durch User
Aufbau mit RIO: Selbe Verdrahtung wie beim Arduino. Was evtl. noch erwähnenswert ist, in meinem RIO Programm habe ich die RX Buffer noch gar nicht in "betrieb" genommen. Dort is bisher nur die Initialisierung und das Senden einer CAN Nachricht programmiert.
Erich M. schrieb: > Sorry hab eben erst gecheckt, dass du nicht CAN H und L meinst sondern > die Leitung vom Controller zum Transceiver. CAN-H und CAN-L wären besser. Hatte aber mitbekommen, dass du nur einen Logikanalyzer hast. Weiß garnicht, wie CAN-H auf einem Logikanalyzer auszusehen hat. Erich M. schrieb: > Aufbau mit RIO: Das Signal auf CAN-RX fehlt. Daher klappts nicht. Der CAN hört auf mit Senden, wenn er sein eigenes Signal nicht sieht. Tippe auf einem Verdrahtungsfehler an einer Stelle, die Du umsteckst.
Steffen R. schrieb: > Das Signal auf CAN-RX fehlt. Daher klappts nicht. Der CAN hört auf mit > Senden, wenn er sein eigenes Signal nicht sieht. Das ist eine wertvolle Information die mir bisher unbekannt war :) Mache mich auf die Fehlersuche
Habe mein Messsetup dahingehen umgebaut, so dass ein Trigger vor dem Initialisieren des MCP gesetzt wird, so dass ich direkt sehe was von Anfang an los ist. Interessanter weise kommt die aller erste CAN Nachricht richtig, die zweite ist aber direkt Müll. Siehe Bilder. Es ist zu sehen, dass auf der CAN Leitung kleine Störungen sind. Die spielen sich aber im 0,2us Bereich ab. Kann dies schon zu meinen Problemen führen ? Samplerate meines Analyzers ist übrigens 16MS/s.
Ich weiß nicht, ob du das analoge Signal auf dem CAN Bus mit dem Logikanalyser auswerten kannst. Daher wäre ich hier vorsichtig etwas abzuleiten.
Steffen R. schrieb: > Ich weiß nicht, ob du das analoge Signal auf dem CAN Bus mit dem > Logikanalyser auswerten kannst. Daher wäre ich hier vorsichtig etwas > abzuleiten. Naja man sieht ja schon dass die erste Nachricht genau das ist was ich sende bzw. erwarte. Außerdem, hat der Analyzer ja direkt eine Interpretierung von "CAN" zur Auswahl. Wenn das also nicht gehen würde, würden die das doch nicht im Programm implementieren. Was ich aber immer noch nicht verstehe ist warum auf dem CANRX absolut nichts zu sehen ist....
Zur Erläuterung: CAN-H und CAN-L bilden ein Differenzsignal. [[http://www.can-wiki.info/doku.php?id=can_physical_layer:main]] Die Peaks werden möglicherweise dadurch entstehen, dass die Spannung zwischen CAN-L und GND knapp am Umschaltpunkt zwischen H und L des Analyzers ist. Was ist mit CANRX? In 10.png sieht man mehrfach die gleiche Nachricht. Evtl. eine Sendewiederholung. Wäre normal, wenn das Kvaser Interface aus ist. Die CAN Analyze sollte auf dem Kanal mit CANRX laufen. CAN-H und CAN-L sind wegen dem oben geschriebenen ungeeignet. Auf CANTX sieht man nur die eigenene Sendenachrichten. Auf CANRX alles. Ansonsten sieht CANTX gut aus. Für das Nachmessen der Bitrate müßte man mehr "reinzoomen". Wenn du wegen CANRX was geändert hast, klappts jetzt mit dem Kvaser Interface?
Erich M. schrieb: > Naja man sieht ja schon dass die erste Nachricht genau das ist was ich > sende bzw. erwarte. Außerdem, hat der Analyzer ja direkt eine > Interpretierung von "CAN" zur Auswahl. Wenn das also nicht gehen würde, > würden die das doch nicht im Programm implementieren. Es geht, wenn du an das Digitalsignal gehst, nicht an das Analogsignal. Es ist ein Logikanalyzer. Dieser interpretiert eine bestimmte Spannung als High und eine andere als Low. Dies ist für CANRX und CANTX gegeben, für CANH und CANL nicht.
Erich M. schrieb: > Was ich aber immer noch nicht verstehe ist warum auf dem CANRX absolut > nichts zu sehen ist.... Gegenüber 9.png sieht es jetzt doch gut aus.
Jetzt werd ich total beklopt.... Hab versehendlich CANTX und CANRX am MCP gebrückt. Dann bekomm ich wunderschöne CAN Nachrichten. Auch mit dem Kvaser. Spricht wieder für deine Theorie, dass wenn auf dem CANRX nichts zurück kommt geht er in den "bus-off" modus. Jetzt ist nur die Frage, wieso gehts mit dem Arduino nur nicht mit dem RIO. Hier gehts für mich vermutlich n bisschen zu tief in die Elektrik/Elektronik. Kannst du mir sagen wie ich dem Problem auf die Schliche komme ? Schau mal, jetzt bleibt er auch im 0x15 Modus.
:
Bearbeitet durch User
Erich M. schrieb: > Hab versehendlich CANTX und CANRX am MCP gebrückt. Dann bekomm ich > wunderschöne CAN Nachrichten. Auch mit dem Kvaser. Ist die Nachricht im Simplyzer die gewollte? EFLG 2D RX1OVR RX0OVR TXBO TXEP RXEP TXWAR RXWAR EWARN 0x15 ist TX Error Passive. Da Du nicht mehr dazu schreibst, was du alles getan hast, ist das jetzt erstmal nichts schlimmes. Mit jeder Sendenachricht vom MCP2515 zum Kvaser muss nun der Error Counter zurückzählen (TEC). Sieht jetzt eigentlich ganz gut aus.
Steffen R. schrieb: > 0x15 ist TX Error Passive. Da Du nicht mehr dazu schreibst, was du alles > getan hast Wie oben erwähnt hab ich CANTX und CANRX kurz geschlossen. Sobald ich das mache kommt meine Nachricht richtig auf den Bus. > Das Signal auf CAN-RX fehlt. Daher klappts nicht. Der CAN hört auf mit > Senden, wenn er sein eigenes Signal nicht sieht. Ich denke genau den Fehler behebe ich mit dem Kurzschluss. Ich weiß aber eben nicht wodurch dieser Fehler entsteht. Vorallem ist der Fehler nich vorhanden wenn ich das Board mit dem Arduino betreibe. Siehe Bild 8 mit dem Trace vom Arduino.
OK. Ich hatte angenommen, dass du den Kurzschluß gefunden und behoben hattest.
Nein, ich hab extra einen verursacht :D :D
Max schrieb: > Ich habe die Register nun genau so gesetzt wie es der Arduino tut, bei > dem ich den Controller auch schon erfolgreich getestet habe. Bild 1 > (RIO) Bild 3 (Arduino). CNF1 .. CNF3 passen, dann denke ich dass es vom Timing her passen sollte, da auch der Kvaser etwas empfangen hat. Erich M. schrieb: > Ich denke genau den Fehler behebe ich mit dem Kurzschluss. Ich weiß aber > eben nicht wodurch dieser Fehler entsteht. Vorallem ist der Fehler nich > vorhanden wenn ich das Board mit dem Arduino betreibe. Siehe Bild 8 mit > dem Trace vom Arduino. Wo hast du genau den Kurzschluß? Kann ja nur entstanden sein, damit du den Logikanalyzer an CANRX bekommst.
Der Fehler ist wie immer total Banane. Ein kurzer Blick in das Datenblatt vom TJA1050 Transceiver hätte gereicht und ich hätte mir tagelanges Fehler suchen beim MCP2515 sparen können. Der Transceiver braucht min. 4,7V. Hab das Board aber wegen des 3,3V SPIs nur mit 3,3V versorgt. Habe mich auch irgendwie auf die Angabe des Onlineshops "3,3V Can controller" verlassen. Durch diesen Fehler scheint es so als würde auf dem CANRX Pins vom TJA1050 nichts kommen. Wenn ich jetzt CANTX und CANRX kurzschließe dann hab ich damit das Problem eliminiert, dass der Controller in "bus-off" geht wenn er auf CANRX nicht mal seine eigene Nachricht sieht. Bin deshalb gerade dabei, nen TXB104 als Level shifter zu verbauen. Allerdings liefert der nur Müll Signale bis jetzt.... Meine MCP Register tanzen wie wild.
Erich M. schrieb: > Bin deshalb gerade dabei, nen TXB104 als Level shifter zu verbauen. Was willste denn damit?? Der CAN-Controller selbst läuft auch mit 3,3V. Musst also nur den Transceiver wechseln.
Naja ist so n Modul wie oben auf dem Bild. Da will ich nicht unbedingt anfangen den Transceiver zu wechseln
Und die Moral von der Geschicht, vergesse deinen Pegelwandler nicht! Beitrag "Re: MCP2515 SPI Kommunikation myRIO vs. Arduino"
Traue deinem china Verkäufer nicht. Hab btw nen Pegelwandler verbaut, da kommt nur Schmu an bis jetzt.....
Max schrieb: > Naja ist so n Modul wie oben auf dem Bild. Da will ich nicht unbedingt > anfangen den Transceiver zu wechseln Ein SO8 lässt sich doch völlig problemlos wechseln. Lieber bastelst du Pegelwandler dazwischen? Und wohin denn überhaupt? Entweder zwischen CAN-Controller und Transveiver, da musst du diese Leitungen auftrennen und ausserdem Vcc und die Sache mit 5V und mit 3,3V versorgen, also auch auf der Platine rumwerkeln. Oder eben zwischen deinen Prozessor und und dem CAN-Controller als Zwischenplatine. Wenn du es richtig machen willst, brauchst du dann 5 Pegelwandler. Ausserdem 3,3V und 5V. Ich würde da auf jeden Fall den TJA wechseln.
H.Joachim S. schrieb: > Ich würde da auf jeden Fall den TJA wechseln. Hm auch wieder war. Kannst du mir einen Transceiver empfehlen den ich einfach austauschen kann?
Und den kann ich einfach 1zu1 auf mein Board löten?
Wenn dein TJA diesselbe Pinbelegung hat ja. Ich denke schon, ist ein quasi-Standard. Alle, die ich bis jetzt in den Fingern hatt waren pinkompatibel (MCP2551, 82C250/51)
Ich mein passt das auch von den Kondensatoren etc also von der verschaltung. Bin auf dem Gebiet nicht so fit deshalb würde ich gern sicher gehen das es funktioniert
Schick mir PN, ich schick dir nen Brief mit nem passenden IC.
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.