Hi! This is just something I'm playing around with, but I thought you guys might be interested. Basically, I'm working on direct control of Dynamixel servos (I'm working with AX-12As, 18As, and XL-320s) from an Arduino Uno using a single digital pin per set of servos, with absolutely no additional hardware/chips/anything. Right now I've got reliable back-and-forth communications with a single AX-12A at 1,000,000bps. Note that this does not use the single available hardware UART, so you can run it while connected to a host computer. I'm implementing this having previously controlled the servos from a Mega 2560 with custom Dynamixel libraries, where I was using the bonus hardware UARTs with an external buffer to drive AX-12s and XL-320s simultaneously: the idea here is to duplicate that functionality with an even simpler (and cheaper) set up.

This is essentially just a specialised implementation of software serial, with the send/receive code written in inline avr-gcc assembly and tuned to run at precisely 1mbps. This speed turns out to be a sweet-spot for the technique: at 16MHz there are 16 clock cycles to play with for each pin read/write, which is just enough to get the job done without wasting too much time waiting for pulses to arrive. This is all possible because the Dynamixel protocols don't allow the servos to fire off packets without a request being sent first, so there's no need to be watching for input at all times.

Anyway here's a shot of a ping working. Channel 0 is obviously the serial line, you can see the outbound ping instruction followed shortly by the response. Triggering the send to having the response in a buffer takes around 0.2ms (dependent on how the servos are configured), with interrupts being blocked for a chunk of that (and much longer the receive falls through to a timeout). Channel 1 is just another pin I'm using for debug/analysis