Forum: Mikrocontroller und Digitale Elektronik MCP2515 und TJA1055 Sendet nicht TXD Problem


von Kevin (Gast)


Angehängte Dateien:

Lesenswert?

Guten Tag,

ich habe momentan ein Problem mit dem CAN Low Speed Transceiver TJA1055.
Als CAN Controller hab ich den MCP2515. Vorweg: Der Empfang von
Nachrichten bei 100kbit funktioniert und auch der ERR Pin am Transceiver 
ist
auf HIGH und somit im Normal Operating Mode ohne Busfehler lt. 
Datenblatt.

Wenn ich allerdings eine Nachricht senden möchte funktioniert das nicht
(TXERR, MLOA und TXREQ im MCP2515 Register sind auf 1)
1
TXERR = Ein Bus Fehler ist aufgetreten während des Senden
2
MLOA = Nachrichten Abitrierung verloren 
3
TXREQ = Nachricht im Buffer ausstehend noch nicht versendet

Soweit ich jetzt herausgefunden habe liegt der Fehler bereits beim
Übertragen der Nachricht vom TXCAN Pin des Controllers zum TXD Pin vom
Transceiver. Im Anhang habe ich mit dem Logic Analyzer die Übertragung
mitverfolgt. Warum wird beim Versenden der Pegel auf TXD komplett auf 
LOW
gezogen bis ein Fehler registriert wird und kein rezessiver Pegel? 
Veruch schon seit Tagen das Problem zu lösen ohne Erfolg.

von Thiemo N. (thiemo)


Lesenswert?

Hallo,

Kevin schrieb:
> Warum wird beim Versenden der Pegel auf TXD komplett auf LOW
> gezogen bis ein Fehler registriert wird und kein rezessiver Pegel?

Zwischen TXCAN des Controllers und TXD des Transceivers sollen doch 
"Logikpegel" anliegen, <= 0.6V für "low" und >= (Vdd-0.7)V für "high". 
Die differenziellen CAN-Bus-Spannungen macht dann erst der Transceiver 
daraus. Oder verstehe ich die Frage falsch?

> Veruch schon seit Tagen das Problem zu lösen ohne Erfolg.

Ich gestehe Schwierigkeiten, den Screenshot "TXD.jpg" zu deuten - im 
unteren Bereich sehe ich in rot/grün schon periodische Pulse, danach 
würde ich sagen, irgendwer sendet da - aber oben ist nur ein längerer 
und dann ein paar kurze "low"-Pulse zu erkennen. Ist "oben" der TXD-Pin 
des Transceivers, wie in der Legende steht? Ist "unten" dann CANH/CANL 
des Transceivers (sieht ein bißchen differenziell aus)? Liegt denn, wenn 
Du ein Problem bei der Verbindung vermutest, an TXCAN (MCP2515) und TXD 
(TJA1055) jeweils das gleiche an?

Was ich untersuchen würde:
1. Bekommt der MCP2515 per SPI die richtigen Daten geliefert?
2. Läßt er erkennen, daß er etwas sendet / meint, etwas gesendet zu 
haben (leeren sich seine Sendepuffer)?
3. Liefert er im Empfangsfall (der ja funktionieren soll) die richtigen 
Daten?

Wenn das paßt und der also richtig angesprochen wird, vielleicht mal mit 
einem Oszilloskop (statt LA) TXCAN, TXD und CANL/CANH anschauen und 
dabei versuchen, was zu übertragen...

Ich bin gespannt!

von Kevin (Gast)


Lesenswert?

Thiemo N. schrieb:
> Ich gestehe Schwierigkeiten, den Screenshot "TXD.jpg" zu deuten - im
> unteren Bereich sehe ich in rot/grün schon periodische Pulse, danach
> würde ich sagen, irgendwer sendet da - aber oben ist nur ein längerer
> und dann ein paar kurze "low"-Pulse zu erkennen. Ist "oben" der TXD-Pin
> des Transceivers, wie in der Legende steht? Ist "unten" dann CANH/CANL
> des Transceivers (sieht ein bißchen differenziell aus)? Liegt denn, wenn

Oben bei TXD in der Legende ist der PIN TXCAN am MCP2515 Controller und
unten bei RXD der PIN RXCAN am MCP2515 Controller. Also beides sind 
Daten
direkt am CAN Controller zum/vom Transceiver. Ganz unten im Bild ist ein 
Überblick der kompletten Aufzeichnung. da kann man auch erkennen das auf 
PIN RXD richtige Daten empfangen werden ( Sieht canh/canl Bus Signal 
ähnlich, ist aber der RX PIN am Controller ). Die Empfangen Daten 
scheinen auch soweit Plausibel.

