Archivo de la categoría: Información Interesante

Aquí se comentarán cosas que, a pesar de no ser aplicables directamente al proyecto, tienen una utilidad potencialmente alta.

Armonía Práctica

Código binarioPara todos aquellos que estéis estudiando armonía en el conservatorio (o por libre), comentaros que existe un programa con bastante buena pinta que os puede ayudar a hacer los ejercicios:

Harmony Practice

Un programa apropiado para trabajar y corregir tú mismo tus ejercicios de armonía

Por: Fausto Torre (Italia) y Michel Baron (Canadá)

Página Principal

Descargar la versión 2.01 en Castellano (desde la página oficial)

La licencia del programa no es libre, pero al menos es freeware. Por eso lo incluyo aquí, de todas formas. Destacar que el programa está traducido al castellano por Manuel Alberto Vázquez Diz (de Ourense).

Michel Baron es profesor en el Conservatorio de Música de Québec (Canadá), y tiene una página web muy interesante con apuntes online de armonía, contrapunto y fuga. Dichos apuntes están traducidos al castellano y al gallego.

 

2 comentarios

Archivado bajo Información Interesante, Organización, Fuentes y Recursos

Introducción a los Microcontroladores (II)

Siguiendo con la descripción de la familia LPC900, hoy hablaremos un poco sobre cómo configurar el puerto serie.

¿Qué es un puerto serie? ¿Y una comunicación serie?

Es muy sencillo. Una comunicación serie es una comunicación en la que la información viaja bit a bit, lo que contrasta con el puerto paralelo en el que es posible transmitir varios bits a la vez. Entonces es sencillo comprender que únicamente es necesaria una línea de datos.

Una UART es un circuito integrado utilizado en las comunicaciones serie. Ahora bien, los conectores a utilizar pueden ser bien diversos. Tenemos el RS-232, el DB-9, por poner un par de ejemplos. Si observáis los esquemas, veréis un montón de líneas más, eso es porque algunos protocolos utilizan señales adicionales. De todas formas, lo más habitual es que se utilice un transmisor (un TxD) y un receptor (un RxD). ¡Y masa (Gnd), por supuesto!

Sin embargo, hay ciertas variables en una comunicación serie que es necesario configurar (en ambos extremos):

  • La velocidad: Medida en baudios o bits por segundo.
  • Bit de paridad: Es un bit adicional que se utiliza para prevenir errores en la transmisión, por lo que por cada byte se envían 9 bits. Normalmente ese noveno bit es configurable, y suele ser función de los otros ocho.
  • Bit de parada: Se refiere a la utilización de un bit adicional como separación entre dos bytes consecutivos (bytes que pueden ser de nueve bits, si es que existe bit de paridad).

Por tanto, antes de iniciar una comunicación serie es preciso establecer los anteriores parámetros. Los dos dispositivos participantes, necesariamente, han de estar igualmente configurados; en caso contrario el resultado es impredecible.

Comunicación serie en la familia LPC900

Existen cuatro modos:

  • Modo 0: La información se transmite y recibe por RxD. Se utilizan 8 bits y la velocidad es fija, a 1/16 de la frecuencia del reloj.
  • Modo 1: La información se transmite por TxD y se recibe por RxD, utilizando un bit de inicio (0 lógico), 8 bits de datos y un bit de parada(1 lógico). La velocidad es configurable utilizando el generador de baudios, o bien por overflow del timer 1.
  • Modo 2: La información se transmite por TxD y se recibe por RxD, utilizando un bit de inicio (0 lógico), 8 bits de datos, un noveno configurable (paridad) y un bit de parada. La velocidad es configurable a 1/16 o a 1/32 de la frecuencia del reloj.
  • Modo 3: Es exactamente igual al modo 2, pero con la velocidad configurable por medio del generador de baudios, o por overflow del timer 1.

En cualquiera de los cuatro modos se transmite siempre en LSB (es decir, primero el bit menos significativo).

¿Qué es eso del generador de baudios? ¿Overflow del timer 1?

