RKS+CAN Adapter für CAN-Bus Sniffing
CAN-Interface
CAN Hardware, CAN Software, CAN Protokolle - CAN-Bus Forum für Dein CAN-Bus Projekt. CAN-Bus und Elektronik.

Arduino + MCP2515 --> Signale "blockieren"?


 
Neues Thema beginnen Auf Beitrag antworten Weitergeben, Thema teilen Lesezeichen setzen Druckansicht CANhack.de - Übersicht » Mikrocontroller und Elektronik, Programmierung
Autor Nachricht
lengi



CAN Hacker seit: 15.04.2018
Beiträge: 7
Karma: +0 / -0   Danke, gefällt mir!


Kostenloser Account, kein CAN Entwicklungs-Support

Beitrag15-04-2018, 12:24    Titel: Arduino + MCP2515 --> Signale "blockieren"? Antworten mit Zitat

Guten Tag zusammen,

ich bin derzeit dabei mich etwas in das Thema CAN Bus einzuarbeiten. Eher aus Zufall, da die Komponenten, die ich Untersuche eben genau mit CAN BUS arbeiten.
Ich komme eigentlich aus dem Modellbaubereich und möchte dort ein System aus zwei Komponenten "manipulieren" (eigentlich ein hässliches Wort, trifft es aber ziemlich gut). Ich hoffe, dass mir hier dennoch jemand helfen kann, da es eher ein generelles CAN Bus "Problem" ist.

Mein Aufbau besteht derzeit aus einem Arduino Nano und einem MCP2515. Da es sich nicht um ein KFZ handelt, ist die Menge an IDs und Daten doch eher begrenzt und noch einigermaßen übersichtlich im Serial Monitor der Arduino IDE (max. 15 IDs).

Die zwei Komponenten, die ich mir ansehe, haben sowohl Sensoren, Aktoren und Bedienelemente (Knöpfe)

Ich möchte in dieses System eine Sicherheitsfunktion einbauen, dass wenn ich einen Eingang am Arduino auf HIGH setze, die vorhandenen Tasten keine Funktion mehr haben.
Die dazugehörige ID für die Taster konnte ich bereits identifizieren und es ist ebenfalls erkennbar, wie sich die Daten beim Drücken der Tasten verändern.

Im Ruhezustand haben Byte 0 und 1 dieser ID den Wert 0. Wird eine entsprechende TAste gedrückt, so ändern sich die Werte dieser ID bei Taster 1 bspw. folgendermaßen:

Taster 1:
Byte 0 = 1
Byte 1 = 1

Taster 2
Byte 0 = 4
Byte 1 = 1

Taster 3
Byte 0 = 16
Byte 1 = 1

usw.

Lassen sich die Signale irgendwie "blockieren"?

Was ich bereits versucht habe:
1. Daten im Arduino einlesen, ID auswerten, wenn ID erkannt -> Werte 0 setzen (Ruhezustand)
Ergebnis: System reagiert immer noch, allerdings etwas anders.

2. Arduino in Dauerschleife beide Bytes auf 0 setzen. Mit Delay in der Loop reagiert das System wie bei 1., nehme ich den Delay raus, stürzt das System ab und Startet neu (dauerhaft)

Die Leiter einfach zu unterbrechen ist leider auch keine Möglichkeit, da ich andere Daten dieser Komponente weiterhin benötige, wenn die Taster deaktiviert sein sollen.

Hat hier jemand eine Idee, wie man dies lösen kann?

Gruß
Jan
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
postmann
CAN-Profi
CAN-Profi


CAN Hacker seit: 23.05.2013
Beiträge: 137
Karma: +58 / -0   Danke, gefällt mir!


CAN Support

Beitrag15-04-2018, 15:40    Titel: Arduino + MCP2515 --> Signale "blockieren"? Antworten mit Zitat

Du benötigst ein Gateway. Das Signal zu ändern und wieder auf dem Bus zu senden wir zu Fehlern beim Sender führen. Du musst den CAN auftrennen und deine Gateway dazwischen setzen . Dadurch wird das Signal vom Gateway auf der einen Seite eingelesen und auf der anderen Seite kannst du dann das manipulierte Signal weitersenden.
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
lengi



CAN Hacker seit: 15.04.2018
Beiträge: 7
Karma: +0 / -0   Danke, gefällt mir!


Kostenloser Account, kein CAN Entwicklungs-Support

