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 .