Hallo zusammen, ich habe eine Frage zur Kommunikation via CAN-Bus. Und zwar habe ich ein Messgerät, das die Fließgeschwindigkeiten von Flüssigkeiten in einem Schlauch messen kann (BioProTT von emtec). Über eine serielle Schnittstelle (RS 232) möchte ich die Daten auf meinem microcontroller (xmc 4300 von infineon) empfangen. Der xmc besitzt eine CAN Transceiver-Schnittstelle, sodass sich die Schnittstellen verbinden lassen. Laut Handbuch des Flussmessgerätes wird ohne Nachfrage des Hosts (in diesem Fall ja mein Microcontroller?) alle 100 ms ein bestimmter ASCII Code gesendet (siehe Anhänge). Meine Frage ist nun, wie ich denn das am xmc empfangen kann? Ich habe den RxD- und den TxD-Pin des Transceivers im Code zugewiesen, wobei ja eigentlich sowieso nur der RxD-Pin interessant sein sollte, da der xmc ja nur Nachrichten empfangen soll und keine Senden soll. Oder? Ich arbeite mit der DAVE IDE (Eclipse), und dort führe ich nun die Funktion aus, um Nachrichten zu empfangen, aber das Message Object ist immer 0, ich empfange also anscheinend nichts. Gibt es etwas, was ich noch beachten muss? Mich verwirrt zum Beispiel, dass ich beim Einrichten der CAN Node in Dave einen Mask und einen Identifier Value einstellen muss. Dass das bei der Übertragung mit CAN generell so üblich ist, ist mir klar, aber ich verstehe nicht, wie ich das hier kontrollieren kann - schließlich sendet mein Messgerät doch einfach alle 100ms einen bestimmten String, den ich nicht beeinflussen kann und von dem ich also auch den Identifier Value und Mask Value nicht kenne? Kann es also sein, dass mein xmc einfach nicht erkennt, dass die Nachricht, die am Transceiver ankommt für ihn "bestimmt" ist und diese deswegen ignoriert? Tut mir Leid für die doofen Fragen , ich stehe momentan einfach ein bisschen auf dem Schlauch, fürchte ich, und habe trotz vielen Lesens das Prinzip von CAN noch nicht so wirklich durchblickt. DAnkeschön!
>Über eine serielle Schnittstelle (RS 232) möchte ich die Daten auf >meinem microcontroller (xmc 4300 von infineon) empfangen. Der xmc >besitzt eine CAN Transceiver-Schnittstelle, sodass sich die >Schnittstellen verbinden lassen. CAN und RS232 sind nicht kompatibel. Das geht nicht.
Auch wenn heute Freitag ist: Das ist nun wirklich uebertrieben!
CAN und RS232 haben noch nicht mal auf der elektrischen Ebene etwas miteinander zu tun. Dann differiert auch noch das Protokoll!
Ohje, okay, danke schonmal, dann habe ich mich einfach gänzlich davon beeinflussen lassen, dass die beiden Stecker ineinander passten.. Bin leider noch absoluter Anfänger. Gibt es denn überhaupt eine Möglichkeit, die Daten via RS232 auf meinem xmc zu empfangen? Im Internet bin ich da nicht so wirklich draus schlau geworden. Danke!
Kenne xmc4300 nicht im Detail, aber der wird sicher uarts haben. Mit einem rs232 transceiver geht das also ziemlich sicher.
Wenn das Teil einen eingebauten Uart (oder wie auch immer der jeweilige Hersteller den Anschluß bezeichnet) hat. Aber auch hier bleibt das Problem, das die Pegel meist nicht kompatibel sind. Schau Dir in diesem Zusammenhang mal den MAX232 (Maxim) an. Der ist - unter vielen anderen - für die Pagelanpassung von RS232 auf den des Mikrokontrollers gedacht. Falls letzterer mit 5V kommuniziert. Wenn nicht wird es aufwändig.
Henrike K. schrieb: > Über eine serielle Schnittstelle (RS 232) möchte ich die Daten auf > meinem microcontroller (xmc 4300 von infineon) empfangen. Was denn jetzt, Seriell oder CAN? Henrike K. schrieb: > Der xmc > besitzt eine CAN Transceiver-Schnittstelle, sodass sich die > Schnittstellen verbinden lassen. Nein, der hat einen CAN-Controller (die Logik). Du brauchst noch einen externen CAN-Transceiver (eine Art Spannungswandler). Henrike K. schrieb: > Laut Handbuch des Flussmessgerätes wird ohne Nachfrage des Hosts Bei CAN gibt's keinen Host; alle CAN-Geräte sind gleichberechtigt. Henrike K. schrieb: > alle 100 ms ein bestimmter ASCII > Code gesendet (siehe Anhänge). CAN kann keine Strings übertragen, sondern nur 0-8 Byte lange Blöcke. Da wird nie ASCII benutzt. Henrike K. schrieb: > da der xmc > ja nur Nachrichten empfangen soll und keine Senden soll. Oder? Empfänger senden bei CAN ein ACK-Bit damit der Sender weiß, dass seine Nachricht intakt war. Daher muss auch TXD angeschlossen werden (zwischen Transceiver und Controller). Henrike K. schrieb: > Mich verwirrt zum Beispiel, dass ich beim Einrichten der CAN Node in > Dave einen Mask und einen Identifier Value einstellen muss. Du musst im Filter konfigurieren, was für Nachrichten empfangen werden sollen. Sonst wird alles ausgefiltert. Deine Screenshots aus dem Manual passen überhaupt nicht zu CAN. Das sieht stark nach UART/RS-232 aus. Wie kommst du überhaupt auf CAN? Henrike K. schrieb: > Gibt es denn überhaupt eine Möglichkeit, die Daten via RS232 auf meinem > xmc zu empfangen? Ja, das ist kein Problem - dazu braucht es einen RS232-UART-Adapter wie den altbekannten MAX232. Das kann aber so ziemlich jeder Mikrocontroller. Das hat dann aber mit CAN absolut nichts zu tun.
Frage: Wie kommt hier das CAN-Bus Protokoll ins Spiel? Laut angehängter Grafik sendet der BioProTT alle 100 ms einen ASCII-String per RS-232 Protokoll. Der Empfänger (xmc 4300) ist mit den angegebenen Daten für das RS-232 Protokoll zu initialisieren, dann sollte die Verbindung funktionieren. Mit CAN-Bus hat das aber nichts zu tun. Zum Test des BioProTT sollte es möglich sein, auf einem Computer in einem Terminal-Fenster den ASCII-String anzuzeigen. Dazu z.B. einen 'RS-232 to USB' Converter an den Computer anschießen, mit dem BioProTT verbinden und das Terminal-Programm mit den angegebenen Werten für das RS-232 Protokoll initialisieren. Dann sollte der ASCII-String angezeigt werden (mit 10 Hz!). Wenn das funktioniert ist die Hälfte der Verbindung überprüft und man kann sich der Programmierung der RS-232 Schnittstelle des xmc 4300 zuwenden (und ähnlich prüfen).
Danke euch für die geduldigen Antworten. Dass das Ganze so rein gar nichts mit dem CAN Bus zu tun hat, sehe ich jetzt absolut ein - bin da einfach komplett aufs falsche Pferd gesprungen. Der xmc hat auf jeden Fall UART. Auf den MAX232 bin ich bei weiterer Recherche mittlerweile auch gestoßen. Mein xmc kommuniziert mit 3.3V, aber das sollte ja vermutlich auch kein Problem sein.. ? @MEKman: Ich habe deinen Vorschlag mit dem Testen der BioProTT über den Converter gerade mal ausprobiert, und zwar mit Putty, mit den Einstellungen im Anhang, wie es auch im Handbuch der BioProTT steht. Das Terminal bleibt dann allerdings schwarz.. Kann es sein, dass 10 Hz schon zu schnell sind, um im Terminal angezeigt zu werden? Ich bin mir mit der Einstellung "COM1" nicht 100%ig sicher, aber ansonsten kann man hier ja echt nicht so viel falsch machen.. Ich habe vorhin auch mit einem Oszi mal die Pins des 9-polig D-Sub Steckers getestet, da konnte ich teilweise Spannungen sehen, die Nullen und Einsen repräsentieren "könnten". Ganz kaputt scheint der Stecker also eigentlich nicht zu sein.. Vielen Dank nochmal an alle!
Ich bin mir nicht ganz sicher, aber das Mäxchen ist für RS232<->5V vorgesehen. Es gibt ihn aber auch - wahrscheinlich mit anderem Index - für 3,3V. Ist schon ein paar Jahre her, daß ich ihn in den Fingern hatte.
Die 10 Hz sollten kein Problem sein. Es wird nur 10x pro Sekunde ein neuer String angezeigt und gescrollt. Zum Testen aber ausreichend. In Putty muss der COM-Port angegeben werden, den der Computer dem Adapter zugewiesen hat (bei Windows: im Geräte-Manager nachsehen welcher Port das ist). COM1 wäre denkbar, meist werden aber höhere Nummern zugewiesen (z.B. COM9). Wenn der COM-Port nicht stimmt, erhält man im Terminal-Fenster auch keine Anzeige.
Henrike K. schrieb: > @MEKman: Ich habe deinen Vorschlag mit dem Testen der BioProTT über den > Converter gerade mal ausprobiert, und zwar mit Putty, mit den > Einstellungen im Anhang, wie es auch im Handbuch der BioProTT steht. Dann lies nochmal! In einem Deiner ersten Screenshots steht, daß der BioProTT keine Flußkontrolle verwendet, Du hast aber XON/XOFF eingeschaltet. Und wie MEKman schon schrieb ist COM1 zwar denkbar, aber ziemlich unwahrscheinlich.
Oh stimmt, dankeschön, jetzt klappt es! Ich habe mir jetzt überlegt, dass ich mein RS232-Kabel wohl aufschneiden werde und dann auf einem Steckboard mit den entsprechenden Pins eines MAX232-Boards verbinden. Da gibt es ja doch einige Schaltpläne zu, wie man das aufbaut mit Kondensatoren und Co. Oder gibt es irgendwelche schlagfertigen Argumente dafür, dass man sich lieber ein Modul wie dieses https://www.pollin.de/p/rs232-ttl-wandler-mit-max3232-810358?&gclid=Cj0KCQjwnpXmBRDUARIsAEo71tRWVHv8B3HhaK6wqZflZbMGftiREOUC_suVR8CJiYxRQXjNazfYBrAaAiJvEALw_wcB anschaffen sollte, anstatt das Kabel aufzuschneiden? Ich werde ja dann die RxD und TxD Pins des MAX232 mit meinem Mikrocontroller verbinden. Welche Pins nehme ich dann am Mikrocontroller? Auf den ersten Blick hätte ich gesagt, mit dem entsprechenden TxD und RxD Pin, klar. Aber bekomme ich dann nicht eventuell Probleme beim Debuggen, weil beim Debuggen doch auch UART verwendet wird, und somit dann beim Prozessor ständig zwei verschiedene Signale am RxD-Pin empfangen werden? Kann ich dann stattdessen auch andere digitale Pins zu einem zweiten RxD-Pin machen? Oder habe ich da jetzt etwas falsch verstanden? Danke für die Hilfe bisher!
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.