MIDI-USB Adapter - Cabo MIDI-USB

MIDI-USB Adapter

Este é um adaptador MIDI-USB. Seu objetivo é possibilitar a conexão de instrumentos musicais com interface MIDI (Musical Instrument Digital Interface) a um microcomputador (ou notebook), através de uma porta USB.

Através desse cabo é possível utilizar um instrumento musical em conjunto com um software sintetizador ou sequenciador instalado no PC (como Sonar, Cubase, Encore, Rosegarden e muitos outros).

É baseado no Microchip PIC18F13K50, que é um microcontrolador de baixíssimo custo e alto desempenho, apresentando interface USB 2.0, USART, PWM, ADC e outros recursos embutidos em seu encapsulamento de 20 pinos.

  • Conexão ao PC via porta USB, através de um cabo A-B convencional;
  • Conexão ao instrumento musical através de cabos com conectores DIN-5 convencionais (padrão da interface MIDI);
  • Alimentação direta pela porta USB, não necessitando de nenhuma fonte de alimentação externa;
  • Firmware implementa uma classe USB-MIDI genérica 2.0, por isso não há a necessidade de instalação de drivers específicos em Sistemas Operacionais mais recentes;
  • Contém LED's indicadores de alimentação (USB-Power) e de atividade (MIDI-IN e MIDI-OUT);
  • Design de hardware simplificado (o microcontrolador, um opto-acoplador e mais alguns componentes apenas);
  • Suporta ICSP (In Circuit Serial Programming) para a gravação do firmware na própria placa, sem necessidade de remover o microcontrolador.

 


Descrição do Hardware:      [Voltar ao Índice]

O hardware deste adaptador foi inspirado na ideia do Projeto Midi-Nator, publicado em 2005 na revista Nuts and Volts. Entretanto, ao invés de utilizar o PIC18F2455 original (de 28 pinos), foi empregado o novo PIC18F13K50, que custa muito menos e tem um encapsulamento de apenas 20 pinos - mais do que suficiente para este projeto.

Abaixo está ilustrado o diagrama esquemático do adaptador MIDI-USB (ele está disponível nos formatos PDF e CadSoft Eagle na seção Downloads do Projeto):

Diagrama Esquemático do Adaptador MIDI-USB

Diagrama Esquemático do Adaptador MIDI-USB

O componente principal do adaptador MIDI-USB é o microcontrolador PIC (U1), que possui interfaces USB 2.0 e USART já embutidas em seu encapsulamento. O cristal X1 (12MHz) garante a frequência de operação da CPU e da interface USB (48MHz internamente).

A USART é usada para fazer comunicação com o instrumento musical, através dos pinos RX (12) e TX (10) do microcontrolador. A saída MIDI-OUT recebe os dados da linha TX, apenas adaptando os níveis de corrente para os exigidos pelo padrão MIDI (através dos resistores R5 e R6), e os envia ao instrumento. Já a entrada MIDI-IN recebe o sinal enviado pelo instrumento através do opto-acoplador (U2), e repassa os dados à linha RX da USART do microcontrolador.

Os conectores J2 e J3 são fêmeas DIN de 5 pinos (usados no padrão MIDI). Eles são os mesmos tipos de conectores usados nas placas-mãe antigas de PC's, para conectar teclados padrão AT. Desta forma, podem ser reaproveitados de velhas placas sucateadas...
Já o conector J1 é um USB tipo B, que permite a conexão de um cabo A-B convencional ao computador.

O conector J4 permite a gravação do microcontrolador PIC através de ICSP, diretamente na placa, sem necessidade de ser removido. Se não desejar usar ICSP, pode omiti-lo.

Quanto à gravação do microcontrolador PIC18F13K50, um alerta se faz necessário:

ATENÇÃO: Os microcontroladores PIC da família 18FxxKxx, possuem os pinos PGD e PGC compartilhando as linhas de D+ e D- do módulo USB. Esse tipo de dispositivo, apesar de operar normalmente com VDD de 5V, possui uma limitação nas linhas PGD e PGC: elas não podem ultrapassar 3,6V, sob pena de danificar o PIC!

Desta forma, se o programador de PIC's operar exclusivamente com 5V, é necessário manter os diodos zener D2 e D3 para utilizar a programação via ICSP, pois eles oferecem a devida proteção ao microcontrolador. Caso o programador suporte gravação de dispositivos a 3,3V (como o PICkit 2, ou o PK2C, que eu utilizei aqui), pode-se omitir a montagem desses diodos.

Além dos componentes citados, foram adicionados 3 LED's: um para indicar a alimentação via porta USB (LED Power - DS1); outro para indicar atividade na saída MIDI-OUT (DS2), conectado ao pino RC6 (PORT C) do microcontrolador; e outro LED para indicar a atividade na entrada MIDI-IN (DS3), conectado ao pino RC7 (também no PORT C) do PIC.

 


Descrição do Firmware:      [Voltar ao Índice]

