Forum: Mikrocontroller und Digitale Elektronik Sendefehler MCP2515 / Arduino nur bei 10 kbps


von Moritz M. (moritz2)



Lesenswert?

Hallo zusammen,

ich habe ein paar MCP2515/TJA1050/8MHz Can-Bus Modul (siehe Google, 
"MCP2515_CAN", diese blauen Dinger mit zwei Schraubterminals).

Angebunden an einen Arduino Nano, nutze PlatformIO + 
https://github.com/autowp/arduino-mcp2515 als Library.

Zum Testen habe ich zwei Arduinos+MCP2515, H/L verbunden, und die jumper 
für die 120Ohm Widerstände gesetzt.

Daten Senden klappt einwandfrei mit 20kbps, 50kbps, 100kbps oder 
500kbps. Egal ob mit/ohne Wiederstände, und egal ob kurzes/langes Kabel 
etc.

Nur mit 10kbps klappt es nicht. TXERR bit gesetzt, Fehlerzähler geht 
hoch, andere Seite empfängt auch nicht.

Habe zum Testen mal auf eine andere Library umgebaut 
(https://github.com/pierremolinaro/acan2515), und auch die CNF1-3 
register mal mit verschiedenen Einstellungen von 
https://www.kvaser.com/support/calculators/bit-timing-calculator/ 
geupdated, hilft alles nichts.

Habe dann den MCP2515 an ein eigenes Netzteil angeschlossen, und wenn 
ich die Spannung zwischen 5 und 6V variiere, kommt hin und wieder mal 
ein Paket durch, aber nicht dauerhaft.

Empfangen mit 10kbps (Heizung, Heatronic) klappt ohne Probleme.

Im Oszilloskop kann ich nichts seltsames erkennen.

Hat hier mal einer ähnliche Erfahrungen gemacht oder eine Idee dazu?

Ganz vielen Dank vorab

Moritz

von Christian K. (christian_rx7) Benutzerseite


Lesenswert?

Soweit ich mich erinnern kann, gibt es CAN Transceiver mit integrierter 
Überwachung auf Busblockaden, die sprechen bei zu langen dominanten 
Zuständen an und unterbinden diese. Da gibt es welche, die mindestens 
20kbs sehen wollen. Wenn auf deinem Board der TJY1050 verbaut ist, dann 
steht in dessen Datenblatt 60 kbaud up to 1 Mbaud.

von Sebastian W. (wangnick)


Angehängte Dateien:

Lesenswert?

Christian K. schrieb:
> Soweit ich mich erinnern kann, gibt es CAN Transceiver mit integrierter
> Überwachung auf Busblockaden, die sprechen bei zu langen dominanten
> Zuständen an und unterbinden diese. Da gibt es welche, die mindestens
> 20kbs sehen wollen. Wenn auf deinem Board der TJY1050 verbaut ist, dann
> steht in dessen Datenblatt 60 kbaud up to 1 Mbaud.

Das scheint es wohl zu sein. Der TJA1050 hat ein Timeout wenn TXD zu 
lange LOW ist von typ. 450us. Durch das bit stuffing ist TXD zwar 
maximal 5 bits lang LOW, aber bei 10kHz sind das halt dann 500us ...

LG, Sebastian

von Moritz M. (moritz2)


Lesenswert?

Super vielen Dank, das scheint es zu sein.

Schade, dass da echt nur tdom(TXD) irgendwo versteckt im Datasheet 
steht, und nicht irgendwo eine minimum usable baud rate oder so etwas.

Der MCP2551 scheint auch nur bis auf 40 kbps runter zu können.

Hier https://github.com/Neuroquila-n8fall/JunkersControl wird das obige 
Board empfohlen zur Kommunikation mit einer Junkers Heatronic, dann hat 
der Herr wahrscheinlich mit Glück eins der TJAs bekommen, der eher bei 
250us statt 450us liegt...

Es scheint auch keine Transceiver zu geben, die 10 kbps wirklich 
unterstützen, vielleicht mal was für nen raspberry pico mit bitbanging 
:/

Danke!

Moritz

von Falk B. (falk)


Lesenswert?

Moritz M. schrieb:
> Es scheint auch keine Transceiver zu geben, die 10 kbps wirklich
> unterstützen, vielleicht mal was für nen raspberry pico mit bitbanging
> :/

Wozu meinst du, 10kbps zu brauchen? Ist das ein neuer Trend, slow 
communication? Nimm 125kbit/s und mehr und gut.

von Falk B. (falk)


Lesenswert?

Moritz M. schrieb:
> Der MCP2551 scheint auch nur bis auf 40 kbps runter zu können.

Nö, 16kbit/s, RTFM.

"1.5 TXD Permanent Dominant Detection
If the MCP2551 detects an extended Low state on the TXD input, it will 
disable the CANH and CANL output drivers in order to prevent the 
corruption of data on the CAN bus. The drivers are disabled if TXD is 
Low for
more than 1.25 ms (minimum). This implies a maximum bit time of 62.5 μs 
(16 kb/s bus rate), allowing up to 20 consecutive transmitted Dominant 
bits during a multiple bit error and error frame scenario. The drivers 
remain disabled as long as TXD remains Low. A rising edge on TXD will 
reset the timer logic and enable the CANH and CANL output drivers."

Seite 12

14 TtxL2busZ TX Permanent Dominant Timer Disable Time 1.25 4 ms

Der kann also mit etwas Glück auch 10kbit/s.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Moritz M. schrieb:
> Zum Testen habe ich zwei Arduinos+MCP2515, H/L verbunden
Nur, weil es im textuellen Schaltplan nicht erkennbar ist: GND ist aber 
schon auch verbunden?

von Alexander (alecxs)


Lesenswert?

Ich hab mir so eine Platine mit TJA1055 bestückt. Hab die auch noch 
einzeln da auf 1.27 mm Adapterplatine, falls Du was brauchst.
Beitrag "Re: Meine erste Platine mit TARGET 3001!"

von Thomas F. (igel)


Lesenswert?

Moritz M. schrieb:
> Es scheint auch keine Transceiver zu geben, die 10 kbps wirklich
> unterstützen

Es gibt durchaus ältere Transceiver die dieses Timeout noch nicht haben, 
z.B. die früher weit verbreiteten PCA82C250/251.
Damit habe ich über ein paar Jahre meine Zentralheizung mit 10kBit 
angebunden.

von Nils S. (wall-e)


Lesenswert?

Moritz M. schrieb:
> Schade, dass da echt nur tdom(TXD) irgendwo versteckt im Datasheet
> steht, und nicht irgendwo eine minimum usable baud rate oder so etwas.

Etwas Salz in die Wunde :
Im Datenblatt des 1050er steht ganz am Anfang :It is primarily intended 
for
high-speed automotive applications using baud rates from
60 kbaud up to 1 Mbaud.

Es muss wohl jeder Entwickler irgendwann mal schmerzhaft lernen das man 
Datenblätter VOLLSTÄNDIG lesen muss. Jede Zeile auf jeder Seite. Oft 
verstecken sich wichtige Informationen irgendwo ganz weit hinten im 
Text.

von Moritz M. (moritz2)


Lesenswert?

Naja, "primarily intended" heisst für mich nicht "only usable for" ;)

