INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino Mega mit CAN-Shield
08.10.2019, 17:08
Beitrag #1
Arduino Mega mit CAN-Shield
Nabend zusammen.

Ich sitze nun seit mehreren Tagen an einem Problem und komme nicht weiter. Ich habe einen Mega und einen CAN-Shield von Seeed Studio. Wenn ich einen etwas modifizierten Sketch (send_Blink) hochlade, dann werden innerhalb von Sekunden tausende von CAN-Nachrichten gesendet und der BUS ist bis zur Grenze belastet. Im seriellen Monitor wird jedoch nur alle Sekunde eine Nachricht angezeigt.

Code:
// demo: CAN-BUS Shield, send data
#include <mcp_can.h>
#include <SPI.h>

/*SAMD core*/
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
  #define SERIAL SerialUSB
#else
  #define SERIAL Serial
#endif

// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
const int SPI_CS_PIN = 9;
int CANwert    = 1;


MCP_CAN CAN(SPI_CS_PIN);                                    // Set CS pin

void setup()
{
    SERIAL.begin(115200);

    while (CAN_OK != CAN.begin(CAN_500KBPS))              // init can bus : baudrate = 500k
    {
        SERIAL.println("CAN BUS Shield init fail");
        SERIAL.println(" Init CAN BUS Shield again");
        delay(100);
    }
    SERIAL.println("CAN BUS Shield init ok!");
}



void loop()
{  
    unsigned char stmp[8] = {CANwert, 2, 3, 4, 5, 6, 7, 8};
  
    SERIAL.println("In loop");
    // send data:  id = 0x70, standard frame, data len = 8, stmp: data buf
    CAN.sendMsgBuf(0xF1003EE, 1, 8, stmp);
    delay(1000);    // send data once per second
    CANwert = CANwert +1;

    SERIAL.println(CANwert);
}

Woran kann es liegen, dass so viele Nachrichten gesendet werden? Der CAN-Bus wird als initialisiert angezeigt.

Enter setting mode success
set rate success!!
Enter Normal Mode Success!!
CAN BUS Shield init ok!

Der CAN ist ordnungsgemäß abgeschlossen. Es sind zwei 120 Ohm Widerstände vorhanden. Gemessen habe ich den BUS mit einem PeakSystem PCan Diag FD.

Den Test habe ich ebenfalls mit einem zweiten Mega und einem zweiten Shield getestet. Ebenfalls mit dem o.a. Ergebnis.

Kann mir jemand einen Tip geben?

Vielen Dank
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2019, 17:36
Beitrag #2
RE: Arduino Mega mit CAN-Shield
also was mir da so auffällt im Ländle....

SAMD ist Arduino DUE... nicht MEGA.

Die Variable CANwert ist als Integer deklariert... und 16 Bit passen nun mal nicht in ein 8Bit Feld vom CAN Telegramm rein. Diese Variable sollte vom Typ Byte sein oder unsigned char.

Dann sollte auf der Gegenseite vom Bus auch eine Software laufen wo die Daten annimmt weil sonst wenn kein Acknoledge kommt ballert der Sender voll drauflos... NUR müßte der Sender nach so 250 Sendezyklen Busoff gehen und das senden einstellen. Stellt sich die Frage ob das PEAK Messgerät den ACK generiert...
Das wären so meine ersten Gedanken dazu.
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2019, 18:58 (Dieser Beitrag wurde zuletzt bearbeitet: 08.10.2019 19:11 von Gary.)
Beitrag #3
RE: Arduino Mega mit CAN-Shield
Hi.

Offensichtlich hat sich der Inhalt der Beispiele geändert. Ich habe aber einen "älteren" Sketch angefügt, der eigentlich funktionieren sollte. Warum die library nun andere Beispiele beinhaltet weiss ich nicht.

Die Art der Variable habe ich geändert. Danke für den Tip.

Code:
// demo: CAN-BUS Shield, send data
// loovee@seeed.cc

#include <mcp_can.h>
#include <SPI.h>

// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
const int SPI_CS_PIN = 9;

MCP_CAN CAN(SPI_CS_PIN);                                    // Set CS pin

int poti = A15;
unsigned char speedwert = 0;

void setup()
{
    Serial.begin(115200);

    while (CAN_OK != CAN.begin(CAN_250KBPS))              // init can bus : baudrate = 500k
    {
        Serial.println("CAN BUS Shield init fail");
        Serial.println(" Init CAN BUS Shield again");
        delay(100);
    
    Serial.println("CAN BUS Shield init ok!");
}}


void loop()
{
    speedwert = analogRead(poti);

    Serial.println(speedwert);
    
    
  
    unsigned char stmp[8] = {speedwert, 0, 0, 0, 0, 0, 0, 0};
    
    CAN.sendMsgBuf(0xF103EE, 1, 8, stmp);
    
    delay(1000);                       // send data per 100ms
}