Cuando la velocidad es variable, la UART necesita saber cada cuánto tiempo tiene que enviar los bits. Normalmente se utiliza un contador que va sumando uno de cada vez y, cuando se desborda (se produce overflow), indica que hay que enviar el siguiente bit (opción del timer 1) .

Overflow significa sobrepasar, en el sentido que una variable numérica toma un valor más alto del que puede almacenar. Cuando estás programando, las variables numéricas pueden contener un valor de entre un rango limitado. Por ejemplo, el tipo int (entero) suele ser de 4 bytes. Si una variable es de tipo byte, los valores permitidos son los del intervalo [0, 255]. Supongamos que en una variable se inicializa a cero, y que empezamos a sumale uno indefinidamente. 0 + 1 = 1, 1 + 1 = 2, 2 + 1 = 3, etc. Llegamos a 254, 254 + 1 = 255, 255 + 1 = … Overflow (o desbordamiento).

La idea de usar un timer para saber cuando enviar el siguiente dato es bien sencilla. El timer tiene un valor inicial configurable, que es el valor que se cargará en el timer cada vez que se produzca overflow. Según el procedimiento que hemos descrito, cuanto más alto sea el valor cargado menor será el tiempo necesario para desbordarlo (suponiendo que le sumamos uno de forma constante).

Ejemplo a: Cargando 240

contador (instante t) = 240

contador (intante (t + 1)) = 241

contador (instante (t + 2)) = 242

contador (instante (t + 15)) = 255

contador (instante (t + 16)) = ¡Overflow! La UART debe mandar el siguiente bit.

(cargar nuevamente 240 en el contador y repetir el proceso hasta que no haya bits para transmitir).

Ejemplo b: Cargando 180

contador (instante t) = 180

contador (instante (t + 1)) = 181

contador (instante (t + 75)) = 255

contador (insante (t + 76)) = ¡Overflow! La UART debe mandar el siguiente bit.

(cargar nuevamente 180 en el contador y repetir el proceso hasta que no haya bits para transmitir).

Pregunta: ¿En qué caso se envían los datos a mayor velocidad? En el caso (a), puesto que cuanto mayor sea el número cargado en el contador, menos se tardará en llegar al overflow, suponiendo que el resto de condiciones son invariantes.

Normalmente existe una fórmula conocida que relaciona el número a cargar en el contador con la velocidad en baudios. Para el caso del micro que nos ocupa, la fórmula es la siguiente:

Número a cargar = (Velocidad del oscilador / Velocidad en baudios) – 16

En donde “Velocidad en baudios” representa la velocidad a la que queremos transmitir los datos. Por ejemplo, para transmitir a 9600 baudios, suponiendo una velocidad de reloj de 7 373 000 Hz (que es a la que trabaja el micro en cuestión), es decir, unos siete MHz, tenemos que:

(7 373 000 / 9600) – 16 = 752= 0x02F0 (hexadecimal)

Obviamente, sólo podemos configurar la velocidad en los modos 1 y 3.

Para terminar, un generador de baudios no es más que un contador dedicado a gobernar la comunicación serie. Si el micro ya incorpora un generador de baudios, puedes utilizar el contador para otras cosas.

Nota: Contador y timer es lo mismo, por si alguien anda despistado :p

1 comentario

Archivado bajo Información Interesante, Seguimiento del Proyecto

Introducción a los Microcontroladores (I)

Hace unos meses me compré la tarjeta MCB900, que me permite programar y trabajar con los micros de la familia P89LPC9XX (en concreto estoy trabajando con el P89LPC935) cuyo fabricante es Phillips:

Partes de la tarjeta MCB900

