Hey Leute, ich bin am Verzweifeln.
ich habe einen CAN-Bus gebaut. Mittlerweile bin ich wieder in einem
Laborumfeld in welchen 3 Module an einer Strecke von 3m aufgebaut sind
(vorne und hinten 120Ohm).
Das Modul ist ein ESP32 mit aufgesetztem SN65HVD230 an PIN4 & 5.
mein Code:
1
#include <CAN.h>
2
3
void setup() {
4
Serial.begin(115200);
5
while (!Serial);
6
7
Serial.println("CAN Sender");
8
9
// start the CAN bus at 500 kbps
10
if (!CAN.begin(500E3)) {
11
Serial.println("Starting CAN failed!");
12
while (1);
13
}
14
}
15
16
void loop() {
17
// send packet: id is 11 bits, packet can contain up to 8 bytes of data
18
Serial.print("Sending packet ... ");
19
20
CAN.beginPacket(0x12);
21
CAN.write('h');
22
CAN.write('e');
23
CAN.write('l');
24
CAN.write('l');
25
CAN.write('o');
26
CAN.endPacket();
27
28
Serial.println("done");
29
}
das "done" wird nie erreicht. Auch nicht mit einer Datenrate von 20. Bei
endPacket (also da wo die Daten dann auch in der Library versendet
werden) hängt der ESP bis der Watchdog sein übriges tut...
Ich habe bereits 15 Module mit weit aus komplexeren Code im betrieb.
Jetzt habe ich nochmal 10 Nachproduziert. Plötzlich greift der Watchdog
und startet neu. Also habe ich nochmal den Bootloader neu geflasht, und
mal einen einfachen Code hochgeladen (wie im Beispiel oben). Also habe
ich eines der 15 "guten" aus meinem Bus genommen, auch hier den SPIFFS
gelöscht, nen neuen Bootloader drauf und auch diesen einfach CAN-Code
drauf. Auch das "alte" Modul läuft nun nicht mehr.
Ich verstehe nicht woran es hakt... ich weiß auch nicht wie ich das
weiter Analysieren kann.
über Tipps würde ich mich freuen
- EVA
habe hier einen issue gefunden der ganz gut passt:
https://github.com/sandeepmistry/arduino-CAN/issues/10
allerdings ist ja bei mir der transiver dran. Wenn ich die
entsprechenden Code-Zeilen ersetze, läuft er zwar weiter <- aber eine
Kommunikation findet dennoch nicht statt :(
EVA
Evahase schrieb:> Mittlerweile bin ich wieder in einem Laborumfeld
Wo warst du zwischendurch und hat es dort funktioniert?
Evahase schrieb:> Also habe ich eines der 15 "guten" aus meinem Bus genommen, auch hier> den SPIFFS gelöscht, nen neuen Bootloader drauf und auch diesen einfach> CAN-Code drauf. Auch das "alte" Modul läuft nun nicht mehr.
Hast du ein SCM, dann geh in der Historie bis zum known-to-work zurück.
Irgendwas hat sich verändert. Framework Upgrade, irgendwas im Code,
Hardware, Versuchsaufbau, Stecker verdreht, Wackelkontakt in der
Versorgung, usw.
Ach ja, Masseversatz zwischen den CAN-nodes... Jeder differentielle Bus
funktioniert nur, wenn der input common mode range der Transceiver nicht
überschritten wird. Im Vehikel macht das notfalls die Karosserie.
Verbinde mal alle Massen der Teilnehmer entlang des CAN-Bus. Vielleicht
bringt's ja was?
mfg mf
PS.Evahase schrieb:> nen neuen Bootloader drauf
Was konfiguriert der BL an der Hardware?
Irgendwelche Write-Once-Per-Power-Cycle-Register?
Geht es mit dem alten Bootloader?
Evahase schrieb:> Ich verstehe nicht woran es hakt... ich weiß auch nicht wie ich das> weiter Analysieren kann.
Die Funktionen geben doch einen Wert zurück, damit kannst du über die
Konsole ja zumindest mal einen Status auslesen. Ein Debugger wäre hier
natürlich von Vorteil.
Hast du dir die Bibliothek mal angeshaut? Für mich sieht das so aus als
ob die Funktionen mehr Übergabewerte wollen. CAN.beginPacket will neben
ID noch DLC und RTR.
Hallo,
na die "alten" Module "sind und bleiben" funktional bei mir im Haus
installiert auf einem Bus mit einer länge von ~120m.
Allerdings ist der Bus nicht vollständig und daher habe ich noch Module
nachproduziert. Die neuen Module gehen aber alle nicht, während die
alten Module alle von Anfang an keine Probleme gemacht haben <- Hardware
kann ich eigentlich ausschließen (wobei ich evtl. "zufällig" ne
schlechte Charge erwischt habe und zufällig genau die 10 neuen nicht
gehen - habe bereits noch nachbestellt). <- allerdings, was gegen dem
Zufall spricht ist dass ich eben auch ein Funktionierendes Modul "kaputt
geflashd" habe und jetzt auch der "primitive Code" nicht mehr
funktioniert.
das Stimmt, der Wert wird zurückgegeben, <- aber warum ist der
"plötzlich" ein anderer? Bzw. mein Modul behauptet dass kein Transiver
vorhanden ist?
DLC und RTR ist ja ein "optionaler" Parameter. Aber auch wenn ich diese
übergebe ändert sich nichts :/
Ich werde heute nochmal genau die Hardware prüfen kann mir aber schon
vorstellen bei 1-2 Modulen was verbockt zu haben, aber nicht bei 10 :(
Wenn jemand noch eine andere Idee hat wäre ich dankbar.
Ich mess auch mal mit dem Oszi was am ESP rauskommt und was der BUS
macht.
EVA
ach, noch kurz zum Bootloader. Ich habe alle Module (sowohl die alten,
alsauch die neuen) auf die Version 2.0.1 geflasht. Und das habe ich auch
nochmal gemacht. Ebenso habe ich die 2.0.0 versucht. <- ist aber immer
exakt das selbe.
Evahase schrieb:> Das Modul ist ein ESP32 mit aufgesetztem SN65HVD230 an PIN4 & 5.
Im Datenblatt des ESP32 finde ich keinen CAN-Bus.
Poste mal nen Link auf den Schaltplan und die CAN-Lib.
Die CAN-Aufrufe sehen extrem merkwürdig aus.
Typisch füllt man einen Puffer mit dem Datenarray, dem ID und der Länge.
Und zum Schluß setzt man das Sendeflag, damit der CAN-Controller
loslegen kann.
Evahase schrieb:> @peda na doch, der ESP32 hat nen CAN und wie gesagt es funktioniert ja> 15x
Also ich finde nichts im Datenblatt.
Zeig mal den Link zum ESP32 mit CAN.
Lt. der Lib ist da noch ein SJA1000 oder MCP2515 angeschlossen.
@ Gast
wie gesagt, 15 meiner 25 Module laufen ja problemfrei (wobei ich eines
der 15 zum "defekt" bekehrt habe) also nur noch 14 von 25.
Selbe Hardware, selbe Software und auch selber BUS.
Jetzt hab ich die 10/11 neuen aus dem Bus rausgenommen und habe einen
kleinen BUS unter "Laborbedingungen" mit n paar Meter Kabel aufgebaut.
Suche aber nach soliden Debugging-Möglichkeiten (daher dieser Thread
hier)
- EVA
Thomas O. schrieb:> hast du 2 Abschlusswiderstände oder 14?Evahase schrieb:> Mittlerweile bin ich wieder in einem Laborumfeld in welchen 3 Module> an einer Strecke von 3m aufgebaut sind (vorne und hinten 120Ohm).
Ich habe bei mir meine Nodes mit einem 4 adrigen EIB/KNX Kabel verbunden
sie hängen also alle an der gleichen +5V, GND, CANL und CANH Leitung
vielleicht umgehe ich damit einige Probleme.
Bist du dir mit dem Watchdog Reset sicher nicht das dein Reset durch
Brown out entsteht.
Könntest mal ein paar Elkos entlang deiner Stromversorgung streuen obs
damit besser wird.
Eine eigene Frage?
Dieser Thread ist über 5 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.