Beitrag15-04-2018, 20:24    Titel: Arduino + MCP2515 --> Signale "blockieren"? Antworten mit Zitat

Die Idee hatte ich auch schon die Adern aufzutrennen und das ganze entsprechend zu "tunneln" und ggf. zu blockieren, nur fehlte mir das Stichwort dazu.
Wie sich sowas umsetzen lässt, weißt du nicht zufällig oder?

Mir schwebt da gerade ein zweiter MCP2515, so dass ich quasi zwei mal CANL und CANH anschließen kann, aber dazu stecke ich noch zu wenig in der Materie.

Dann heißt es jetzt erstmal wieder weiter lesen, aber danke für das Stichwort!

Gruß
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
Zampan0
CAN-Profi
CAN-Profi


CAN Hacker seit: 28.06.2016
Beiträge: 30
Karma: +20 / -0   Danke, gefällt mir!


CAN Support

lengi gefällt das.
Beitrag16-04-2018, 11:35    Titel: Arduino + MCP2515 --> Signale "blockieren"? Antworten mit Zitat

du musst auf jedem Fall ein Gateway aufbauen
Ein Beispiel mit 2 x MCP2515 findest du hier

https://github.com/coryjfowler/MCP_CAN_lib/blob/master/examples/Dual_CAN/Dual_CAN.ino

da du relativ wenig Daten hast, wird das auch ohne Probleme funktionieren.
Du filterst einfach die entsprechende ID bei gedrückter Taste heraus und modifizierst die Daten und schickst diese weiter
Alle anderen Daten werden 1:1 weitergeleitet
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
lengi



CAN Hacker seit: 15.04.2018
Beiträge: 7
Karma: +0 / -0   Danke, gefällt mir!


Kostenloser Account, kein CAN Entwicklungs-Support

Beitrag16-04-2018, 12:21    Titel: Arduino + MCP2515 --> Signale "blockieren"? Antworten mit Zitat

Ich Google gerade seit gestern schon wie ein wilder, habe auch viel dazu gefunden, dass zwei MCP2515 an einem Mikrocontroller eingesetzt wurden.

