Forum: Mikrocontroller und Digitale Elektronik Ratlos mit MAX3051 am ESP32 (hängt sich beim Senden auf)


von Janina (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe zwei ESP32 mit jeweils einem MAX3051 an RXD->IO4 und TXD->IO5 
(Schaltplan im Anhang).

Die beiden habe ich über CANH und CANL mit jeweils 120k verbunden... die 
Strecke zwischen beiden befindet sich im Versuchsaufbau bei etwa einem 
Meter.

mein Code (auf beiden gleich)

das Serial "can go" kommt noch, und dann hängt der ESP (ohne 
Fehlermeldung ohne weiteren informationen)

Hat jemand eine Idee für mich, was ich falsch mache?

sandeepmistry/CAN@^0.3.1
1
void setup() {
2
CAN.setPins(4, 5);
3
if (!CAN.begin(125E3)) {
4
  Serial.println("Starting CAN failed!");
5
  while (1);
6
}
7
CAN.onReceive(onReceive);
8
9
void loop() {
10
11
  if( millis() - rsmTmp > rsmTime )  //timer ... alle 30 Sekunden
12
  {
13
    Serial.println("can go");
14
15
    CAN.beginExtendedPacket(0x18db33f1, 8);
16
    CAN.write(0x02);
17
    CAN.write(0x09);
18
    CAN.write(0x02);
19
    CAN.endPacket();
20
21
    Serial.println("can end");
22
    rsmTmp = millis();
23
  }
24
25
  delay(1);
26
}
27
28
void onReceive(int packetSize) {
29
  uint64_t id = CAN.packetId();
30
31
  //erhalte Nachrichtenstring
32
  String msg = "";
33
  while (CAN.available()) {
34
    msg += (char)CAN.read();
35
  }
36
  int16_t value = atol(msg.c_str());
37
38
  Serial.println(id);
39
  Serial.println(value);
40
}

von XYZ (Gast)


Lesenswert?

CAN Abschluss ist nicht 120k

-> bau mal 120 Ohm auf jede Seite

von Harald A. (embedded)


Lesenswert?

CAN RX/TX an IO4/5 ist das korrekt? Hatte mit einem Olimex Schaltplan 
verglichen, da ist es anders.
https://www.olimex.com/Products/IoT/ESP32/ESP32-EVB/open-source-hardware

von Janina (Gast)


Lesenswert?

oh, das ist ein Tippfehler... das sind schon 120Ohm

Ich habe 62Ohm auf der Leitung

von Janina (Gast)


Lesenswert?

Fehler behoben...

in der Tat waren alle beiden MAX3051 kaputt. Ich gehe davon aus, dass 
ich entweder mal Überspannung oder nen Kurzschluss drauf hatte oder ich 
irgendwie an China-Wahre gekommen bin... jetzt geht das senden...

von Janina (Gast)


Lesenswert?

Leider habe ich nun das nächste Problem mit dem Empfangen.

zwar habe ich bei mir im Setup
  CAN.onReceive(onReceive);


aber die Funktion

void onReceive(int packetSize) {}

wird nicht aufgerufen. Ich habe ganz oben ein Serial.println("empfange 
Daten") eingebaut. Aber die Methode wird nicht aufgerufen.

Hat jemand eine Idee, wie ich das ganze Debugen kann?

Leider kommt mein Oszilloskope erst die nächsten Tage um zu Prüfen ob 
auch sauber gesendet wird. Aber soweit ich weiß sollte der MAX3051 doch 
nur dann Daten senden, wenn die auch woanders ankommen!?!?

Viele Grüße

@Harald hm, soweit ich woanders gesehen habe sind es 4 & 5 (aber ggf. 
sind auch mehrere Ports möglich?) Jetzt bin ich verunsichert. Mit 
CAN.setPins(4, 5); setze ich aber die Pins

von Janina (Gast)


Lesenswert?

mit der Library von Adafruit geht alles:
adafruit/CAN Adafruit Fork@^1.2.1

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.