Hallo,
ich hab zwar schon das Forum durchsucht, aber irgendwie nix gefunden, was mir helfen könnte.
Folgendes Problem:
Ich habe ein Board mit einem ATMega328 (16MHz), SD, MPU6050 und 2 optogetrennten seriellen Schnittstellen.
Eine ist auf die Hardware Schnittstelle geroutet, die 2. soll/muss per SoftwareSeriell ausgelesen werden.
Beide Schnittstellen haben gleiche Parameter 4800,8N1. (Wobei die 1 auch mit 4800,9N1 betrieben werden können muss, ist aber jetzt hier nicht das Problem.)
Ich mußte dafür die HardwareSerial sowie auch die SoftwareSerial anpassen.
HardwareSerial: Unterstützung für 9X1 und getrennt einstellbare Puffer für Senden und Empfang, RX Buffer overrun, Puffer z.Z. RX 160, TX 8
SoftwareSerial: Nur Änderung der Puffergröße. RX 160
Es werden Datagramme mit max 80 Zeichen empfangen. Jedes ist mit CR LF abgeschlossen.
Die Datagramme sollen dann einfach auf eine SD Karte geschrieben werden. Dazu wird auch noch ein Zeitstempel geschrieben. (Nebenher werden auch noch Gyro und Acc Daten geloggt. Ist aber hier auch nicht das Problem.)
Das ganze Board läuft bereits, allerdings nur solange wie ich nur 1 Schnittstelle benutze. (Egal welche)
Sobald ich die 2 Schnittstelle dazu nehme, kommt es zu einem Buffer overrun und zwar auf beiden Schnittstellen.
Ich hab das ganze Problem auf einen kleinen Sketch eingegrenzt. Im Augenblick versuche ich jeweils einen Puffer leer zu bekommen, bzw. soweit zu leeren, daß ich ein Datagram fertig habe. Danach lese ich die 2. Schnittstelle aus.
Ich hab auch versucht, beide immer komplett zu leeren, (Also nicht Satzweise), oder immer pro Zeichen zu wechseln.
Die besten Ergebnisse (die wenigsten Fehler) habe ich mit dem satzweisen Lesen bekommen. Allerdings ist die Fehlerrate z.Z. noch erschreckend hoch. Teilweise >10%
Die Puffer kann ich nicht weiter erhöhen, weil ich sonst an die RAM Grenze stosse.
Jetzt meine Frage: Mach ich irgendwas falsch? Oder ist das einfach Zuviel für den Prozessor? Stören sich die Interrupts? Oder muss ich auf 2 Hardwareschnittstellen ausweichen. (z.B. mit 'nem 1284P)
HardwareSerial.h (4.79 KB)
HardwareSerial.cpp (15.9 KB)
TwoSerialTest.ino (2.55 KB)