Forum: Haus & Smart Home CAN-Bus Probleme


von S.K. (Gast)


Lesenswert?

Hallo Leute.

Ich benutzte einen PSoC-yC von Cypress. Dieser hat einen integrierten 
CAN-Controller.

Nun möchte gerne zwei dieser Dinger miteinander kommunizieren lassen. 
Hierzu habe ich nach den CAN-Spezifikationen je Controller einen 
MCP2551-Transreceiver an den Bus gelötet. Der Bus besteht aus zwei 3cm 
Kabel (Testplatine) die an den Enden jeweils mit 120 Ohm terminiert 
werden.

Nun ist es so, dass der MCP den Bus nicht einmal auf 2.5V zieht. Selbst 
wenn ich ihn nur an die Versorgungsspannung hänge und TX/Rx nicht 
beschalte, sollte das doch mindestens funktionieren oder?
Der MCP bekommt Vdd/Ground vom Mikrocontroller. Der PIN für die 
Flankensteuerung ist auf Masse.

Hat jemand eine Idee zum Thema ?


Besten Dank

von Frank L. (florenzen)


Lesenswert?

S.K. schrieb:

[...]
> Der MCP bekommt Vdd/Ground vom Mikrocontroller. Der PIN für die
> Flankensteuerung ist auf Masse.

Wie hoch ist denn Vdd?


Gruß
f

von S.K. (Gast)


Lesenswert?

Vdd ist auf 5V. Könnte es vllt. am Strom liegen, so das der MCP nicht 
genug Saft vom Mikrocontroller bekommt?

von S.K. (Gast)


Angehängte Dateien:

Lesenswert?

Mal unabhängig vom Transceiver-Problem.

Ich möchte gerade den CAN-Controller auf Funktion prüfen. Hierzu habe 
ich einfach den Tx an den Rx des Controllers geklemmt.
Es gelingt mir eine Nachricht zu versenden (Standard-Daten-Frame/ 
Standard-CAN-Nachricht) und ich bekomme auch eine periodische Bit-Folge 
am Tx raus. Diese entspricht jedoch nicht dem Standard-Frame nach 
CAN-Spezifikation.

Meine Nachricht enthält nur 1 Datenbit. Ändere ich dieses von 0 auf 1 
wird die gesamte Bitfolge auf einmal um 3bit kürzer. Das ist doch 
eigentlich garnicht möglich oder?

Bilder habe ich mal angehängt:

Datenbit = 0; Datei ...low

Datenbit = 1; Datei ...high

Danach wiederholt sich die Folge, nach ca. 27 high-bits periodisch (in 
beiden Fällen).

von (prx) A. K. (prx)


Lesenswert?

S.K. schrieb:

> Meine Nachricht enthält nur 1 Datenbit. Ändere ich dieses von 0 auf 1
> wird die gesamte Bitfolge auf einmal um 3bit kürzer. Das ist doch
> eigentlich garnicht möglich oder?

Doch, die Länge der Signalfolge auf dem Bus hängt vom Inhalt ab. Lange 
Folgen gleichen Pegels werden zur Auffrischung der Taktsynchronisation 
durch eingeschobene Stopfbits unterbrochen.

von S.K. (Gast)


Lesenswert?

Jetzt wird mir einiges klarer. Ich hatte überlesen das das Datenfeld im 
Daten-Frame bis zu 8byte ist. Das bedeutet also das in diesen Rahmen 
mein Datenbit + zusätzliche Stopfbits auftreten? Wonach richtet sich 
denn die genaue Größe des Datenfeldes, ist das Controllerspezifisch?

Wenn ich mir den Signalverlauf anschaue finde ich jedoch keine festen 
Bits, wie Startbit, Id-bits, usw.. Die müssten doch wenigstens in der 
Folge zu erkennen sein. Oder handelt es sich womöglich garnicht um ein 
Daten-Frame?



Grüße Stephan

von S.K. (Gast)


Lesenswert?

Okay, die letzten Fragen haben sich erledigt. Nach dem ich mir das 
CAN-Protokoll etwas gründlicher angeschaut habe, finde ich nun auch 
meine ID in der Bitfolge wieder ;-).

