Hallo
Ich habe eine praktisches CAN Problem. Leider finde ich seit Tagen keine
Lösung dazu.
Ich habe einen AT90CAN128 mit dem Transceiver PCA82C251. Als Busleitung
benutze ich 2 dünne Kabel die an beiden Enden über 120 Ohm miteinander
verbunden sind.
Da ich nicht genau sagen kann, ob der andere am Bus angeschlossene
Knoten funktioniert, sage ich einfach mal der PCA82C251 ist der einzige
Knoten am Bus.
Wenn ich jetzt eine Nachricht senden möchte, bemerkt der AT90CAN sofort
einen Biterror und einen Stufferror und schaltet auf Busoff.
Ich habe auch schon einen 60 Ohm Widerstand parallel zu einem 100pF
direkt zwischen CANL und CANH probiert, so wie es zu Testzwecken im
Datenblatt steht. Auch hier passiert genau dasselbe, Biterror,
Stufferror, Busoff.
Wie kommunizieren denn Transceiver und Controller miteinander?
Den Error muß ja der Controller erkennen, oder? Was würde denn bei einem
defekten Transceiver passieren? Evtl. genau das was bei mir passiert?
Wäre super wenn jemand eine Idee hätte...
> Wenn ich jetzt eine Nachricht senden möchte, bemerkt der> AT90CAN sofort einen Biterror und einen Stufferror und> schaltet auf Busoff.
Und verhält sich damit genau nach Spezifikation. Ein einzelnes Device
fühlt sich auf dem CAN-Bus zu einsam und schmollt.
Grund: ACK Bit wird von niemandem gesetzt. Führt zu Retry bis zum Limit
und dann Bus-Off State.
Probier's mal im Loopback-Mode.
Ok, Biterror klingt mehr nach defektem Bus. Lass mal den anderen Knoten
ganz weg, probier Loopback. Wann das sauber geht ist zumindest die
Software ok.
Das ist doch schonmal ein heißer Tip.
Also kann das durchaus richtig sein und ich sollte mich mal genauer mit
dem anderen Knoten beschäftigen...
Der andere Knoten ist ein Peak CAN Dongle an einem Laptop mit PCAN
Explorer, aber irgendwie bekomme ich da auch kein wirkliches
Lebenszeichen raus. Der Trace zeigt ja alle von PCAN Explorer gesendete
Nachrichten an, egal ob sie wirklich auf dem Bus liegen oder nicht...
Hallo Marco!
Der PCA82C251 ist ein High-Speed-CAN-Transceiver. Ich besitze auch einen
CAN-Dongle von Peak und auf diesem ist ein LOW-Speed-Transceiver
integriert - ich glaube vom Typ TJA1054. Die Software, der CANView
erlaubt aber Einstellungen bis 1MBit. Vielleicht ist dies das Problem.
Wichtig ist aber auch die Einstellung im CANView.
Bei mir: LPT1 mit Adresse 0x378 und Interupt entweder 5 oder 7 und EPP
ausgewählt.
Gruß
Mike
Hallo.
Daran liegts bei mir leider nicht. Mein PCAN Dongle ist mit einem
SJA1000 und einem PCA82C251 aufgebaut, also ein Highspeed Dongle.
Ich habe aber GND von meiner Platine und GND vom Dongle nicht verbunden.
Kanns daran liegen?
Hoppla - der Atmel scheint sowas garnicht zu haben. Na da ist ja nicht
gerade freundlich.
Aber wo ich grad in dem Datasheet drin war: Dein bit error lässt einen
falsch angeschlossenen oder defekten Transceiver, oder eine verkorkste
CAN Verkabelung vermuten. Spiel mal bei abgeschaltetem CAN-Controller
per Port-I/O mit dem CAN-Tx Pin und schau was auf dem CAN-Bus und auf
CAN-Rx rauskommt (ohne Dongle, d.h. allein auf dem Bus, sonst mischt der
auch noch mit).
Das ist ne gute Idee. Werde mal ins Datenblatt des Transceivers gucken
was der für Pegel erwartet und dann das ansprechen per I/O Port testen.
Vielen Dank für die Hilfe...
Hallo Kollegen,
der CAN ist zwar ein differentieller 2 Leitungs-Bus, aber er benötigt
die gemeinsame Ground Verbindung als Bezug. Je höher die
Übertragungsrate
gewählt wird, desto wichtíger ist die gute Leitungsanpassung.
Es ist bisher nie falsch gewesen, dem Bus eine Spannungsvorprägung zu
verpassen. Mit den Abschlußwiderständen von 120 Ohm an den Enden der
Busleitung werden verdrillte Adern ( Klingeldraht ) sauber
abgeschlossen.
Ein Buskurzschluß kann damit erkannt werden.
Je nach Geschwindigkeit und Buslänge ist noch der Abtastzeitpunkt
BTR0,BTR1
der Controller wichtig.Die Signale benötigen einen gewisse
Beruhigungszeit bis zur Abtastung.
Was freilich nicht heisst, dass GND ein Bestandteil der Verbindung sein
muss. Sondern nur, dass bei irgendwie miteinander verbundener Masse die
Pegel auf CANH/CANL sich in dem Rahmen bewegen müssen, den die
Transceiver verdauen. Komplett massefrei soll auch gehen, habe ich aber
selber nicht ausprobiert.
Anbei mal ein Beispiel für 125Kbps über zig Meter einfaches rein
2-adriges Telefonkabel im Bündel zusammen mit Telefonverkabelung,
beiderseits 120 Ohm, am entgegengesetzten Ende gemessen. Ohne Abschluss
amgemessenen Ende war etwas Klingeln zu sehen, allerdings nicht wirklich
kritisch, mit Abschluss war das Signal so sauber wie man es sich nur
wünschen kann.
Anmerkung:
----------
Wenn sich nur ein Gerät am Bus befindet, darf es nur ein NACK-Fehler
geben.
Damit läuft dann der Fehlerzähler im Controller hoch, da dieser solange
sendet, bis die Software das einstellt oder ein ACK empfangen wurde.
Aber der Controller darf dabei NUR ind den Error-Passive Mode wechseln!
Nicht in den Bus-Off! Der Bus-Off darf nur bei Bitfehlern und
Stufffehlern
eintreten.
Hab das ganze schonmal mit nem AT90CANxxx getestet. Der geht ohne
zweiten
Teilnehmer nur in den Error-Passive-Modus.
Ist dein Tranceiver auch aktiv? Die Teile haben da so eine Art
Enable-Pin.
Wenn der nicht auf dem richtigen Pegel liegt, dann geht auch nix.
Nimm den Niderstand mal raus und schiess den pin direkt auf masse an.
Ich meine mich da dunkel an etwas zu erinnern, was die Funktion mit dem
Widerstand betrifft. Ausserdem habe die Designs, die ich bisher so
gesehen hab, das Teil imm direkt an Masse gehabt.
Der Widerstand steuert die Flankensteilheit. Bei 1Mbps sollte der Pin
auf Masse, bei 125Kbps ist es für den Test egal ob 20K oder 0. Da
reduziert er nur die Störabstrahlung bei nicht geschirmten Leitungen.
Mit dem "Pinwackeln" habe ich auch nichts vernünftiges rausbekommen.
Habe jetzt auch mit 2 anderen idetischen Platinen getestet. Lief sofort.
Also ist wohl schlichtweg der Transceiver im Eimer.
Vielen Dank an alle für die Mühe!