Serial speeds on the Arduino

In the case of having to send lots of data back to a PC, I tested an Arduino UNO (rev 1) for different serial speed setups. I used this simple program on the Arduino to send running counter values and a Processing sketch to read the values and report an error it would receive a value that was out of order. After reading a forum post, I was actually a bit amazed how fast the thing could go using the Atmega8U2 as the USB-serial port. So, I also did the same measurement for an older Arduino Duemilanove which uses the FTDI-chip as the USB-serial port. This was a like the previously mentioned forum post predicted as 230400 was the maximum speed. Also, the Duemilanove’s data rate seemed “jerky” at lower speeds (although the data on the 328’s TX pin seemed to flow evenly).

Arduino Duemilanove

  • 115200 OK
  • 230400 OK
  • 250000 Failed
  • 500000 Errors
  • 1000000 Errors

Arduino UNO (rev 1)

  • 115200 OK
  • 230400 OK
  • 250000 Failed
  • 500000 OK
  • 1000000 OK

It would be interesting to know what limits the Duemilanove’s performance. Wheter it’s in the software or the FTDI interface? The FTDI-chip itself should be capable of even faster speeds than 1Mbit/sec. Go figure.


3 thoughts on “Serial speeds on the Arduino

  1. Hey. Great blog and info – thank you for sharing.
    I have a few quesions I was hoping you could answer – –
    1. It seems like the Nano finds it hard to pass the data at 115,200. Was that your experience too?
    2. Do you fine the i2cdevlib to work better than the FreeImu one?
    3. In the header picture you have your nanao connect to 2 small curcuits. Is this the level shifter between the Nano and the Mpu? What about the resistors (not the LED resistor obvioulsy)

    Thank you very much 🙂

    • Hi. Thanks for commenting 🙂

      1. I didn’t notice any trouble with the nano at 115200. It’s pretty much the same as the Duemilanove. (In general however, serial communication seems to be a bit of a bottle neck, though. I’d like to go even faster and I’ve been trying to figure out how.)

      2. Haven’t actually tried FreeIMU. I propably should at least compare them… FreeIMU seems to use much of the same code. Have you found them to function differently?

      3. Yes, thats a simple level shifter (from Adafruit). I’m shifting the I2C lines. I had the Arduino environment also setup to do I2C at 400kHz instead of the default 100kHz (because I wanted the “communications part” done quickly, giving me more time to do other stuff on the Arduino). Even though this worked, it made the signal look a bit like a “shark fin” instead of a nice square wave. So, I added those resistors as additional pull-up resistors (parallel to the already existing ones) on the high and low voltage sides for the SDA and SCL lines in order to get faster rise times. They’re all 2.2k resistors and they made the signal look better. 2.2k is about the smallest value you can use as the sink current must be kept under 3mA. Taking the parallel resistors (10k on the level shifter and 20k on the Arduino) into account, it’s propably a bit over the limit.

      • Thank you for youe reply.
        Indeed the Nano issue seem to stem from some other thing I can’t seem to locate. Sometimes it’s fluent in 115200, and sometimes I need to lower it to 38400. I actually think it has something to do with java rather than with the board itself.

        FreeIMU is quite the same, but since I’m just taking my first steps into the IMU world, don’t take my word on it 😉

        My (intended) next project involves camera movement control so your blog is a great step into this IMU area – thanks again. I’m in the process of figuring how to accuratly control stepper motor with the angles coming out of the MPU6050.
        I’m also reading TKJ’s blog on impleneting the Kalman filter into the MPU6050 control, and have found this blog ( to be interesting though a bit advanced for me…

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s