PIC 18F4550 conversor AD para 8 canales

 

- página modificada en septiembre del 2011 - (English version)
 

 

Descripción general

El proyecto nuevo de captar audio y transformar los eventos en información de datos digitales es el sucesor del proyecto PAD to MIDI, que he realizado ya hace algunos años con un PIC16F877. El programa del PIC16F877 estaba escrito en código ASM (ufff …), pero funciona (todavía) súper rápido.

El código actual para el 18F4550 está hecho en C (BoostC) y se puede descargar con todo lo demás (diagramas, descripción) abajo de esta página.

En comparación del código para el 16F877 la simplificación del programa en C para el proyecto nuevo con el PIC184550 es profundo. Mientras en el proyecto el PIC16F877 lee 8 entradas analógicas y los transforma directamente en un protocolo de MIDI, en el proyecto nuevo el PIC18F4550 solo tiene la función de leer los señales de 8 entradas analógicas y enviarlas por el USART a un MAX232 (level shifter) que está conectada por cable al RS232 del ordenador. Con un simple adaptador , RS232/USB se puede conectar el PIC directo al USB del ordenador o se puede realizar un conversor de USRAT a USB con un FT232. See Link.

Principalmente he elegido el PIC18F4550 por su habilidad de tener registros capaces de programar un puerto USB en el PIC mismo. Todavía no lo he aprovechado de este habilidad del PIC.

Estoy utilizando Pure Data para manipular los datos enviados por el PIC. Incluido en ZIP que se puede bajar abajo de la página hay un patch de Pure Data. El Pd da mucha versatilidad en interpretar los datos entrantes. Les puedo transformar en datos de MIDI o OSC para manipular programas de audio o vídeo (Resolume por ejemplo) o enviarlos por el objeto [netsend] co destino a otros ordenadores .

Con tablas [tablewrite], [tableread] los datos entrantes se convierten en notas agudas, luz brillante o todo al revés.

Por supuesto sabiendo programar en Prozessing o SuperCollider se obtiene los mismos resultados.

El programa del PIC es súper rápido.

El patch de Pd permite realizar algunas cambios en la configuración del PIC18F4550, enviando comandos a través del objeto [comport]. Con un simple programa de eventos MIDI (MIDI_OX por ejemplo) se consuige “clusters” hasta 50 notas utilizando [makenote] en Pd. Eso es una “tormenta” de notas impresiónate. (cea Pure Data patch abajo)

 
Diagrama de bloque de los circuitos
El diagrama de bloque arriba muestra el conjunto de los circuitos de un canal. Por supuesto el PIC184550 y el “level shifter” con el MAX232 hay solo uno de cada.

 

Los amplificadores diferenciales de las entradas
esquema Pad_trigger_HC14

