Forum: Mikrocontroller und Digitale Elektronik Mit CAN beschäftigen


von Isch (Gast)


Lesenswert?

Guten Abend

ich will demnächst anfangen mich etwas mit CAN auf einem Arduino zu 
beschäftigen. Dazu hab ich mir das CAN Shield 
https://www.sparkfun.com/products/10039 angeschafft für einen normalen 
Arduino.

Als "Gegenstück" ist mir eine Art Bedientastatur in die Finger gefallen. 
Leider findet man dazu keine Infos vom Hersteller was ich aber weiß dank 
aufdrucke:

- Wo CAN H, CAN L, und GND am Anschluss ist
- Welche Baudrate das Ding mit mir spricht (einstellbar von 20kbit/sec 
bis 500kbit/sec also sehr angenehm :))
- leider keine Infos welche Identifier verwendet werden.

Die Tastatur hat 16 Tasten und jede Taste eine LED.

Mein Gedanke war nun, ich häng sie ans Shield, schieb auf den Arduino 
ein Programm wo ich einfach mal "auf dem Bus horche" und hoffe das die 
Tastatur was sendet wenn ich eine Taste drücke. (ich stell es mir dann 
so vor, das ich mir den Identifier + die Daten anzeigen lassen kann um 
später dann darauf zurückgreifen)

Sollte dem nicht so sein, was könnte ich dann noch probieren? Und wie 
könnte man ansetzen die LEDs einzuschalten?

Was mich auch verwundet, ich kann auf der Tastatur auch eine 
"Knotenummer" einstellen? was bedeutet das? Dachte bisher CAN 
funktioniert rein über den Identifier? Einstellbar von 0-31.

von tk (Gast)


Lesenswert?

Isch schrieb:
> Was mich auch verwundet, ich kann auf der Tastatur auch eine
> "Knotenummer" einstellen? was bedeutet das? Dachte bisher CAN
> funktioniert rein über den Identifier?

Ja, CAN funktioniert rein über Identifier. Wenn du mehrere dieser 
Tastaturen an einem Bus betreiben wolltest, so würden alle mit den 
gleichen Identifiern arbeiten. Nun ist es aber weder vorgesehen noch 
wünschenswert, dass mehrere Geräte Frames mit der gleichen ID versenden. 
Über die Knotennummer wird daher mit ziemlicher Sicherheit der ID-Satz 
verändert, sodass du bis zu 32 Tastaturen gleichzeitig nutzen und auch 
identifizieren kannst.

von Isch (Gast)


Lesenswert?

hi

danke, genau sowas dachte ich mir schon fast, wollte nur nochmal sicher 
sein und nachfragen.

Es gilt also daher weiterhin, rauszufinden welche Identifier ich brauch 
(sowohl für die Tasten als auch für die LEDs).

von Hias (Gast)


Lesenswert?

Schau dir mal das an:

http://www.fischl.de/usbtin/

Damit kannst du die Nachrichten auf dem CAN-Bus anschauen.
HW ist ziemlich günstig im vergleich zu Profi-HW.
Habe das selbst zu Hause und bin der Meinung das ist zum "basteln" 
vollkommend ausreichend.
Die erwähnte SW auf der Seite ist kostenlos.

Sollte dir zum Einstig eine gute Hilfe sein.

von Rudolph (Gast)


Lesenswert?

Interessant wäre ja jetzt gewesen, um welche "Tastatur" es sich handelt.

von Mike R. (thesealion)


Lesenswert?

"Knotennummer" könnte bedeuten, dass auf der Tastatur ein zursätzliches 
Protokoll (wie z.b. CANopen) läuft.

Hierfür wäre es dann tatsächlich wichtig zu wissen, welche Tastatur das 
denn ist. Ansonsten einfach mal versuchen den Bus zu belauschen und den 
Mitschnitt hier posten.

von Isch (Gast)


Lesenswert?

Hallo

wie bereits gesagt, findet man im Netz nichts über die Tastatur. Es 
handelt sich um eine B&R Tastatur mit 20 Tasten die jeweils 1 LED haben 
(hab das oben verbummelt mit den 16....) Als Typ steht da nur drauf:
5E9000.04 REV 01.12
ID.Nr. C0028300

Werde auf jeden Fall mal lauschen und gucken was sie von sich gibt, 
alles weitere wird sich dann wohl zeigen (müssen)

von Chris K. (christopher_k25)


Lesenswert?

Ohne Infos hilft nur ausprobieren.

Lauschen musst du aber auf jeden Fall als aktiver Teilnehmer!
Ich erlebe es gerade am eigenen Leib: Wenn ein CAN-Teilnehmer alleine 
auf seinem Bus aktiv ist erhält er keine Bestätigung für seine Nachricht 
, wirft einen "Acknowledgement Error" und hängt sich in einer Schleife 
auf.