Hier im Forum wurde ich dazu auch noch fündig (für die Interessierten hier: https://www.canhack.de/viewtopic.php?t=2295)

Ich will das ganze heute Abend mal software-seitig testen, eine zweiten MCP habe ich zufälligerweise noch liegen, da muss ich nur den Schwingquarz anpassen.

Hoffentlich ist die Geschwindigkeit hoch genug, aber ich denke das sollte kein Problem sein, weil die Datenmenge, wie du schon sagst, sehr überschaubar ist. Ich meine der Atmega326p läuft bei 20Mhz, wenn ich das richtig im Kopf habe. Ansonsten steige ich auf etwas schnelleres um, wäre auch kein Drama.

Gehe ich richtig in der Annahme, dass ich dann bei beiden MCP den Abschlusswiderstand aktivieren muss? Scheint mir hier zumindest logisch, weil ich die Leitungen ja auftrenne.
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
Zampan0
CAN-Profi
CAN-Profi


CAN Hacker seit: 28.06.2016
Beiträge: 30
Karma: +20 / -0   Danke, gefällt mir!


CAN Support

Beitrag16-04-2018, 12:33    Titel: Arduino + MCP2515 --> Signale "blockieren"? Antworten mit Zitat

Ich verwende für meine Sensorik auch den 328p und den MCP2515, beide mit 16MHz getaktet.

Jedes CAN Segment benötigt jeweils zwei Abschlusswiderstände
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
lengi



CAN Hacker seit: 15.04.2018
Beiträge: 7
Karma: +0 / -0   Danke, gefällt mir!


Kostenloser Account, kein CAN Entwicklungs-Support

Beitrag17-04-2018, 13:26    Titel: Arduino + MCP2515 --> Signale "blockieren"? Antworten mit Zitat

Okay, meine MCPs haben zwar einen 8Mhz Quarz, aber ich probiere das trotzdem mal. 16Mhz Quarze habe ich schon bestellt, falls ein Wechsel notwendig wird.

Ich habe leider schon beim Kompilieren des Dual-Can Sketches Probleme, weswegen ich meinen Code einfach umschreibe. Da weiß ich, dass das funktioniert. Ist ja prinzipiell kein Hexenwerk.

Danke dir!
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
Zampan0
CAN-Profi
CAN-Profi


CAN Hacker seit: 28.06.2016
Beiträge: 30
Karma: +20 / -0   Danke, gefällt mir!


CAN Support

Beitrag17-04-2018, 13:37    Titel: Arduino + MCP2515 --> Signale "blockieren"? Antworten mit Zitat

du musst das Beispiel erst Richtigstellen (Fehler Deklaration)

byte tx0Buf[] = {0xAA,55,0xAA,55,0xAA,55,0xAA,55};
byte tx1Buf[] = {55,0xAA,55,0xAA,55,0xAA,55,0xAA};

und hier kannst du deine 8MHz einstellen

if(CAN0.begin(MCP_EXT, CAN_250KBPS, MCP_16MHZ) == CAN_OK)
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
lengi



CAN Hacker seit: 15.04.2018
Beiträge: 7
Karma: +0 / -0   Danke, gefällt mir!


Kostenloser Account, kein CAN Entwicklungs-Support

Beitrag17-04-2018, 14:06    Titel: Arduino + MCP2515 --> Signale "blockieren"? Antworten mit Zitat

Ich habe mir auch schon gedacht, dass ich das 0x hinzufügen muss, weil es ja in HEX ist. Muss das dann nicht auch vor die 55? Sind in DEC dann ja 85. Sehe hier jetzt keinen Grund, warum das gemischt sein sollte.

Ich konnte allerdings nicht rausfinden, was diese Daten für einen Zweck haben. Muss man das zwingend drin haben, damit das funktioniert? Ich hätte das jetzt einfach auskommentiert, genau wie den Sendebefehl weiter unten.
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
CAN-Diagnose
Administrator
Administrator
Avatar-CAN-Diagnose

CAN Hacker seit: 07.06.2011
Beiträge: 550
Karma: +27 / -0   Danke, gefällt mir!
Wohnort: Ländle



lengi gefällt das.
Beitrag17-04-2018, 14:57    Titel: Arduino + MCP2515 --> Signale "blockieren"? Antworten mit Zitat

Zitat:

Ich konnte allerdings nicht rausfinden, was diese Daten für einen Zweck haben. Muss man das zwingend drin haben, damit das funktioniert? Ich hätte das jetzt einfach auskommentiert, genau wie den Sendebefehl weiter unten.

Die Sendepuffer werden mit den Werten initialisiert, d.h. vorbelegt.

Sofern die Sendepuffer vor dem Senden richtig befüllt werden, sind die Werte für die Initialisierung unwichtig.
Du könntest auch schreiben: byte tx1Buf[] = {0};

Der Sendepuffer würde dann mit Nullen initialisiert. Weglassen würde ich die Initialisierung aber nicht, denn erstens ist dies schlechter Programmierstil, zweitens wird im Fehlerfall das Verhalten Deines Programmes undefiniert und drittens erleichtert eine sinnvolle Vorbelegung die Fehlersuche.

Viele Grüsse, Rainer
Dipl.-Ing. (FH) Rainer Kaufmann - Embedded @ Kaufmann Automotive GmbH
CANhack.de System RKS+CAN: CAN-Bus Interface
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden Website dieses Benutzers besuchen
lengi



CAN Hacker seit: 15.04.2018
Beiträge: 7
Karma: +0 / -0   Danke, gefällt mir!


Kostenloser Account, kein CAN Entwicklungs-Support

Beitrag18-04-2018, 10:57    Titel: Arduino + MCP2515 --> Signale "blockieren"? Antworten mit Zitat

Super, danke. Initialisieren macht auf jeden Fall Sinn, um undefinierte Zustände zu vermeiden. So etwas in der Art habe ich mir auch schon gedacht.

Meine Boards kommen mit dieser Library irgendwie nicht klar. Selbst, wenn ich auf 8MHZ ändern und die ganzen Fehler in dem Sketch anpasse, funktioniert nicht mal die Initialisierung der Shields, obowohl ich an der Verdrahtung des ersten Shields nichts geändert habe (bis auf den Abschlusswiderstand).
Funktioniert das Initialisieren erst, wenn das Ganze an das Bussystem der Komponenten gekoppelt ist oder muss das auch unabhängig davon funktionieren?


Das Problem hatte ich mit anderen Libraries auch schon, bis ich eine gefunden habe, mit der dies lief. Ich vermute mal das liegt an 8MHZ/16Mhz Geschichte.

Ich habe bereits versucht meine Version, mit der ich lesen und senden konnte, anzupassen. Aber so richtig wollte das auch nicht.
Ich ändere die Boards jetzt mal auf 16Mhz und probiere das ganze nochmal. Wenn es läuft, mache ich mir sowieso eine eigene Platine, wo alles zusammen drauf sitzt. Das mit diesen zugekauften, fertigen Shields ist auf Dauer Mist.

Gruß
Jan
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
Zampan0
CAN-Profi
CAN-Profi


CAN Hacker seit: 28.06.2016
Beiträge: 30
Karma: +20 / -0   Danke, gefällt mir!


CAN Support

Beitrag18-04-2018, 11:26    Titel: Arduino + MCP2515 --> Signale "blockieren"? Antworten mit Zitat

Mit Shilds habe ich keine Erfahrung, mache immer eigene Platinen.
Grundsätzlich sollte es so ohne Probleme funktionieren.
Wichtig ist, alle SPI Leitungen parallel und je einen CS (Chipselect) auf die entsprechenden Pins.
Hab so seit vielen Jahren ein CAN Interface mit SPI Display laufen.

Die Initialisierung ist nur für den MCP2515, dem ist egal ob am Tranceiver was dranhängt oder nicht.

Ich würde mal nur einen MCP dranhängen mit CS auf 10 dann sollte dieser den ersten Bus initialisieren und bei zweiten einen Fehler bringen, dann CS auf 9 genau umgekehrt.

Soweit ich verglichen habe, ist die Lib schon ganz ok
ww1.microchip.com/downloads/en/DeviceDoc/21801d.pdf
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
lengi



CAN Hacker seit: 15.04.2018
Beiträge: 7
Karma: +0 / -0   Danke, gefällt mir!


Kostenloser Account, kein CAN Entwicklungs-Support

Beitrag18-04-2018, 20:24    Titel: Arduino + MCP2515 --> Signale "blockieren"? Antworten mit Zitat

Die Shields habe ich genommen, damit ich das ohne viel Arbeit alles schön schnell aufs Steckbrett setzen kann, aber in letzter Zeit habe ich doch immer mal mit einem Wackelkontakt zu kämpfen...

Ich habe den Sketch jetzt gerade nochmal draufgeladen. 500KBPS, 8MHZ. Nur ein MCP angeschlossen und folgendes gibt er über den Serial monitor aus:

Code:

Entering Configuration Mode Successful!
Setting Baudrate Successful!
`Setting ID Mode Failure...
CAN0: Init Fail!!!
Entering Configuration Mode Failure...
CAN1: Init Fail!!!


Finden tut er das ja anscheinend, bei dem zweiten Modul, was ich abgesteckt habe, wirft er ja direkt einen Fehler aus.
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
Zampan0
CAN-Profi
CAN-Profi


CAN Hacker seit: 28.06.2016
Beiträge: 30
Karma: +20 / -0   Danke, gefällt mir!


CAN Support

CAN-Diagnose gefällt das.
Beitrag19-04-2018, 20:20    Titel: Arduino + MCP2515 --> Signale "blockieren"? Antworten mit Zitat

Habe das Beispiel gerade bei mir ausprobiert und noch einen Fehler gefunden icon_rolleyes.gif

es muss die Zeile
if(CAN0.begin(MCP_EXT, CAN_250KBPS, MCP_16MHZ) == CAN_OK)

auf
if(CAN0.begin(MCP_STDEXT, CAN_250KBPS, MCP_16MHZ) == CAN_OK)

geändert werden, da ist noch ein Bug drin
danach funktioniert alles wie du es brauchst
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
Neues Thema beginnen Auf Beitrag antworten Weitergeben, Thema teilen Lesezeichen setzen Druckansicht CANhack.de - Übersicht » Mikrocontroller und Elektronik, Programmierung
Ähnliche Fachartikel und Themen
Thema Community Bereich
Keine neuen Beiträge CAN-Bus "hacken", welche Methoden? Allgemein
Keine neuen Beiträge CAN-IDs für "Volkswagen Sound" Soundsystem Innenraum- / Komfort CAN
Keine neuen Beiträge Mit "Can-USB-Kit" Messages an RNS510 schicken CAN Softwaretools und Software
Keine neuen Beiträge Zwei "Busse" verbinden Innenraum- / Komfort CAN
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.