Die Lib "NewSoftSerial" unterstützt "nur" Geschwindigkeiten bis 115000 Bit/s, das in hoher Qualität und per interrupt-gesteuerter Empfangsroutine. Dass eine reine Software-Lösung, insbesondere beim Empfang" nicht beliebig schnell sein kann, ist mir klar. Ich brauche aber nur die Sende-Funktion für einige wenige Bytes.
Ich benötige einen RX-Pin, der mit 256000 Bit/s senden kann.
Es geht mir um die Kommunikation mit einem Radar-Chip LD2410, der blöderweise mit einer per Default auf 256000 Bit/s gesetzten UART daherkommt. Diese Rate kann zwar per Befehl auf andere (niedrigere) Bitraten gesetzt werden, aber ... ja, da beisst sich die Katze irgendwie in den Schwanz.
Hätte ich nun die Möglichkeit, nach einem Restart ein Pin zunächst mit 256000 zu bedienen (nur Sendung nötig), könnte ich einen Umschalt-Befehl als Initialiserung senden und danach auf niedrigere Geschwindigkeiten herunterschalten.
Kennt jemand evtl. passenden Code? Oder gibts Patches/Forks von (new) SoftSerial, die das ermöglichen? Danke für Tips.
Ja, ich weiß, ein "normaler" ESP32 kann das per zweiter Hardware-UART von Hause aus, der ist mir aber zu "fett", ich benötige am Ende 6 solcher Sensoren und habe wenig Platz ... sowas wie ein Arduino Micro oder eines diese "kompatiblen" Dinger von 2x2cm wäre ideal für meine Zwecke.
Alternativ wäre ich dankbar für Tips zu so einem "Winzling" wie den TinyPico oder Seed Studio XIAO, aber eben mit zwei Hardware-UARTs ...
Die Lib "NewSoftSerial" unterstützt "nur" Geschwindigkeiten bis 115000
Bit/s, das allerdings in hoher Qualität und per interrupt-gesteuerter
Empfangsroutine. Dass eine reine Software-Lösung, insbesondere beim
Empfang" nich beliebig schnell sein kann, ist mir klar. Ich brauche aber
nur die Sende-Funktion für einige wenige Bytes.
Ich benötige also einen RX-Pin, der mit 256000 Bit/s senden kann.
Nein, das ist doch Schwachsinn. Wieso sollte der RX-Pin senden? Außerdem: Senden sollte auch rein in Software mit deutlich mehr als 115200 problemlos gehen, nämlich mit (bis zu) der Hälfte der Taktfrequenz des Systems (wenn auch nicht mit jeder gewünschten Baudrate). Wenn das Ziel 256kBaud sind und der Systemtakt die Arduino-typischen 16Mhz, dann sollte das mit einem systematischen Baudratenfehler von + oder - 0,8% gehen. Also völlig unproblematisch.
Mir scheint, du hast das eigentliche Problem nicht erkannt bzw. verstanden...
Die Lib "NewSoftSerial" unterstützt "nur" Geschwindigkeiten bis 115000
Bit/s, das allerdings in hoher Qualität und per interrupt-gesteuerter
Empfangsroutine. Dass eine reine Software-Lösung, insbesondere beim
Empfang" nich beliebig schnell sein kann, ist mir klar. Ich brauche aber
nur die Sende-Funktion für einige wenige Bytes.
Ich benötige also einen RX-Pin, der mit 256000 Bit/s senden kann.
Nein, das ist doch Schwachsinn. Wieso sollte der RX-Pin senden?
Also ich hatte RX/TX bzw. die Perspektive Arduino/Radar verwechselt.
Natürlich geht es darum, vom Arduino (TX) zunächst einige Bytes zum Radar (RX) zu senden, um dessen UART herunter zu konfigurieren.
Bei der Hardware-UART ("Serial.begin()") verhindert die Arduino-IDE die Eingabe von Werten über 115000, vielleicht ist das ja bei SoftSerial nicht so, das habe ich noch nicht hausprobiert.
Bei der Hardware-UART ("Serial.begin()") verhindert die Arduino-IDE die
Eingabe von Werten über 115000
Tja, wenn man sich selbst Handschellen anlegt (sprich: das Arduino-Framework verwendet), darf man sich nicht beschweren, wenn das die Bewegungsfreiheit doch etwas beschränkt...
Ja, das würde ausreichen. Allerdings ist der Teensy 4 ziemlich teuer, habe keinen unter 50,- gefunden.
Alternativ bin ich bei meinen Recherchen inzwischen auf den "RP2040-Zero" bzw. "RP2040-One" gestossen, den es sogar im "Digistump"-Format (Platine ca. 1,5cm x 1,5cm mit USB-"Stecker") gibt. Der hat wohl zwei Hardware-UARTs. Mal sehen, ob die 256k können ...
Dann kann ich mir auch die Trickserei mit der Baudraten-Umschaltung ersparen.
"NewSoftSerial" unterstützt "nur" Geschwindigkeiten bis 115000
Spricht was dagegen, die entsprechende Routine aus Softwareserial zu clonen und ein passendes eigenes _tx_delay zu verwenden?
Datei bei mir C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src\SoftwareSerial.cpp
Tja, wenn man sich selbst Handschellen anlegt (sprich: das
Arduino-Framework verwendet), darf man sich nicht beschweren, wenn das
die Bewegungsfreiheit doch etwas beschränkt...
Und dann einfach mal das original Software-Serial mit 230400 gestartet. Wunder der Technik: Senden mit 230400 funktioniert problemlos, 256000 konnte ich leider mangels passendem Terminalprogramm nicht ausprobieren, wäre aber einen Versuch wert. (Edit: 460800 geht auch.)