Forum: Mikrocontroller und Digitale Elektronik CAN Bus Daten am Transceiver empfangen


von Tino T. (hike96)


Angehängte Dateien:

Lesenswert?

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!

von holger (Gast)


Lesenswert?

>Ü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.

von Gnorm (Gast)


Lesenswert?

Auch wenn heute Freitag ist: Das ist nun wirklich uebertrieben!

von Sebastian S. (amateur)


Lesenswert?

CAN und RS232 haben noch nicht mal auf der elektrischen Ebene etwas 
miteinander zu tun.
Dann differiert auch noch das Protokoll!

von Tino T. (hike96)


Lesenswert?

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!

von Max D. (max_d)


Lesenswert?

Kenne xmc4300 nicht im Detail, aber der wird sicher uarts haben.
Mit einem rs232 transceiver geht das also ziemlich sicher.

von Sebastian S. (amateur)


Lesenswert?

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.

von Dr. Sommer (Gast)


Lesenswert?

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.

von MEKman (Gast)


Lesenswert?

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).

von Tino T. (hike96)


Angehängte Dateien:

Lesenswert?

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!

von Sebastian S. (amateur)


Lesenswert?

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.

von MEKman (Gast)


Lesenswert?

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.

von guest (Gast)


Lesenswert?

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.

von Tino T. (hike96)


Lesenswert?

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
Noch kein Account? Hier anmelden.