Os voy a contar un par de cosillas bastante interesantes:

  1. El microcontrolador. Está conectado en el zócalo, listo para ser programado (grabar un programa en su memoria interna) o bien para ejecutar el programa que esté insertado en dicha memoria.
  2. Los jumpers nos permiten configurar la placa para un modo u otro:
    • Por una parte tenemos el jumper AV, que simplemente sirve para indicar que queremos utilizar el potenciómetro que tiene la placa. Si queremos usar el pin 0.3 como entrada / salida, lo más probable es que tengamos que desconectar el jumper.
    • Y por otra parte, tenemos el otro jumper, que nos permite seleccionar entre dos opciones: Reset y Run. Si queremos ejecutar el programa seleccionaremos Run, y si queremos programar el micro seleccionaremos Reset.
  3. La parte inferior de la placa nos permite realizar conectar un circuito digital con cualquiera de los pines del micro: Tenemos tres puertos de 8 bits (Puertos P0, P1 y P2) y un cuarto puerto de 2 bits (Puerto P3). Destacar que, dependiendo del micro, se pueden utilizar varios pines para leer una entrada analógica (en el P89LPC935 se pueden configurar hasta 8 pines como entradas analógicas).
  4. La propia placa incorpora un potenciómetro, que no es más que una resistencia variable que nos permite seleccionar un valor de voltaje entre el rango [0.0, 3.3] voltios. Para utilizar el potenciómetro, es preciso tener configurado el jumper en AV.
  5. La placa también incorpora ocho LED’s que nos permiten conocer en todo momento el estado de cada uno de los pines del puerto 2.
  6. La alimentación de la placa (que ha de ser externa, puesto que el RS232 no incorpora alimentación, al contrario de lo que sucede con el USB) se realiza entre 5 y 9 voltios.
  7. Por último, la placa incorpora un puerto serie (conector DB-9) que cumple varias funcionalidades:
  • Permite conectar la placa a un PC, para descargar un programa en la memoria del micro.
  • Una vez el micro está ejecutando un programa, podemos utilizar el puerto serie para comunicar el micro con otro dispositivo externo (mediante una comunicación serie, por supuesto).

4 comentarios

Archivado bajo Información Interesante, Seguimiento del Proyecto

General MIDI

Como hemos visto anteriormente, el sintetizador nos ofrecía una serie de instrumentos a elegir de los bancos de sonidos. Sin embargo, existía un pequeño problema, bastante sencillo de entender.

Supongamos que creamos un archivo MIDI, una hermosa composición con varios instrumentos, los que vosotros queráis. Cada pista de ese fichero MIDI estaría asociada a un canal, y cada canal estaría asociado en un momento determinado a un instrumento del banco de sonidos. Efectivamente, durante la reproducción de un archivo MIDI, el secuenciador envía un mensaje MIDI especial, que asociaría un instrumento del sintetizador (de toda la gama disponible) a los mensajes que llegasen por un canal concreto.

Siempre que utilizásemos el mismo modelo de sintetizador, no tendríamos el menor problema. Pero como ya habíamos comentado, uno de los puntos interesantes era la modularidad del sistema, por lo que probablemente nos interesaría ejecutar ese fichero con otro secuenciador y con otro sintetizador.

¿Cuál era el inconveniente hasta la llegada de General MIDI? Muy sencillo. Cada fabricante de sintetizadores podían tener los intrumentos en un orden diferente al del resto, lo que provocaba que una composición (en la que nos habíamos esmerado a la hora de escoger los instrumentos) sonase con otros instrumentos completamente distintos. Por ejemplo, el instrumento número cero podía ser un piano en un sintetizador, mientras que en otro podría ser una flauta. O incluso los sonidos de la batería. Nunca se podía saber de antemano cómo sonaría en otros sintetizadores.

General MIDIGeneral MIDI pretendía ser un estándar mínimo en ese aspecto. La idea central era crear una lista de instrumentos que cualquier fabricante podría incluir de forma sencilla en sus sintetizadores (nótese que es un estándar mínimo, lo que deja la posibilidad de incluir instrumentos adicionales).

En otras palabras, el compositor tendría la garantía de que su composición se ejecutaría adecuadamente con los instrumentos deseados, independientemente de la marca del sintetizador usado.

Más información:

http://en.wikipedia.org/wiki/General_MIDI

http://www.midilandia.com/midiland/articulos/art_midiprincipiantes3.htm

4 comentarios

Archivado bajo Información Interesante, Organización, Fuentes y Recursos

