El Esquema (digital)Ahora que ya tenemos programador y software de desarrollo, vamos a darle una miradita al esquema. De momento no voy a publicar un esquema completo del engendro porque no lo tengo y no tengo en mente hacerlo en los proximos dias, asi que voy a explicar cada parte del circuito por separado
Soporte para el PICNecesitamos alimentar el PIC con 5v, lo cual conseguiremos con un regulador 7805.

A su vez, necesitamos un cristal de 4Mhz o una red RC. Yo me he decidido por la RC, es decir un Condensador y una resistencia.
(Cuando tenga tiempo dibujo un esquemita....)
Entradas/salidasEl PIC16F84A tiene 8+5 pines de entrada/salida, y cada uno de ellos puede ser configurado como entrada o salida, o incluso cambiar dentro del programa esta configuracion. Estos pines estan divididos en 2 puertos, el puerto A con 5 pines (RA0-RA4) y el puerto B con 8 pines (RB0-RB7).
Las salidas para los relesVamos a utilizar RB0-RB5 para activar los 6 reles de los 6 loops. El PIC no va a entregar suficiente potencia como para activar los reles, asi que vamos a necesitar un driver que lo haga. Basicamente necesitamos para cada slida: el rele, un transistor NPN (yo he utilizado un 2N5089 porque tengo una bolsa llena, pero podeis probar con otros), una resistencia de 10k y un diodo de proteccion para la bobina del rele.
A esto hay que añadir un LED y una resistencia limitadora de 220 Ohm para indicar que el loop esta activado.

Hilando fino, probablemente seria mejor alimentar el LED tambien a traves del transistor y ponerle una resistencia mayor, pero me di cuenta cuando ya lo tenia montado y no voy a cambiarlo.
En cuanto al diodo me parece que puede ser de cualquier tipo, yo le puse el primero que encontre el un cajon. Lo unico que hace es protejer de las fluctuaciones que pueden venir de la bobina del rele.
El pulsador de EDITExplico este primero porque es mas sencillito. Este boton va conectado al RA4. Basicamente le ponemos un pulsador normalmente abierto, que cuando se cierra conecta RA4 a 5v.
Ademas, para asegurar que cuando no pulsamos nada RA4 quede a 0v, le añadimos una resistencia a tierra (pull down). Sino, quedaria "flotando", con resultados imprevisibles.

Si vais a hacer inventillos, tened en cuenta que RA4 es diferente al resto de RAs cuando trabaja como salida. Nunca entrega un 1 logico, solo entrega un 0 o una salida "flotando". (Mirad el datasheet del PIC para mas info). Digo esto porque me trajo de cabeza un tiempo y al fin lo di por inutil y por eso decidi utilizar RA4 para este boton.
Los otros pulsadoresBien, el resto de pulsadores son:
RA0-RA3 - Presets del 1 al 4 (los botones que pulsaremos para cambiar el preset)
RB6-RB7 - Pulsadores BANKUP y BANKDOWN para subir y bajar el banco.
La gracia de estos pins esta en que trabajan a la vez como salida y como entrada. Me explico:
A estas alturas nos hemos quedado sin pins de I/O en el PIC, pero todavia necesitamos algunos LEDs mas. Hay soluciones mas elaboradas para conseguir mas salidas, como por ejemplo un driver serie de datos, etc.... pero decidi utilizar una caracteristica del PIC: un mismo pin puede trabajar como entrada o como salida segun se configure durante el programa. Asi puedo configurar el pin como salida para iluminar un LED, y solo en el momento de leer el pulsador configurarlo como entrada. El LED se apagara un momento, pero como todo pasa bastante rapido, no se nota, simplemente brilla un poco menos.
Para conseguir esto necesitamos tambien que lo que conectemos al pin sea compatible con los 2 modos de trabajo, entrada y salida.
Vamos con el esquema:

Como podeis ver, tenemos un LED y una resistencia igualitos que en las salidas a reles. He añadido una resistencia de 68k a tierra para garantizar un 0 logico cuando trabaja como entrada y no pulsamos nada. El pulsador pone 5v cuando lo activamos, pero tiene una resistencia de 39k añadida para evitar problemas si pulsamos cuando el pin esta configurado como salida y con un 0 logico. Si no ponemos esta resistencia, al tener la salida a 0 (LED apagado) y pulsar el boton, estariamos cortocircuitando los 5v a tierra a traves del PIC.
Los valores de 39k y 68k los he determinado "a boleo" a base de probar, o sea que posiblemente otros valores puedan funcionar (5k + 10k??).
Cuando el pin esta configurado como salida, el LED se enciende con un 1 y se apaga con un 0. Si mientras esta como salida pulsamos el boton, puede que el LED se encienda (no lo he comprobado)
Cuando el pin esta configurado como entrada y el pulsador en reposo, tenemos 0v en el pin (o logico) y el LED apagado. Si pulsamos, tendremos algo menos de 5v en el pin (tenemos un divisor de tension), pero sera suficiente para dar el 1 logico al PIC, y para que el LED se encienda.
Los 6 LEDs que obtenemos asi, los utilizaremos para:
RA0-RA4 - Indicador de PRESET
RB6- Indicador de EDIT. Se enciende cuando estamos editando un PRESET
RB7- Indicador de BANK. Parpadea n veces, dependiendo del banco en el que estamos.
Solo nos quedara implementar una logica compatible con este setup en el software.
Un comentario adicional. Es posible que se pueda suprimir algunas resistencias si se utiliza la caracteristica "weak pull up" del PIC, pero representaria cambiar completamente la asignacion de pines y el programa, y ahora mismo no tengo ganas de empezar de cero, asi que lo dejo para futuras versiones.
Con esto ya he descrito todos los elementos que van conectados al PIC (la parte digital), queda por definir como va a ser la parte analogica, es decir por donde va a pasar la señal de audio. Lo dejo para el proximo capitulo....
Potul