Es sollte aber kein Problem sein aus der Nachricht die Bits 
herauszufinden die dir anzeigen welcher Taster gerade gedrückt ist. 
Interessanter wird es dann die LEDs anzusteuern...

von Mathias O. (m-obi)


Lesenswert?

Also ich hab mir mal ein CAN-LAN-Adapter auf meinem Breadboard 
zusammengesteckt. Das ganze läuft ganz gut. Ich kann von jedem 
Teilnehmer Nachrichten empfangen als auch zu jeden senden.

von Isch (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

ich danke euch, ich hab schon riesen Erfolge und empfange schon "etwas" 
wenn ich eine Taste drücke. Die  Tastaur spricht aktuell auf den 
Identifier 0x44f mit mir :) Nur werde ich aus den Daten nicht ganz 
schlau. Das ganze sieht aktuell etwa so aus:
hier hab ich die Taste 9 gedrückt
Get Data From id: 1103
0x9  0x0  0x0  0x0  0x8  0x0
------------------------------------------------------------------
Get Data From id: 1103
0x0  0x0  0x0  0x0  0x8  0x0
------------------------------------------------------------------
Get Data From id: 1103
0x89  0x0  0x0  0x0  0x0  0x0
und hier hab ich sie dann losgelassen (für das "drücken" hab ich das 
System bereits erkannt, der erste Byte geht von 0x1 über 0x9 auf 0xA bis 
0xf und dann mit 0x10 bis 0x14 weiter, für das loslassen im Prinzip 
nicht anders, erster Byte von 0x81 bis 0x94) jetzt die Frage wo find ich 
die LEDs ;)

Ein 0x sind doch ein Byte oder? Ich dachte eine CAN-Message besteht aus 
8 Byte? Warum empfang ich dann nur 6 Bytes?

Ich hab mir dies hier genommen: 
https://github.com/Seeed-Studio/CAN_BUS_Shield

Im Anhang mein Quelltext den ich aktuell verwende, da die Tastatur auch 
bei nicht gedrückter Taste 6 0bytes sendet und mir jedes mal die Anzeige 
zugespamt hat, hab ich dies unterdrückt und lass mir nur anzeigen wenn 
wirklich Daten kommen.

von H.Joachim S. (crazyhorse)


Lesenswert?

Dafür ist doch der DLC da (Anzahl der Datenbytes). D.h. die Anzahl ist 
variabel, max. jedoch 8Bytes.

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Vielleicht noch als Hilfestellung wenn Du Einsteiger bist (und nicht nur 
dann):

Es gibt von Vector ein schönes englischsprachiges CAN-Poster, das man 
sich kostenlos dort bestellen kann. Auf dem Poster findet man alles 
Wichtige zum Protokoll sehr übersichtlich gruppiert und grafisch 
aufbereitet auf einen Blick.

Das hängt hier an der Labortür - man schaut da gerne mal drauf :-)

Kann ich nur empfehlen. Also, wenn Du etwas Platz an der Wand hast ...

: Bearbeitet durch Moderator
von Steffen R. (steffen_rose)


Lesenswert?

Chris D. schrieb:
> Es gibt von Vector ein schönes englischsprachiges CAN-Poster

Schöner Hinweis.

Aber aufpassen, dass man das Poster für klassisches CAN erwischt. Die 
Poster, welche auch die zukünftige Erweiterung für CAN FD enthalten 
würden für den Anfang eher verwirren.

von Isch (Gast)


Lesenswert?

hi

danke euch, habs mittlerweile auch gefunden, dass eine CAN Nachricht aus 
0-8 Bytes bestehen kann.

Wie könnte man es nun angehen an die LEDs ranzukommen?

mfg

Chris

von Rudolph (Gast)


Lesenswert?

Isch schrieb:
> Wie könnte man es nun angehen an die LEDs ranzukommen?

Den Hersteller anschreiben und freundlich um eine Kopie des Handbuchs 
als .pdf bitten?

Sonst aufmachen und nachsehen was da drin ist und ob man das hacken 
kann.

Alle Kombinationen auf dem CAN auszuprobieren wird wohl eher nicht 
gehen, zumal da auch ein Protokoll drauf sein könnte oder auch nur eine 
CRC.

Bestenfalls könnte man noch versuchen, den Bereich einzuschränken.
Die "Knotennummer" verstellen und schauen auf welcher ID jeweils die 
Tasten-Botschaft kommt.

von Tobias P. (hubertus)


Lesenswert?

Hallo Leute

ich klinke mich hier auch kurz ein, habe eine Frage zum CAN, die hier 
grade rein passt.

Weiter oben wurde folgendes gesagt:

