Autor Tema: Conmutacion audio con 16F87  (Leído 6204 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado txema

  • PIC10
  • *
  • Mensajes: 13
Conmutacion audio con 16F87
« en: 27 de Junio de 2007, 17:27:02 »
Llevo poco con los microcontroladores.
Quisiera efectuar la conmutacion de esta manera.
En cada RA un conmutador mecanico.
En las RB los leds de estado.
En cada RC una linea que va al sistema de transistores que permite o no el paso de una señal de audio. Cada RC controla una linea de señal distinta.
Conmuto RA0 y la historia va bien.
Desconmuto RA0 y conmuto RA1 y sigue bien.
EL PROBLEMA.
Conmutar RA0 y despues conmutando RA1 pretendo que se desconmute automaticamente RA0.
¿Hay alguna manera de programarlo?, ¿Es posible? o estoy perdiendo el tiempo.
Gracias





 

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Conmutacion audio con 16F87
« Respuesta #1 en: 27 de Junio de 2007, 17:43:56 »
Hola txema, no hay manera de que se haga de forma automática, tienes que ir conmutando la salida deseada y de-conmutando la salida que necesites.

El pic por si solo no tiene forma de saber cual es la salida que debe desconmutar, por eso mismo tú se lo debes indicar por medio del programa.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado txema

  • PIC10
  • *
  • Mensajes: 13
Re: Conmutacion audio con 16F87
« Respuesta #2 en: 27 de Junio de 2007, 17:48:42 »
Muchas gracias

Desconectado txema

  • PIC10
  • *
  • Mensajes: 13
Re: Conmutacion audio con 16F87
« Respuesta #3 en: 29 de Junio de 2007, 17:24:15 »
Quizá alguien pueda aconsejarme.
¿Hay algun CMOS o algo por el estilo, que active por una salida determinada, LA ULTIMA activacion por una entrada determinada?
¿Es posible hacerlo con un pic?
Gracias


Desconectado om@r

  • PIC12
  • **
  • Mensajes: 86
Re: Conmutacion audio con 16F87
« Respuesta #4 en: 30 de Junio de 2007, 00:10:32 »
HOla mira la data del integrado cd 4016 ,creo que si recuerdo bien es un interruptor analogico-digital.Salu2

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Conmutacion audio con 16F87
« Respuesta #5 en: 30 de Junio de 2007, 11:00:20 »
¿Hay algun CMOS o algo por el estilo, que active por una salida determinada, LA ULTIMA activacion por una entrada determinada?

Hola txema, juro no entender lo que estas queriendo preguntar, el colega om@r te a recomendado un integrado CMOS, el código correcto es el 4066 y efectivamente es un conmutador cuadruple ON/OFF de señales tanto diguitales como analogas, por lo tanto te es util para conmutar audio.

Y sin dudas lo más facil para hacer un comutador de audio con las caracteristicas que deseas es el uso de un PIC en conjunto con algún tipo de circuito como el 4066.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado txema

  • PIC10
  • *
  • Mensajes: 13
Re: Conmutacion audio con 16F87
« Respuesta #6 en: 01 de Julio de 2007, 15:39:08 »
Perdonadme si no me he sabido explicar.
El 4066 (si no estoy equivocado) contiene 4 interruptores internos, que pueden controlar 4 lineas analógicas.
Para mi el 4066 es un hallazgo pues me evita todo el tinglado que tenía en mi diseño con transistores y resistencias. Pero ese no era el problema.
AL ASUNTO.
Tengo 4 interruptores mecanicos. Si pulso el interruptor 1 quiero que active la linea 1 del 4066.
Si pulso el interruptor mecanico 2 que se active la linea 2. Y asi sucesivamente en los 4.
EL MEOLLO.
Ejemplo
Activo el interruptor mecanico 1 (pasa señal por la linea 1).
Activo el interruptor mecanico 2. No quiero que pase la señal por las lineas 1 y 2. Solo quiero que pase la señal de la linea 2 del 4066. Sin haber tocado el interrutor mecanico 1.
Es decir, que solo se active la linea del 4066 correspondiente al ULTIMO interruptor mecanico accionado.
Espero haberme explicado.
De todas maneras, muchas gracias por vuestra paciencia.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Conmutacion audio con 16F87
« Respuesta #7 en: 01 de Julio de 2007, 22:34:28 »
Hola. Pues de la manera que yo lo entiendo es muy facil

Como dice Chaly29 solo lo debes programar y listo

Suponiendo que se activa con un 1 lógico.
El programa debería ser mas o menos así: primero lees RA0, si es 1 chequo si RC1 está a 1 (y demás puertos). Si está a 1 lo desactivo ignorando RA1. Acá se presenta el primer programa ya que software cuando le toque chequear si RA1 se pulso, pues creera que si ya que está a 1 (para solucionarlo tendras que usar pulsadores de NA) por lo tanto cuando le toque leer estará a 0 y no cambiará ningún estado.

Voy devuelta

Leo RA0  ; es 1?
              ; si, entonces chequeo si los demas puertos C estan activados exepto RC0, si estan activados los desactivamos
              ;no, chequeo RA1 y la rutina continua de la misma manera

es obvio que ajustaría los puerto RB correspondiente

Suerte y saludos :-/ :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado txema

  • PIC10
  • *
  • Mensajes: 13
Re: Conmutacion audio con 16F87
« Respuesta #8 en: 02 de Julio de 2007, 12:32:19 »
Con tus indicaciones me pongo manos a la obra.
Informare de como me ha ido el asunto.
Un saludo.
                  Gracias

Desconectado txema

  • PIC10
  • *
  • Mensajes: 13
Re: Conmutacion audio con 16F87
« Respuesta #9 en: 03 de Julio de 2007, 16:41:13 »

Saludos.
Despues de unos cuantos cabezazos, de vuelta a la carga.
No se si sera mucho arroz para un pollo como yo (un guitarrista con el amplificador y equipo de
efectos de construccion o restauracion propia).
Centrando el asunto.
* Tres interruptores NA conectados a RA1, RA2 y RA3 del 16F87. (En este caso necesito que sean
   para accionar con el pie y creo que el interruptor (push button) JS-724A(NA) puede servir.
* Las salidas RB0, RB1, RB2 y RB3 controlando al CMOS 4066 (las cuatro lineas de audio).
* Las salidas RC0, RC1, RC2 y RC3 a los leds de estado (señalando la activacion de cada linea de audio).
* Si acciono un interruptor, sin previamente haber desconmutado nada, debe cumplirse
  la tabla de la verdad del programa.

Antes de comprar los componentes, montarlo y probarlo en el pic school lo someto a vuestro juicio (seguro que mejor que el mio, si es que me queda algo).

Se que hay varios despistados como yo, buscando este artefacto (montado de una u otra forma). Pero los que he visto por internet o bien usan un metodo de conmutacion secuencial o hay que desconmutar el estado anterior.
Haber si conseguimos poner en marcha el prototipo.

Espero ir por el buen camino. Si no, espero vuestro consejo, la colleja y que alguien se anime a
marcar el norte. Aunque quiza solo comprenda los que estan explicadas con manzanas.
 
Y por supuesto y de antemano, gracias por la ayuda que (aunque no os lo parezca) ya me habeis dado.

:--------------------------------------------------------------------------------------
;   CONMUTACION AUDIO
;
;Según el estado de los interruptores RA0, RA1 y RA2, activar y desactivar las RB0-RB7 conectados
;al CMOS 4066, y los RC0-RC7 conectados a los leds, conforme a la siguiente tabla de la verdad:
;
; RA2 RA1 RA0   RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0     RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0
; --    --     --      --    --     --    --       --     --    --    --        --     --     --    --     --    --     --    --
; 0     0      0      0     0      0     0       0      0     0     1        0     0      0    0      0     0     0     1
; 0     0      1      0     0      0     0     0        0    1     0         0     0      0    0      0     0     1     0
; 0     1      0      0     0      0     0     0        1    0     0         0     0      0    0      0     1     0     0
; 1     0      0      0     0      0     0     1        0    0     0         0     0      0    0      1     0     0     0

      List   p=16F87      ;Tipo de procesador
      RADIX   hex      ;se emplea sistema de numeracion hexadecimal
;ZONA DE ETIQUETAS

;PORTA   EQU   0X05
;PORTB   EQU   0X06
;PORTC   EQU   0x07
;TRISA   EQU   0X85
;TRISB   EQU   0X86
;TRISC   EQU   0x87
;STATUS   EQU   0X03
;RP0   EQU   5
;ADCON1   EQU   0x9f

;COMIENZO DEL PROGRAMA

      org   0x00      ;Vector de Reset
      goto   Inicio      ;salta a la etiqueta inicio
      org   0x05      ;Salva el vector de interrupción

Inicio      clrf   0X06      ;Borra los latch de salida.PORTB se carga con b`00000000'
      clrf    0x07      ;Borra los latch de salida.PORTC se carga con b`00000000'
      bsf   0X03,5      ;Selecciona banco 1.Se pone a 1 bit 5 (RP0)del registro status
      clrf   0X86      ;Puerta B se configura como salida
      clrf   0X87      ;Puerta C se configura como salida
      movlw   b'00000110'   ;configura el PORTA como......
      movwf   0x9F      ;.......PORTA E/S digitales      
      movlw   b'00111111'   ;Direcciona las lineas RA0-RA5 como entrada.RA6 y RA7 como salida
      movwf   0X85      ;Puerta A se configura como entrada.cARGA REGISTRO w EN TRISA
      bcf   0X03,5      ;Selecciona banco 0. Pone a 0 el bit 5 (RP0) del registro status         

Loop:      clrwdt         ;Refrescar el WDT
      btfsc   0X05,0      ;Chequea el estado de RA0.Si bit 0 del registro PORTA es 1 se
               ;ejecuta siguiente instruccion.Si bit 0 del registro PORTA es 0
               ;la instruccion que sigue a esta se ignora y se salta
      goto   Estan_a_001   ;Salta a la etiqueta "Estan_a_001"
      btfsc   0X05,1      ;Chequea el estado de RA1.Si bit 1 del registro PORTA es 1 se
               ;ejecuta siguiente instruccion.Si bit 1 del registro PORTA es 0
               ;la instruccion que sigue a esta se ignora y se salta
      goto   Estan_a_010   ;Salta a la etiqueta "ESTAN_A_010"
      btfss   0X05,2      ;Chequea el estado de RA1.Si bit 2 del registro PORTA es 0 se
               ;ejecuta siguiente instruccion.Si bit 2 del registro PORTA es 1
               ;la instruccion que sigue a esta se ignora y se salta
      goto   Estan_a_000   ;Salta a la etiqueta "ESTAN_A_000"
      goto   Estan_a_100

Estan_a_000   movlw   b'00000001'   ;El registro W se carga con valor b`00000001´
      movwf   0X06      ;Carga el valor W en PORTB
      movlw   b'00000001'   ;El registro W se carga con valor b`00000001´
      movwf   0X07      ;Carga el valor W en PORTC      
      goto   Loop      ;Salta a la etiqueta Loop

Estan_a_001   movlw   b'00000010'   ;El registro W se carga con valor b`00000010´
      movwf   0X06      ;Carga el valor W en PORTB
      movlw   b'00000010'   ;El registro W se carga con valor b`00000010´
      movwf   0X07      ;Carga el valor W en PORTC
      goto   Loop      ;Salta a la etiqueta Loop

Estan_a_010   movlw   b'00000100'   ;El registro W se carga con valor b`00000100´
      movwf   0X06      ;Carga el valor W en PORTB
      movlw   b'00000100'   ;El registro W se carga con valor b`00000100´
      movwf   0X07      ;Carga el valor W en PORTC
      goto   Loop      ;Salta a la etiqueta Loop

Estan_a_100   movlw   b'00001000'   ;El registro W se carga con valor b`00001000´
      movwf   0X06      ;Carga el valor W en PORTB
      movlw   b'00001000'   ;El registro W se carga con valor b`00001000´
      movwf   0X07      ;Carga el valor W en PORTC
      goto   Loop      ;Salta a la etiqueta Loop

      end         ;Fin del programa fuente
;--------------------------------------------------------------------------------------------------


Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Conmutacion audio con 16F87
« Respuesta #10 en: 03 de Julio de 2007, 21:26:28 »
Hola. Revisando el programa en forma manual (o sea sin el mplab) no eh notado ningún error, lo que si, se pueden omitir varias lineas que están demás.


a      btfss   0X05,2      ;Chequea el estado de RA1.Si bit 2 del registro PORTA es 0 se
               ;ejecuta siguiente instruccion.Si bit 2 del registro PORTA es 1
               ;la instruccion que sigue a esta se ignora y se salta
b      goto   Estan_a_000   ;Salta a la etiqueta "ESTAN_A_000"
c      goto   Estan_a_100

d  Estan_a_000   movlw   b'00000001'   ;El registro W se carga con valor b`00000001´
e      movwf   0X06      ;Carga el valor W en PORTB
f      movlw   b'00000001'   ;El registro W se carga con valor b`00000001´
g      movwf   0X07      ;Carga el valor W en PORTC     
h      goto   Loop      ;Salta a la etiqueta Loop

Nota: enumeré las lineas con letras para una mejor comprención

deverias corregir la linea "a" por la siguiente instruccion       btfsc    0X05,2

y cambiar la linea "c" al lugar del "b" y en el "c" va desde   movlw b'00000001'

de esta forma ahorro un ciclo de instrucción (es verdad que en este programa carece de importacia, pero es bueno que te acostumbres a tomar todos los detalles para que el día que hagas un programa muy complejo ahorres tiempo y memoria) Cuando hablo de tiempo es el tuyo y el del PIC.




a  Estan_a_001   movlw   b'00000010'   ;El registro W se carga con valor b`00000010´
b      movwf   0X06      ;Carga el valor W en PORTB
c     movlw   b'00000010'   ;El registro W se carga con valor b`00000010´
d      movwf   0X07      ;Carga el valor W en PORTC
e      goto   Loop      ;Salta a la etiqueta Loop


Deberías omitir la linea "c" ya que nunca se ve afectado el registro W.


La razón por lo que no revisé el programa con el mplab es que recien vengo de trabajar y estoy muy cansado. Con tiempo lo reviso. Si lo revisas, comenta los resultados.

Suerte y saludos  :-/ :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado txema

  • PIC10
  • *
  • Mensajes: 13
Re: Conmutacion audio con 16F87
« Respuesta #11 en: 04 de Julio de 2007, 17:30:37 »
Saludos.
Programa corregido.
Ahora a ver si consigo los componentes y monto el prototipo.
Os mantendre informados.
      Gracias

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Conmutacion audio con 16F87
« Respuesta #12 en: 04 de Julio de 2007, 17:56:43 »
Hola a todos !

Sólo un dato más.

Siempre, siempre, será la elección de un único canal o vía ?
No existirá nunca la posibilidad de "mezclar" vías 1 y 2 ó 3 y 4, ó 3 y 1 ?

Si siempre la elección es un canal, no hay necesidad de PIC.

Saludos.
Mario

Desconectado txema

  • PIC10
  • *
  • Mensajes: 13
Re: Conmutacion audio con 16F87
« Respuesta #13 en: 05 de Julio de 2007, 16:19:17 »
Hola
De momento solo un canal.
¿Como es posible realizarlo sin el PIC?.

Aunque si todo evoluciona bien el proyecto deberia evolucionar a controlar 8 canales.
Algunos de un canal y otros con mas de uno.

Todo lo que aportes será bienvenido.

Saludos

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Conmutacion audio con 16F87
« Respuesta #14 en: 05 de Julio de 2007, 20:58:34 »
Hola. De todas maneras para empezar está muy bien que sea de un canal, si lo queres mejorar como dice txema, podes hacerlo que mezcle dos canales. Todo va en la programación. Como te sobran puerto, los podes aprovechar.

Ahora se me ocurren dos formas:

1: Aparte de los pulsadores que tenes, podes agregar uno mas que se puede llamar modo y cumple dos funciones, mezclar canal y seleccionar un solo canal.

En el modo mezclar debería funcionar algo así:
Pulso el canal 1 y selecciono el canal a mezclar, y si pulsamos un canal mas, que lo mezcle y para deseleccionarlo habría que pulsar una vez más el canal activado. Resumiendo pulso una vez, activo; pulso por segunda vez, desactivo.

2: Podes agregar mas pulsadores y que estos trabajen codificado, por ejemplo son 3 pulsadores

001 selecciona por canal (no mezcla)
010 Mezcla el canal 1 con el 2
011 Mezcla el canal 1 con el 3
100 Mezcla el canal 1 con el 4
101 Mezcla el canal 2 con el 3
110 Mezcla el canal 2 con el 4
111 Mezcla el canal 3 con el 4

En este caso, habría que usar interruptores.

Saludos. :-/ :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.