2 votos

MIDI - serie sin reloj con software TI MSP430 MCU?

Estoy planeando 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 software porque el dispositivo que estoy usando no tiene periférico serial. He intentado buscar ejemplos de software en la red, pero no he encontrado nada que lo aclare todo. Estoy planeando usar un TI MSP430G2201.

¿Podría alguien ayudarme a entender cómo transmitir datos midi? con algo parecido a un pseudocó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.

1voto

Julien Puntos 627

Dices que sabes implementar una UART por software y que entiendes el formato de los mensajes MIDI. Tu pregunta sugiere que sólo quieres transmitir datos MIDI usando seis botones - quizás para transmitir mensajes de cambio de control o de programa. No hay un protocolo como tal para hacer esto, sólo necesitas transmitir los bytes de datos en el orden correcto.

La forma más sencilla sería implementar un golpeteo de bits Transmisor UART. Esto necesitaría conmutar uno de los pines del puerto IO del procesador. En primer lugar, el pin es conducido a nivel bajo durante 32us para representar el bit de inicio. A continuación, el pin se pone a nivel alto o bajo para representar cada uno de los 8 bits de datos del byte que se desea transmitir, enviando primero el bit menos significativo. El pin es conducido al nivel apropiado durante 32us para cada bit. Por último, el pin es conducido a nivel alto durante 32us para representar el bit de parada. Quizás quieras ver el artículo de wikipedia sobre comunicaciones seriales asíncronas .

Por ejemplo, para transmitir un mensaje de cambio de control para ajustar el "Control de Efecto 1" (número de controlador 0C) al valor 7 en el canal 3, necesitarías transmitir 3 bytes de datos - 0xB3, 0x0C, 0x07 en secuencia.

(Ten en cuenta que esta técnica de "golpeo de bits" puede no ser adecuada si tu procesador va a estar realizando muchas otras tareas simultáneamente).

Por supuesto, también necesitará la interfaz estándar optoaislada recomendada por el Asociación de Fabricantes de Midi que también tiene varios pdfs útiles y gratuitos con formatos de mensajes, etc.

0voto

Steve Paulo Puntos 8263

Bot una UART de hardware y el "bit banging" de software logran lo mismo: poner 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 ser acondicionada para conducir la línea correctamente.

MIDI se diferencia de RS-232. RS-232 se basa en niveles de tensión, mientras que MIDI se basa en un bucle de corriente. En realidad, MIDI no se define en términos de una especificación de corrientes o tensiones, sino mediante un diagrama de circuito de referencia.

Para manejar una línea MIDI, se proporciona una fuente de corriente que enciende y apaga un LED dentro de un optoacoplador en el otro extremo. Cuando no fluye corriente, se trata de una marca, o un 1. Un cero se indica con una fuente de corriente de 5 mA.

Puedes alimentar la corriente desde el lado de alta utilizando un circuito de transistores PNP. Un voltaje bajo de su controlador a la base del transistor encenderá los 5 mA; un nivel alto lo apagará.

Muchos de los circuitos que se pueden encontrar en Internet utilizan ingenuamente un transistor NPN, precedido de un inversor lógico, lo cual es una completa tontería porque si no tienes ya inversores en tu circuito, necesitas un chip completamente nuevo (que normalmente proporciona seis de los inversores).

Si estás manejando la comunicación en software, el tema de la inversión es discutible, por supuesto, ya que puedes invertir la lógica tú mismo, pero tiene más sentido diseñar un circuito que pueda ser reutilizado posteriormente con una UART sin necesidad de un inversor.

La tasa es de 31.250 kbps. Si lo haces por software, tienes que utilizar bucles de sincronización o cualquier otra técnica que se ajuste a esta tasa con la mayor precisión posible. Esto fue elegido para MIDI porque los relojes de 1Mhz son comunes, y 31.250 kHz es 1 MHz dividido por 32. Las tasas de baudios en serie, como 38400, no son buenos divisores de una frecuencia redonda de MHz. Un reloj de 1Mhz tiene que ser escalado a 24Mhz antes de ser divisible por 38400.

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

En otras palabras, la comunicación de cada byte comienza cuando la corriente es conducida para señalar un cero. A continuación, le siguen ocho bits más que no son más que cambios de nivel sincronizados uniformemente desde el inicio del cero inicial. A continuación, la línea vuelve a ser 1 durante un periodo de reloj (el bit de parada) antes de que se pueda transmitir otro byte. El otro byte puede transmitirse después de una pausa adicional arbitraria, una pausa que no es un múltiplo de ningún reloj, por lo que se trata de asíncrono comunicación en serie.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X