Also ich habe hier einen "Testaufbau" dieser soll aber mal in mein
Heimnetz übernommen werden.
Momentan habe ich 6 Module welche im Sekundentackt ein "Lebenszeichen"
schicken und eine Zentrale welche das Lebenszeichen empfängt. Ich habe
alles auf einer Strecke aufgebaut und habe nicht länger als 1-2m die
Module entfernt. Nur einmal sind es 5m.
Die Module senden alles schön Brav und der Empfänger empfängt auch alles
schön Brav. Nun wenn ich jetzt aber den 7. anstecke (und eigentlich
kommen da bestimmt noch 10 dazu) kommt anstelle von "-9" manchmal "-8"
oder ",-" (Einen Codefehler welcher eine 8 oder, übertrag kann ich
ausschließen, da der Code [siehe oben] das garnicht kennt - ob die
library allerdings ideal ist weiß ich nicht - der Serial-Log vom Sender
meint im übrigen "-9" während der Empfänger anderes behauptet <- und das
auf kompletter strecke [also alle Module]).
Ich weiß, dass der 5m entfernte ggf. zu weit vom Bus entfernt ist und
ich besser das als Strecke auslege (also hin und zurück fahre)... <-
aber kann das der Fehler sein (ist schwer zu testen, weil ich leider nur
ein 2 Poliges Kabel an der stelle zur Verfügung habe - aber ich werde
mal "überirdisch" eines verlegen).
Wie kann ich sowas sauber debugen? Kann es sein, dass ich mit meine 3.3V
was der SN65HVD230 macht, hier an die Grenzen komme?
Abschlusswiderstand und Busspannung und Co wird da ja nicht benötigt?
90% ist mit CAT7 verlegt, es gibt aber kurze Bereiche wo ein
"Lautsprecherkabel" liegt.
danke für eure Tips
EVA
Evahase schrieb:> Abschlusswiderstand und Busspannung und Co wird da ja nicht benötigt?
Du meinst du hast gar keinen Abschlusswiderstand am Bus? Dann ist das
der Fehler und Busspannung ist mir unklar..
Helmut -. schrieb:> Wichtig wäre auch noch die Busgeschwindigkeit.
Busgeschwindigkeit scheint 500kHz zu sein. Versuchs mal mit 125kHz.
Und: Du läuft über das Stringende hinweg!
LG, Sebastian
ha,.... 1000 Dank,
genau das war die Spannende Frage :)
Abschlusswiderstand
Wo genau mach ich den hin?
an meinem geraden Strang (einen vorne & einen hinten nur hinten nur
vorne), oder an jedem Modul?
Oder an jeden längeren Zweig?
Busgeschwindigkeit steht im Code... aber es läuft mit 1000kHz genauso.
Gibt es für die 3.3V Version Empfehlungen. Reden wir hier von 120Ohm,
mehr oder weniger???
@wangnick: wo laufe ich über das "Stringende" hinweg?
meinst du, weil ich, ich übertrage 2 Charaktäre und prüfe beim Versand
ob der wert != 0x00 ist für die Maximal möglichen 8 Charaktäre!?!?
=> oder verhau ich da was?
EVA
Evahase schrieb:> Abschlusswiderstand> Wo genau mach ich den hin?> an meinem geraden Strang (einen vorne & einen hinten nur hinten nur> vorne), oder an jedem Modul?> Oder an jeden längeren Zweig?
Vorne ist immer da wo der Busfahrer sitzt. Der Abschlusswiderstand kommt
also an beide Enden, nicht irgendwo mittendrin.
Stefan ⛄ F. schrieb:> Deine Stichleitungen sind ziemlich lang. Eigentlich sollte der Bus nur> eine durchgehende Linie sein, im Idealfall ganz ohne Stichleitungen.
Wenn die Terminierung nicht geholfen hat, würde ich mal mit der
Datenrate runtergehen. Bei niedrigen Datenraten sind 5m Stichleitung
absolut kein Problem.
ja, ich will auch mit der Datenrate runter gehen, aber ich würde gerne
mit einer "so hohen Datenrate" wie möglich den Testaufbau starten und
nach dem Testbetrieb dann in den "Safemode" gehen :)
das mit den Prüfsummen verstehe ich nicht so ganz <- zugegeben, ich bin
was das angeht "Amateurin". Hier muss ich nochmal Recherchieren.
Ich hab jetzt bei der 5m Stichleitung mal einen "Rückweg" eingebaut, mal
sehen was der Test sagt.
vielen lieben dank für jede Hilfe
EVA
Evahase schrieb:> @wangnick: wo laufe ich über das "Stringende" hinweg?> meinst du, weil ich, ich übertrage 2 Charaktäre und prüfe beim Versand> ob der wert != 0x00 ist für die Maximal möglichen 8 Charaktäre!?!?> => oder verhau ich da was?
Genau. In deiner Schleife läuft i von 0 bis 7, du prüfst also action[0],
action[1], action[2], action[3], action[4], action[5], action[6] und
action[7] auf != 0x00 und füllst entsprechend das CAN-Paket. Aber was
genau steht denn in action[3] wenn du sendCan(modID,"-9") aufrufst?
LG, Sebastian
Was sagst dazu? Ist das sauber? <- eigentlich kann ich die "if-abfrage
für 0x00" rausschmeißen!?
Leider habe ich weiterhin Busprobleme.
Ich habe jetzt "temporär" die lange Stichleitung entfernt. Ebenso habe
ich die rate auf 100kHz runtergesetzt. Sowie 120Ohm an den Anfang und
ans Ende meines Buses.
7 Module arbeiten sauber. Aber ab 8 oder gar 9 bekomme ich wieder
Probleme.
Kann es sein dass die CAN-Library "schlecht" ist <- wobei diese auf die
Renommierte MCP2515 basiert.
Ich suche immer noch nach Debugging-Möglichkeiten. Bzw. Ideen was ich
falsch gemacht haben könnte.
Morgen versuche ich einen Versuchsaufbau auf einer 5m Strecke mit 10
oder besser 15 Modulen (diese müssen allerdings erst noch Produziert
werden).
EVA
Evahase schrieb:> Ich suche immer noch nach Debugging-Möglichkeiten.
Was sagt das Oszilloskop an dem Empfängerende? Deine Module werden
eigene Stromversorgungen haben, und die Transceiver sind nicht
galvanisch vom Bus getrennt. Aber eigentlich kommt ein CAN-Paket heile
an oder gar nicht ...
LG, Sebastian
Oszilloskop hänge ich auch morgen mal ran. Wobei auch hier ich eher
Amateur bin und nicht weiß was ich da sehen soll!?
Die Stromversorgung ist Zentral 9V, jeder ESP32 hat Glättkondensatoren
und einen Pegelwandler auf 3,3V.
Die Transceiver sind genau die: https://www.amazon.de/dp/B07RDKRRN9
Diese habe ich direkt verbunden und direkt ans ESP.
Ich sende ja von jedem Module alle 1000ms "-9". Sobald ich eines zu viel
anstecke (gerade bin ich bei NR.7) senden einige immer noch brav die
"-9" eines Sendet garnicht mehr und 2 schicken -8 oder teilweise sogar
Hieroglyphen... <- richtige Werte kommen dann nicht mehr.
> Es sind nicht immer die selben Module und es ist (für mich) von der "Anordnung"
auch nicht logisch. Also weder das nächste noch das am "ungelegensten Ort".
EVA
Evahase schrieb:> Die Transceiver sind genau die: https://www.amazon.de/dp/B07RDKRRN9
Autsch. Sie Dinger haben nicht mal einen Abblockkondensator.
Laut Bild ist da auf jeder Platine ein Abschlusswiderstand mit drauf.
Das ist natürlich auch verkehrt. Abschlusswiderstände nur an den beiden
Enden des Busses.
Wenn zu viele Widerstände verbaut sind kann der Transceiver den Bus
nicht mehr treiben und es kommt zu Übertragungsfehlern. Bau doch erst
mal die Hardware richtig auf.
Ein paar kurze Anmerkungen zu dem Thema:
- maximal tolerierbar Stichlängen bei Datenrate x kann man im Internet
nachschlagen. Stiche sind aber grundsätzlich nicht toll, lieber mehr
Leitungslänge hin- und zurück akzeptieren.
- Abschlusswiderstand: die Abschlusswiderstände sind nicht nur Kosmetik.
Mindestens einen Abschlusswiderstand braucht man, damit überhaupt ein
Strom fließen kann und sich die Pegel sauber abbilden können
(vereinfacht gesagt).
- Kein Abblockkondensator am CAN Transceiver: wenn überhaupt nichts da
ist, ist das schon blöd. CAN zieht ganz schön Strom, mindestens mal ein
keramischer Kondensator (und wenn es nur ein 100nF ist) wäre gut.
- Du sagst, Du müsstest mal mit oberirdischen Leitungen testen. Wozu?
Die Leitungsqualität des CANs kannst Du jeweils am Transceiver sehen,
sofern Du ein Scope hast. Sind die Flanken relativ schön ausgeformt ist
alles I.O. Sind da eher starke Überschwinger oder viele „analoge
Beimengen“ zu beobachten ist nicht nicht in Ordnung.
@igel
wir kommen der Sache näher :)
> Das heißt, wenn ich "jedes mal" einen Endwiderstand habe, zerstör ich mir den
Bus... das klingt Logisch
wie gesagt, tut mir leid, ich bin da echt nicht Profi, das ist nur ein
Hobby.
d.h. ich mache einfach alle Widerstände runter und habe nur am Anfang
und Ende einen.
Zum Thema Abblockkondensator. Von wo nach wo mach ich denn was. <-
sollte ja kein Thema sein den nachzurüsten!?
lg
EVA
Evahase schrieb:> d.h. ich mache einfach alle Widerstände runter und habe nur am Anfang> und Ende einen.
Ja, der ohmsche Widerstand zwischen CANL und CANH sollte ~60Ω sein,
nachmessen.
Anbei mal Bilder von meinem 125kHz Hobby-CAN-Bus, ein Übersichtsbild von
17 Sekunden und dann ein empfangenes und ein gesendetes Paket, wie am
Transceiver abgegriffen (TJA1050 in meinem Fall).
Evahase schrieb:> Zum Thema Abblockkondensator. Von wo nach wo mach ich denn was. <-> sollte ja kein Thema sein den nachzurüsten!?
100nF zwischen 3V3 und GND auf dem Transceiver-Modul. Am besten zwischen
die Beinchen des Transceivers selbst, ansonsten z.B. zwischen die
Lötkontakte.
LG, Sebastian
jo mei...
@wangnick & alle anderen
1000 Dank euch, es geht.
Ich habe die Widerstände runter. Jetzt hab ich pro Modul ~76kOhm
Widerstand. Auf dem ganzen Bus ~61,5 Ohm.
Aktuell 10 Module auf 500kHz im Betrieb und ich habe keine Fehler. Ich
habe mir noch n paar 100nF bestellt und mach die noch drauf sobald diese
da sind.
Heute Nachmittag mach ich nochmal mind. 5 Module fertig und schau ob es
weiterhin stabil läuft.
es rockt
EVA
Evahase schrieb:> und 2 schicken -8 oder teilweise sogar> Hieroglyphen...
Der CAN-Empfänger sollte fehlerhafte Empfangspakete verwerfen. Bei
massiven Busproblemen wie bei dir vorher steigt natürlich die Chance,
dass die Bitfehler irgendwann einmal zufällig zur Paketprüfsumme passen
und dennoch noch "legal" sind (Framing, Adresse, Bitstuffing), sie ist
aber immer noch recht klein. Ich würde sagen allerallerhöchstens kann
eins von 100000 Rauschpaketen durchkommen.
Wie häufig hast du die Fehler gehabt? Was die Sende-ID dabei noch in
Ordnung? Kann es sein das dein Empfänger fehlerhafte Pakete akzeptiert
und stattdessen als fehlerhaft markiert?
LG, Sebastian
Evahase schrieb:> Aktuell 10 Module auf 500kHz im Betrieb und ich habe keine Fehler
Du meinst 500kbit? Ist eine Hausinstallation, oder? Da mögen 500kbit
"irgendwie" funktionieren, sind aber nicht sonderlich empfehlenswert.
500kbit kann man so gefühlt im Rahmen von 10m bei guter Busstruktur
machen, 50..80m bei 250kbit. Weitere Baudraten vs. Längen siehe
Internet.
die 500kbit sind auch mehr eine "Stabilitätsprüfung"... wenn Fertig
plane ich so 125kbit.
Aber wenn alles sauber und Stabil mit 500kbit läuft, erwarte ich mit
125kbit keine Probleme mehr.
Ich habe jetzt alle Leitungen sauber durchgeschleift, das hat meinen Bus
zwar verlängert, aber dafür habe ich keine Stichleitungen mehr (max
10cm).
@wangnick: das war dann das "kuriose"... manche Meldungen kamen nicht an
und manche kamen falsch an, aber die Falschen kamen IMMER mit dem selben
falschen wert oder eben garnicht. Richtig kam von dem Modul nichts mehr.
=> aber klar, wenn ich an jedem ende 120 Ohm habe ... das *10 ... dann
habe ich einen Buswiderstand von 12 Ohm <- was dann nicht mehr gehen
kann.
...
ich bin jetzt so erstmal zufrieden. Jetzt muss ich erstmal Löten und
noch n paar Module bauen. Ebenso würde ich gerne die
Abblockkondensatoren verbauen (auch wenn es momentan ohne auch gut
funktioniert) <- Sicher ist sicher... das soll immerhin über Jahre gut
laufen.
fühlt euch gedrückt
EVA
Evahase schrieb:> @wangnick: das war dann das "kuriose"... manche Meldungen kamen nicht an> und manche kamen falsch an, aber die Falschen kamen IMMER mit dem selben> falschen wert oder eben garnicht. Richtig kam von dem Modul nichts mehr.> => aber klar, wenn ich an jedem ende 120 Ohm habe ... das *10 ... dann> habe ich einen Buswiderstand von 12 Ohm <- was dann nicht mehr gehen> kann.
Ich versuche das Kuriose zu verstehen, die Gründe könnten ja interessant
sein. Wenn aus "-9" ein "-8" wird, dann ist ein Bit von 1 auf 0
umgekippt (0x39/0b00111001 wird zu 0x38/0b00111000). Eine binäre 1 wird
auf dem CAN-Bus als Ruhepegel übertragen, eine binäre 0 als
Spannungsdifferenz zwischen CANH und CANL. Aber wieso wird bei zu
geringem Buswiderstand ein Ruhepegel als Spannungsdifferenz erkannt? Und
wieso wird das durch die Prüfsumme nicht aufgefangen?
Ein Gedanke den ich hatte ist der recht hohe Bus-Kurzschlussstrom des
SN65HVD230 von 250mA. Kann deine Stromversorgung das leisten?
LG, Sebastian
Puh,
kann es denn sein, dass meine Library keine Fehlerkorrektur bzw.
Prüfsumme unterstützt? <- was ja echt schade wäre. <- wie kann ich das
Prüfen (außer mit Oszi - wobei ich das so oder so mal ranhängen will)
Ja, die Spannungsversorgung ist Overpowered. Ich habe 9V 5A (Gesamt) und
an jedem ESP einen Pegelwandler auf 3.3V (hier will ich am Schluss etwas
eindämpfen, aber erstmal schauen was ich brauche - habe auch ein paar
SSR & Co im Betrieb).
lg
EVA
Evahase schrieb:> kann es denn sein, dass meine Library keine Fehlerkorrektur bzw.> Prüfsumme unterstützt?
Fehlerüberprüfung passiert in Hardware, die Empfänger senden ihr ACK am
Ende jedes empfangenen Pakets nur wenn kein Fehler erkannt wurde.
Deshalb ist dein Fall ja so kurios ...
Evahase schrieb:> an jedem ESP einen Pegelwandler auf 3.3V
Ok, gut wenn der in der Lage ist 5.7V*Strom an Abwärme abzuführen ...
LG, Sebastian