MIDI: ¿una serie sin reloj con el software TI MSP430 MCU?

2

Planeo hacer una pequeña caja de transporte MIDI (un codificador más 6 botones) pero no tengo mucha experiencia en comunicaciones seriales (he usado registros de desplazamiento pero eso es todo) Me gustaría implementarlo en el software porque el dispositivo que estoy usando no tiene periférico serie. Intenté ver ejemplos de software en la red, pero no encontré nada que aclarara todo. Estoy planeando usar una TI MSP430G2201.

¿Podría alguien ayudarme a entender cómo transmitir datos midi? con algo como pseudo código.

Sé lo que quiero transmitir, esa parte está clara, entiendo cómo funcionan los mensajes MIDI, pero no entiendo cómo configurar el protocolo para midi.

    
pregunta Máté Magyar

2 respuestas

1

Dice que sabe cómo implementar un software UART y que entiende el formato de los mensajes MIDI. Su pregunta sugiere que solo desea transmitir datos MIDI con seis botones, tal vez para transmitir mensajes de cambio de control o de cambio de programa. No existe un protocolo como tal para hacer esto, solo necesita transmitir los bytes de datos en el orden correcto.

La forma más sencilla sería implementar un transmisor de bits UART . Esto tendría que cambiar uno de los pines del puerto IO del procesador. En primer lugar, el pin se baja para que 32us represente el bit de inicio. A continuación, el pin se activa alto o bajo para representar cada uno de los 8 bits de datos en el byte que desea transmitir con el bit menos significativo enviado primero. El pin se conduce al nivel apropiado para 32us para cada bit. Finalmente, el pin es elevado para que a 32 us represente el bit de parada. Es posible que desee ver el artículo de wikipedia en comunicaciones en serie asíncronas .

Por ejemplo, para transmitir un mensaje de cambio de control para configurar "Control de efecto 1" (número de controlador 0C) al valor 7 en el canal 3, deberá transmitir 3 bytes de datos: 0xB3, 0x0C, 0x07 en secuencia.

(Tenga en cuenta que esta técnica de "bit banging" puede no ser adecuada si su procesador va a realizar muchos otros trabajos simultáneamente).

Por supuesto, también necesitará la interfaz opto-aislada estándar recomendada por la Asociación de Fabricantes Midi , que también tiene varios archivos PDF gratuitos útiles que contienen formatos de mensajes, etc.

    
respondido por el MikeJ-UK
0

El bot a UART de hardware y el software "bit banging" logran lo mismo: coloque señales altas y bajas en un pin digital que emana del microcontrolador.

Esa señal no es adecuada para MIDI, ni para RS-232; tiene que estar condicionado para conducir la línea correctamente.

MIDI difiere de RS-232. RS-232 se basa en niveles de voltaje, mientras que MIDI se basa en un bucle de corriente. MIDI se define realmente no en términos de una especificación de corrientes o voltajes, sino mediante un diagrama de circuito de referencia.

Para conducir una línea MIDI, proporciona una fuente de corriente que enciende y apaga un LED dentro de un opto-acoplador en el otro extremo. Cuando no fluye corriente, esto es una marca, o 1. Un cero se indica mediante el suministro de 5 mA de corriente.

Puede generar la corriente desde el lado alto utilizando un circuito de transistor PNP. Un voltaje bajo desde su controlador hasta la base del transistor activará los 5 mA; un nivel alto lo apagará.

Muchos circuitos que puede encontrar en Internet utilizan ingenuamente un transistor NPN, precedido por un inversor lógico, lo cual es completamente tonto porque si aún no tiene inversores en su circuito, necesita un chip completamente nuevo (que generalmente proporciona seis de los inversores).

Si está manejando la comunicación en software, el problema de la inversión es discutible, por supuesto, ya que puede invertir la lógica usted mismo, pero tiene más sentido diseñar un circuito que luego pueda reutilizarse con un UART sin necesidad de un inversor.

La velocidad es de 31.250 kbps. Si lo haces en el software, tienes que usar lazos de tiempo o cualquier técnica que coincida con esta tasa con la mayor precisión posible. Este fue elegido para MIDI porque los relojes de 1Mhz son comunes, y 31.250 kHz es 1 MHz dividido por 32. Las velocidades en baudios en serie como 38400 no son divisores agradables de una frecuencia redonda de MHz. Un reloj de 1Mhz debe escalarse a 24Mhz antes de que sea divisible por 38400.

Al igual que en la comunicación RS-232, cuando no se transmite nada, la línea está en estado 1. Así que en MIDI esto significa que no fluye ninguna corriente. MIDI utiliza el formato 8N1 para encuadrar bytes individuales: un byte se codifica como diez bits: un bit de inicio cuyo valor es 0, 8 bits de datos y el bit de parada cuyo valor es 1. Por lo tanto, se pueden transmitir 3125 bytes por segundo (bit tasa dividida por diez).

En otras palabras, la comunicación de cada byte comienza cuando la corriente se activa para señalar un cero. Luego siguen ocho bits más, que son solo cambios de nivel cronometrados uniformemente desde el inicio del cero inicial. Luego, la línea regresa a 1 para un período de reloj (el bit de parada) antes de otro antes de que se pueda transmitir otro byte. El otro byte se puede transmitir después de una pausa adicional arbitraria, y esa pausa no es un múltiplo de ningún reloj, por lo que esta es una comunicación en serie asíncrona .

    
respondido por el Kaz

Lea otras preguntas en las etiquetas