You know, I thought of this, but then figured it was certainly not an
issue at a lower baud rate (but obviously I was thinking about this
completely the wrong way -- it takes longer to transmit at a slower
rate, and so we need to wait longer times). As you can imagine, there
aren't nearly as many people who can afford RX servos as AX servos, so
our RX testing has been a bit less than the AX stuff. I can't say that
we have tested on this lower baud rate, but obviously we have to.
Inside ax12.cpp in your libraries/Bioloid folder, you'll find this
piece of code in SetRX():
#ifdef RX_PROTOCOL
int i;
// Need to wait for last byte to be sent before turning the bus
around.
// Check the Transmit complete flag
while (bit_is_clear(UCSR1A, UDRE1));
for(i=0; i<25; i++)
asm("nop");
PORTD &= 0xEF;
#endif
As you can see, we wait until the last byte has transferred out, then
wait a bit more, then lower the 485's DO enable line. If you increase
that "25" you'll eventually get the checksum byte out there. This is
actually on my list to do more testing with, and find some way to get
rid of the constant -- but I've currently only got 1 DX-117, Andrew
(Tyberius) did most of our testing on his Dragoon RX-64 platform --
but his servos were already set to 1MBPs.
If you bounce it up in a few increments, you should get it working
pretty fast (I'd guess that, at 1/20th the rate, you might try 20*25
as the number, and see if all gets through -- if the value is too
high, you'll miss the 0xff 0xff at the beginning of the return
packet). If you would be so kind as to let us know what value you
eventually settle on as working for 56700, that'd be awesome.
-Fergs