UART /Softserial Probleme bei Serieller Kommunikation

Hallo,
Ich bin gerade dabei eine Software für einen Telemetrie-Sensor für ein Graupner-System zu schreiben. Der Sensor funktioniert in Version 1 schon sehr gut. Graupner hat jedoch unterschiedliche Empfänger auf dem Markt wo mir einer starke Probleme bereitet. Der Empfänger hat einen anderen Controller verbaut, da hier noch ein Vario-Modul und ein Kreiselsystem integriert ist.
Die Kommunikation mit dem Empfänger läuft normalerweise so, dass der Empfänger 2 Byte sendet und dann eine Antwort erwartet.
Es wird z.B. 128 und 124 vom Empfänger gesendet und dann sende ich die erwarteten Sensor-Daten. Das funktioniert mit allen Empfängern bis auf den GR18. Wenn ich mir hier die Daten anzeigen lasse empfange ich andere Daten (meist 0, 24 , 26). Meine Vermutung ist mittlerweile, dass mein Programm die Daten nicht richtig/zuverlässig liest. Ich nutze Softserial an Port 3.(Arduino Pro Mini)
Jetzt wäre mein Frage, wird auch bei Softserial eine Interrupt-Routine aufgerufen oder wie arbeitet Softserial.
Im Programm sieht das einlesen der Daten so aus

//Deklaration
SoftwareSerial SERIAL_HOTT(HOTTV4_RXTX , HOTTV4_RXTX); //nur 1 Pin für Senden und Empfangen wird umgeschaltet

//Hauptschleife
void GMessage::main_loop(){ 
  
  // STARTING MAIN PROGRAM
  
....
//Durchlauf ca.100ms


  if(SERIAL_HOTT.available() >= 2) {
    uint8_t octet1 = SERIAL_HOTT.read(); 
    uint8_t  octet2 = SERIAL_HOTT.read();

Ich glaube, dass hier das Problem ist. Die Kommunikation läuft mit 19200Baud. Ein Schleifendurchlauf dauert knapp 100ms. Es wird also nur alle 100ms neu eingelesen. Laut Hersteller fragt der Empfänger alles 300ms ab. Ich glaube aber, das es kürzer ist und ich deshalb die Daten nicht zuverlässig erhalte. Wie funktioniert das mit Softserial wenn Daten ankommen während ich mich innerhalb des Programms befinde? Wird im Hintergrund trotzdem eine ISR aufgerufne die die ankommenden Daten in SERIAL_HOTT speichert oder ist es eher glückssache das die Daten kommen wenn ich sie abfrage?
Sollte ich vielleicht besser den Hardware UART nehmen? Ich kann dann aber nicht mehr debuggen, da ich den Pegel auf 3,3V runter ziehen muss.
Jemand eine Idee zu meinem Problem?

Hallo

Ich selbst hatte das Problem auch schon, dass ich per Softwareserial sehr viele unlogische und unmögliche Daten empfangen habe, was sich aber fast vollständig von selbst löste, nachdem ich auf Hardwareserial gewechselt hatte.
Ob ein Reduzieren der Übertragungsgeschwindigkeit bereits hilft, kannst du sicher selbst mit einem Test herausfinden. Ich würde allerdings als erstes einfach mal mit Hardwareserial probieren, um zu schauen ob dann die Fehler noch bestehen oder ob tatsächlich Softwareserial die Probleme verursacht. Zum Debuggen gäbe es sonst sicher noch andere, wenn auch umständlichere Möglichkeiten (blinkende LEDs und sowas z.B.).

19200 ist für Software Serial eher ungeeignet. Nehm einen Wert <= 9600

Ich kann mir leider die Geschwindigkeit nicht aussuchen. Der Empfänger ist ein Kaufteil was ich nicht umprogrammieren kann. Der sendet mit 19200.
Besteht die Möglichkeit den UART umzustellen, dass er über den gleichen Pin sendet um empfängt? Ich habe ja nur eine Bus-Leitung die erst 2 Byte empfängt und danach mit 70Byte antwortet. Wie könnte ich das mit dem hardware serial umsetzen?
An der Zykluszeit liegt es auch nicht. Hab ein Programm mit Zykluszeiten von <20ms und auch da werden die Daten nicht richtig gelesen.