Die nächste Sache ist nun, da ich ja noch das Problem mit den 
Transceivern besitze, die beiden Mikrocontroller erstmal über eine 
Wired-And-Verbindung kommunizieren zu lassen.
(siehe: 
http://www.mikrocontroller.net/attachment/28831/siemens_AP2921.pdf)

Ich habe hier noch Verständnisprobleme. Die obige Nachricht liegt nun 
auf dem Bus an. Timing/Baudrate stimmt bei beiden. Aber sobald ich den 
Empfänger an den Bus klemme ist der Bus wieder "leer" (in diesem Fall 
auf 5V, siehe Schaltung). Beim Empfänger erhalte ich keine Daten. Woran 
könnte das liegen und wie kann ich das Problem eingrenzen?

Gruß S

von Rudi (Gast)


Lesenswert?

Hallo,


wenn du OHNE Fehler senden kannst, dann sollte es auf der anderen Seite 
auch ankommen. Als erstes würde ich diverse Fehlerbits auf beiden Seiten 
beim Senden überprüfen. Wenn es keine Fehler gibt, liegt die Nachricht 
auf dem Bus und kann auch empfangen werden.

Evtl. hast du auch den Filter aktiviert und empfängst aus diesem Grund 
keine Nachricht ?!


Grüße.

von S.K. (Gast)


Lesenswert?

Hi.

Ja du hast recht, es passiert was auf dem Bus. Die Nachricht wird genau 
1x gesendet und empfangen ist mir heute erst aufgefallen.
Wie sieht den eine richtige Kommunikation auf dem Bus aus? Sender sendet 
Nachricht 1x. Empfänger empfängt diese. Bus ist wieder leer?
Mir ist nämlich aufgefallen, dass sich einige Bits der Nachricht ändern 
wenn der Empfänger mit am Bus hängt.

Ich hab mir die Fehlerwerte mal angesehen und es stimmt, zumindest der 
Sender macht keinerlei Fehler.
AMR und ACR sind richtig eingestellt. Es treten, vor allem beim 
Empfänger, Sendefehler > 255 auf. Da müsste der doch eigentlich in den 
Bus-Off gehen oder? Warum macht der Empfänger eigentlich Sendefehler, 
der soll doch nur Empfangen :-)?

Die Fehlerwerte kann ich über C-Funktionen auslesen.

Besten Dank und Viele Grüße

S

von Rudi (Gast)


Lesenswert?

S.K. schrieb:
> Wie sieht den eine richtige Kommunikation auf dem Bus aus? Sender sendet
> Nachricht 1x. Empfänger empfängt diese. Bus ist wieder leer?

Ja.

> Mir ist nämlich aufgefallen, dass sich einige Bits der Nachricht ändern
> wenn der Empfänger mit am Bus hängt.

Das ist normal. Der Empfänger (oder mehrere) schauen ob die Nachricht 
empfangen werden darf (Filter) und senden ein ACK wenn sie es dürfen. Es 
wird dem Sender also signalisiert das die Nachricht von mindestens einem 
Empfänger empfangen wurde.

S.K. schrieb:
> Es treten, vor allem beim
> Empfänger, Sendefehler > 255 auf. Da müsste der doch eigentlich in den
> Bus-Off gehen oder? Warum macht der Empfänger eigentlich Sendefehler,
> der soll doch nur Empfangen :-)?

Siehe oben.

von (prx) A. K. (prx)


Lesenswert?

Rudi schrieb:

> Das ist normal. Der Empfänger (oder mehrere) schauen ob die Nachricht
> empfangen werden darf (Filter) und senden ein ACK wenn sie es dürfen.

Die senden auch dann ACK, wenn die Nachricht nicht in den Filter passt. 
Sie muss nur korrekt empfangbar sein.

Ein aktiviertes ACK Bit ist also kein Indiz dafür, dass sich jemand 
dafür interessiert hat.

von S.K. (Gast)


Lesenswert?

Mhh das ist interessant. Im Moment siehts so aus. Der Sender sendet, bis 
auf vereinzelte Bitfehler, problemlos. Hängt kein Teilnehmer am Bus, 
gibts einen Ack-Error. Auf dieser Seite also alles normal.

Der Empfänger muss die Nachricht ja zumindest richtig bestätigen, sonst 
würde der Sender Ack-Error melden richtig?
Ich erhalte jedoch nicht meine übertragenen Datenbits am Empfänger. Hier 
kommt also inhaltlich nix an.

Das Problem sollte somit entweder bei der Schaltung oder am 
ACR/AMR-Filter des Empfängers zu finden sein oder?

von (prx) A. K. (prx)


Lesenswert?

S.K. schrieb:

> Der Empfänger muss die Nachricht ja zumindest richtig bestätigen, sonst
> würde der Sender Ack-Error melden richtig?

Irgendeine Node muss es bestätigen. Nicht unbedingt diejenige, die damit 
gemeint ist.

> Das Problem sollte somit entweder bei der Schaltung oder am
> ACR/AMR-Filter des Empfängers zu finden sein oder?

Sieht so aus. Man darf CAN auch ohne Filter bzw. mit "ich will alles" 
betreiben um anschliessend per Software zu filtern. Kann u.U. einfacher 
sein als sich mit z.T. komplexen Filterstrukturen rumplagen zu müssen. 
Mindestens anfangs.

von S.K. (Gast)


Lesenswert?

Endlich Ergebnisse.
Es lag sowohl an einem falsch eingestellten Filter als auch am falschen 
Auslesen der Empfangspuffer. Nun klappt der Nachrichtenaustausch 
erstmal. Bedeutet also diese provisorische wired-or Verbindung kann man 
für Testzwecke durchaus benutzen.

Vielen Dank erstmal für die Hilfe. Falls noch Fragen auftauchen, meld 
ich mich hier :-).

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.