Hallo,
Ich habe ein Problem mit der Portumschaltung.
Die Portumschaltung schaltet den RS485 Senders zu früh ab, wenn der Tx-Puffer zwischenzeitlich geleer wurde, bevor der Tx-Puffer das letzte Byte aufgenommen hat.
Der Portpin für die Portumschaltung wird beim Aufruf von Ser_Enable(false) unmittelbar zurückgesetzt, obwohl die Übertragung des letzten Bytes noch nicht abgeschlossen ist.
Siehe Bild im Anhang: Man erkennt anhand lila Kurve, dass während der Übertragung des zweiten Bytes die Portumschaltung den RS485-Sender deaktiviert. Man beachte die programmierte Verzögerung um 100us.
Workaround: alle interrupts sperren, deren Ausführungszeiten länger als die Übertragung eines UART bytes dauern könnten. Im Fall Multithreading zusätzlich 'lock' verwenden.
Vielleicht kann man den Mechanismus mit der Portumschaltung noch verbessern?
loop
mDelay(10);
Ser_Enable2(true);
SerOut2($01);
mDelay(1); // (Stellvertretend für eine Unterbrechung durch Multithreading / interrupt)
SerOut2($02);
uDelay(10); //
Ser_Enable2(false);
endloop;
Ich habe ein Problem mit der Portumschaltung.
Die Portumschaltung schaltet den RS485 Senders zu früh ab, wenn der Tx-Puffer zwischenzeitlich geleer wurde, bevor der Tx-Puffer das letzte Byte aufgenommen hat.
Der Portpin für die Portumschaltung wird beim Aufruf von Ser_Enable(false) unmittelbar zurückgesetzt, obwohl die Übertragung des letzten Bytes noch nicht abgeschlossen ist.
Siehe Bild im Anhang: Man erkennt anhand lila Kurve, dass während der Übertragung des zweiten Bytes die Portumschaltung den RS485-Sender deaktiviert. Man beachte die programmierte Verzögerung um 100us.
Workaround: alle interrupts sperren, deren Ausführungszeiten länger als die Übertragung eines UART bytes dauern könnten. Im Fall Multithreading zusätzlich 'lock' verwenden.
Vielleicht kann man den Mechanismus mit der Portumschaltung noch verbessern?
Code
loop
mDelay(10);
Ser_Enable2(true);
SerOut2($01);
mDelay(1); // (Stellvertretend für eine Unterbrechung durch Multithreading / interrupt)
SerOut2($02);
uDelay(10); //
Ser_Enable2(false);
endloop;
Attachments
Filename: | portumschaltung2.PNG |
Filesize: | 28.86 KB |
Title: | portumschaltung |
Download counter: | 149 |