Trotzdem ganz vielen Dank, ich probier mich mal an dem MCP2551 (ja - 
habe im datasheet gesehen - 16 kbaud).

Ansonsten habe ich endlich einen Grund, mir das programmable 
input/output vom raspberry pico mal anzuschauen.

Besten Dank an alle!

Moritz

von Falk B. (falk)


Lesenswert?

Moritz M. schrieb:
> Ansonsten habe ich endlich einen Grund, mir das programmable
> input/output vom raspberry pico mal anzuschauen.

Ja, aber da mal fix einen CAN-Controller nachzubauen ist eher eine 
Illusion. Zumal das Problem hier beim Tranceiver (Pegelwandler) 
liegt. Den kannst du mit dem Raspberry PI nicht ersetzen.

von Sebastian W. (wangnick)


Lesenswert?

Mal ne blöde Idee. Man könnte eventuell die Schutzschaltung des TJA1050 
überlisten indem man alle 200us den TXD ganz kurz (5-10ns) auf HIGH 
zieht. Unter Umständen wird das noch nicht einmal auf dem CAN-Bus 
sichtbar. Ein solch kurzes Signal zu generieren ist für den ATmega328P 
aber schwierig, und man müsste das Signal noch zwischen MCP2515 TXCAN 
und den TJA1050 TXD rein-odern ...

LG, Sebastian

von Harald A. (embedded)


Lesenswert?

Bau doch einen anderen Transceiver ein. Die sind ja allesamt recht 
pinkompatibel, hier und da mal ein Pin, der ggf. anderweitig beschaltet 
werden muss. TJA1042T, MCP2551, SN65HVD255 usw. Bevor wieder 
herumgemotzt wird, ich habe die Eignung dieser Transceiver auf 10kBit 
vor dem Schreiben des Beitrags nicht validiert.

Edit: sehe gerade, teilweise schon genannt…

: Bearbeitet durch User
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.