gerade neu angemeldet, weil irgendwann die Fragen/Probleme zu spezifisch für Tante Googel werden
Projekt ->
Verschiedene analoge Messwerte (Strom und Spannung) sollen erfasst werden ~7 (Stand jetzt)
Temperatur und Luftfeuchte eingelesen werden 3 x DHT22
Zwei reine Temperaturwerte (Sensor noch unklar)
Als Ausgänge sind geplant
3 PWM Signale für Motoren
1 Servo
PWM über I2C für RGBW LED-Streifen (3 bis 4 Streifen als ein PCA9685 mit 16 Ausgängen)
Touch Display
Problem ->
Diese Anzahl an In/Out benötigt logisch viele Kabel. Dort wo das Display sitzt ist aber keine Möglichkeit ein dickes oder viele dünne Kabel zu verlegen.
Lösung bis jetzt ->
min 2 Arduino Mega. Einer kümmert sich um das Display und einer um die Ein und Ausgänge
Aber wie am besten Kommunizieren? Als Elektroniker hätte ich natürlich gerne eine schnelle Anzeige der Messwerte (inkl. kleinster Spitzen bei den Analogwerten). Auf der anderen Seite ist das natürlich auch eine größere Datenmenge. Ich könnte damit Leben, die Temperaturwerte nur jede Minute zu aktualisieren. Die gemessenen Strom und Spannungswerte hätte ich gerne aber schon deutlich öfters gemessen. Zur Not könnte ich auch mit Mittelwerten leben.
Die Entfernung zwischen beiden Arduinos sind maximal 10m (eher 5m - ich weiß aber noch nicht wie ich die Kabel genau verlegen kann). Sollte also für I2C und RS232 machbar sein.
Ich hoffe ich habe alle Infos geliefert - oft sind für mich Sachen logisch (ich hab es mir ja überlegt) aber für den Rest fehlt das natürlich - ich werde fehlende Infos aber gerne nachliefern.
I2C ist bei 5-10m eher grenzwertig. Eine normale serielle Verbindung mit 5V Pegel könnte es auch tun. RS232 ist je nach Umgebung nicht unbedingt nötig. Schadet aber nichts
I2C scheidet aus.
RS232 brauchst Du 2 TTL zu RS232 Wandler; kann die Distanz locker.
Serielle Schnittstelle TTL (direkt von Arduino Pins) weiß nicht wie lange da das Kabel sein kann. Mußt Du ausprobieren; notfalls mußt Du 2 RS232 Wandler dazwischenschalten. Das Protokoll bleibt gleich, ändern sich nur die Logikpegel.
Grüße Uwe
Die Entfernung zwischen beiden Arduinos sind maximal 10m (eher 5m - ich weiß aber noch nicht wie ich die Kabel genau verlegen kann). Sollte also für I2C und RS232 machbar sein.
Schon 5m ist viel zu viel für einen I2C. Das Maximum sollte (ohne Extender) bei höchsten 0.5m liegen, in einer Umgebung mit Motoren und dergleichen eher weniger. 10m könnten in einer solchen Umgebung bereits für RS232 knapp werden, ich würde eher zu RS485 tendieren. Dort ist die Signalübertragung differentiell, sollte also einigermassen störresistent sein und ohne aufwendige Schirmung auskommen.
Brauchst Du wirklich für beiden Seiten einen Mega? Wieso sollte die Display-Seite so viele Anschlüsse benötigen?
Laut Pinout sollte es wohl ein Mega sein - würde ich sagen.
Extender für I2C wäre auch kein Problem. Wobei es ja viele erfolgreiche Versuche über mehrere Meter ohne Extender gibt , aber an die PWM hab ich ehrlich gesagt nicht gedacht in dem Moment (wobei da nicht sooo viel Leistung drüber geht).
Wandler gibt es ja für alles mögliche, wäre nur die Frage welcher den geringsten Aufwand benötigt. Ich hab mich noch nicht mit diesen Wandlern beschäftigt - ich nehme mal nicht an, dass man die einfach anschließt und sonst nichts mehr konfigurieren muss? Ansonsten würde ich mal zum testen alles aufbauen und danach dann schauen ob TTL ausreicht oder ob ich einen Wandler benötige - wäre aber blöd, wenn man danach alles wieder umschreiben müsste. Ich les mich mal nebenher etwas ein...
Die Mega haben mehrere serielle Schnittstellen, da würde ich bei einer Punkt-zu-Punkt-Verbindung auch zu RS485 raten. Du kannst die Übertragungsrate variieren, was bei I2C nicht so einfach geht.
agmue:
Das könnten die Anschlüsse des Displays sein, die so zahlreich sind, daß es eines Megas bedarf.
Ein Touchdisplay kann auch gut den Speicher eines Megas vertragen, das habe ich auch so gelöst.
Ich vermute auch, dass es die Anschlüsse des Displays sind, das hat aber offensichtlich auch eine SPI-Schnittstelle. Der Speicherbedarf ist aber sicher ein gutes Argument für den Mega.
aus eigener aktueller Erfahrung kann ich dir bei der Entfernung zu einer seriellen Verbindung raten die mit dem Differenzverfahren arbeitet was RS485 wäre. Die ist trotzdem seriell nur die Übertragung ist sicherer. Verdrillte Drähte völlig ausreichend. Viele Leute nehmen auch Netzwerkkabel. Ich nutze die MAX487, damit sind bis zu 250kBaud drin (mit slew rate). Software seitig bleibt alles beim alten. Deine serielle Programmierung bleibt allso ganz normal wie gewohnt. Nur eine Pinumschaltung fürs senden / empfangen kommt noch dazu. Außer du nimmst zwei serielle Ports und damit zwei RS485 Verbindungen was dann Fullduplex wäre. Eine empfängt und die andere sendet. Mit dem Mega wäre das kein Problem. Ob das notwendig ist kannst nur du wissen. Zu dem Thema findet man mehr mit dem Suchbegriff RS485 und/oder MAX485.
Edit:
eine wichtige Ergänzung noch. Bei allen Speedjunkies muss natürlich auch sichergestellt sein das der Empfänger die Daten auch schnell genug verarbeiten kann. Ansonsten ist irgendwann auch der größte Buffer vollgeschrieben und ab dann gehen Daten verloren.
Edit2:
Korrektur wegen Fullduplex von Uwe in #11, Danke.
Wenn es RS485 werden sollte dann gibt es von Nick Gammon eine fertige sehr einfach zu nutzende Library die auch ein bisschen "sicherheit" mitbringt. Ich nutze sie sehr zuverlässig.
In seinem Thread sind viele Infos drin. Nutze die non-blocking Version und dann braucht man sich um Timming des Restprogramms nicht mehr so sehr versteifen. Man kann auch die Eingangs und Ausgangspuffer vergrößern sollte es nicht reichen. Alles auf die Arduino Megas wegen der mehreren UART Ports, somit kann man ein bisschen serielles Debugging machen ohne große Klimmzüge.
Gruß
DerDani
RS485 ist halbduplex. Senden und Empfangen wechseln sich ab. Dafür braucht es nur 1 Leitungspaar aber eine Flußkontrolle.
Nimmt man aber 2 Leitungspaare so hat man einen Punkt zu Punktverbindung, braucht keine Flußkontrolle und auch nur 1 serielle Schnittstelle analog zu RS232
Danke für die weiteren Antworten. Ursprünglich war geplant das Display und alle I/O mit einem Mega zu machen. Darum ist der schon da und im Prinzip auch schon alles programmiert. Zusätzlich das Thema Speicher und dann hat sich der Umstieg auf einen kleineren Arduino auch erledigt
Ich habe jetzt mal ein paar RS485 Umsetzer bestellt. Ich würde sagen Halbduplex reicht mir. Vollduplex hätte nur den Vorteil, dass ich Schaltbefehle schneller an den Messenden Arduino schicken könnte und die sind nicht Zeitkritisch - ob ein Relais jetzt 2 Sekunden früher oder später schält ist relativ egal.
Ich splitte nachher mal Messen und Anzeigen auf und messe mal mit der Stoppuhr wie lange die Loop überhaupt läuft.
ich denke, Du wirst mit der "stoppuhr" draufkommen, daß die dinger schneller und öfter senden, als Du es Deinem ersten post zufolge brauchst. da ist es auch wichtig, kurze telegramme zu schicken. also um gottes willen nicht ASCII-code. nicht "Temperatursensor01:22,3" sondern zwei binärwerte,
7 223
bei 7 weiß der empfänger, welcher sensor das ist, 223 ist der wert.
eine alternative wären vielleicht zwei nodeMCU, die garkeine kabelverbindung brauchen. die reden über WLan entweder direkt miteinander oder über Dein heimnetz. z.b. mit UDP.
sind sauschnell, haben riesig speicher, bei zu wenigen pins halt mit expandern über zb I2C erweitern.
Das mit der Stoppuhr sollte ein Scherz sein aktuell sind wir bei 3 bis 5ms (ohne Senden von Daten). Wobei die DHT22 noch fehlen. Ich hatte aber ehrlich noch nie über die Zykluszeit nachgedacht...
Nodemcu habe ich daheim verwendet - das übersteigt aber meine aktuellen Fähigkeiten. Es ist auch kein weiteres Netz verfügbar also zu keiner WLAN.
ich will's Dir natürlich nicht einreden mit den nodeMCUs. nur soviel:
die programmierst Du genauso wie die arduinos mit der arduino-IDE. die libraries passen auch im allgemeinen oder sind, wie im fall UDP zwar extra für den MCU, werden aber genauso wie arduino-libraries in die IDe eingebunden und verwendet.
ein weiteres netz brauchst Du nicht, zwei MCUs können "direkt" kommunizieren. und Du sparst Dir halt das kabel.
klarerweise Deine entscheidung, alles funktioniert immer auf verschiedenste arten. ich würde halt (falls zwei nodeMCUs vorhanden sind) mal eine UDP-verbindung versuchen...
Wie man den Node programmiert ist nicht das Problem. Eher den Aufbau der Kommunikation. Ein weiterer Nachteil des Node ist die PWM Frequenz. Ich habe den wie gesagt schon bei einem Projekt eingesetzt und dort nutzen wir einen Nano für die I/O Arbeit und lassen den Node die Rechenarbeit machen. Im Arduino kann ich die PWM Frequenz ändern , beim Node pfeifen die Lüfter extrem nervig.
Ich versuche jetzt erstmal eine saubere Kommunikation zwischen zwei Arduinos aufzubauen.
Falls jemand da ein gutes Tutorial hat immer her damit, bis dahin schau ich mal was sich im Netz so findet.
ich wiederhole mich: ich will's Dir natürlich nicht einreden mit den nodeMCUs.
aber einen arduino oder einen nodeMCU würde ich für PWM auf LEDs sowieso nicht verwenden, weil eine 8bit-pwm dafür (im unteren helligkeitsbereich) eher mist ist. ich dachte, Du nimmst die pca9685, die Du im ersten post erwähnst.