sábado, 3 de marzo de 2012

Etapa de entrada y lectura de tramas

Etapa de entrada:
La especificación oficial MIDI contempla el siguiente esquema para el aislamiento, mediante un optoacoplador. De esta manera, tanto se aisla electricamente, como se evita el problema de la adaptación de niveles de tensión.

Lo hemos implementado con este circuito:
To Be Copied Here

Lectura de datos MIDI
Hemos implementado un pequeño programa para leer los bytes que le llegan por la UART1 (MIDI, a 31250 baudios), y replicarlos por la UART0 (SerialOverUSB, 57600 baudios), los replica como cadenas de caracteres, con 3 bytes por linea, que representan:
  • Byte 1: información de set de instrumentos, código de instrumento, etc.
  • Byte 2: código de nota pulsada.
  • Byte 3: intensidad de nota pulsada (0 corta el sonido de esa nota). 
Para pruebas, hemos probado a hacer sonar un altavoz mediante ondas cuadradas y la orden Tone() de Arduino, el resultado es el siguiente:





Como emisor de datos, hemos puesto a otro Arduino (Duemilanove) a mandar notas MIDI, haciendo una escala ascendente.

La entrada serie del PC:

Sketch

 
/*
  MIDI interface
  
  @author J. Martin, S. Lopez 
 */

int nbyte=0;
long int frequency;
int midi[3];

void setup() {
  // initialize both serial ports:
  Serial.begin(115200);
  Serial1.begin(31250);
}

void loop() {
  
}

void serialEvent1() {
  int inByte = Serial1.read();
  midi[nbyte] = inByte;
  Serial.print(inByte); 
  Serial.print(" ");
  nbyte++;
  
  if (nbyte==3) {
    nbyte=0;
    Serial.println();
    
    frequency = map(midi[1], 0x1E, 0x5A, 55,1760);
    tone(8,frequency);
  }
}


2 comentarios:

  1. muy bien. Hay que incluir explicaciones y c'alculos de los circuitos usados aunque no sean de diseño propio. Hay que documentarale HW de la tarjeta elegida y el entorno de desarrollo (si permite depurar, lenguaje de programación...)

    ResponderEliminar
  2. Sobre el esquema del aislamiento MIDI, es tal cual está publicado, aunque modificaremos y comentaremos el porqué de algunas cosas un poco más en profundidad.

    Publicaremos alguna entrada de introducción a Arduino y PureData.

    ResponderEliminar