Die Variable speedwert wird über das Poti gefüllt und müsste nun eigentlich jede Sekunde gelesen und gesendet werden. Also müsste die Nachricht nur jede Sekunde einmal gesendet und dann gewartet werden.

Ich kann immer noch tausende Nachrichten in kürzester Zeit erkennen.

Ich kenne den CAN Bus als Bussystem, bei dem jeder Teilnehmer Nachrichten in den Bus senden kann und theoretisch jeder diese Nachricht entnehmen kann. Eine Antwort ist hier nicht unbedingt notwendig. Zumindest nicht bei allen Nachrichten.

Besten Dank...

Ich habe gerade nochmal nachgelesen. Das mit dem ACK hört sich sehr gut an. Ich werde morgen den Mega mal an ein aktives CAN-Steuergerät hängen und schauen, ob dann eine Änderung passiert.

Es gibt echt Sachen, auf die kommt man selber nie und man sucht und sucht.

Besten Dank für den Tip…..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2019, 19:11
Beitrag #4
RE: Arduino Mega mit CAN-Shield
(08.10.2019 18:58)Gary schrieb:  Warum die library nun andere Beispiele beinhaltet weiss ich nicht.
Wahrscheinlich weil sich das Verhalten der Lib geändert hat. Dann solltest Du auch auf den Beispielen zur verwendeten Lib aufbauen.
Ansonsten habe ich mit CAN nix zu tun.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.10.2019, 09:18
Beitrag #5
RE: Arduino Mega mit CAN-Shield
@ bitklopfer

Der Tip mit dem ACK scheint die Lösung gewesen zu sein. Ich habe mein Tool an ein aktives Steuergerät angeschlossen. Der CAN war somit durch beide Endwiderstände abgeschlossen. Die Daten habe ich mit dem Diag-Tool gemessen. Jetzt wurde die Datei ordentlich jede Sekunde gesendet.

Manchmal steckt der Fehler im Detail und auch an der Tatsache, dass man nicht weit genug denkt.

Ich danke dir für diesen Tip.

VG
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.10.2019, 23:38
Beitrag #6
RE: Arduino Mega mit CAN-Shield
(09.10.2019 09:18)Gary schrieb:  @ bitklopfer

Der Tip mit dem ACK scheint die Lösung gewesen zu sein. Ich habe mein Tool an ein aktives Steuergerät angeschlossen. Der CAN war somit durch beide Endwiderstände abgeschlossen. Die Daten habe ich mit dem Diag-Tool gemessen. Jetzt wurde die Datei ordentlich jede Sekunde gesendet.

Manchmal steckt der Fehler im Detail und auch an der Tatsache, dass man nicht weit genug denkt.

Ich danke dir für diesen Tip.

VG

Ja beim CAN gibt es eben ein paar Dinge wo man beachten muß. Ich bin da auch nicht allwissend aber so seit dem ersten mal als diese Technik mir über den Weg lief so in den Jahren 1990 bis 1995 muß das gewesen sein habe ich doch das eine oder andere Detail da drüber erfahren.
Im übrigen kann man den CAN auch in einer Sterntopologie aufbauen und am Sternpunkt wo alle Leitungen zusammenkommen einen 60 Ohm Abschlußwiderstand einsetzen. Dann braucht man sich nicht mehr darum sorgen das am Anfang und am Ende jeweils ein 120 Ohm Widerstand auch angeschlossen ist.
Für den Heimgebrauch gibt es aber auch preiswertere Tools wie den CAN-USB Adapter
Den gibt es auch in der CAN-FD Version seit ner Weile.
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Wert von einem Arduino zu einem zweiten Arduino senden Thorsten_S 9 165 Heute 14:48
Letzter Beitrag: Thorsten_S
  CAN BUS Shield / Lesen von Nachrichten Gary 0 79 Gestern 20:07
Letzter Beitrag: Gary
  LoRa Shield Temperaturmesser Murdock 6 306 03.10.2019 10:35
Letzter Beitrag: hotsystems
  CAN SPI Shield Arduino Uno GranP 8 678 26.07.2019 14:52
Letzter Beitrag: Bitklopfer
  Verbindung zwischen BLE Shield und Feather32u4 WinTiger 10 1.034 21.05.2019 11:07
Letzter Beitrag: WinTiger
  LAN- Probleme mit Arduino UNO und W5100 Ethernet Shield SpooN 32 2.487 13.05.2019 16:54
Letzter Beitrag: SpooN
  HC-06 Arduino Mega Übertragungsprobleme fv1895 4 611 15.03.2019 11:35
Letzter Beitrag: fv1895
  Ram Speicher bei Arduino Mega wird knapp unkreativ 22 1.712 02.02.2019 18:40
Letzter Beitrag: unkreativ
  Elegoo Mega 2560 R3 lässt sich nicht programieren Union1925 6 1.318 03.12.2018 21:21
Letzter Beitrag: Tommy56
  Mega 2560 + USB Host Shield + USB-Stick Cospieler 4 1.386 19.09.2018 11:17
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste