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.
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.
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).
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.
"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.
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)
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...
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.
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.
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 ...
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.
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
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.
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.
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.
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?
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.
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...
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?
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.