I am using Arduino Uno Rev 3, and according to this link we can achieve 2000000 baud rate.

This problem can be easily repeated by the following code:

void setup() {

void loop() {
  int val = 234;

I am using the serial-USB cable. To read the data, I used Python pyserial (< 20 lines of code including empty lines and import lines):

import serial
import matplotlib.pyplot as plt

LEN = 10000
data = []
ser = serial.Serial('COM3', baudrate=2000000)
for i in range(LEN):

# %% Plot data
plt.figure(figsize=(6, 4))

Here is what I got:

Plot of data

Edit below

Chris mentioned a good point that it might be the high baud rate of 2,000,000 causing the instability. I did think about that when I first ran into this, but then I did a little trick: adding a sinusoid into the constant. If I do that, the weird spiking goes away! I think it indicate that this is not a high baud rate issue... Is it?


void setup() {

void loop() {
  int val = 234;
  val += int(512 * (sin(float(millis()) * 0.01) + 1)) * 0.1;



  • Your link overlooks many potential issues, such as buffer management in the USB converter. Just because the hardware UARTs can both divide a 16 MHz clock by 8, doesn't mean you can actually move bulk data at that rate reliably, or flush it through the USB backhaul before more comes in. Try capturing the actual data received. – Chris Stratton Apr 17 '15 at 3:43
  • Setting a high baud rate isn't necessarily going to move your data any faster anyway - if the bottleneck is elsewhere, it may just make it less reliable. For maximum throughput, look at a Leonardo-style board (or better yet, one of the ARM-based ones) as there, the baud rate is ignored and the USB will simply move the data as fast as the embedded processor can keep up with. – Chris Stratton Apr 17 '15 at 3:51
  • Please merge your two questions of today on this topic by editing all the content into one and deleting the other. – Chris Stratton Apr 17 '15 at 4:51
  • @ChrisStratton I thought about that too, but then if I do a little trick and add a sinusoid into it, it will transfer all right! I will update the OP now to show that. – Shawn Wang Apr 17 '15 at 5:20
  • 3
    You are probably just delaying things with the time consuming calculation, allowing time for something to catch up. Your overall problem is that your baud rate is unreliably high for one or more of the pieces in the chain. – Chris Stratton Apr 17 '15 at 5:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.