www.mikrocontroller.net

Forum: Haus & Smart Home CAN-Bus Probleme


Autor: S.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Lorenzen (florenzen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: S.K. (Gast)
Datum:

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

Autor: S.K. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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).

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: S.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: S.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/si...)

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

Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: S.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: S.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: S.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.