Showing 1 of 2434 conversations about:
View Full Discussion
Does anyone know what the response time is from one halve to the other, and then to the computer? Just curious.
"Jacob: To deal with the keypress lag we fundamentally changed how the Ergodox halves work.
Jacob: Instead of just having 1 controller, there is now 1 controller in each Ergodox half.
Jacob: This way each Ergodox “node” can do it’s own key detection and debouncing.
Jacob: Then, when the Ergodox node knows a key has been pressed or released, it sends it to the USB connected node.
Jacob: No more polling (constantly asking for updates). The Infinity Ergodox only sends keypress data if it needs to.
Jacob: For those familiar with internet modems of ages past, the new interconnect is running at 4.5 megabaud.
Jacob: I’ve literally clocked it as fast as I can without overclocking the keyboard controllers.
(Under the hood I have error checking and have yet to see any errors)
Jacob: The speed isn’t important for how much data is being sent. It’s important for reducing the latency to the point that the keypress will reach the USB buffer faster than the 1000 Hz that your computer polls the keyboard to see if there are any new keypresses.
Jacob: It’s also possible to send other types of signals through the interconnect, such as changing the LCD backlight.
Andy: So the new ergodox has no perceivable latency it sounds like
Which is excellent
Jacob: I’ve tried to make it lag, haven’t been able to 😛
Andy: That’s what I want to hear"
So, I don't have a true measurement for you, but I can give you some of the numbers, and try to give you the sorta range it functions at.
The interconnect bus is a UART with dedicated Rx/Tx. This means it supports asynchronous interrupts for keypresses (with this, it's already faster than the I2C of the older ergodox even if it was clocked slower).
But, I decided to see how far I could push this bus...
Turns out that I was able to set the bus to max speed (though I haven't tried overclocking this MCU, which has been reported to go all the way up to 168 MHz stable, currently running at the stock 72 MHz). I was able to reliably set (haven't seen any errors) to 4.5 megabaud!
To put into perspective, a typical serial port runs at 115200 baud, which is effectively 11520 bytes/second. This means that the effective data rate is around 450 kB/sec.
Now, that really doesn't sound that impressive in the age of 10G (~1.25 GB/s) USB 3.1. But, there's a fundamental difference here.
UARTs clock each bit, meaning theoretically you can have an interrupt at each pulse. But let's give some overhead and say we have a poll rate of 4 bytes (this is the smallest command size for a single keypress). And that it takes ~10 symbols to transmit a byte. Then with a little bit of math:
4 500 000 baud / (4 bytes * 10 symbols) = 112 500 Hz (112.5 kHz assuming an impossibly saturated bus)
or 1 interrupt every 0.000 0088 seconds (88 us).
If we just want to compare the start point (just like how 1000 Hz USB does it). Then I guess a marketing comparison would be:
USB 2.0 - 1000 Hz
Infinity Ergodox Interconnect - 4 500 000 Hz
And this ladies and gentleman, is how split keyboards can be used for gaming :D