TXD funktioniert nicht.
Der Controller reagiert beim Senden genau mit dem langen LOW Signal auf 
TXD.

Thiemo N. schrieb:
> Liegt denn, wenn
> Du ein Problem bei der Verbindung vermutest, an TXCAN (MCP2515) und TXD
> (TJA1055) jeweils das gleiche an?
In der Aufzeichnung messe ich direkt am Ausgang am Controller und sogar 
da
ist das Signal schon Falsch. Ich kann das nochmal genauer prüfen. Aber 
zumindest mit dem Ohmmeter hab ich eine Verbindung.

Thiemo N. schrieb:
>> Warum wird beim Versenden der Pegel auf TXD komplett auf LOW
>> gezogen bis ein Fehler registriert wird und kein rezessiver Pegel?
>
> Zwischen TXCAN des Controllers und TXD des Transceivers sollen doch
> "Logikpegel" anliegen, <= 0.6V für "low" und >= (Vdd-0.7)V für "high".
> Die differenziellen CAN-Bus-Spannungen macht dann erst der Transceiver
> daraus. Oder verstehe ich die Frage falsch?

Ja, Denke auch Logikpegel zwischen Controller u. Transceiver. Der 
Transceiver wandelt die Pegel von der einen Leitung auf CANH und CANL 
auf.

Bei der Aufzeichnung des TXD Pins ab Sende Start einer Nachricht nur ein 
Low Pegel zu sehen. Was aber nicht richtig ist, wenn man die HEX Bus 
Daten darüber betrachtet ergibt sich aus dem langen low ein 0x000 als 
identify wobei ich 0x661 sende möchte. Deswegen die Frage warum er nur 
einen Low Pegel sendet, weil er sollte ja auch 1en also High Signale 
senden. Ein TXD Gut Bild würde ähnlich dem Signal RXD aussehen (Wie auf 
der Übersicht unten zu sehen).

Die anschließenden kurzen Low Signale in der Spalte TXD sind weitere 
Sendeversuche vom Controller der Nachricht da ein Fehler aufgetreten ist 
und ich ihn nicht ihn OneShot Modus betreibe, denke ich.

Thiemo N. schrieb:
> 1. Bekommt der MCP2515 per SPI die richtigen Daten geliefert?
Hatte heute Vormittag die Register für die Transmit Buffer kontrolliert 
und die waren alle i. O.. Also CAN Nachricht müsste richtig im Register 
sein.

Thiemo N. schrieb:
> 2. Läßt er erkennen, daß er etwas sendet / meint, etwas gesendet zu
> haben (leeren sich seine Sendepuffer)?

Erkennen tu ich es, weil wie gesagt beim Sende Start der Nachricht 
ändert sich beim Pin TXCAN am Controller das Signal ( Der lange falsche 
Low Pegel in der Aufzeichung ). Das ist genau der begin wenn ich die 
Nachricht sende.
Die Sendepuffer sind immer voll weil die Nachricht irgendwie nie 
gesendet wird. Aber wahrscheinlich genau deswegen weil der Controller 
falsche daten rausschickt.

Thiemo N. schrieb:
> 3. Liefert er im Empfangsfall (der ja funktionieren soll) die richtigen
> Daten?
Denke Schon. Die Empfangsdaten sind von div. KFZ Steuergeräten. Wobei 
die Daten soweit alle korrekt aussehen.



Was mir noch aufgefallen ist: Wenn ich keine Nachricht sende aber eine 
"fremde" Nachricht Empfange, sendet mein Controller ein richtiges ACK 
Bit an den Absender! Es scheint so wie wenn der Tja1055 schlichtweg 
meine zu sendenden Frames ignoriert/blockt. KA Warum

von Kevin (Gast)


Lesenswert?

Hab jetzt probiert den Tja1055 ganz ausgebaut und TXCAN und RXCAN vom 
MCP überbrückt. Die Nachricht wird versendet und auch richtig empfangen 
( Also so ne Art loopback). Soweit müsste es dann schon alles richtig 
sein.

Es Liegt Irgenwie am TJA1055. Vll sind meine RTl und RTh widerstände
nicht richtig?

kann es das falsche bittiming sein? Wahrscheinlich nicht weil er sonst 
nichts empfangen würde?

von (prx) A. K. (prx)


Lesenswert?

Wenn das kein Monolog bleiben soll, dann könnte helfen, die Schaltung 
rauszurücken. Die echte, kein Datenblattauszug. Bild, nicht Prosa.

