Tengo un drummachine (Roland TR505, pero todo esto sería cierto con cualquier otro dispositivo) enviando un byte 11111000
( Timing Clock MIDI message ), 48 veces por segundo, a un puerto MIDI OUT. Funciona bien.
Estoy leyendo la señal MIDI en mi dispositivo electrónico a través del software con las técnicas de lectura clásicas puerto serie (a 31500 baudios, etc., respeté totalmente el estándar MIDI en mi esquema electrónico).
[ROLAND TR505] =====MIDI cable=====> [MY ELECTRONIC DEVICE]
Tengo una situación complicada:
-
Si enciendo mi dispositivo electrónico y dejo que se inicie el software de lectura del puerto serie, y luego enciendo el TR505, funciona : el flujo de los bits que llegan al puerto serie se interpreta correctamente. Funciona perfectamente.
-
Si enciendo el TR505 (es decir, los bits ya fluyen al puerto serie), y entonces enciendo mi dispositivo electrónico, hay un problema : probablemente mi dispositivo comience a leer datos en serie en medio de un byte , es decir, los datos se interpretan incorrectamente.
Pregunta : cuando conecta un dispositivo que ya está encendido, ya envía datos a otro dispositivo que escucha el puerto serie, ¿cómo garantizar que el dispositivo de escucha no se inicie en medio de un byte?
es decir, si el flujo de bits es:
...0111100001111000011110000...
¿Cómo sabrá mi dispositivo que es byte1=11110000
y no byte1=01111000
?
Aquí está el código del software en Python:
import serial
ser = serial.Serial('/dev/ttyAMA0', baudrate=38400) # Note: there's a well known hack in /boot/config.txt to make this work at 31500 baud, which is normally not supported on Raspberry; in short baudrate is not the problem
while True:
data = ord(ser.read(1)) # read a byte