O firmware do Adaptador MIDI-USB foi implementado em linguagem JALv2 (Just Another Language, version 2), que é uma linguagem muito parecida com Pascal, destinada à programação de microcontroladores Microchip PIC de diversas famílias, incluindo PIC18xx. Além disso, foram usadas as bibliotecas do projeto jallib.

Para simplificar o desenvolvimento, foi utilizado o ambiente descrito no artigo: Ambiente de Desenvolvimento para Microchip PIC, com Eclipse, JAL, e GNU/Linux.

A implementação do firmware do Adaptador MIDI-USB foi estruturada da seguinte maneira:

  • Programa Principal [midiusbadapter.jal]
     
    • Rotinas da Porta Serial (MIDI) [midiserial.jal]
       
    • Rotinas da Porta USB [midiusb.jal]
       
      • Biblioteca da classe USB-MIDI [usb_midi.jal]

 

Programa Principal [midiusbadapter.jal]      [Voltar ao Índice]

Nesse arquivo são definidas as constantes de configuração do PIC (fuses) e o loop principal do programa. O Timer 0 é usado para verificar periodicamente se houve atividade na porta serial (MIDI-IN ou MIDI-OUT), e acionar os LED's correspondentes, por um tempo definido na constante MIDI_LED_DELAY (default: 40ms). Já dentro do loop principal, as rotinas da porta serial e da porta USB são chamadas periodicamente, verificando se há dados a serem recebidos (pela serial ou pela USB), e retransmitindo-os, conforme o caso.

Como essa implementação é um simples USB-MIDI Single Cable Device, os dados recebidos pela porta serial (MIDI-IN) são repassados para a porta USB, e os dados recebidos pela USB são repassados para a porta serial (MIDI-OUT), após um parsing (tratamento dos pacotes recebidos, para compatibilizar os dois padrões).

 

Rotinas da Porta Serial (MIDI) [midiserial.jal]      [Voltar ao Índice]

Aqui há uma implementação de rotinas para receber e transmitir bytes via porta serial (USART) do microcontrolador, baseada na biblioteca serial_hardware da jallib. No caso da interface MIDI, o baudrate usado é de 31,25 kbps.

Nesse arquivo também há a implementação do acionamento dos LED's indicadores de atividade da entrada MIDI-IN e da saída MIDI-OUT.

 

Rotinas da Porta USB [midiusb.jal]       [Voltar ao Índice]

Nesse arquivo há a implementação das rotinas responsáveis por receber e transmitir bytes via porta USB, dentro dos pacotes da classe USB-MIDI. Essas rotinas são baseadas na biblioteca usb_midi.jal, que ainda não é parte integrante da jallib, mas que foi escrita seguindo todas as suas regras de codificação. Desta forma, esta biblioteca poderá ser submetida à comunidade do projeto como contribuição, e futuramente ser incorporada à jallib, se aprovada.

 

Biblioteca da classe USB-MIDI [usb_midi.jal]       [Voltar ao Índice]

Esse arquivo implementa um dispositivo single cable, da classe genérica USB-MIDI (de acordo com as especificações do USB Implementers Forum), com as rotinas responsáveis por receber e transmitir pacotes MIDI via porta USB.

Além disso, dentro dessa implementação, há rotinas de parsing, para transformar os dados recebidos pela interface MIDI em pacotes compatíveis com a classe USB-MIDI, e vice-versa. Essas rotinas são inspiradas no Projeto Midi-Nator.

Esta biblioteca usb_midi.jal não é parte integrante da jallib, mas foi escrita seguindo todas as suas regras de codificação. Desta forma, ela poderá ser submetida à comunidade do projeto como contribuição, e futuramente ser incorporada à jallib, se aprovada.

 


Descrição da Montagem:      [Voltar ao Índice]

Para elaborar a placa de circuito impresso do Adaptador MIDI-USB, foi utilizado o software CADSoft Eagle, e para transferir o layout para a placa, foi usado o método detalhado no artigo: Fabricação de PCB através de Transferência Térmica.

Os arquivos de layout da placa poderão ser encontrados na seção Downloads do projeto.

Placa do Adaptador MIDI-USB

Placa de circuito do Adaptador MIDI-USB.
Note que os diodos D2 e D3 foram omitidos, pois o PK2C suporta programação de PIC's a 3,3V.

Placa do Adaptador MIDI-USB

Placa de circuito do Adaptador MIDI-USB.
Os conectores DIN-5 (J2 e J3) foram reaproveitados de velhas placas-mãe de Pentium I sucateadas.

Placa do Adaptador MIDI-USB

Placa de circuito do Adaptador MIDI-USB.
O cristal X1 foi reaproveitado de um leitor de cartões USB sucateado.

Montagem do Adaptador MIDI-USB

A placa de circuito impresso foi acondicionada em uma caixa plástica Patola PB-201, através de parafusos.

 


Pinagem do Cabo MIDI:       [Voltar ao Índice]

