Hola estimados, primero que todo, disculparme por el título pero la verdad no se me ocurre nada más descriptivo para el problema que tengo.
Bueno a lo nuestro, gracias al material encontrado en este foro sobre este PIC es que me puse a estudiar esto de los microcontroladores para ver si puedo llevar a buen término un proyecto que tengo en mente hace bastante tiempo. Explico lo que tengo hecho y lo que quiero hacer.
Explicación de lo hecho:
Tengo diseñado un switcher pseudoprogramable de 8 canales y 8 loops para mis pedales de guitarra el cual tiene principalmente 3 etapas.
1.- Etapa de control: Mediante un octal latch tipo D hago que sólo un canal esté activo en cada momento, es decir, tengo los 8 switches (uno por canal) al apretar por ejemplo en 1, se activa dicho canal y el array de salidas del latch estaría configurado de la forma [1 0 0 0 0 0 0 0], luego al apretar el switch 3, se desactiva en canal 1 y se activa el canal 3 quedando el array de salidas del latch de la forma [0 0 1 0 0 0 0 0]. La idea es siempre mantener sólo uno de los 8 valores de array de salida en 1 y el resto en 0.
2.- Etapa de configuración: a cada salida del latch tengo conectado un dipswitch de 8 interruptores, en el cual determino que relés se activarán en la siguiente etapa. En otras palabras, acá tengo un array de tamaño 8 que representa la configuración del dipswitch por lo cual un array del tipo [1 0 1 1 1 0 0 0] representa que los interruptores 1, 3, 4 y 5 del dipswitch están cerrados y determinará que los relés 1, 3 , 4 y 5 serán activados mientras que los relés 2, 6, 7 y 8 permanecerán desactivados, puesto que los interruptores 2, 6, 7 y 8 del dipswitch están abiertos.
3.- Etapa de relés: cada salida de cada dipswitch está conectada a la base de un transistor (todos los interruptores N de los 8 dipswitch se unen en el transistor N de esta etapa), por lo cual a los transistores que les llegue señal dejarán pasar corriente del colector al drenador permitiendo que se activen los relés correspondientes.
Básicamente lo que tengo acá es una configuración "estática" de que loop se activará en cada canal, digo "estática" porque estará determinada por cada uno de los dipswitchs.
Explicación de lo que busco hacer:
Remplazar esos dipswitchs por un PIC16F877 (o algún otro, la verdad recién me estoy metiendo en el mundo de los microcotronladores por lo cual no me extrañaría que este microcontrolador este sobredimencionado para lo que busco, pero en fin esa es otra discusión
).
Para esto pretendo programar la lógica de la etapa de control en el PIC de tal manera que éste sea el encargado de mantener sólo un canal activo en cada momento y lógicamente guardar en la memoria no volátil del PIC (no recuerdo el nombre en este momento ayer lo leí pero no lo recuerdo) el array de bits que representará cada dipswitch. Además, teniendo el PIC puedo crear varios bancos de canales, por ejemplo, puedo tener los banco A, B, C y D y cada uno de ellos tener 6 canales (6 switchs), claramente en este punto tengo que agregar 2 switchs más para navegar por los bancos un switch que suba de banco y otro que baje de banco y finalmente, agregar un switch que ponga el sistema en modo edición de tal manera que con los 8 switchs existentes (o con otros da igual) configurar el array que determinará que relés se activarán y luego guardar este array en la memoria.
Hasta acá todo bien, la idea la tengo clara (y espero haberla expuesto clara también
) el tema que me tiene complicado en este momento, es el número de I/Os del 877, porque no tengo las 9 entradas y 8 salidas juntas, por lo cual tendré que hacer un juego de cambio de función de los pines según lo que se desee hacer, por ejemplo, imaginemos que tengo los 9 switchs (los 6 canales, los dos para navegar en los bancos y el que activa el modo de edición) conectados de la siguiente manera:
switch 1 -> RA0
switch 2 -> RA1
switch 3 -> RA2
switch 4 -> RA3
switch 5 -> RB0
switch 6 -> RB1
switch 7 -> RB2
switch 8 -> RB3
switch 9 -> RB4
Y las 8 salidas configuradas para:
salida 1 -> RA0
salida 2 -> RA1
salida 3 -> RA2
salida 4 -> RA3
salida 5 -> RB0
salida 6 -> RB1
salida 7 -> RB2
salida 8 -> RB3
Entonces he pensado hacer los siguientes pasos:
1.- Setear pines en escucha (como entrada).
2.- Al apretar uno de los switches, identificarlo (según la entrada por la que venga) y rescatar el array correspondiente.
3.- Setear pines en escritura (como salidas).
4.- Enviar el array un bit por salida.
5.- Volver al paso 1.
Mi problema acá es que me imagino que al volver a setear los pines en escucha, dejará de llegarle la señal a los transistores de la etapa de relés por lo cual se desactivarán, ¿o me equivoco? De no equivocarme, me dije, bueno pongo el octal latch a la salida del PIC de tal manera que el latch sea el que guarde temporalmente el array salido del PIC, esto hasta que se presione otro interruptor y los datos del latch se sobrescriban.
Hasta acá creo que tengo todo claro y es muy posible hacerlo, incluso me parece que voy bien encaminado, espero que así sea
. Pero ahora se me presenta otra cosa, sería deseable saber en que banco y en que canal estoy en cada momento, por lo cual se podría tener 2 displays de 7 segmentos que me indiquen el banco y el canal en el que estoy (pensé en un LCD pero en verdad es mucho para lo que necesito mostrar). Para este caso la idea es la misma, guardar momentáneamente los arrays en un latch para cada display.
Y es en este punto justamente donde está mi duda,
¿Hay alguna forma de electrónicamente determinar que tipo de salida esta dando el PIC?
Es decir, necesito distinguir las salidas destinadas a cada latch de modo de saber si se trata de una indicación para el display1, para el display2 o para el que determina que relés activar, mi idea es tener siempre conectados los tres latch a las salidas del PIC, poniendo entre medio el posible selector de salidas.
De no ser posible, ¿Hay alguna forma de que electrónicamente separar un string de 8 bits en 8 bits independientes? De ser así, puedo utilizar un puerto de salida para cada cosa (uno para el display1, uno para el display2 y otro para la configuración de los relés) y conectar a cada uno de ellos el supuesto divisor de cadena y luego enviar los bits a las entradas correspondientes del latch.
Finalmente, me gustaría pedirles un consejo, ya que ustedes que de seguro tienen más experiencia que yo en esto, a ver que cambiarían o mejorarían.
Un saludo cordial,
Atte. Metallick
Bueno a lo nuestro, gracias al material encontrado en este foro sobre este PIC es que me puse a estudiar esto de los microcontroladores para ver si puedo llevar a buen término un proyecto que tengo en mente hace bastante tiempo. Explico lo que tengo hecho y lo que quiero hacer.
Explicación de lo hecho:
Tengo diseñado un switcher pseudoprogramable de 8 canales y 8 loops para mis pedales de guitarra el cual tiene principalmente 3 etapas.
1.- Etapa de control: Mediante un octal latch tipo D hago que sólo un canal esté activo en cada momento, es decir, tengo los 8 switches (uno por canal) al apretar por ejemplo en 1, se activa dicho canal y el array de salidas del latch estaría configurado de la forma [1 0 0 0 0 0 0 0], luego al apretar el switch 3, se desactiva en canal 1 y se activa el canal 3 quedando el array de salidas del latch de la forma [0 0 1 0 0 0 0 0]. La idea es siempre mantener sólo uno de los 8 valores de array de salida en 1 y el resto en 0.
2.- Etapa de configuración: a cada salida del latch tengo conectado un dipswitch de 8 interruptores, en el cual determino que relés se activarán en la siguiente etapa. En otras palabras, acá tengo un array de tamaño 8 que representa la configuración del dipswitch por lo cual un array del tipo [1 0 1 1 1 0 0 0] representa que los interruptores 1, 3, 4 y 5 del dipswitch están cerrados y determinará que los relés 1, 3 , 4 y 5 serán activados mientras que los relés 2, 6, 7 y 8 permanecerán desactivados, puesto que los interruptores 2, 6, 7 y 8 del dipswitch están abiertos.
3.- Etapa de relés: cada salida de cada dipswitch está conectada a la base de un transistor (todos los interruptores N de los 8 dipswitch se unen en el transistor N de esta etapa), por lo cual a los transistores que les llegue señal dejarán pasar corriente del colector al drenador permitiendo que se activen los relés correspondientes.
Básicamente lo que tengo acá es una configuración "estática" de que loop se activará en cada canal, digo "estática" porque estará determinada por cada uno de los dipswitchs.
Explicación de lo que busco hacer:
Remplazar esos dipswitchs por un PIC16F877 (o algún otro, la verdad recién me estoy metiendo en el mundo de los microcotronladores por lo cual no me extrañaría que este microcontrolador este sobredimencionado para lo que busco, pero en fin esa es otra discusión
Para esto pretendo programar la lógica de la etapa de control en el PIC de tal manera que éste sea el encargado de mantener sólo un canal activo en cada momento y lógicamente guardar en la memoria no volátil del PIC (no recuerdo el nombre en este momento ayer lo leí pero no lo recuerdo) el array de bits que representará cada dipswitch. Además, teniendo el PIC puedo crear varios bancos de canales, por ejemplo, puedo tener los banco A, B, C y D y cada uno de ellos tener 6 canales (6 switchs), claramente en este punto tengo que agregar 2 switchs más para navegar por los bancos un switch que suba de banco y otro que baje de banco y finalmente, agregar un switch que ponga el sistema en modo edición de tal manera que con los 8 switchs existentes (o con otros da igual) configurar el array que determinará que relés se activarán y luego guardar este array en la memoria.
Hasta acá todo bien, la idea la tengo clara (y espero haberla expuesto clara también
switch 1 -> RA0
switch 2 -> RA1
switch 3 -> RA2
switch 4 -> RA3
switch 5 -> RB0
switch 6 -> RB1
switch 7 -> RB2
switch 8 -> RB3
switch 9 -> RB4
Y las 8 salidas configuradas para:
salida 1 -> RA0
salida 2 -> RA1
salida 3 -> RA2
salida 4 -> RA3
salida 5 -> RB0
salida 6 -> RB1
salida 7 -> RB2
salida 8 -> RB3
Entonces he pensado hacer los siguientes pasos:
1.- Setear pines en escucha (como entrada).
2.- Al apretar uno de los switches, identificarlo (según la entrada por la que venga) y rescatar el array correspondiente.
3.- Setear pines en escritura (como salidas).
4.- Enviar el array un bit por salida.
5.- Volver al paso 1.
Mi problema acá es que me imagino que al volver a setear los pines en escucha, dejará de llegarle la señal a los transistores de la etapa de relés por lo cual se desactivarán, ¿o me equivoco? De no equivocarme, me dije, bueno pongo el octal latch a la salida del PIC de tal manera que el latch sea el que guarde temporalmente el array salido del PIC, esto hasta que se presione otro interruptor y los datos del latch se sobrescriban.
Hasta acá creo que tengo todo claro y es muy posible hacerlo, incluso me parece que voy bien encaminado, espero que así sea
Y es en este punto justamente donde está mi duda,
¿Hay alguna forma de electrónicamente determinar que tipo de salida esta dando el PIC?
Es decir, necesito distinguir las salidas destinadas a cada latch de modo de saber si se trata de una indicación para el display1, para el display2 o para el que determina que relés activar, mi idea es tener siempre conectados los tres latch a las salidas del PIC, poniendo entre medio el posible selector de salidas.
De no ser posible, ¿Hay alguna forma de que electrónicamente separar un string de 8 bits en 8 bits independientes? De ser así, puedo utilizar un puerto de salida para cada cosa (uno para el display1, uno para el display2 y otro para la configuración de los relés) y conectar a cada uno de ellos el supuesto divisor de cadena y luego enviar los bits a las entradas correspondientes del latch.
Finalmente, me gustaría pedirles un consejo, ya que ustedes que de seguro tienen más experiencia que yo en esto, a ver que cambiarían o mejorarían.
Un saludo cordial,
Atte. Metallick