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
Ich mag CAN. Damit wird es auf alle Fälle gehen.
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.
Hallo Eventuell wäre auch der LIN-Bus https://es.cs.uni-kl.de/publications/data/Knob14.pdf noch etwas für deine Anwendung. Gruß Ulf
Ist aber kein Multimaster. Da fängt man dann wieder an, dass ein Master alles abfragen muss.
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
Ziemlich schnell und billig, ja. Aber dasselbe Problem: Single Master super, für Multimaster einfach Kacke.
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
:
Bearbeitet durch User
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/
Schau dir mal den ATMega16M1 an, der hat CAN mit drin brauchst nur einen Tranceiver z.b. MCP2551 oder dessen Nachfolger.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.