Auto Baud Rate Detection
My question concerns the different ways for the SX to detect serial baud rates and to automatically adjust the timing to recv. correctly.
Google brings this site:
www.iol.ie/~ecarroll/autobaud.html
In this scheme, a known ascii character - [noparse][[/noparse]Return] key - is sent to the micro which initially starts rec'ving at 9600. If the sending baud rate is different then the rec'ving 9600, the rec'vd data is "corrupted" in a known fashion which the code in the micro can distinguish and adjust for, ending up with the correct timing.
Well, I don't have the luxury of sending out a known character to calibrate , so to speak, the rec'ing baud rate of the micro. I'm connecting to devices with unknown data streams at odd baud rates (8800, for example).
I'm thinking of measuring the period of bits first rec'vd , finding the shortest one and assuming that's the period for the correct baud rate. I need to figure out the proper baud rate after rec'ving one byte and respond correctly to continue the handshakes.
Is there any another algorithm for auto baud rate detection I could consider?
Thanks,
Kevin
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Bad spellers of the world untie!
Google brings this site:
www.iol.ie/~ecarroll/autobaud.html
In this scheme, a known ascii character - [noparse][[/noparse]Return] key - is sent to the micro which initially starts rec'ving at 9600. If the sending baud rate is different then the rec'ving 9600, the rec'vd data is "corrupted" in a known fashion which the code in the micro can distinguish and adjust for, ending up with the correct timing.
Well, I don't have the luxury of sending out a known character to calibrate , so to speak, the rec'ing baud rate of the micro. I'm connecting to devices with unknown data streams at odd baud rates (8800, for example).
I'm thinking of measuring the period of bits first rec'vd , finding the shortest one and assuming that's the period for the correct baud rate. I need to figure out the proper baud rate after rec'ving one byte and respond correctly to continue the handshakes.
Is there any another algorithm for auto baud rate detection I could consider?
Thanks,
Kevin
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Bad spellers of the world untie!
Comments
Your suggestion to measure the width of pulses received and assume that these represent received bits, finding the shortest one and using that for determining the Baud, is reasonable, but don't expect any reliability with arbitrary data streams. I don't think you'll find any better algorithm though. The problem is that the first character that comes along may have no single isolated bits and you'll end up with a Baud that's half or a third of the correct Baud. If there's any noise in the datastream, your Baud detection will be thrown off by that.
Basically, you've got a bad situation. There is no good solution, but what you suggest will work some of the time. If you can put in a timeout where the whole system resets if synchronization fails and it starts over from the beginning, you at least will have some chance of achieving communications.
As an aside to dealing with non-standard baud rates, I've found a neat and free terminal program called RealTerm. Works great for diagnosing serial streams.
realterm.sourceforge.net/
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Bad spellers of the world untie!