Auch das Bit-Timing lässt sich besser beurteilen, wenn man es kennt.

: Bearbeitet durch User
von Kevin (Gast)


Lesenswert?

Würd ich und hät ich auch. Kann ich aber nicht da ich keinen Schaltplan 
für den Aufbau habe. Es gibt auch keinen Schaltplan den ich nachgelötet 
habe und ich selber habe noch keinen gemacht bzw. keine Platine dafür. 
Ist noch Lochraster und solange es nicht funktioniert werd ich 
wahrscheinlich keine platine machen.

Ich weiß das es helfen könnte aber ich hab leider keinen.

von Thiemo N. (thiemo)


Lesenswert?

'nabend,

Kevin schrieb:
> Hab jetzt probiert den Tja1055 ganz ausgebaut und TXCAN und RXCAN vom
> MCP überbrückt. Die Nachricht wird versendet und auch richtig empfangen
> ( Also so ne Art loopback). Soweit müsste es dann schon alles richtig
> sein.

Das ist doch ein guter Test und ein gutes Ergebnis.

> Ist noch Lochraster und solange es nicht funktioniert werd ich
> wahrscheinlich keine platine machen.

"SO14", "body width 3.9mm", laut Datenblatt? Hut ab, wenn das fehlerfrei 
geklappt hat.

> Es Liegt Irgenwie am TJA1055. Vll sind meine RTl und RTh widerstände
> nicht richtig?

Tja, das Teil habe ich noch nicht verbaut... Aber sollten die nicht eh 
nur im Fehlerfall wichtig sein? Nach dem Datenblatt haette ich ja 
jeweils uebliche 120R genommen.
Wie A.K. schrieb - Fehler scheint in Hardware zu liegen, da waere es 
gut, die Hardware zu kennen.

von Kevin (Gast)


Angehängte Dateien:

Lesenswert?

Also Danke an dich Thiemo für deine Unterstützung, hast mir
ansporn gegeben den Fehler zu finden :)

Hab den Fehler jetzt gefunden.

Thiemo N. schrieb:
> Aber sollten die nicht eh
> nur im Fehlerfall wichtig sein? Nach dem Datenblatt haette ich ja
> jeweils uebliche 120R genommen.
Ja war auch der Meinung bzw. müsste schon richtig sein, dass nur im
Fehlerfall die Widerstände dazu geschaltet werden. Als Widerstand
hab ich 5kOhm genommen. 5kOhm weil: Hab ein Steuergerät aus einem KFZ
das auch im selben CAN Bus angeschlossen ist geöffnet und da waren 5kOhm
als RTH u RTL deswegen hab ich die auch bei mir verwendet ohne weiter 
darüber
nachzudenken. Welcher Widerstand wirklich der richtige bei mir ist oder 
welchen ich verwenden sollte weiß ich nicht 100%.

Thiemo N. schrieb:
> Fehler scheint in Hardware zu liegen
JA. Hab echt nicht mehr gewusst warum das nicht Funktioniert. Hab mich
dann entschlossen den TJA1055 auszutauschen. Und was soll ich sagen, hat 
sofort funktioniert genauso wie es sollte. Aber warum der alte kaputt 
gegangen bzw noch NIE funktioniert hat ist kann ich echt nicht sagen. 
Nja egal jedenfalls mit dem neuen
Transceiver funktionierts.

Thiemo N. schrieb:
> "SO14", "body width 3.9mm", laut Datenblatt? Hut ab, wenn das fehlerfrei
> geklappt hat.
Hab ein Bild mal davon angehängt. Schaut nicht gut aus aber ich hab auch 
noch keine Platine dafür gemacht. Klappt soweit ganz gut zu löten. Hab 
eine JBC seitdem ist alles leichter zu löten :)

von Thiemo N. (thiemo)


Lesenswert?

Kevin schrieb:
> Hab ein Bild mal davon angehängt. Schaut nicht gut aus aber ich hab auch
> noch keine Platine dafür gemacht.

Ok, also wirklich: Hut ab! :-)
Denn mal viel Spaß mit erfolgreichem Senden...

von Thomas (kosmos)


Lesenswert?

Am Anfang und am Ende des Bus würde ich die genannten 120 Ohm verwenden. 
Oft bekommen Teilnehmer dazwischen dann noch einen hochohmigeren 
Widerstand wie du es beobachtest hast.

Benutzt du auch wie empfohlen Drosselspulen und evtl. ESD Dioden an den 
Transceivern vielleicht hast du dir hier die Probleme eingefangen das 
dein TJA1055 futsch ist.

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.