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
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
Vdd ist auf 5V. Könnte es vllt. am Strom liegen, so das der MCP nicht genug Saft vom Mikrocontroller bekommt?
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).
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.
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
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
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.
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
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.
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.
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.