2016-09-19 5 views
1

Приведенный ниже код передает символ по серийному номеру и ждет 8 мс.Точная синхронизация с последовательной записью

import serial 
import time 
from time import sleep 

ser = serial.Serial(
    port='/dev/cu.usbserial-AD01ST7I',\ 
    writeTimeout = 0,\ 
    baudrate=115200,\ 
    parity=serial.PARITY_NONE,\ 
    stopbits=serial.STOPBITS_ONE,\ 
    bytesize=serial.EIGHTBITS,\ 
) 

for z in range(5000): 
    ser.write('C') 
    time.sleep(.008) 

Измерение последовательной активности последовательного порта с областью видимости показывает, что сообщение отправляется каждые ~ 10 мс. Он немного меняется - иногда интервал составляет 8,5 мс.

Oscilloscope measurement

Есть ли способ, чтобы отправить сообщение точно каждые 8ms?

ответ

0

No, если вы не используете RTOS. Существует множество факторов, которые будут влиять на точность:

  • Последовательная буферизация. Вы можете принудительно записать данные немедленно, позвонив по телефону flush
  • Точность таймера, которая отличается от каждой ОС. Иногда в порядке миллисекунд.
  • Планирование ОС, см. https://en.wikipedia.org/wiki/Scheduling_(computing)