Wert am analog Pin einlesen

Hallo

Ich habe eine Frage zu einer Idee die ich hatte.
Kurz zum Problem. Ich lese an einem Arduino Mega 9 Sensoren an den analogen Pins ein. Diese geben mir dann einen Drehwinkel zurück, der von 0 bis 359 geht. Jetzt soll dieser Wert von 0 bis 359 an einen Arduino Uno gesendet werden, der aber nicht über TX/RX angeschlossen werden soll und wenn möglich ohne I2C funktioniert. Da dort auch noch ein Servo angeschlossen ist, fällt SoftwareSerial auch weg.

Jetzt hatte ich die Idee, da die analogen Eingänge ja Spannungswerte einlesen können von 0 bis 1023, könnte ich den Drehwinkel an einen analogen Eingang des Unos senden und dort dann wieder zum Drehwinkel mappen.
Ich hatte versucht, über den digitalen PWM Ausgang den Wert zu senden, aber das kann man am analogen Pin nicht mehr einlesen. Das PWM Signal geht ja rechteckig mit einer Frequenz.
Als zweite Idee hatte ich jetzt noch, den Wert mit einem digitalen Poti zu senden und am analogen Pin des Unos einzulesen. Jetzt kenne ich mich mit digitalen Potis überhaupt nicht aus. Ich habe da gesehen, es gibt einige verschiedene. Kann mir hier einer helfen, welchen da geeignet ist? Er soll wenn möglich ganz einfach ohne Library anzusteuern sein.

Gruss

Stef

Spendier zwei Pins und nimm SoftwareSerial.

Das habe ich vergessen, da am Uno noch ein Servo angeschlossen ist, kann ich keine SoftwareSerial verwenden.

Hallo,
Warum nicht I2C , wäre super dafür geeignet

Die Länge der Verbindung ist ca. 1m, da funktioniert I2C nur bedingt.

Sind das dann auch 9 Winkel?

Man kann daraus mit einem low-pass (RC) Filter eine Spannung erzeugen.

Alternativ könnte man auch eine PCM Funkfernsteuerung mit 9 Kanälen simulieren, dafür gibt es Bibliotheken zum Erzeugen und Zerlegen des Signals.

Hast Du mir da ein Beispiel? Habe ich auch schon gehört, aber keine Ahnung wie sowas funktioniert. Das wäre vermutlich das einfachst mit den OnBoard Funktionen und Bauteilen. Da brauchts nicht wirklich viel zusätzliches.

Nö, sind binär-Werte, jeder Sensor liest einen Wert 0 oder 1 an einer Skala ab und alle 9 Bits ergeben die Binärzahl des Winkels.

Wieso ?
Hast du es probiert ?
Notfalls nimmt man I2C Busextendeder, z.B. P82B715.

Ja, habe welche hier die ich versucht habe, auch einen Terminator LTC4311 habe ich versucht. Es will nicht immer funktionieren. Manchmal bricht die Verbindung ab und benötigt einen Reset.

Hallo
Na ja Messwerte die bereits am digitaler Wert vorliegen dann analog zu übertragen ist sicher nicht der Technik Letzter Schrei.
Wenn du es sauber vorher testest kannst du ja notfalls auch die normale seriell auf der Uno Seite nehmen.

Dann machst du da etwas falsch.
Ich habe mehrere Projekte aufgebaut, die mit dem Extendender laufen....ohne Probleme.
Und 1 Meter ist da kein Problem. Das hat bei mir auch schon ohne Extender funktioniert.

Allerdings war das nur im Probeaufbau, aber fehlerfrei. Ist natürlich u.U. extrem störanfällig.

Edit:
Bei 1 Meter würde ich es mal mit abgeschirmten Kabel probieren. Die Pullup-Widerstände auf 1 k legen. Das sollte funktionieren.
Außer du hast in deinem Umfeld schwere Industriemaschinen. Da hast du ein Problem.

Schaltung siehe Wikipedia.

Okay, verstanden.
Ist die Übertragung zeitkritisch?
Habe ich richtig verstanden, dass es nur in eine Richtung vom Mega zum Uno geht?

