Hallo zusammen,
ich habe ein paar simple Geräte auf ATMEGA328-Basis gebaut. Relays,
Taster & Leds, funktioniert soweit perfekt.
Nun möchte ich die Geräte miteinander kommunizieren lassen:
Wird an einem beliebigen Gerät X ein Taster gedrückt, soll bevor die
Relays/Leds geschaltet werden der Status der anderen Geräte
zurückgelesen werden, und unter umständen ein Befehl an alle Teilnehmer
gesendet werden bevor Gerät X sein eigentlichen Befehl ausführt.
Die Geschwindigkeit muss wahrscheinlich nicht sonderlich hoch sein, auch
die Datenmenge wird sehr klein ausfallen (nur der Status der jeweiligen
Geräte wird ausgetauscht, 2-3 Byte oder so). Distanz zwischen den
Geräten beträgt max. 20m denke ich.
Die Kommunikationsleitung soll von Gerät zu Gerät weiter geschlauft
werden ( RJ45-Buchsen:
https://www.digikey.com/product-detail/en/pulse-electronics-network/E5908-4V0S54-L/553-2266-ND/4868936)
Die Geräte werden über 12V Steckernetzteile versorgt, intern dann 5V.
Nun meine Frage, ist CAN in diesem simplen Anwendungsfall zweckgemäss,
oder gibt es einfachere, weniger aufändige Bussysteme, die mit meinen
Anforderungen klar kommen? (Das ganze geht richtung Multimaster,
richtig?)
Falls CAN, habe ich geplant den 328 mit einem MCP2515 + TJA1050 zu
erweitern (anfänglich mit solchen Testmodulen:
https://www.electrodragon.com/product/mcp2515-can-receiver-breakout-board-spi)
Falls ihr noch weitere Angaben benötigt, einfach melden. Bin noch
ziemlich neu auf dem Gebiet.
Vielen Dank im Voraus für euren Input.
Gruss Markus
Generell ist CAN erst einmal ein sehr einfacher Bus. Er ist
Ereignisorientiert und sendet nur Daten, wenn etwas passiert - das
spricht in Deinem Fall deutlich für CAN.
Höher eingeordnete Feldbusse wie z.B. ProfiBus oder gar Ethernet laufen
ständig und es obliegt den jeweiligen Teilnehmern, die Ringdaten
zyklisch auszuwerten.
Niedrige Baudrate, wenig Datenbandbreite, lange Leitungswege (wobei 20m
nicht sonderlich viel sind) sowie einfache und störunempfindliche
Verdrahtung sprechen in diesem fall wirklich für CAN.
Bussysteme die noch weiter unten angesetzt sind wären irgendwas
differentielles mit RS422 oder RS485 - die sind aber nicht
Kollisionssicher - deswegen würde ich darauf verzichten.
Ich würde auch CAN verwenden.
...denke daran, dass Du mit CAN (ohne Tricks und Kniffe) max. 8 Byte je
Telegramm versenden kannst - wenn Dir das ausreicht ist alles gut!
CAN erfüllt die Anforderungen auf jeden Fall stressfrei.
Machbar ist es sicherlich auch ganz ohne viel extra Hardware z.B.
seriell oder über I2C, aber dann musst du ein ordentliches Protokoll
inkl. Kollisionsbehandlung austüfteln.
"Ein paar simple Geräte" klingt für mich nicht so, als wäre der Aufwand
es gegenüber dem Mehrpreis für CAN es wert, also ich sag auch: CAN
passt.
Gero schrieb:> und sendet nur Daten, wenn etwas passiert
Nene. Kann man so machen, muss man aber nicht. Diese Vorgehensweise hat
auch erstmal nichts mit CAN zu tun.
Und ja - nimm CAN. Aber am besten Controller mit internem CAN. Der MCP
funktioniert zwar wunderbar - aber warum sollte man sich einen zus. Chip
antun? Gibt genug Controller mit internem CAN.
Ich persönlich nutze RS485, Protokoll frei wählbar,
quasi kann man die UART 1:1 durchschalten und
die Treiber-ICs sind billig.
Bei nicht zu hohen Baudraten können 100e Meter
mit einfachen FM-Kabel überbrückt werden.
VG Micha
Hallo zusammen,
vielen Dank für eure Rückmeldungen :)
alles klar, CAN!
bez. dem Software-Protokoll bzw. wie die empfangen Daten verarbeitet
werden und wie das Netzwerk unter den Geräten aufgebaut wird:
Habt ihr irgendwelche Beispiele Projekte Links / Stichworte für
mich, damit ich mich einlesen kann? Weiss noch nicht so recht nach
welchen Stichworten ich suchen soll.
Was ich denke ich noch brauche ist ein CAN-Datenlogger / Analyzer für
den PC um zu sehen ob die Kommunikation funktioniert wie gewünscht.
Habt ihr eine Produktempfehlung für einen solchen Datenlogger für mich?
Sollte nicht allzuteuer sein... :|
Vielen Dank für eure Hilfe!! :)
Gruss Markus
Markus schrieb:> Was ich denke ich noch brauche ist ein CAN-Datenlogger / Analyzer für> den PC um zu sehen ob die Kommunikation funktioniert wie gewünscht.> Habt ihr eine Produktempfehlung für einen solchen Datenlogger für mich?> Sollte nicht allzuteuer sein... :|
Da fällt mir spontan der PCAN-USB ein
https://www.peak-system.com/PCAN-USB.199.0.html
Nicht das aller billigste aber auch nicht übertrieben teuer und tut
einfach.
Gruß
Rainer
Nicht billig, aber gut: Peak-CAN.
Habe 3 Stück davon, seit ca. 15 Jahren im Einsatz. Kein einziger
ausgefallen, und auch die diversen Betriebssystemwechsel völlig
schmerzlos mitgemacht.
Was den Datenaustausch angeht: solange es nichts sicherheitsrelevantes
ist mach es dir einfach und verzichte auf alle Sonderfälle wie explizite
Anfrage bestimmter Daten (obwohl das extra vorgesehen ist, remote-frame)
oder übergeordnetes Protokoll wie CANOpen.
Lass jeden Teilnehmer z.B. alle 20ms seinen kompletten Status
(Eingänge, Ausgänge, Timer, was auch immer) auf den Bus blasen und
verlass dich einfach drauf, dass es auch ankommt (wenn elektrisch
korrekt aufgebaut und die Buslast überschaubar bleibt ist es praktisch
tatsächlich fehlerfrei, eine theoretische winzige Fehlerrate bleibt
natürlich).
Passt alles in 8Byte bist du schon fertig. Kannst natürlich je Karte
auch mehrere IDs verwenden oder auch das 1.Datenbyte als Kennzeichen
nehmen, was denn die restlichen 7 (oder auch weniger) Byte bedeuten. So
kann man auf einer ID 256*7Datenbyte unterbringen. Du kannst dich da
wirklich fast beliebig austoben.
Hallo
Ja das PCANView kann einigermaße gut mitloggen, ein CAN-Interface ist
aber immer nötig, wenn's der PC anzeigen soll. Für's PCANView eben eines
von Peak.
Evtl. kannst Du das für's erste auch schon mal mit einem Oszi
überprüfen. Z.B. das Picoscope hat ganz brauchbare Interpreter, die den
Datenstrom dann gleich als CAN-Bytes anzeigen.
Gruß Ulf
Ich hab für einfache Zwecke schon des öfteren ein USBtin in Geräten
verbaut.
So hat man dann einfach nen USB, an welchen man den PC für
Diagnosezwecke anstöpseln kann.
https://www.fischl.de/usbtin/
Markus schrieb:> und wie das Netzwerk unter den Geräten aufgebaut wird:
Im einfachsten Fall wie bei dir sollte die ID den Inhalt der Nachricht
beschreiben, nicht den Empfänger, Absender oder sonstwas:
ID 0x156: Gemessene Raumtemperatur
ID 0x157: Gemessene Raumluftfeuchtigkeit
ID 0x158: Sollwert Heizungsventil
ID 0x159: Istwert Heizungsventil
ID 0x160: Sollwert Lüfterdrehzahl
ID 0x161: Istwert Lüfterdrehzahl
Jede Komponente schickt periodisch das, was sie zu verkünden hat, und
lauscht auf die Botschaften, die sie interessieren.
Schlecht ist sowas:
ID 0xc1: Botschaft vom Sensor- an Master-Controller mit diversen Werten
ID 0xc2: Botschaft vom Sensor- an Display-Controller mit diversen Werten
ID 0xc3: Botschaft vom Master- an Lüfter-Controller mit diversen Werten
Dann läuft man nämlich bei jeder kleinen Änderung herum und flasht alle
Controller neu.
Markus schrieb:> Was ich denke ich noch brauche ist ein CAN-Datenlogger / Analyzer für> den PC um zu sehen ob die Kommunikation funktioniert wie gewünscht.> Habt ihr eine Produktempfehlung für einen solchen Datenlogger für mich?> Sollte nicht allzuteuer sein... :|
Raspi mit CAN Shield (oder dem board das du verlinkt hast so umgebaut
dass der can Controller mit 3,3V läuft) und den can utils