Ubuntu Studio 7.04 Feisy Fawn

Estoy siguiendo con especial interés el lanzamiento de la distro “Ubuntu Studio”, que es una Ubuntu orientada a la edición multimedia, tanto para audio como para video. Seguramente podrá instalarse como un paquete desde una Ubuntu normal (o cualquier derivada de Ubuntu), pero todavía no os puedo dar más detalles.

Comentaros a partir de ahora que, además de ser un blog orientado al proyecto OpenPipe, también se incluirán posts relacionados con música y software libre 🙂

Deja un comentario

Archivado bajo Información Interesante

Confirmada la presentación de OpenPipe en las VII Jornadas sobre Software Libre

Logo GPULDicho y hecho. Aquí se irán mostrando las charlas, junto a una breve descripción, a medida que los participantes vayan confirmando su asistencia (por temas de día y hora). Aquí os dejo un enlace al cartel, que me ha recordado al mítico puzzle ayudante del Office (el que se puede escoger en lugar de clippo :p).

Muchas gracias a GPUL por la oportunidad que me han ofrecido, un año más. Y, sobre todo, a su presidente (Emilio J. Padrón) por su dedicación y paciencia conmigo 🙂

Deja un comentario

Archivado bajo Información Interesante

Sobre los comentarios

Ahora que la cosa está un poco más tranquila, estoy contestando a todos los comentarios y correos que me quedaron pendientes por responder. Si alguien tiene interés en comentar algo que no esté relacionado con el proyecto, pero que esté dentro del tema del MIDI y la música por ordenador, no tengo ningún inconveniente en aportar mi punto de vista.

Es más, me encanta que haya preguntas tan dispares. Eso quiere decir que lo que he escrito en éste blog ha despertado la curiosidad de unas cuantas personas, lo cual es una satisfacción personal muy grande. La idea es que el Software Libre no es sólo Software, sino una gran cantidad de gente que aporta una gran cantidad de cosas en torno a un interés o una necesidad en común.

He recibido varios correos de gente muy entusiasmada por el proyecto. Algunos incluso me han comentado que estaban muy interesados en que les enviase un aparato a casa, ¡todavía no he empezado a construírlo! Pero la cosa va por buen camino. Hace una semana y poco he adquirido una tarjeta MCB9000 para programar una variante del 8051 de Philips, el modelo 89PLC935.

Si no tuviera que hacer cosas de clase, el proyecto evolucionaría mucho más rápido de lo que lo hace. Mis intenciones iniciales fueron muy ambiciosas, pero aún yendo con algo de retraso respecto a lo que tenía previsto, estoy muy contento por haber llegado hasta aquí. Ya se empiezan a ver cosas interesantes, como por ejemplo que es posible crear instrumentos musicales MIDI de forma sencilla, o el esbozo de lo que es el diseño de toda la circuitería.

Como seguramente habrá gente interesada en probarlo, estaba pensando en alguna forma de construír el diseño y mandarlo por correo. Sin embargo, hay algunos problemas que me gustaría solventar:

  • En primer lugar, aunque sea un diseño Open Source, en caso de que la gente quisiera tener un aparato construido para uso personal, los gastos relativos a los materiales, construcción y envío correrían por su cuenta.
  • Aunque haya dinero de por medio, eso no significa que haya interés lucrativo de por medio. Si consiguiese que alguien montase el aparato y lo enviase por correo, creo que sería justo que esa persona que dedica su tiempo a montarlo recibiera una cantidad, en concepto de mano de obra.
  • El problema es que cuando hay tema monetario de por medio, se puede entrar en conflicto con proyectos similares a OpenPipe que, supuestamente, estarían en posesión de algún tipo de patente, puesto que alguien podría afirmar que hay un beneficio personal. Nada más lejos de la realidad, puesto que para implementar el diseño físicamente, es necesario un coste. Y ese coste está asociado a la implementación de un diseño, como si es cualquier otro.

¿Qué opináis? Es un debate interesante.

Deja un comentario

Archivado bajo Información Interesante, Seguimiento del Proyecto