-
-
Erfahrener Benutzer
Roboter-Spezialist
Nochwas zum Knobeln
Wenn man Impulse an der seriellen oder parallelen Schnittstelle ausgibt (also timergesteuert ein Pin ein- und ausschaltet), so kann der eine oder andere Impuls mal länger werden, wenn Windows gerade damit beschäftigt ist, den Screensaver zu aktivieren, die Netzwerkkarte zu aktivieren und und und...
Das kann man eindämmen, wenn man die eigenen Prozesspriorität hochsetzt (z.B.: SetThreadPriority()) und/oder mit Critical Sections arbeitet (InitializeCriticalSection(), LeaveCriticalSection(), ...).
Ein "Restrisiko" bleibt aber immer.
Alternativ gibt es doch noch eine Möglichkeit, exakte, gleichbleibend genaue Impulse zu erzeugen, die NICHT von Windows ab und zu verlängert werden - allerdings ist da ein wenig Hardware erforderlich:
Wenn man den Sende-Puffer der seriellen Schnittstelle groß genug macht und man den immer randvoll lädt, so kommen exakt im Takt der Baudrate die Bytes an TxD raus. Hier ein USART angeschlossen (z.B: HD6402, COM8017, ...) und man hat an jedem der 5 bis 8 Datenpins im Takt der Baudrate eine Änderung.
Stellt man z.B.: folgende Parameter ein:
9600,8P2 (12 Bits gesamt pro 'Byte')
so ergibt das 1,250 ms / gesendeten Byte
d.h.: wenn Du nur das Bit 1 benutzt, und folgende Bytes in den Sende-Puffer schreibst (Bitdarstellung, x ist beliebiges bit):
xxxxxxx0, xxxxxxx1, xxxxxxx1, xxxxxxx0, xxxxxxx1, xxxxxxx1, xxxxxxx0
so erscheint an Bit 1 des UARTS folgende Impulsfolge:
1,25ms Low, 2,5ms High, 1,25ms Low, 2,5ms High, 1,25ms Low
Die übrigen 7 Bit kann man auch noch benutzen.
Mit anderen Baudraten ergeben sich auch andere Zeiten - z.B.: 115200,5N1 ergibt 60.7639 us/Byte. Das ist übrigens die Pulsbreite für das DCC-Format der Modelleisenbahn.
Blackbird
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen