Arduino 433 MHz-Übertragung schlägt fehl, wenn die fallende Flanke weniger als 122 ms beträgt

Ich versuche, eine LED mit einem leistungsstarken 433-MHz-Sender-Empfänger-Paar zu steuern, wobei der Sender an meinen Arduino Nano angeschlossen ist.

Hier ist der Sender (XLPCF20): http://www.colorapples.com/rf-wireless-transmitter-module-315-or-43392mhz-xlpcf20-p-38493.html

Hier ist der Empfänger (CDR 5 B): http://www.amazon.co.uk/433MHZ-115dbm-Wireless-Receiver-CDR-5-B/dp/B00COD96UG

Ich kann HIGH an einen Datenkanal am Sender senden (er hat 4 Kanäle) und den HIGH-Eingang am selben Kanal am Empfänger empfangen, wodurch eine LED erfolgreich aufleuchtet. Dies ist mein aktueller Test-Sketch:

void setup(){
  pinMode(8, OUTPUT);
}

void loop(){
  digitalWrite(8, HIGH);
  delay(122); //this is the important line
  digitalWrite(8, LOW);
  delay(100);
}

Dies funktioniert gut, aber wenn ich die Verzögerung von 122 ms an der fallenden Flanke auf 121 ms (oder etwas darunter) ändere, habe ich keine Ausgabe am Empfänger. Die LED leuchtet überhaupt nicht. Es ist für alle Kanäle gleich, genau an dieser Grenze zwischen 121 ms und 122 ms gibt es eine scharfe Änderung (den genauen Wert durch Ausprobieren gefunden). Am Sender/Arduino ist das Ausgangssignal klar, also liegt ein Fehler am Sender oder Empfänger vor. Ich habe in der Vergangenheit andere, viel einfachere/billigere 433-MHz-Sender/Empfänger-Paare ohne solche Probleme verwendet. An der steigenden Flanke (zweiter Verzögerungsanruf, der mit 100 ms) gibt es ein weiteres Problem, wenn ich unter 13 ms absinke. Bei genau 12ms ist die LED instabil, sie blinkt manchmal wie erwartet, aber manchmal leuchtet sie einfach auf. Alles unter 12 ms, die LED ist konstant hoch, kein einziges Blinken.

UPDATE: Wenn ich _delay_msanstelle von regular verwende delay, bekomme ich ungefähr 1msmehr Platz für beide Kanten, aber darunter ist es immer noch dasselbe.

UPDATE 2: Ich habe versucht, auf meinem Nano zu verschiedenen Ausgangspins zu wechseln, sowohl PWM- als auch Nicht-PWM-Pins. Nichts verändert sich.

Was wäre das Problem?

Zeigt es dies, wenn Sie _delay_ms()stattdessen verwenden?
@IgnacioVazquez-Abrams Ich bekomme ungefähr 1 ms mehr Platz. Es ist fast stabil bei 121 ms fallend und stabil bei 11 ms fallend. Gehen Sie knapp darunter (120 ms steigend oder 10 ms fallend), das gleiche Problem besteht erneut.
Ohne richtige Datenblätter ist es etwas schwierig, dies mit Sicherheit zu wissen, aber wenn der Encoder auf eine relativ niedrige Rate eingestellt ist, kann es so lange dauern, bis der TX/RX gesperrt ist und die vollständige Bitfolge decodiert werden kann. Es ist ein bisschen mehr los als ein einfaches TX/RX-Modul, und viele sind für den Einsatz als Fernbedienung konzipiert, wo diese Art von Verzögerung akzeptabel ist.

Antworten (1)

Sie benötigen ein reines Sender- und Empfängerpaar mit einem Kanal. Foto ist ein super regenerativer Empfänger. Sie können den Superhetrodyn-Typ für eine bessere Entstörung verwenden. Im Allgemeinen funktionieren diese Schaltvorgänge bis zu einigen kHz, geben Sie Hi in tx ein und Hi kommt bei Rx heraus.

Geben Sie hier die Bildbeschreibung ein

Der, den Sie haben, hat eine zusätzliche Encoder-MCU. Es liest 4 Tastenzeilen, wartet 120 ms auf die Tastenentprellung, sodass kürzere Eingaben ignoriert werden. Es sendet dann eine codierte Nachricht an den Empfänger, wo eine andere MCU die Nachricht decodiert und Hi / Lo auf 4 Kanälen sendet.

Ihr Modul wird im Allgemeinen innerhalb dieser 4-Tasten-Fernbedienung verwendet (Autotüröffner usw.). Beachten Sie mehr Pin, als out1 bis out4. Das Bare ist nur out1.

Geben Sie hier die Bildbeschreibung ein

Ja, ich habe die einfacheren TX/RX-Paare oben ohne Probleme verwendet, aber ihre Reichweite ist viel kürzer. Ich habe dieses für eine hohe Reichweite (angepriesen als 3 km Reichweite, ich weiß, es werden keine 3 km sein, aber immer noch viel höher als ein normales Paar). Gibt es eine Möglichkeit, das 120-ms-Tasten-Entprellen-Warteverhalten abzubrechen, da ich es sowieso nicht mit Tasten verwenden werde?
Ihr Gerät hat einen MCU-Teil und den bloßen TX/RX-Teil auf einer PCBA. Wenn Sie die Platine und den Schaltkreis verfolgen können, können Sie den MCU-Teil passieren und das Signal direkt in den bloßen TX / RX auf dem Schaltkreis einspeisen. ODER Sie können eine neue Hochleistungsversion des Bare tx und Superhet rx kaufen. Überprüfen Sie die örtliche gesetzliche Einschränkung für die Verwendung von Hochleistungsgeräten (über 100 bis 200 Meter sind wahrscheinlich in gewisser Weise, an Orten und in Ländern eingeschränkt)
danke, ich werde versuchen, die MCU zu umgehen, und wenn ich das nicht kann, suche ich nach einem neuen Paar.
Als zukünftige Referenz: Ich habe es mit ein wenig Löten zum Laufen gebracht. Ich habe eine Diode an Pin 17 des Senders PT2262 (zweiter Pin rechts) und eine Diode von Pin 14 des PT2272 (fünfter Pin rechts) an meinen Empfänger gelötet (Diode fungiert als Datenpin des Empfängers) und es hat perfekt funktioniert! Ich habe fast eine halbe Stunde lang ohne nennenswerte Batterieentladung oder Erwärmung ununterbrochen gesendet/empfangen, nur für den Fall, dass sich jemand wundert.
Gut, dass es funktioniert. Denken Sie nur daran, ob Sie einen 173-mm-Draht als Antenne für TX und RX angeschlossen haben. Mit einer 173-mm-Antenne sollte selbst das einfache Modul, das Sie als nicht genügend Reichweite gemeldet haben, einige hundert Meter weit gehen, unter guten Bedingungen, offenem, flachem Land und direkter Sichtlinie. Verwenden Sie eine geringe Leistung und eine geringe Reichweite, um Interferenzen mit anderen Benutzern zu reduzieren, die möglicherweise dasselbe Gerät verwenden.
Danke, ich werde auch einen 17,3cm Draht löten und den einfachen auch versuchen.
Die einfache Antenne mit 173-mm-Antenne und senkrecht stehendem Volldraht sollte 50 bis 200 Meter innerhalb eines typischen Gebäudes auf derselben Etage durch typische Wände reichen.