> Ja, CAN funktioniert rein über Identifier. Wenn du mehrere dieser
> Tastaturen an einem Bus betreiben wolltest, so würden alle mit den
> gleichen Identifiern arbeiten. Nun ist es aber weder vorgesehen noch
> wünschenswert, dass mehrere Geräte Frames mit der gleichen ID versenden.
> Über die Knotennummer wird daher mit ziemlicher Sicherheit der ID-Satz
> verändert, sodass du bis zu 32 Tastaturen gleichzeitig nutzen und auch
> identifizieren kannst.

jetzt mal eine Frage dazu; angenommen, ich habe mehrere gleichartige 
Sensoren (sagen wir mal, 6 Sensoren) die die gleiche Grösse (sagen wir 
mal die Temperatur) an unterschiedlichen Orten messen. Die Sensoren 
sollen am CAN-Bus hängen. Da jeder Sensor im Prinzip die selbe Grösse 
misst, wäre es doch sinnvoll, wenn die Nachrichten der Sensoren die 
selbe ID benutzen, aber im Telegramm selbst jeweils eine andere Nummer 
vergeben wird? Oder soll man die Sensoren dann von der ID her einfach 
stur durchnummerieren, und in der Software (die dann die CAN-Telegramme 
aller Sensoren entgegennimmt) muss man dann wissen: die CAN-IDs 1-6 sind 
die Temperaturen, 7-12 sind irgendwelche anderen Grössen.... oder wie 
macht man es 'richtig'.

CANopen löst das Problem bestimmt, ist aber vmtl. ein wenig aufwendig.

von Mathias O. (m-obi)


Lesenswert?

Also keine Geräte dürfen die selbe ID haben. Sonst macht das ganze ja 
keinen Sinn. Die meisten Geräte haben DIP-Schalter, womit du dann die 
Adresse + Geschwindigkeit einstellst, genau wie bei CANopen. Wie du das 
ganze gruppierst, bleibt dir überlassen. Entweder nach Funktion oder 
Standort oder sonst wie. Aber einige Geräte haben auch einen begrenzten 
Adressbereich, da musst du dann ein wenig gucken, wie du es am 
sinnvollsten/besten machst.

von Isch (Gast)


Lesenswert?

Guten Tag

Hab jetzt doch eine E-Mail vom Hersteller bekommen, er kann leider keine 
Dokumentationen mehr dazu finden :(

Als Tipp wurde mir gegeben es mit den Spezifikationen  DS302 bzw. DS401 
zu probieren. Hat dazu jemand mehr Infos?

von Steffen R. (steffen_rose)


Lesenswert?

Beim CAN in Automation gibts einige Standards auch ohne Mitgliedschaft.
z.B. den 401

http://www.can-cia.org/index.php?id=specifications&no_cache=1

Der 302 beschreibt hauptsächlich zusätzliche Dienste. Wüßte im Moment 
nicht, warum darauf verwiesen wird.

von Isch (Gast)


Lesenswert?

Guten Abend

ich versuche mich da eben ein wenig hineinzudenken. Dort wird aber immer 
von Adressen wie 6020h (usw.) gesprochen.

Ich empfang aber immer nur solche Daten

Get Data From id: 1551
0xA  0x0  0x0  0x0  0x0  0x8

wobei 1551 jetzt Dezimal ist (die 2. Zeile sind die Daten, 6 Byte), wäre 
in hexadezimal ja 60f mir fehlt da ne ganze Stelle. Werde daraus einfach 
nicht schlau und ich hab erst recht keine Ahnung was ich senden soll 
damit die LED angehen...

von Isch (Gast)


Lesenswert?

So gleich noch ein Post hinterher

ich glaub so langsam steig ich hinter das Protokoll. Wenn ich die 
Knotenummer 1 einstelle, erhalte ich Daten auf 0x42f das heißt ich bin 
auf PDO3

Demnach gehe ich davon aus, das die Tastatur auch auf PDO3 Daten 
erwartet, wenn ich mich nicht verrechnet habe müsste ich also auf 0x3AF 
senden.

Jetzt nur die Frage: Was für Daten?

von Isch (Gast)


Lesenswert?

achja PDO3 Node 47 um genau zu sein.

von Isch (Gast)


Lesenswert?

ich hab hier mal noch abgespeichert wie die Datensequenzen bei den 
Tasten aussehen (sind jetzt nur die ersten 8):

https://docs.google.com/spreadsheets/d/1b5BOt5yDeQlvNDIXJTIgthiJTeg2g1sNTSQHv6-iAbM/edit?usp=sharing

Flanke ist so zu verstehend:
steigend: in dem moment wo die Taste gedrückt wird
high: Taste wird gedrückt gehalten (wiederholt sich paar mal pro Sekunde 
so lang man die Taste gedrückt hält)
fallend: der moment wo die Taste los gelassen wird.

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.