Von Arduino mit PWM in Arduino Über Analog

Hallo Freunde.

Ich muss bei einem kleinen Projekt den Wert eines Potentiometers von einem Arduino zu einem anderen übertragen.
Ich habe mir dazu folgendes überlegt:

Ich lesen den Wert des Potentiometers über analogRead() in den SendeArduino ein und schicke ihn dann über analogWrite zum EmpfängerArduino. Dort lese ich den Wert wieder mit analogRead ein. (um den Zeitverlust bei einer Seriellen Verbindung zu umgehen...)

Das habe ich (leider) ohne zu testen in eine Platine ätzen lassen. Heute beim Testen habe ich bemerkt das der EmpfängerArduino nur die Werte 0 und 1023 empfängt (über analogRead())
Als ich darüber nachgedacht habe wurde mir das Ganze dann klar.
analogRead() liest den Wert entweder in der LOW oder in der HIGH Periode des PWM Signals ein...

Jetzt wollte ich wissen ob man das ganze noch irgendwie retten kann... Ich will nicht die ganzen Platinen wegwerfen und wäre froh wenn ihr mir helfen könntet.

Eines habe ich jedoch bereits jetzt gelernt: Teste ALLES vorher auf einem BreadBoard bevor du teuere Platinen ätzen lässt!!!

Grüße Hoonse

Du koenntest z.b. mittels 'NewSoftSerial' sowohl fuer sender als auch empfaenger den wert einfach uebertragen. Freie pin-wahl, keine aenderungen an der hardware noetig. Das geht mit bis zu 115200 (wenn deine boards mit einem quartz laufen), braucht also so gut wie keine zeit.

Natuerlich koenntest du auch die leiterbahn durchtrennen und einen RC filter reinbasteln, aber das wird nur haesslich.

Danke für die schnelle Antwort.
Kann man denn bei NewSoftSerial auch AnalogePins verwenden? und kann man auch 2 NewSoftSerials am laufen haben.(ich habe beim Empfänger schon ein display über newsoftserial und einen RFID Chip über die Normale Serial Verbindung...)

Grüße Hoonse

Ja und ja. Letzteres mit der einschraenkung, dass jeweils nur eine verbindung aktiv sein kann, also nicht gleichzeitig. Wenn von einer zur anderen verbindung gewechselt werden muss, dann muss immer ein xxx.begin() kommen.

Du musst ein RC-Glied vor den Analog EIngang des Empfänger Ardinos packen. Da der Arduino schnell ist und du mit dem Analog Ausgang nur PWM erzeugst sieht der E-Ardu nur die An bzw id Offtime mit einem RC-Glied. Und mide dem RC_Glied wird es vermittelt (RC-Glied Widerstand in Reihenschaltung und ein Kondensator parallel zu + und GND !nach! dem Widerstand). Berechungen über die Größe der Beiden findest du im Netz.

volvodani

madworm:
Ja und ja. Letzteres mit der einschraenkung, dass jeweils nur eine verbindung aktiv sein kann, also nicht gleichzeitig. Wenn von einer zur anderen verbindung gewechselt werden muss, dann muss immer ein xxx.begin() kommen.

Sorry, wenn ich da mal so halb offtopic dazwischen frage, bzw genauer nachfrage:

Habe ich das richtig verstanden, dass wenn eine "konventionelle" serielle Verbindung geschlossen ist, eine neue über zB den digitalen Pin eröffnet werden kann ? Eben nur im Wechsel ? In meinem Fall ist der I2C Bus bei einem Diecmillia nicht brauchbar wenn das xbee shield aktiv ist, weswegen ich an einem Punkt seriell von einem anderen Prozessor hineinschicken möchte.

Die hardware uarts funktioniert immer.

Wenn mit der bibliothek 'NewSoftSerial' soft-uart(s) erstellt werden, so ist immer nur einer von denen aktiv. Mann kann mit diesen also nicht mit einem von 2en senden, waehrend der andere auf daten wartet.

Also: soft-uart-A aktivieren + senden/empfangen/verarbeiten, soft-uart-B aktivieren + senden/empfangen/verarbeiten, usw.

Die anzahl der moeglichen gleichzeitigen seriellen verbindungen ist: anzahl der hardware uarts + 1x software uart (im wechsel)

volvodani:
Du musst ein RC-Glied vor den Analog EIngang des Empfänger Ardinos packen. Da der Arduino schnell ist und du mit dem Analog Ausgang nur PWM erzeugst sieht der E-Ardu nur die An bzw id Offtime mit einem RC-Glied. Und mide dem RC_Glied wird es vermittelt (RC-Glied Widerstand in Reihenschaltung und ein Kondensator parallel zu + und GND !nach! dem Widerstand). Berechungen über die Größe der Beiden findest du im Netz.

volvodani

Soweit ich verstanden habe wollte Hoonse eien schnelle möglichkeit einen Wert zu übertragen.
Sein ersten Gedankenfehler war, daß er angenommen hat das PWM-Ssignal sei eine Gleichspannung.
Dein Vorschlag volvodani ist prinzipielle in Ordnung aber ein RC Filter braucht einige Perioden um sich auf den neuen Wert einzustellen. Wenn man die Standart-PWM-Frequenz von 490Hz nimmt dann hat sich die Spannung nach dem RC-Glied schätzungsweise nach 10 Perioden eingependelt und das sind dann 20mSec.
Da ist eine serielle Schnittstelle mit 9600 Baud schneller.

Um 2 Arduini zu verbinden ist SPI oder I2C auch möglich und schneller als NewSoftSerial und da beide in Hardware implementiert sind auch weniger rechenintensiv.

Viele Grüße Uwe