El LF356 es un CI tipo JFET fácil de conseguir y bien de precio. Para amplificar eléctrico con un rango de frecuencia entre 100Hz y 6Khz absolutamente La configuración del circuito es hecho con una ganancia de 4,7 (G = Rf/ micrófono condensador o, como hago habitualmente, con un circuito buffer (FET preamp), el circuito tiene conectado a través de la resistencia la alimentación (+15V) y actúa de manera alimentación phantom.

 
16 enchufes tipo canon con 8 amplificadores diferenciales. Con solo simples piezo eléctricos el sonido es muy bueno.
 
Los seguidores de envolvente
esquema Pad_trigger_HC14

El diagrama original del seguidor de envolvente es de aquí. He añadido un potentiometer (R20) para ajustar el voltaje en la salida (pin 7) del LM324. IC3C aprovecho para meter una LED (LED1) indicando los eventos entrantes visualmente. El indicador se podría realizar bastante mas sencillo (con una resistencia de 1K y una LED conectando al pin 8 del IC3C).
En conjunto con el preamplificador diferencial de arriba mantengo resultados buenos. En meter una resistencia de 100 ohm y diodo Zener de 5,1V en la salida del IC3B se protege la(s) entrada(s) del PIC18F4550. (lo recomendó por la alta alimentación de +15V -15V del circuito).
El sistema tiene 8 unidades que son diseñado con enchufes para conectarlas con comodidad en una placa base. (vea foto)

 
 

Las placas están enchufadas en una placa “base”.
Los enchufes, por ser muy antiguos los he conseguido sin pagar.

Seguidor de envolventes con componentes SMD

 

 
La placa del PIC184550
esquema Pad_trigger_HC14

Para tener una placa flexible he añadida algunos conectores demás. Se puede conectar un módulo xBee al RX & TX del 18F4550 y un LCD al I2C bus del PIC. Lo que hace falta para el funcionamiento el enchufe J6 para los señales entrantes , el J1 que es el conector para programar el PIC y al mejor, los 3 LEDs para tener algún control visual. Para programar el PIC utilizo un “clone” del ICD2 de Microchip.

Unidad abierto (tipo Rack estándar) con 8 preamplificadores de audio, 8 seguidores de envolventes, 8 salidas de audio & un filtro de alimentación.

 

Extracto de código del 18F4550

Cristal externo de 20MHz.
// init function for RX/TX
void init_TX_RX()
{
char dump; // aux Var to empty RX_buffer
rcsta = 10000000b; // set SPEN bit,serial port enabled & CREN disabled.
txsta = 00100100b; // TXEN enabled, BRGH = 1, TX9 8-bit, Async mode.
baudcon = 010001000b; // BRG16 = 1 (010001000).
spbrg = 42; // 42 for 116,279Kbaud)
dump = rcreg; // empty RX_buffer.
dump = rcreg; // empty RX_buffer.
}
//La función de un canal (canal 3) para enviar los datos mediante el USART del PIC.
//Solo si las condiciones de la primera línea están evaluado en verdad (true) la función envía los datos al USART.
if ((!test_bit (on_off,3)) && (Vel_3 >= TH_3) || (Vel_3 >= aux_3 + TH_3))
{
del_3 = del_3 + 1;
if (del_3 >= del_On_3) // short delay to adjust the envelpoe knee at the beginning.
{
set_bit (portc,1); // white_LED on.
aux_3 = Vel_3; // aux_3 used to re-trigger Note. if value is higher than Vel_3.
set_bit (upper_3,4); // select Ch_3: 10000b = 16.
init = 0x00; // init byte, sets in Pure Data the gate_object.
txreg = init; // 1st byte =0x00 initialize Pure Data.
while(!trmt);
txreg = upper_3;
while(!trmt);
txreg = lower_3;
set_bit (on_off,3); // indicates that data is sent.
del_3 = 0;
clear_bit (portc,1); // white_LED off.
Vel_3 = 0x00;
return;
}

Uff … pero no es tan complicado …

La rutina arriba demuestra el envío de los datos de 10bits del canal 3. El envío esta realizada con tres bytes: El byte de inicio (init), siempre 0x00 y los bytes “upper_3” y “lower_3”. Los 6 bits no ocupados por los 10bits de la conversión analógica/digital se utiliza para direccionar el envío. Así, en el ejemplo de arriba, el “set_bit (upper_3, 4)” nos da la dirección para que Pure Data (o Prozessing) puede distinguir del canal.
Para indicar en cuando un evento se termina se envío un cuarto byte (cuando la entrada analógica del PIC18F4550 esta a 0 voltios) con una dirección terminante asignada al canal.
En este manera evitamos de que el PIC envía permanente datos en cuando el puerto analógica tiene más de 0 voltios. El efecto es simular de un teclado Midi: apretando una tecla se envía la Nota correspondiente (Midi Note On) y cuando la misma tecla esta suelta se envía un mensaje (Midi Note Off).

16 enchufes tipo canon con 8 amplificadores diferenciales. Con solo simples piezo eléctricos el sonido es muy bueno. La placa tiene incorporado un zócalo para un módulo xBee.
Todo el conjunto montado en un “Rack” para facilitar el transporte.
 
 
 
level shifter
La pequeña placa que transforma los datos del USART del PIC18F4550 a un formato RS232 esta realizado con un MAX232.
La placa con un MAX232 he reutilizado solo por tener la ya hecho.
Es mejor utilizar el diseño electrónico con un CI FT232RL que se encuentra: FT232RL
 
esquema Pad_trigger_HC14
esquema Pad_trigger_HC14

 

 

audio preamplifier

Un diagrama súper sencillo. El “gain” se ajusta con el potenciómetro de 10K entre 2,7 mínimum 57, que esta conectado a la entrada del IC2 (pin2) El LED 1 indica los eventos de la entrada.

esquema Pad_trigger_HC14

 

 

Pure Data patch

Con el programa de Pd se puede configurar varios parametros del 18F4550.
Ajustable son
TH: voltaje mínimo para que se envían eventos.
NoteOff: El voltaje que genera un byte OFF (final de la sequencia)
On delay: después de cuantos ciclos un evento es enviado
MIDI ON/OFF: no activado

 

links relacionadas con esta página abriendo una segunda ventana. (solo IE)

 

 

 

descargar el proyecto entero sobre GSR