Archivo de la categoría: Seguimiento del Proyecto

Aquí podréis observar la evolución del proyecto a lo largo del tiempo.

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

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

Aclaraciones sobre los bancos de sonidos

Hablando con algunas personas sobre la utilidad de las sf2tools, me he encontrado que hay una dificultad generalizada para comprender qué es un banco de sonido. Así que intentaré explicarlo de la forma más práctica posible: Con ejemplos.

En éste enlace hay un archivo zip con dos tipos de ficheros. Por una parte están los ficheros midi, que son melodías tocadas por varios instrumentos MIDI. Por cada fichero MIDI hay un fichero mp3 que es el resultado de la ejecución de esos mismos ficheros MIDI, pero cambiando algunos instrumentos por las flautas. Esas flautas son las que están definidas en los bancos de sonidos de ejemplo que se han incluído en el paquete sf2tools.

Con esos bancos de sonidos se puede interpretar cualquier melodía con la flauta. Basta con tener el fichero MIDI correspondiente, y configurar de forma adecuada timidity.

¿Me he explicado mejor?  :p

Comprendo que es difícil de comprender para todas aquellas personas que no están familiarizadas con la música y el MIDI.

Deja un comentario

Archivado bajo Información Interesante, Organización, Fuentes y Recursos, Seguimiento del Proyecto

Diseño Conceptual de OpenPipe

He liberado la parte correspondiente al diseño conceptual. Se puede descargar desde aquí.

Deja un comentario

Archivado bajo Seguimiento del Proyecto

¡Código publicado! sf2tools versión 1.0.0

Código binarioHoy es un día memorable. Después de tantos meses de investigación, de búsqueda, de programación, de horas y horas sin dormir, de prácticas atrasadas… es emocionante ver que al final has conseguido cumplir con una buena parte de tus objetivos. Hay que reconocer que es complicado llevar un proyecto de software libre, sobre todo cuando hay tantas obligaciones pendientes. No lo digo únicamente por mí, pues sería completamente egoísta. Me gustaría felicitar a todos los que habéis llegado hasta aquí. Es duro, pero ¡ánimo! La satisfacción es muy grande.

Hasta aquí ha llegado la parte software del proyecto. Tenía pensado subirla al repositorio hace cosa de un mes, pero he preferido retrasar el lanzamiento, y publicar algo que realmente mereciese la pena. Hubo numerosas mejoras, entre ellas una documentación de usuario muy buena, que explica el funcionamiento de las herramientas con bastante detenimiento. Además, se han incluído seis ejemplos que indudablemente ayudarán al usuario en su comprensión.

Os haré un pequeño resumen de lo que he subido:

  • Tres programas para el desarrollo, análisis y creación de bancos de sonidos: sf2maker, sf2info y stereo2mono. Las tres aplicaciones se denominan conjuntamente como sf2tools:
  1. sf2maker es la aplicación más importante, pues es un pequeño compilador capaz de generar un banco de sonidos conforme a las especificaciones de SoundFont a partir de los samples y la información introducida por el usuario.
  2. sf2info es un analizador de la estructura del banco de sonidos en formato XML, así como un extractor de los samples que contiene incrustados en su interior.
  3. stereo2mono es una utilidad para convertir los samples de formato estéreo a formato mono.
  • Código fuente completo de los tres programas en lenguaje de programación C, en flex y en bison. Incluye scripts para facilitar la compilación en Windows y en GNU/Linux.
  • Binarios ya compilados para Windows y para GNU/Linux.
  • Documentación de Usuario: Sobre unas sesenta páginas en formato pdf.
  • Samples pregrabados de tres instrumentos: Flauta Alto, Flauta Soprano y Tin Whistle (flauta irlandesa).
  • Seis scripts para sf2maker listos para probar. Están comentados también en la documentación.
  • Cuatro ficheros midi para escuchar los instrumentos creados (se han incluído los bancos de ejemplo ya compilados para poder probarlos directamente, nada más bajarlos). En la documentación se indica cómo configurar timidity para poder escucharlo (tanto en Windows como en GNU/Linux).

¡Y creo que no se me olvida nada más! Para cualquier comentario, aclaración… como siempre, mediante comentarios, o mediante correo electrónico.
Podéis obtener el paquete vía svn:

svn checkout https://forja.rediris.es/svn/csl-openpipe

O si preferís un fichero comprimido, también lo he empaquetado en un zip y en un tar.gz:

Como se puede ver, no he discriminado a nadie 🙂 También hay versión Windowsera… :p ¡No hay excusa para no probarla! Jejejeje…

PD: Por cierto, licencia GPL. ¡Por supuesto!

3 comentarios

Archivado bajo Personal, Seguimiento del Proyecto

Artículo introductorio a la Tecnología de Sintetizadores

PlumaEl código ya casi está listo para ser publicado. He buscado información sobre cómo licenciar el software que he creado bajo GPL, y me he encontrado con éste enlace que lo explica de una forma bastante sencilla.

El creador de bancos de sonidos funciona bastante bien. Se publicarán los fuentes, además de binarios que funcionarán bajo windows y bajo GNU/Linux. Por otra parte, se incluirá una breve documentación a nivel de usuario, que explicará de una forma sencilla cómo utilizar las herramientas. En caso de que alguien quiera conocer más detalles a bajo nivel, puede preguntarme aquí o en mi dirección de correo.

También se incluirán unos cuantos ejemplos con los que se podrá crear un par de bancos de sonidos sencillos. Mi idea era publicar también unos archivos mp3 en los que se oyese una ejecución de un archivo MIDI con el instrumento que acabamos de crear, y luego realizar yo mismo una grabación de la misma melodía, para que se pudiese apreciar que la calidad es razonablemente buena.

Por todo ello, se retrasará la salida un poco. Pero no os preocupéis, en vista del éxito que ha tenido el anterior artículo, he escrito otro que os podéis descargar aquí. Se comentan las cosas básicas que es preciso conocer para luego poder utilizar la herramienta correctamente.

Por otra parte, me gustaría agradecer todo el apoyo que he recibido, tanto en forma de comentarios como en forma de correos electrónicos que he recibido en éstas semanas. Tendré en cuenta todas vuestras ideas, y perdonadme si no os respondo en poco tiempo. La verdad es que no es una cosa sencilla encontrar tiempo libre cuando los estudios te tienen tan “atado”.

¡Un saludo a todos!

Deja un comentario

Archivado bajo Información Interesante, Seguimiento del Proyecto