绘制更高频率的正弦波

时间:2014-08-04 09:28:29

标签: python-2.7 matplotlib msp430

我正在从uart向pc发送串行数据并尝试绘制从函数发生器通过MSP430F5438A的ADC12发送的正弦波(使用Python )。 我可以将波形绘制为较低的采样频率(<120Hz),但是当我增加采样频率时,数字会连接,即如果通过uart发送两个值2563,2879,则python将它们读为25632879.因此,我不是能够绘制图表,因为值不正确。 我发送它们之间没有新行的值,如果我发送新行,那么值没有正确读取 - python读取它们之间的空间所以然后再次我得到另一个错误:无法将字符串转换为浮点数。 我尝试了data = ser.readline()但没有运气 我附上下面的代码。请看看是否可以采取任何措施来解决这个问题。

import sys
import serial
import numpy as np
import matplotlib.pyplot as plt
from collections import deque

port = "COM11"
baud = 9600
timeout=1

ser = serial.Serial()
ser.port = port
ser.baudrate = baud
ser.timeout = timeout


a1 = deque([0.0]*100)
#ax = plt.axes(xlim=(0, 100), ylim=(0, 1000))



line, = plt.plot(a1)
plt.ion()
plt.ylim([0,1000])

try:
  ser.open()
except:
  sys.stderr.write("Error opening serial port %s\n" % (ser.portstr) )
  sys.exit(1)

#ser.setRtsCts(0)

while 1:
     # Read from serial port, blocking
     data = ser.read(1)

     # If there is more than 1 byte, read the rest
     n = ser.inWaiting()
     data = data + ser.read(n)
     #sys.stdout.write(data)
     print(a1)

     a1.appendleft((data))
     datatoplot = a1.pop()
     line.set_ydata(a1)
     plt.draw()

由于

1 个答案:

答案 0 :(得分:0)

我可以想到两种可靠的方法:

  • 使用分隔符。您只需要正确解析值:

    line = serial.readline()
    reading = int(line)
    
  • 如果您不想使用分隔符,请从msp发送格式化的读数:

    uint8_t buffer[5];
    snprintf(buffer, 4, "%04d", reading);
    uart_print(buffer);
    

    这样你总是每次读取4个字符,所以你可以在python代码中这样做:

    line = serial.read(4)
    reading = int(line)
    

但我仍然会选择第一种选择。