- Supports generating output pulses of precise length.
- Supports generating output pulses of precise length.
Pins are ordered in a descending order (DOWNTO) and accessed in a packed format,
Pins are ordered in a descending order (DOWNTO) and accessed in a packed format,
e.g. if pins 1 and 4 are selected (0b10010 on the port), the control word has
e.g. if pins 1 and 4 are selected (`0b10010` on the port), the control word has
two bits (4)(1) and e.g. 0b10 means pin 4, 0b11 both. This makes accessing the
two bits `(4)(1)` and e.g. `0b10` means pin 4, `0b11` both. This makes accessing the
block of pins easier, e.g. when using them to drive a parallel bus.
block of pins easier, e.g. when using them to drive a parallel bus.
## Commands
## Commands
### WRITE
### WRITE (0x00)
Write a value to all defined pins.
Write a value to all defined pins.
*Payload:*
*Payload:*
- u16 - new value (packed)
- u16 - new value (packed)
### SET
### SET (0x01)
Set pins high
Set pins high
*Payload:*
*Payload:*
- u16 - pins to set high (packed)
- u16 - pins to set high (packed)
### CLEAR
### CLEAR (0x02)
Set pins low
Set pins low
*Payload:*
*Payload:*
- u16 - pins to set low (packed)
- u16 - pins to set low (packed)
### TOGGLE
### TOGGLE (0x03)
Toggle selected pins (high - low)
Toggle selected pins (high - low)
*Payload:*
*Payload:*
- u16 - pins to toggle (packed)
- u16 - pins to toggle (packed)
### PULSE
### PULSE (0x04)
Send a pulse. The start will be aligned to 1 us or 1 ms (based on pulse length) of the internal timebase to ensure the highest length precision. (This alignment reduces time jitter.)
Send a pulse.
The start will be aligned to 1 us or 1 ms (based on pulse length) of the internal timebase to ensure the highest length precision. This alignment reduces jitter in the pulse duration. A jitter of the pulse start time is less significant, as there's already some unpredictable delay caused by the USB connection and the PC OS scheduler.
*Payload:*
*Payload:*
- u16 - pins to generate the pulse on (packed)
- u16 - pins to generate the pulse on (packed)
@ -44,7 +46,7 @@ Send a pulse. The start will be aligned to 1 us or 1 ms (based on pulse length)
- u8 - range (0 - milliseconds, 1 - microseconds)
- u8 - range (0 - milliseconds, 1 - microseconds)
- u16 - duration in the selected range
- u16 - duration in the selected range
*NOTE:* The microsecond range supports durations only up to 999 (1 ms), higher
*NOTE:* The microsecond range supports durations only up to 999 us, higher
numbers will be divided by 1000 and use the millisecond range instead.
numbers will be divided by 1000 and use the millisecond range instead.