Para interligar o Adaptador MIDI-USB ao instrumento musical, é necessário usar um cabo blindado que contenha um conector DIN-5 macho em cada extremidade.
A pinagem necessária é a seguinte:

Cabo DIN-5
 
Pino
(conector A)
Pino
(conector B)
Descrição
2 2 GND
4 4 Source
5 5 Sink
Parte Externa Parte Externa Malha (Blindagem)

Sendo que o pino 2 (GND) poderá ser interligado à própria malha, sem problemas (para este projeto!).
Desta forma, um cabo blindado estéreo (de 2 vias) poderia ser usado assim:

Pino
(conector A)
Pino
(conector B)
Descrição
4 4 Source
5 5 Sink
2 2 GND / Malha (Blindagem)
Parte Externa Parte Externa

Abaixo está a pinagem do conector DIN 5 pinos:

MIDI Pinout


Downloads do projeto:       [Voltar ao Índice]

Aqui podem ser encontrados todos os downloads relativos a versão corrente do projeto MIDI-USB Adapter (esquema, layout da placa e firmware).

Para salvar ao invés de visualizar os documentos que estão em formato PDF, use o botão direito / "Salvar Link [ou Destino] Como..." e escolha a pasta / diretório onde deseja salvar o arquivo.

Para elaborar a placa de circuito impresso, foi utilizado o software CADSoft Eagle, e para transferir o layout para a placa, foi usado o método detalhado no artigo: Fabricação de PCB através de Transferência Térmica.

Para gravar o firmware no microcontrolador PIC18F13K50, foi utilizado o programador Microchip PIC USB Programmer - PICkit 2 Clone (PK2C).

MIDI-USB Adapter versão 1.0:

ArquivoDescrição
Diagramas Esquemáticos e Layout da PCB (PDF + Eagle) Diagramas Esquemáticos e Placa de Circuito Impresso nos formatos PDF
e CADSoft Eagle (arquivo ZIP, ~395KB).
Firmware (HEX) Firmware em formato HEX, para gravação no PIC (arquivo ZIP, ~5KB).
Firmware (Source) Arquivos fonte do Firmware do Adaptador MIDI-USB, em linguagem JALv2
(arquivo ZIP, ~11KB).
Todos arquivos do Projeto Todos os arquivos do Projeto compactados em um único pacote
(arquivo ZIP, ~410KB)

 


Créditos:      [Voltar ao Índice]

Robson Martins
robson@robsonmartins.com
http://www.robsonmartins.com

Todos os autores e fabricantes aqui citados, com seus devidos créditos.

As marcas citadas podem ser registradas e são propriedade de seus fabricantes / detentores.

O conteúdo deste projeto / site pode ser livremente distribuído, desde que os nomes dos autores sejam mantidos. É proibida a comercialização ou apropriação de qualquer conteúdo aqui descrito.

 


Referências e Bibliografia:      [Voltar ao Índice]

Nuts And Volts. The Midi-Nator Project. 2005.
http://www.nutsvolts.com/index.php?/magazine/article/the_midi_nator

USB Implementers Forum. Universal Serial Bus Device Class Definition for MIDI Devices. 1999.
http://www.usb.org/developers/devclass_docs/midi10.pdf

Wikipedia. Musical Instrument Digital Interface (MIDI).
http://en.wikipedia.org/wiki/MIDI

Microchip Inc. PIC18F13K50 Product Page.
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en533925

CADSoft. CADSoft Eagle Light.
http://www.cadsoftusa.com/download-eagle/freeware/?language=en

Martins, Robson. Fabricação de PCB através de Transferência Térmica.
http://www.robsonmartins.com/eletr/transfterm/

Martins, Robson. Ambiente de Desenvolvimento para Microchip PIC, com Eclipse, JAL, e GNU/Linux.
http://www.robsonmartins.com/inform/linux/eletr/picjal.php

Martins, Robson. Microchip PIC USB Programmer - PICkit 2 Clone (PK2C).
http://www.robsonmartins.com/eletr/pk2c/

Just Another Language v2 (JALv2).
http://www.casadeyork.com/jalv2/

jallib - JAL V2 Libraries
http://code.google.com/p/jallib/

Todos os sites foram visitados em 23/08/2012.

 

Os autores dos projetos não se responsabilizam por danos pessoais ou a equipamentos, provocados por mau uso das informações aqui contidas ou por imperícia dos usuários.

Qualquer projeto que envolva componentes eletrônicos deve ser realizado somente por pessoas capacitadas e conscientes dos riscos de segurança envolvidos e de como preveni-los (como choques elétricos, incêndio, explosões, queimaduras, danos a equipamentos, etc.).

As informações aqui descritas são oferecidas sem nenhuma garantia e nem suporte técnico por parte dos autores e fabricantes citados, e devem ser usadas somente para fins educacionais/didáticos, sem nenhum compromisso com aplicações críticas (suporte de vida, por exemplo).

[Voltar ao Índice]