Timing im 100usec-Bereich
Verfasst: 16.11.2004 13:14
Hallo,
ich möchte bei einer Ausgabe von Datenstrings an der RS232 eine definierte Pause zwischen den einzelnen Strings einfügen. Dabei ist die Baudrate 38.4kBaud, die Strings sind 9 bis 18 Byte lang, die Pause soll 0.6msec mit einer Toleranz von +/-0.1msec sein. Der Pegel darf sich in dieser Zeit nicht ändern, also kein Startbit.
Bisherige Ansätze:
- Delay funktioniert unter Win98 nur in Schritten von 5msec, unter Win2000 10msec, ist zu lang und zu unzuverlässig.
- zu WM_TIMER habe ich gelesen, dass es niedrige Priorität hat und deshalb im unteren msec-Bereich nicht sicher funktioniert, auch können keine Zeiten unter 1msec gesetzt werden.
- eine While-Wend-Schleife, die mit einer vorher kalibrierten Anzahl Durchläufe pro Zeit abläuft. Scheint sehr von der Systemauslastung abhängig zu sein.
Ideen:
- Einfügen von entsprechenden "leeren" Bytes in den String. Das müsste sehr zuverlässig sein, aber die Startbits stören (Pegelwechsel). Gibt es eine Möglichkeit, die Startbits zu unterdrücken. Zum Beispiel eine RS232 ohne Startbits aufzumachen, und die nötigen Startbits per Software (das wäre dann das erste gesendete Datenbit) zu erzeugen?
- Eine von der Systemauslastung unabhängige Schleife. Die Kalibrierung wäre wohl nicht das Problem.
- Eine WM_TIMER oder Callback-Prozedur, die entsprechend zuverlässig ist.
- Ein extra Threat, der mit exakten Zeiten abläuft. Geht sowas?
- Ein direktes Ansprechen des RS232-Ausganges (TxD) mit softwareseitiger Generierung des Signales. Habe aber keine Ahnung, wie das gehen soll und ob das ein besseres Timing ermöglicht.
Wäre schön, wenn ihr mir sagen könnt, was geht und was man lassen sollte. Und vielleicht, wie es geht, falls schon mal jemand sowas gemacht hat.
Danke, Sven
ich möchte bei einer Ausgabe von Datenstrings an der RS232 eine definierte Pause zwischen den einzelnen Strings einfügen. Dabei ist die Baudrate 38.4kBaud, die Strings sind 9 bis 18 Byte lang, die Pause soll 0.6msec mit einer Toleranz von +/-0.1msec sein. Der Pegel darf sich in dieser Zeit nicht ändern, also kein Startbit.
Bisherige Ansätze:
- Delay funktioniert unter Win98 nur in Schritten von 5msec, unter Win2000 10msec, ist zu lang und zu unzuverlässig.
- zu WM_TIMER habe ich gelesen, dass es niedrige Priorität hat und deshalb im unteren msec-Bereich nicht sicher funktioniert, auch können keine Zeiten unter 1msec gesetzt werden.
- eine While-Wend-Schleife, die mit einer vorher kalibrierten Anzahl Durchläufe pro Zeit abläuft. Scheint sehr von der Systemauslastung abhängig zu sein.
Ideen:
- Einfügen von entsprechenden "leeren" Bytes in den String. Das müsste sehr zuverlässig sein, aber die Startbits stören (Pegelwechsel). Gibt es eine Möglichkeit, die Startbits zu unterdrücken. Zum Beispiel eine RS232 ohne Startbits aufzumachen, und die nötigen Startbits per Software (das wäre dann das erste gesendete Datenbit) zu erzeugen?
- Eine von der Systemauslastung unabhängige Schleife. Die Kalibrierung wäre wohl nicht das Problem.
- Eine WM_TIMER oder Callback-Prozedur, die entsprechend zuverlässig ist.
- Ein extra Threat, der mit exakten Zeiten abläuft. Geht sowas?
- Ein direktes Ansprechen des RS232-Ausganges (TxD) mit softwareseitiger Generierung des Signales. Habe aber keine Ahnung, wie das gehen soll und ob das ein besseres Timing ermöglicht.
Wäre schön, wenn ihr mir sagen könnt, was geht und was man lassen sollte. Und vielleicht, wie es geht, falls schon mal jemand sowas gemacht hat.
Danke, Sven