Falls 2x nein kannst Du natürlich auch serielle Übertragung "von Hand" organisieren: An einem Pin klingeln und und am Uno auslesen (mit Überabtastung) und dann den Wert zusammensetzen.
So in der Art Startbit 50ms low, dann 9x 10ms die Bits und dann nochmal eine Stop-Condition 50ms high. Suchwort ist dann "bit banging".

(Das wäre mal eine schöne Praktikumsaufgabe für die Schüler und Studenten unter uns)

Bei zwei Arduinos frage ich immer zunächst WARUM will man sich Komplexitität in ein System holen und zwei Controller einsetzen.

Ein Controller - kein Kommunikationsproblem.
Wenn man unbedingt will:
RS232, RS485, CAN, Ethernet ... man suche sich was aus.
Aber handgekochtest Bitbanging über einen Pin? "Analogwerte" übermitteln ... ernsthaft?

Nur der Vollständigkeit halber:
Die Alternative, den Original-Analogwert parallel zum anderen Arduino zu übertragen, kam noch gar nicht vor.

Wäre auch mein erster Einwand.
PWM Ausgabe, Tiefpass und Analog Einlesen wäre nach meiner Meinung das Letzte.
Wenn schon, könnte man eine PWM-Ausgabe digital übertragen und im Empfänger die Zeit messen.

Nun - es ist in der Menge möglicher Lösungen für das Problem enthalten. Wenn SoftwareSerial nicht darf, es "wenn möglich ohne Libraries" gehen soll und es tatsächlich zwei Geräte sein sollen...
Wir wissen ja nur, dass da 1m Abstand zu überbrücken ist - ob dazwischen ein Betonwand ist oder ob man das auch optisch signalisieren könnte - abstruse Ideen gibt es bestimmt noch mehr :slight_smile:

Hallo,
einen "Unsinn" hab ich auch noch :wink:

Der Sender gibt mit tone eine Frequenz aus , z.B 100-3600 Hz in 10Hz Schritten und der Empfänger misst die dann z.B mittels pulsIn oder ganz konventionell mit einer Tormessung über 1s :laughing:

Heinz

Ja danke an alle für die wirklich kreativen Ideen! Ich könnte auch per Lichtzeichen die Bits durchgeben und am anderen Ende wieder einlesen und umwandeln :smiley:

Im Ernst! Das Problem ist, dass ich die 9 Sensoren an analogen Pins einlesen muss. 9 analoge Pins hat nur der Mega. Das heisst ich brauche für die Einlesung des Winkels den Mega, und dieser weiss dann wie die Scheibe auf welchem Winkel die steht. Der Motor der die Scheibe dreht, der muss ja aber wissen, wie weit er drehen muss um einen bestimmten Winkel zu erreichen. Der Motor wird mit einem Xbee gesteuert, welches schon am RX dran hängt. Ich habe mir jetzt gedacht, ich übertrage den Winkelwert auf den Uno wo der Motor angeschlossen ist und kann dann dort mit einer if-Abfrage so lange den Motor mit Strom versorgen, bis der Winkel erreicht wurde.
Vielleicht habe ich das zu Beginn zu wenig genau erklärt. Der Wert wird analog abgelesen und als Winkelwert gespeichert. Da ich genügend analoge Pins habe, dachte ich da an die Übertragung per analogen Pin wie es die Sensoren machen. Einlesen ist ja kein Problem, aber einen anaolgen Wert schreiben geht nicht. Darum der Gedanke mit einem digitalen Poti zu arbeiten, der mir den Winkel als analogen Wert ausgeben kann und am Uno per analogem Pin eingelesen wird.
Ich versuchs mal mit geschirmten I2C Kabeln. Aber sonst, gibt es da keinen sehr einfachen Weg mit wenig SchnickSchnack den Wert zu übertragen?
Sonst hätte ich noch die Idee, den benötigten Winkel vom Uno zum Mega zu übertragen, und sobald dieser erreicht wurde, ein digitaler Pin auf HIGH zu setzen, was vom Uno gelesen wird und den Motor stoppt. Aber das ist dann zeitlich ein hin und her und benötigt unnötig viel Zeit. Es soll so kurz wie möglich gehalten werden.

Aber warum überhaupt 2 Controller?
Das hast du bisher noch nicht beantwortet.
Geht das nicht alles mit dem Mega ?
Oder der UNO mit einer Erweiterung für analoge Eingänge ?
Oder.....

Gibts sowas?