TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: fito20 en 16 de Febrero de 2006, 05:49:00

Título: Mesa de mezclas
Publicado por: fito20 en 16 de Febrero de 2006, 05:49:00
Hola, estoy realizando un proyecto fin de carrera en el que trato de almacenar los valores de ecualizacion de una pista de la mesa de mezclas en un PIC...estos valores seran almacenados y podran ser cargados posteriormente mediante la ayuda de un display...

Para ecualizar uso potenciometros para los graves, medios y agudos...es decir, tres potenciometros...

Tengo unas cuantas preguntas:

1) La señal producida por un microfono es senoidal, como maxima 60mVpp, y la que genera una guitarra 500mVpp tambien como maxima...Introduzco la señal tal cual en el circuito ecualizador o hago un previo?...en caso de hacer el previo hasta que voltaje amplifico la señal?...seria el mismo previo para guitarra y voz?...tened en cuenta que se conectarian a la misma entrada tanto la guitarra como el microfono...

2) Una vez tenga la señal circulando por el circuito de ecualizacion, y haya movido los potenciometros de graves, medios y agudos a mi antojo, se trataria de medir la tension en cada uno de los potenciometros y pasarla al PIC usando el conversor A/D que integra (es un 16F876)...que hago si dicha tension supera los 5V??

3) Como podria hacer que una vez guardado un preset lo cargara en el potenciometro?...necesitaria un conversor D/A adicional no?...

Venga un saludo y muchas gracias por la ayuda Giño
Título: RE: Mesa de mezclas
Publicado por: grouchy en 16 de Febrero de 2006, 09:50:00
Hola tengo una duda, dices que los datos que se obtienen del equalizador los vas almacenar en el PIC????
Título: RE: Mesa de mezclas
Publicado por: fito20 en 16 de Febrero de 2006, 10:21:00
Lo que tengo que memorizar en el PIC son las posiciones de los potenciometros...que supongo que se reducira a almacenar el voltaje que exista entre dos de sus patas no?
Título: RE: Mesa de mezclas
Publicado por: 10f206 en 16 de Febrero de 2006, 11:32:00
No te la compliques comprate una potenciometros digitales fairchild, hay de 1024 posiciones, hace pasar tus señales analogas por ellos, y para programarlos lo haces desde el PIC, es decir pones tus botoncitos arriba y abajo del PIC y le envias pulsitos arriba y abajo al potenciometro desde el PIC, cada vez que hay cambio lo guardas en tu memoria EEPROM, que por cierto no estoy seguro si tu chip la tiene, si no pues le compras una EEPROM I2C, y listo.

Los potenciometros digitales hay en 3 sabores, paralelos, seriales y up/down, el paralelo, le envias la señal por 10 patitas, del grado de resistencia que querras entre 0 y 1024, hay de 16,32,64,256, etc...

Los seriales, la misma vaina, solo que I2C, a 2 patitas, y los up/down suben y bajan, te avisan cuando topan por una 3era patita, e incluso fairchild te los vende con su propia memoria Flash, asi que tal vez ni necesitas el pic, por cierto en estos ultimos solo hay de 16, 32 y 64., valen como $US1.20, y si te pones las pilas los mandas a traer como muestras y te salen gratis =o)

Saludos Cordiales
Título: RE: Mesa de mezclas
Publicado por: fito20 en 16 de Febrero de 2006, 14:03:00
Hola, ante todo muchas gracias por responder porque estoy un poco solo en esto y me encuentro un poco agobiado...

Lo de los potenciometros digitales no lo sabia...me vienen muy bien, asi que mañana mismo compro tres (graves, agudos y medios)...cuales elegirias tu? los serie o paralelo?...

Lo que no entiendo muy bien es lo que dices de colocar botones arriba y abajo del PIC para enviar pulsos al potenciometro..¿?...lo que busco es que cuando yo mueva el potenciometro pueda memorizar en el PIC la posicion del mismo  mediante un teclado que usare, para cuando quiera (y otra vez a traves del teclado) volver a cargar dicha posicion...

Para que me serviria la EEPROM si puedo almacenar los valores en el PIC? (estoy un poco perdido en ese tema...por cierto que el 16F876 trae 256K de EEPROM)

Muchisimas gracias
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 16 de Febrero de 2006, 19:19:00
Hola fito20, no solo estas perdido en el tema si no que también estas confundido.

Te tratare de explicar por partes:

* Las señales de los MIC no es necesariamente senoidal, ni tampoco es con 60 mVpp, esta puede variar de acuerdo al nivel de audio del ambiente y no todos los micrófonos poseen ese nivel de salida.

* Con respecto a las guitarras pasa algo similar pero en este caso se estipula que la salida promedio es de 500 mVpp

* Por lo general en el tema de audio se usa un estandar de 2 Vpp para todas las señales que sean ya de entrada o de salida, esto quiere decir que debes pre-amplificar tanto la guitarra como el MIC para que alcance el promedio de 2 Vpp, este nivel lo sabrás en el momento del uso, si la ganancia es muy baja los equipos no rinden lo que deberían y si la ganancia es demasiado elevada se producirá una distorsión en el audio, todo esto te darás cuenta a base de escuchar el sonido final.

* Desde ya ninguno de los dos pre-amplificadores son iguales ya que uno es para reproducir el sonido de un instrumento en especial y el otro debe poder hacerlo con la mayoría de la gama de audio, pero para los efectos de prueba puedes usar los mismos circuitos.

Pasando al tema de la parte electrónica:

* Cuando dices de sensar la posición de un potenciómetro ¿como piensas realizarla? por los potenciómetros de un ecualizador del tipo analógico nunca hay presente una tensión de continua, por ellos solo pasa señal de audio proveniente de la entradas y esta no precisamente guarda una relación con la posición del potenciómetro. Y aunque es posible introducir una continua en los mismos, no es muy recomendable por los efectos secundarios que esta ocasionaría en el audio

* Cuando dices de colocar nuevamente el potenciómetro en la posición memorizada, ¿Tú posees potenciómetros motorizados? ya que de otra manera no lograras conseguir que el mismo se mueva.

* En cuanto al uso de los potenciómetros digitales, los mas convenientes son los de comunicación serie, ya sea tanto por la facilidad de conexionado la realización de la PCB y los pocos pines de PIC que necesitas para comandarlos.

* ¿Como seleccionar el POTE. Digital adecuado? pues hay principalmente tres tipos de potenciómetros digitales:
    * Los de salida flotante, a las tres salidas las conectas donde tu deseas.
    * Los de referencia con masa, donde una de sus salidas esta conectada a masa
    * Los de resistencia variable, donde el pote. solo posee al exterior dos pines.
De acuerdo al tipo de circuito de control de tonos que tengas tendrás que seleccionar el pote. que más te convenga.

Con respecto a lo que a comentado el colega de usar un par de pulsadores para subir y bajar se refiere a lo siguiente:

Como los potenciómetros digitales no poseen otra forma de variar su valor solo por medio de la comunicación serie, tendrás que tener pulsadores externos que según estén pulsados le envíen al potenciómetro adecuado la señal (por medio del PIC) para incrementar su valor o disminuirlo.

¿Por que usar potenciómetros con memoria interna? los potenciómetros con memoria interna no pierden su valor en el caso de apagar el equipo, por lo tanto cuando lo vuelves a encender están en el mismo valor que los as dejado, por consiguiente si haces una corrección y esta no esta memorizada no se perderá, en el caso de usar potes. sin memoria tendrías que continuamente guardar en la EEPROM todas las correcciones que realices para que en el momento de encender el equipo leer la ultima corrección y ubicarla en el pote. correspondiente.

Espero esto te aclare un poco el panorama, te comento que no es un tema sencillo y menos para alguien que tiene poco conocimientos de electrónica, poro tampoco es imposible, solo hay que ponerse a estudiar un poco.

Suerte, un saludo.

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 17 de Febrero de 2006, 04:31:00
Hola Carlos, muchas gracias por la detallada explicacion y por tratar de ayudarme con esto. Hay algunas cosas que no he entendido bien, te ruego que me las aclares:

Segun lo que he entendido, me olvido de tensiones en los potenciometros y tan solo memorizo la posicion de los POTE digitales...que sera almacenar el valor de los pulsos que haya tenido que dar el PIC hasta colocarlo en el sitio que esté...no?

El tema del previo, habia pensado en ponerle una especie de GAIN (potenciometro analogico) para subir o bajar la ganancia segun se conecte un microfono o una guitarra...para facilitar el conexionado y tener una unica entrada a la mesa...que te parece?

Para cargar una posicion almacenada en el PIC a un potenciometro, solo me haria falta que el PIC mandara tantos pulsos al POTE digital como estaba memorizado, luego el POTE motorizado no serviria para nada haciendolo de esta manera no?

Que POTE digitales con memoria interna me recomiendas utilizar? El circuito de EQ que usare es el siguiente (el de 3 bandas):

Un saludo y muchisimas gracias por tu ayuda. Fito.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 17 de Febrero de 2006, 04:33:00
Bueno, no me deja subir la imagen...
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 17 de Febrero de 2006, 08:05:00
Hola fito20, en realidad los potes. digitales no funcionan mandándole pulsos, estos se comunican por medio de un puerto SPI o I2C, lo que no vasta con enviarle simple pulsos.

Con respecto a usar una sola entrada para el MIC y la guitarra, sí es posible, pero como tu bien dices tienes que proveer a dicha entrada de un control de ganancia, que regularas según sea el artefacto que tengas conectado.

Para cargar una posición de un pote. guardada en el PIC tendrás que leer la memoria de este y mediante las formas de comunicación que e mencionado antes enviarle la posición en la que se debe colocar el pote. digital, como ya mencione no alcanza con solo enviarles pulsos.

Si deseas postear un archivo lo puedes hacer en este almacén que pertenece a este foro, ten en cuenta que solo podrás almacenar 3 archivos por post de un máximo de 256 Kb cada uno.

http://todopic3.foro.st

Un saludo y suerte.

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 17 de Febrero de 2006, 09:22:00
Hola Carlos.

Pues no me queda mas remedio entonces que empaparme sobre I2C para poder comunicarme con los potenciometros...aunque nunca he escuchado hablar sobre el. Buscare en google, si conoces alguna pagina que explique sobre el tema, te agradeceria que me lo dijeses.

Te adjunto el link al EQ de 3 bandas que usare para que me recomiendes que tipo de potenciometro me vendria mejor:

http://album.miarroba.com/fito20/0/1/" target="_BLANK"><img src="http://fotos.miarroba.com/thumb/1B43FA5C5C2543F5E8AB2443F5E8AA.jpg

No me canso de darte las gracias tio. Un saludo.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 17 de Febrero de 2006, 10:47:00
Hola fito20, por lo que veo en el esquema que as dejado usaras 2 potes de 100 K y 1 de 470 K el problema con este ultimo es que no encontraras fácilmente uno de este valor del tipo digital.

De todas formas te recomendaría que uses un circuito de mejor calidad, ya que ese, al usar 1 solo amplificador operacional es un poco básico y se te complicara de adaptar al uso de los potes. digitales.

Por otro lado es recomendable siempre usar un AO en la entrada para bajar la impedancia, y otro a la salida por el mismo motivo, los mejores EQ son los que dividen las bandas que usaras y procesan cada una por separado y con 1 AO por cada banda.

Por otra parte, tú usaras el equipo en formato stereo o mono, ya que entre los dos hay una gran diferencia.

Un saludo.

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 17 de Febrero de 2006, 11:30:00
Hola Carlos.

Se me habia olvidado comentar que el uso sera mono.

Acerca del EQ, trataba de buscar uno lo mas sencillo posible, porque el proyecto esta enfocado mas al PIC que al ecualizador en si, que solo servira como excusa para que el PIC lo controle...

Me has dejado preocupado con lo del POT de 470K...buscare un circuito de EQ con un OP por banda y que use POTs de 100K como dices...a ver que encuentro.

A que valor de impedancia tengo que bajar en la entrada? y en la salida? supongo que dependera de qué se conecte...el microfono es de 500 o 600 ohmnios.

Un saludo!
Título: RE: Mesa de mezclas
Publicado por: 10f206 en 17 de Febrero de 2006, 11:34:00
Los potenciometros digitales, puden trabajar parelos, seriales y de pulso, estos ultimos como ya te expuse, son los simples boton arriba y abajo, en Fairchild salieron hace 4 semanas, me enviaron unas muestras de 32 y 64 pasos de 5 kohm y 50 kohm, todo lo que ya te han explicado es correcto, pero lo que veo que no queda claro es la interface, NO USES NADA ANALOGO!, ya que si lo haces tendrias que pasar el valor analogo al pic por el ADC, convertir ese valor a una señal I2C enviarlos al potenciometro digital, para que este variara su salida (me parece que para hacer eso es preferible un potenciometro analogo y una tuerca de seguridad que no le permita girar =o)

Si los usas solos, usa up/down con memoria.

Si los usas con un PIC, es preferible usarlos seriales I2C.

Mucha suerte.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 17 de Febrero de 2006, 16:18:00
Hola fito20, la impedancia de entrada debería de ser de 47K que es casi una medida universal, los MIC tienen una impedancia de salida de 600 Ohm (los dinámicos) por lo que lo ideal seria que la entrada presente ese misma impedancia, pero como tu desea que la misma entrada sea del tipo universal (que no es lo ideal) te convendría que tenga una impedancia de 47K, con esto te garantizas que funcione cualquier equipo, con respecto a la salida lo que trataras de hacer es que posea la menor impedancia posible, para que esta a su ves pueda funcionar con cualquier entrada

Por lo tanto y resumiendo, con un pote. de 47 K a la entrada regularas el volumen general, la salida de este lo envías a un AO con la ganancia que sea mas adecuada al resto del circuito, pero este debe estar aunque la ganancia sea unitaria, ya que al bajar la impedancia de la entrada podrás comandar los demás operacionales, a su ves a la salida usaras otro AO para que realice la función de sumador, la ganancia de este por lo general es la unidad, con este mismo AO consigues que la impedancia de la salida sea baja.

El comentario de que uses otro circuito de EQ es por el motivo de que la gran mayoría de pote. digitales son aptos para señales de 0-5 Vcc por lo que el circuito que tu as presentado no será muy fácil de adaptar ya que usa también tensiones negativas.

Un saludo.

Atte. CARLOS  

Título: RE: Mesa de mezclas
Publicado por: fito20 en 18 de Febrero de 2006, 05:10:00
Hola 10f206.

Ok. Lo unico analogico que utilizare seran las resistencias y condensadores necesarios para la ecualizacion y previos. Tambien usare los potenciometros seriales I2C como apuntas porque el PIC es el centro del proyecto, por lo que tengo que integrarlo dentro del circuito.

Hola Carlos.

Con el mismo potenciometro que dices que ponga a la entrada (para el GAIN) ya aseguro la impedancia de entrada de 47K porque los 600 ohmnios del micro o guitarra serian despreciables no?

La salida de dicho potenciometro la mando a un AO con cierta ganancia…como se que ganancia es la mas adecuada para el circuito de EQ?

El ultimo AO (el de salida) que hace la funcion de sumador…que suma exactamente? La salida de cada una de las bandas? a eso te refieres?

El unico EQ que use un AO para cada banda que he encontrado es este..pero no se si trabaja de 0-5 Vcc...¿?




Por favor, no dejeis de entrar en el hilo y echarme una mano. Gracias.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 18 de Febrero de 2006, 14:01:00
Hola fito20, en la medida de mis posibilidades tratare de ayudarte, por lo tanto no dejare de entrar a este hilo.

Con respecto al esquema que as colocado ese si bien es un EQ y lo puedes controlar con el PIC lo que no puedes hacer es saber donde se encuentran posicionado cada pote. por lo que se te complicara para memorizar una ecualización definida. En realidad do que hace cada uno de los AO de ese esquema es amplificar la señal de control para poder variar los potes, como veras el integrado que es el encargado de realizar la ecualización es el TDA1524, por lo tanto no tiene 1 AO por cada banda, solo tiene un integrado para agudos, graves, volumen y en formato stereo.

Claro con el pote. de la entrada conseguirás los 47K de impedancia, la ganancia del AO que se conecta con el pote de la entrada será en relación para conseguir con la salida final del EQ una señal de 2 Vpp, lo que se hace es que el OA de la entrada tenga toda la ganancia total del EQ, o sea que el resto de los AO tendrían que sumar una ganancia de 1. Con esto se consigue (entre otras cosas) que la relación señal ruido final sea menor, por lo tanto tu EQ tendrá menos ruido de fondo o sea mas calidad de audio.

El ultimo AO que es el sumador se encarga de sumar las señales que tu previamente as separado por cada banda y le as dado un nivel particular a cada una, o sea que “arma” nuevamente la señal de audio que tú as separado por bandas.

Con respecto al pote. Digital e encontrado uno de la firma MAXIM

http://pdfserv.maxim-ic.com/en/ds/MAX5487-MAX5489.pdf

Ese es el link al datasheet estos potenciómetros MAX5488 de 50K y MAX5489 de 100K que podrás utilizar con el esquema que primeramente as posteado y no tendrás problemas, solo deberás reformar los valores de los componentes asociados con el pote de 470K.

De todas formas estoy diseñando un circuito mejor que el que posees para que lo revises.

Cuando lo tenga terminado lo posteo y me cuentas.

Un saludo, y suerte.

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 19 de Febrero de 2006, 05:30:00
Menos mal, porque no encuentro mas circuitos de EQ...pero el primero que puse no llevaba un AO por banda y creo que me dijiste que eso me complicaria el control de los potenciometros...

Ya me he bajado el PDF y me lo empezare a  leer para ver como funciona...sabes de alguna pagina donde pueda aprender I2C para comunicar el PIC con el potenciometro digital?

Muchas gracias por tomarte un tiempo para hacerme el esquema. Un saludo.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 19 de Febrero de 2006, 15:51:00
Hola fito20, acá que e dejado el esquema del EQ:

http://miarroba.com/foros/ver.php?foroid=348538&temaid=4227098

Los potes son de 50K y puedes usar los MAX5488.

¿Que lenguaje de programación usas? porque yo, aunque te haya respondido uso el .asm y acerca del C o del Basic no entiendo nada. O sea que si programas en C tendrás que tratar el tema con alguien que lo conozca, pero no tengo problema en seguirte ayudando con la parte electrónica.  

Por otro lado los MAX5488 como la gran mayoría de lo pote. digitales usan la comunicación SPI, o sea que te recomendaría que busques sobre esta y no la I2C.

Un saludo

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 19 de Febrero de 2006, 16:05:00
Hola Carlos! Tu EQ me viene de maravilla, de veras que me estas ayudando mucho con esto.

Para programar uso tambien ASM y lo compilo con MPLab...yo tampoco me llevo bien con el C.

Ok. En lugar de buscar sobre I2C me pondre a buscar informacion sobre SPI.

Todos los dias le echo unas 6 horas al proyecto, asi que cada dia te ire comentando lo que encuentro, lo que hago o las dudas que me vayan surgiendo. Muchas gracias. Un abrazo.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 20 de Febrero de 2006, 07:21:00
Hola fito20, el uso de esos potes es posible solo que para que todo en sistema funcione de manera adecuada tendrás que separar el GND de la parte análoga de la parte digital, en definitiva solo tienes que hacer una fuente de alimentación un poco mas espacial y no unir GND digital y GND analógico.

Un saludo.

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 20 de Febrero de 2006, 09:11:00
Carlos, con lo de separar las GND analogicas y digitales a que te refieres? a separar la tierra del circuito de EQ y la tierra de los potenciometros digitales y PIC?...por que debo hacerlo ahora con los potes de analog y con los de max no hacia falta?...

Esta mañana he estado recopilando un poco, para organizarme. La idea es:

1) Introduzco una señal audio en la mesa

2) Mediante la conexion de dos pulsadores (por banda, es decir, por POTE) a dos entradas del PIC, mando pulsos al PIC. Por cada señal que reciba el PIC, y a traves de una de sus salidas, aumentara o disminuira (dependiendo de si pulsas el boton up o down) una posicion del POTE.

3) En caso de querer guardar la posicion del POTE, el PIC tendra que cambiar su salida por entrada y leer la posicion del POTE, almacenandola en un registro.

4) Mediante un display y un teclado de X botones que incluira tambien la placa, podremos elegir entre almacenar el preset (posicion de los POTE"s) o cargar un preset previamente almacenado.

5) En caso de cargar un preset anteriormente almacenado, el PIC cargara el valor de la posicion de cada uno de los POTE"s y mandara dicho valor a cada uno de los POTE"s...

El razonamiento es valido?

Tengo una duda, y es que no se si el PIC le manda el valor previamente almacenado al potenciometro mediante pulsos o directamente un numero en un registro?...y el tema de los pulsadores para ir cambiando la posicion de los POTE"s no estoy seguro de si es como antes he mencionado.

Hay rutinas ya creadas para pasar datos del POTE al PIC y viceversa?...Un saludo
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 20 de Febrero de 2006, 10:21:00
Hola fito20, los 5 puntos de tu razonamiento estarían correctos, yo lo único que cambiaria seria lo de usar 2 pulsadores por cada pote, usaría uno de UP, uno de DOWN y otro para ir cambiando de uno a otro de los potes. y guiándome por medio de un display, ¿Me entiendes?

Para las memorias pondría 4 o 5 pulsadores que manteniéndolos apretados por mas de 2 seg. memoricen la posición actual de cada pote, y si solo los pulsas que la posición que tengan memorizada la pasen a los potes.

De esta forma me evito un teclado y con solo 8 pulsadores tengo todas las opciones, y de forma clara y fácil de manejar.

El PIC mediante la comunicación SPI la envía al pote. no solo en valor que debe tener cada un de los mismos, sino que también le transmite un comando, ya as leído me imagino como es la comunicación por medio de SPI y as visto que no se envían solo 8 bits que seria el valor de un pote, por medio de cada transmisión SPI también le envías comandos.

Ha cerca de lo que dices de las masas lo comentas de manera correcta, PIC y potes por un lado, EQ por otro lado. Esto se debe hacer de esta forma porque el pote que elegiste solo permite tensiones entre 0 y 5 V en sus entradas y el de MAXIN permitía -5 y 5 V entonces para los seleccionados por vos tenemos que trabajarlos en -2.5 y 2.5 Vcc en la alimentación de esta forma la masa del EQ seria 0Vcc y la masa del PIC y los potes deberá ser -2.5 Vcc.

Con respecto a las rutinas ya creadas, no creo que las haya ya que los potes. Digitales todavía no son cosa standard, a menos claro que analog tenga unas notas de aplicación que lo haga, maxin si disponía de esas notas.

Un saludo.

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 20 de Febrero de 2006, 11:47:00
Carlos, tu idea es genial y me simplifica mucho el trabajo...te lo agradezco mucho.
Con tan solo 8 entradas lo tendria todo...

Una cuestion, cuando al PIC le toca leer la posicion del potenciometro;

1) Cambio la salida (que antes le enviaba la posicion a la que debia colocarse) por entrada mediante programacion?

2) o uso alguna entrada independiente que tenga libre en el PIC?

¿que harias tu?

He estado mirando en analog y no hay rutinas como bien decias, pero buscando en esta misma pagina he encontrado estas dos que servirian para leer y escribir:

RUTINA QUE ENVIA

;SUBRRUTINA "SPI":
;Envia el byte que viene en el registro "w" mediaante el protocolo spi.
;Utiliza los registro temporales "temp1" y "temp2"

spi   movwf   temp1      ;Salva el byte a transmitir en el

registro temporal "temp1"
   movlw   0x08
   movwf   temp2      ;Inicializa el contador

bck_spi   bsf   p_spi,sdin   ;Sube data
   btfss   temp1,7      ;Comprueba el bit y lo baja si es cero
   bcf   p_spi,sdin
   nop         ;Envia el bit
   bsf   p_spi,sclk
   nop         ;Da un pulso de reloj
   bcf   p_spi,sclk
   nop
   rlf   temp1,f      ;Rotamos a la izquierda "temp1"
   decfsz   temp2,f      ;Comprobamos el contador, para ver si hemos enviado los 8 bits

   goto   bck_spi      ;Si no, repetimos el bucle
   bcf   p_spi,sdin
   return         ;Fin

Debes definir para usar esta rutina, el puerto que vayas a utilizar como "p_spi" y los bits dentro del puerto, tanto de datos como de reloj, como "sdin" y "sclk". También se utilizan dos resitros temporales "temp1" y "temp2" que debes definir. Aqui va un ejemplo:

;Definición de bits

sdin   equ   0x00   ;Bits de control del bus spi: Datos bit 0
sclk   equ   0x01   ;Reloj bit 1

;Puertos del PIC

porta   equ   0x05
p_spi   equ   0x05   ;Puerto A es el puerto utilizado para el spi
portb   equ   0x06

;Declaración de variables

temp1   equ   0x20
temp2   equ   0x21



RUTINA QUE RECIBE

;SUBRRUTINA "SPI_RX":
;Recibe un byte por el bus SPI y devuelve el resultado en el registro "w"
;Utiliza los registro temporales "temp1" y "temp2" y el bit de carry del registro "status"

spi_rx   movlw   0x08
   movwf   temp2      ;Inicializa el contador

bck_spi   btfss   p_spi,sclk
   goto   bck_spi
   bsf   status,0
   btfss   p_spi,sdin   ;Copia el valor de data en el carry
   bcf   status,0
   rlf   temp1,f      ;Para guardarlo en el temporal

bck_sp2   btfsc   p_spi,sclk
   goto   bck_sp2
   decfsz   temp2,f      ;Comprobamos el contador, para ver si hemos recibido los 8 bits

   goto   bck_spi      ;Si no, repetimos el bucle
   movf   temp1,w
   return         ;Fin


Serian validas? Cuentan 8 bits y para mi caso serian mas bits, pero en el fondo me serviria no? Saludos!
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 20 de Febrero de 2006, 11:57:00
Hola fito20, yo particularmente usaría PINES separados en la comunicación SPI ya que el pote viene de esa forma, acerca de las rutinas que posteaste no te sabría decir en este momento, las reviso y te digo.

Un saludo.

Atte. CARLOS



Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 20 de Febrero de 2006, 12:58:00
Hola fito20, si las rutinas funcionan para transmisión y recepción, aunque no les e probado con un pote. pero de todas formas creo que son demasiado rápidas en la transferencia de los datos para la utilidad que le darás y corriendo los riesgos de que los datos se transfieran de forma incorrecta.

Un saludo

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 20 de Febrero de 2006, 17:17:00
Hola Carlos.

Que hago para que dichas rutinas no sean tan rapidas para asegurar la correcta transmision de datos? incluirles nop?

Ademas del codigo escrito tendre que añadirle los comandos del potenciometro no? es decir, que los contadores ya no seran de 8 bits sino de mas... A ver si me resuelves esta ultima duda y me pongo con la programacion mañana mismo.

Podre hacer la simulacion del programa mediante MPLab?

Un saludo.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 20 de Febrero de 2006, 22:53:00
Hola fito20, ten en cuenta que el programa aparte de la comunicación con los potes tendrá que revisar los pulsadores y según el que se pulse tomar una decisión, y en el caso de los pulsadores de memorias aparte de ver si están presionados revisar por cuanto tiempo esta apretados, si es menos de 2 segundos, los datos de la EEPROM para tal memoria tendrás que escribirlos en los potes, y si es más de 2 seg. tendrás que leer los datos de los potes y guardarlos en las posiciones de EEPROM correspondientes a esa memoria.

Por otro lado tendrás que disponer de un display, para poder ir indicando las acciones que estas realizando por la presión de los pulsadores y de esa forma poder tener una guía, también deberás indicar en que posición se hallan cada unos de los potes.

El programa para simularlo por medio del MPlab lo veo un poco difícil, pero no imposible, tendrás que dispones de mucha paciencia.

Pero antes que todo yo empezaría tratando de controlar un solo pote, aunque sea con dos pulsadores, sabiendo que puedes hacerlo subir y bajar, tendrías que probar si lo puedes leer, una ves que todo esto lo hagas a la perfección si podrás continuar con el resto del programa, de esta forma si cometes un error en el resto del programa que te impida controlar los potes. sabrás que las sub-rutinas de comunicación no son, te comento todo esto porque a la hora de empezar un programa de cero tienes que ir agregando partes individuales, de esta forma si la que agregas no anda sabrás que las anteriores no son porque ya las probaste y andaban bien ¿Entiendes lo que quiero decir?

Un saludo

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: Sebascl en 20 de Febrero de 2006, 23:51:00
hola fito, por favor dime si entendi bien lo unico que tu quieres es controlar los potenciometros de un ecualizador analogo de forma digital y cuando apagues el equipo los ultimos valores en los potenciometros queden guardados en el pic, eso es lo que tu quieres.

saludos.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 21 de Febrero de 2006, 03:32:00
Hola Carlos.

Tienes toda la razon...empezare elaborando un programa que mediante dos pulsadores suba y baje la posicion de uno de los potes, para luego ya extenderlo al resto de potes...

Necesitaria tan solo un display de 6 digitos...la idea es que cuando presione el pulsador up del potenciometro de medios (por ejemplo) me aparezca:  PM 165 (potenciometro de medios posicion 165)

Lo que no se muy bien es como comunicar el PIC con el display...buscare a ver si encuentro alguna rutina...o va tambien por algun tipo de comunicacion especial?

Me pongo manos a la obra. Un saludo.


Hola Sebas.

Si, la idea es esa, pero ademas de que mantenga la posicion al desenchufar, quiero que el PIC sea capaz de almacenar en su EEPROM algunos presets con las posiciones de los potenciometros digitales y despues poder cargarlos en los potenciometros. Un saludo.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 21 de Febrero de 2006, 11:15:00
Hola fito20, yo en tú caso usaría un display tipo LCD de 1x16 o 2x16, de esta forma resolverías de una manera sencilla este tema, por otro lado para hacerlo con display de LED tendrías que conseguir los del tipo alfanuméricos y el uso de PINES del micro para este tipo de display se te elevaría demasiado, aparte de la complicación a la hora de realizar el firmware para el manejo y representación en los alfanuméricos.

Para el display LCD solo necesitas de 6 PINES en el caso de manejarlo con el bus de 4 bits, o de 10 pines con el bus de 8 bits.

En cuanto a costos creo que seria más económico el LCD y más sencillo de conseguir, por otro lado esta la presentación ya que el display LCD otorga una calidad final al producto superior al de LED, en cuanto a los consumos ni dudarlo, los LCD casi no poseen con respecto a los de LED que en estos sería de varios mA.

Un saludo.

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 21 de Febrero de 2006, 13:51:00
Hola Carlos.

Pues el caso es que estoy apurado de pines porque uso el PIC 16F876, asi que mejor que mejor lo del LCD 1x16...manejado por un bus de 4bits para solo usar 6 pines.

Da igual la marca del LCD? Todos se comunican igual con el PIC?

Mañana posteare aqui el trabajo de hoy. Un saludo. Fito.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 21 de Febrero de 2006, 15:03:00
Hola fito20, no es lo mismo para todas las marcas de LCD porque todavía no se a llegado a un standar en este elemento, paro casi son todas iguales, en lo único que podes llegar a tener problemas de una marca a otra es en la conexión, saben traer los pines ubicados de distintas formas, con respecto a las señales para manejarlo sí son iguales.

Estoy ansioso de poder ver el avance que as hecho.

Un saludo

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: Sebascl en 21 de Febrero de 2006, 15:31:00
hola fito, si lo que quieres es solo controlar los potenciometros puedes usar los ds1869 controlados por el pic tienen una antrada digital o los puedes ajustar por botones uno para subir y otro para bajar lo unico que tendrias que aser es conectarlos a tu ecualizador remplazando los potenciometros analogos.

tratare de subirte un ejemplo, ojala te sirva.

saludos.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 21 de Febrero de 2006, 17:10:00
Hola Carlos.

Gracias por el comentario sobre los LCD.

Como decia mañana subire lo que he trabajado hoy, que es el esquema de lo que tiene que hacer mi programa...como una especie de diagrama de flujo...

Hola Sebas.

El dispositivo que dices son potenciometros digitales? Podria pedir muestras gratuitas?

Mañana pondre aqui el esquema sobre el que trabajare en programacion, echale un vistazo por si tu idea de usar los ds es mejor que la que tengo pensada. Muchas gracias a ti tambien.

Saludos a los dos. Fito.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 22 de Febrero de 2006, 04:48:00
Bueno, pues tal y como dije, aqui subo la secuencia que tiene que realizar el programa del PIC:

1) Situacion inicial: Al arrancar, se selecciona por defecto el potenciometro de graves y se lee su posicion. Tambien se carga un 0 en un registro que despues explicare para que sirve.

2) Mostrar dicha posicion en el LCD: PG XXX

3) Si pulsamos:

- Pulsador UP: Se debe comprobar que la posicion no es 256

        + Si es 256 mostrar en display ERROR
        + Si no es 256, sumar 1 a la posicion del pote y sumar 1 en el display

- Pulsador DOWN: Comprobar que la posicion no es 0

        + Si es 0 mostrar en display ERROR
        + Si no es 0, restar 1 a la posicion del pote y restar 1 en el display

- Pulsador CAMBIO:

        + Recupera el registro que comentaba en la situacion inicial
        + Si es 0, se deshabilita graves y activa medios. Suma 1 en dicho registro.
        + Si es 1, deshabilita medios y activa altos. Suma 1 en dicho registro.
        + Si es 2, deshabilita altos y activa bajos. Resta 2 en dicho registro.

- Pulsador MEM (hay 5 memorias, cada una con su pulsador):

        + Por menos de 2 segundos. Pasara el preset guardado a los potes.
        + Por mas o igual de 2 segundos. Almacenara la posicion de los potes en PIC.


Ahora me tengo que poner con la programacion de todo esto, y no se me da especialmente bien. Asi que ire subiendo el codigo para que me lo corrijais si veis algo sospechoso.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 22 de Febrero de 2006, 04:54:00
Tambien os subo la asignacion de pines que he hecho del 16F876:

A0 Display
A1
A2
A3
A4
A5 Slave select for the synchronous serial port


C0 Display
C1 Display
C2 Display
C3 SCK (Clock)
C4 SPI data in
C5 SPI data out
C6 Display
C7 Display


B0 Interruptor 1  CAMBIO
B1 Interruptor 2  UP
B2 Interruptor 3  DOWN
B3 Interruptor 4  MEM1
B4 Interruptor 5  MEM2
B5 Interruptor 6  MEM3
B6 Interruptor 7  MEM4
B7 Interruptor 8  MEM5

Una pregunta...el A5 me va a servir? En caso negativo era para colocar todas las salidas al display en el puerto A...

Como veis lo del programa del post de arriba?

Un saludo. Fito.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 22 de Febrero de 2006, 08:38:00
Hola fito20, solo e encontrado un error, en la vida real la indicación de los potes es en dB (decibeles), pero como este cálculo es complicado de hacer en .asm no te propongo que lo realices, pero los potes tendrían una variación de -12 dB a 12 dB, siendo 0 dB la posición de ecualización nula o sea sin ecualización, esta posición se cumpliría con el pote en el paso 128, por lo tanto si te recomendaría que los pasos por debajo de 128 los indiques con signo negativo lo que te quedaría así:

paso 255 = 127
.......
paso 129 = 1
paso 128 = 0
paso 127 = -1
.......
paso 1     = -127

Esto es para los controles de grabes, medios y agudos, de esta forma cuando todos estos controles estén en cero, el ecualizador esta en lo que se llamaría ecualización plana (no ecualiza) y si por ejemplo el de grabes esta en 50 lo que haria es darle una amplificación a los graves y por el contrario si estuviera en -50 haría un recorte de graves.

Para el control de la ganancia es algo distinto, la ganancia varia en un rango de 1 a 34.3 por lo que quedaría:

ganancia 1 = paso 0
ganancia 2 = paso 8
ganancia 3 = paso 15
ganancia 4 = paso 23
.....
ganancia 34 = paso 253

la ganancia se calcula de la siguiente manera :

Codigo:
((50000 / 255) * N° de pasos) + 1500
------------------------------------ = GANANCIA
                 1500


Con esta formula puedes calcular la ganancia de acuerdo al paso que hayas seleccionado (de 0 a 255) en el pote para la ganancia.

Espero te sea de utilidad.

Un saludo

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 22 de Febrero de 2006, 09:07:00
Hola Carlos.  

El potenciometro de la ganancia seria analogico, es decir, de rueda...no digital ni controlado por el PIC, sino a gusto del consumidor que aumenta o disminuye la ganancia girando la rueda...

Por eso cuando me hablas de calcular la ganancia no se muy bien si tenias pensado que el control del Pote de ganancia fuera a traves del PIC. Cual es tu opinion?
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 22 de Febrero de 2006, 09:29:00
Hola fito20, teniendo en cuanta que tú seleccionaste un pote. digital en el que vienen 2 dispositivos por cada chip y necesitas por lo menos 2 chip para el control de los tonos (bandas) y viendo que te sobraría 1, yo usaría el digital.

Aparte tienes el aspecto final del proyecto una fea combinación de tecnología analógica y digital, donde en un frente todo digital aparece una rueda para el control de la ganancia, a mi gusto personal ¡¡¡muy feo!!! ahora si la rueda fuera un encoder para poder accionar los pulsadores, en buena hora, pero un pote análogo en un frente digital le da al proyecto un aire de debilidad al mismo.

Pero esta es solo mi opinión personal, tú hazlo como te guste.

Un saludo

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 22 de Febrero de 2006, 09:51:00
Bueno, me lo pensare durante el dia de hoy y mañana tomare una decision...

El profesor que me guia el proyecto me ha dicho que podria utilizar potenciometros analogicos en lugar de pulsadores, pero para eso tendria que realizar conversiones A/D y añadir multiplexores, lo cual no me convence mucho. Asi que probablemente lo haga todo digital.

He empezado con la programacion y me asalta una duda...a la hora de seleccionar un potenciometro digital u otro para la EQ, necesitare un decodificador para elegir entre un integrado u otro no? habia pensado en el 74HC154...
Título: RE: Mesa de mezclas
Publicado por: nordestenica en 22 de Febrero de 2006, 10:44:00
ola amigo veo que estas un poco liado com los pots aqui te pongo un link para unas simulaciones en proteus de varios pots digitales de dallas e su correspondiente codigo en c

http://uk.geocities.com/mayaka2001/DALLAS_DPOTS_PROTEUS_VSM_DLL.zip
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 22 de Febrero de 2006, 12:05:00
Hola fito20, me parece que tú profesor no tiene bien claro en concepto, como ya te explique para usar pote. análogos no solo tendrás que disponer de conversores A/D (hay PIC de la familia 16 que ya poseen multiplexores que te elevan las entradas análogas asta 8) sino que también necesitaras potes motorizados para el caso de que quieras utilizar uno de los preset que tengas memorizado.

Por otro lado, como ya te e comentado necesitarás un pote stereo para que uno de ellos te envíe la señal análoga y poder saber donde se encuentra ubicado el pote, o sea que si tú quisieras que el equipo sea stereo y no mono, necesitarías que cada pote motorizado sea triple y a estos ya no los encontraras en ningún lado porque no existen, te lo digo de otra manera, si lo haces con potes motorizados tu equipo será eternamente MONO, pero si lo haces con los digitales podrás en el futuro pasarlo de mono a stereo, por lo tanto un proyecto con los motorizados sería algo sin posibilidades de superación, en pocas palabras INUTIL, y más teniendo en cuenta que ya la mayoría de los equipo tienen más de 2 canales de audio (hay asta de 7).

Mi consejo, como estabas diseñando el proyecto venias bien, algo practico, moderno, sencillo y con futuro, continua por el mismo camino. Ahora si tu profesor tiene más ideas no seria malo que entre al foro y las discutimos entre todos. ¡¡seria bueno!!.

Creo que venias bien encaminado y con todo bastante claro, si tienes mas dudas solo pregunta, OK.

Hola nordestenica, creo que el amigo fito20 tenia bastante claro el asunto de los potes. digitales, de todas manera el link no viene mal, gracias. Creo que el problema que tiene él, es que el profesor el cual supuestamente le tendría que enseñar del tema, primero debería aprender el, porque con las posibilidades que actualmente tenemos al alcance le esta recomendando que utilice una tecnología que solo se uso a finales de los 80" con costos muy elevados, con mala experiencia y solo en equipos hogareños, por lo que a quedado obsoleta ase ya mucho tiempo.

Actualmente los potes motorizados del tipo deslizantes (los usados en ecualizadores) solo se usan en las mesas MIDI de alto costo, ya que estos no son fáciles de conseguir ni económicos y de todas formas estos tampoco trabajan de forma análoga, si no que lo hacen por medio de un pote digital (o peor aun por medio de DSP"s) y entre estos dos llevan un circuito de control que no es nada sencillo de realizar.

Un saludo

Atte. CARLOS



Título: RE: Mesa de mezclas
Publicado por: fito20 en 22 de Febrero de 2006, 12:21:00
Hola nordestenica.

Gracias por los ejemplos. Mañana les echare un rato por si me aclaran algo.

Hola Carlos.

A mi tampoco me da buena onda lo que me sugiere el profesor...de todas formas creo que no me explique bien...el apuesta por colocar potenciometros analogicos en lugar de los pulsadores a la entrada del PIC...es decir, para que el movimiento de los potes digitales no se produzca cuando se pulse el pulsador sino cuando se gire el pote analogico...

Para que lo entendais mejor subo su email:

Lo que me comentas no esta mal, pero no es lo que yo pensaba. Yo no pensaba utilizar pulsadores sino potenciometros normales (de eje) como los de las mesas de mezcla.
El AD5232 se comunica via serie (interfaz SPI), por lo que se comunicaria con el micro para que este ultimo le configurase un valor de R o para leer el estado actual, por lo que no haria falta pulsador ninguno.
Mi idea de conexion era esta:
    Input (Micro/Guit) -> Previo -> EQ -> Mezclador -> Etapa de salida
El mezclador y la etapa de salida son comunes a todas las entradas de la mesa de mezclas.
Todos los potenciometros "fisicos" son, por ejemplo, de eje y de 10K. Se conectan los extremos del pot a +5V y tierra, y del terminal variable obtenemos una tension entre 0 y 5V. Esta tensión se convierte a digital en el micro y el valor digital se programa via SPI en el AD5232 correspondiente.
Como hay muchos mas potenciometros que entradas AD en el micro debes utilizar multiplexores analógicos controlados digitalmente por el micro.
Para seleccionar los diferentes AD5232 debes utilizar sus entradas "chip select" (CS) y decodificadores. Lo mismo que se hace en las placas microprocesadoras con la memoria o perifericos externos, como es el caso.

 
Título: RE: Mesa de mezclas
Publicado por: fito20 en 22 de Febrero de 2006, 12:23:00
A la hora de seleccionar un potenciometro digital u otro para la EQ, necesitare un decodificador para elegir entre un integrado u otro no? habia pensado en el 74HC154...

Mañana subire lo que he programado en ensamblador hasta ahora.

Carlos si me puedes echar una mano con la comunicacion SPI te lo agradeceria.. por lo menos aclararme cuales son los pasos a seguir. Un abrazo.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 22 de Febrero de 2006, 12:52:00
Escrito originalmente por fito20

Lo que me comentas no esta mal, pero no es lo que yo pensaba. Yo no pensaba utilizar pulsadores sino potenciometros normales (de eje) como los de las mesas de mezcla.
El AD5232 se comunica via serie (interfaz SPI), por lo que se comunicaria con el micro para que este ultimo le configurase un valor de R o para leer el estado actual, por lo que no haria falta pulsador ninguno.
Mi idea de conexion era esta:
    Input (Micro/Guit) -> Previo -> EQ -> Mezclador -> Etapa de salida
El mezclador y la etapa de salida son comunes a todas las entradas de la mesa de mezclas.
Todos los potenciometros "fisicos" son, por ejemplo, de eje y de 10K. Se conectan los extremos del pot a +5V y tierra, y del terminal variable obtenemos una tension entre 0 y 5V. Esta tensión se convierte a digital en el micro y el valor digital se programa via SPI en el AD5232 correspondiente.
Como hay muchos mas potenciometros que entradas AD en el micro debes utilizar multiplexores analógicos controlados digitalmente por el micro.
Para seleccionar los diferentes AD5232 debes utilizar sus entradas "chip select" (CS) y decodificadores. Lo mismo que se hace en las placas microprocesadoras con la memoria o perifericos externos, como es el caso.




Hola fito20, pierde cuidado que si te e entendido bien, el que no me as entendido eres tú, si usaras un pote común (de eje) para setear el digital, como harías para mover el común en el caso de que quieras que una ecualización almacenada en la EEPROM del PIC pasase a los potes, ya que si no mueves estos podrían por ejemplo quedar al máximo y el digital al mínimo, con lo cual no habría concordancia en lo indicado y la ecualización real, por otro lado los EQ no usan potes de ejes, se realizan con los potes deslizantes, por 2 motivos principalmente, al tener una ecualización con los deslizantes solo mirándolos te das una idea de como están seteados, y porque los de eje ocupan demasiado espacio, imagínate un EQ de 33 bandas stereo, y los dos canales por separado, serian 66 potes, como arias para realizar un frente de equipo con 66 potes de ejes, pues con los deslizantes yo e visto que es posible, aparte tenía 2 potes más para el control de volumen, la llave de encendido y el LED, todo eso en un ancho standar de 42 cm. y solo 5 cm de altura. ¿Me entiendes?

Por otro lado nunca e visto EQ que se realicen con potes de ejes a menos claro esta los de pésima calidad.

Como ya te e comentado hay PIC que poseen asta 8 entradas de A/D, por lo que te sobrarían convertidores para los potes que tú necesitas manejar.

Con respecto al uso de decodificadores yo lo que te recomendaría es que uses un PIC de más pines, por ejemplo el 16F877, pero no veo el motivo ya que un sencillo 16F870 te sobraría para ese uso y sín decodificador.

Y como ya te he dicho anteriormente, el proyecto es tuyo y tú tomas las decisiones para le realización del mismo e tus posibilidades o necesidades, yo de todas manera te seguiré aconsejando, pero ya te preaviso hacerlo con los de eje te acarreara muchos problemas tal como tú piensas.

¿Tú que estas queriendo hacer? un simple EQ, o una mesa de mezcla tipo profesional donde cada entrada es un modulo con EQ, ganancia y demás. Ya que ambas cosas son muy distintas en todo.

Un saludo

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 22 de Febrero de 2006, 13:06:00
Hola Carlos.

Ahora si te he entendido, y realmente me doy cuenta de que mi profesor no tiene mucha idea sobre esto tal y como imaginaba. Por eso decia en mi primer post que me encontraba un poco solo en esto, por eso necesito tanto de tu ayuda.

Tal y como yo tenia planteado el proyecto no necesitaba convertidores A/D ni nada por el estilo. Asi que he decidido continuar tal y como lo estaba haciendo.

Con respecto al uso de decodificadores no te entendi muy bien...me propones usar el 16F870 como decodificador? Para ello tendria que usar dos PIC"s y la cosa se complicaria...no seria mas facil el uso de un decodificador normal?

Saludos Carlos.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 22 de Febrero de 2006, 14:44:00
Se me olvidaba contestarte a una cosa...

El proyecto es el de una mesa de mezclas, pero el profesor me dijo que me centrara en una sola pista ya que el resto de pistas era simplemente repetir lo mismo.

Asi que supongo que tan solo tendre que presentar una pista que funcione correctamente.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 22 de Febrero de 2006, 17:06:00
Hola fito20, ahora si que nos entendemos, bueno como empiezo.

Si no entiendo mal lo que tu deseas hacer es el modulo perteneciente a una consola de mezcla (mixer) entonces si es así, todo lo que hemos hablado no sirve de nada, ya que en ese tipo de consolas los potenciómetros están alineados de manera vertical y no horizontal como venia pensando, por lo tanto a olvidarse del LCD, de los pulsadores y de los deslizantes.

Te comento las opciones que ese tipo de módulos debería tener: control de tonos (graves, medios y agudos), control de balance, entrada para efectos (3 mínimo), control para monitoreo, debe ser stereo, selector de mono-stereo, y deslizante para el control del canal.

Con respecto a las entradas mínimo son MIC alta impedancia, MIC de baja impedancia y entrada de línea (esta ultima en stereo) las entradas de los MIC debe ser balanceada, por la distancia de estos a la consola y con un control de ganancia para los MIC y otro para la línea

El deslizante general es lo ultimo del circuito y es el encargado de enviar la señal para mezclar con los demás canales.

En este preciso momento es donde te digo que tú profesor si que no sabe nada o no lo desea saber, porque realizar todo esto con un PIC es una locura sin beneficio alguno, ya que la electrónica análoga para esto funciona de maravillas, tanto es así que solo algunas pocas funciones puede realizar un PIC dentro del mixer para poder ganar en beneficios, con respecto a las consolas profesionales este sector que tu deseas diseñar sigue siendo pura y exclusivamente análogo ¿Por que? elevaría demasiado el precio del mixer sin sentido.

En toda mi vida el único cambio que e visto fue que en una consola reemplazaban el pote análogo deslizante por un de tipo digital deslizante (mecánico), este a su salida entregaba una señal que enviaban directo a un pote. digital (chip), pero por lo demás era todo idéntica a una normal.

Los PIC que en este caso son DSP se usaban para la parte de efectos, pero eso ya no esta a nuestro alcance por el momento.

En definitiva, no se como realizaras el proyecto, lee bien lo que te acabo de escribir y toma las decisiones pertinentes, luego me las comentas y hablamos nuevamente, pero ya te comento que es un proyecto sin sentido ni aplicación alguna realizar esto con un PIC.

Un saludo.

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 23 de Febrero de 2006, 03:27:00
Hola Carlos.

Le he enviado un email al profesor proponiendole desarrollar un EQ con su previo (gain) y bandas controlados por potenciometros digitales. Con su adaptacion de impedancias a la entrada y salida. Que sea capaz de cargar hasta 5 presets memorizados previamente, todo ello visualizado a traves de un LCD, y olvidarnos del canal de la mesa de mezclas que supondria haber tirado por la borda tanto tiempo de trabajo.

Asi que seguimos con el trabajo que estabamos desarrollando tan tranquilamente antes de este revuelo.

Dentro de un rato subire la parte de programacion que he desarrollado (todavia es poca). Si puedes echarme una mano explicandome un poco sobre el SPI para ver si es mas o menos lo que he entendido del datasheet te lo agradeceria (para poder empezar a programar esa parte).

Un saludo!
Título: RE: Mesa de mezclas
Publicado por: antoniof en 23 de Febrero de 2006, 06:08:00
Que pena no haber entrado en este hilo antes.

Te hubiera recomendado hacer el filtro incluso en digital. Con el circuito integrado TAS3002 de Texas instruments, te ahorras operacionales, potenciómetros,etc. Este circuito tiene una entrada analógica stereo y otra salida stereo, internamente lo pasa todo a digital, puedes controlar volmen, agudos, grabes, DRC (Compresión del rango dinámico), Ecualizador de 5 bandas digital, etc... y todo controlador por I2C. Lo único que hubieras tenido que hacer es el previo para la guitarra y el microfono, con el consiguiente ahorro de espacio.

Es una maravilla y lo mejor de todo es que te lo envian de Sample.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 23 de Febrero de 2006, 08:08:00
Hola Antonio.

Ya que por fin has entrado en el hilo te invito a participar activamente en el para ver como llevamos este proyecto adelante.

Tu idea seria genial en caso de hacerlo a nivel particular, pero se trata de un proyecto fin de carrera y no podria simplificarlo tanto porque el profesor se mosquearia...asi que no me queda mas remedio que hacerlo mediante pulsadores, pote"s digitales y el PIC.

Voy a subir lo que he programado hasta ahora.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 23 de Febrero de 2006, 08:12:00
;---------------Encabezado-------------

LIST   p=16f876       
radix   hex       

;------------mapa de memoria---------

estado   equ   0x03      ; Aquí le asignamos nombres a los
trisa   equ   0x05      ; registros indicando
porta   equ   0x05
trisb   equ   0x06      ; la posición
portb   equ   0x06      
trisc   equ   0x07
portc   equ   0x07      ; en la que se encuentran

cont   equ   0x20      ; defino contador

;-------Configuración de puertos-------

reset   org   0x00      ; origen del programa, aquí comenzaré
            ; siempre que ocurra un reset
   goto    inicio      ; salto a "inicio"
   org   0x05      ; origen del código de programa
inicio   bsf   estado,5   ; pongo rp0 a 1 y paso al banco1
   movlw   b"00000"   ; cargo W con 00000 salidas
   movwf   trisa      ; y paso el valor a trisa
   movlw   b"11111111"   ; cargo W con 11111111 entradas
   movwf   trisb      ; y paso el valor a trisb
   movlw   b"00010000"   ; cargo W con 00010000
   movwf   trisc      ; y paso el valor a trisc
   bcf   estado,5   ; pongo rp0 a 0 y regreso al banco0

   clrf   portb      ; limpio el puerto B
   movlw   b"00000000"   ; cargo en w 00000000   
   movwf   cont      ; lo paso al contador

   


SELECCIONAR POT GRAVES

LEER POT GRAVES

MOSTRAR POSICION EN EL LCD





test   btfsc   portb,0      ; Si alguien presiona interruptor 1 CAMBIO
   call   cambio      ; voy a etiqueta cambio
   btfsc   portb,1      ; si alguien presiona interruptor 2 UP
   call   up      ; voy a etiqueta up
   btfsc   port,2      ; si alguien presiona interruptor 3 DOWN
   call   down      ; voy a etiqueta down
   btfsc   port,3      ; si alguien presiona interruptor 4 MEM1
   call   mem1      ; voy a etiqueta mem1
   btfsc   port,4      ; si alguien presiona interruptor 5 MEM2
   call   mem2      ; voy a etiqueta mem2
   btfsc   port,5      ; si alguien presiona interruptor 6 MEM3
   call   mem3      ; voy a estiqueta mem3
   btfsc   port,6      ; si alguien presiona interruptor 7 MEM4
   call   mem4      ; voy a estiqueta mem4
   btfsc   port,7      ; si alguien presiona interruptor 8 MEM5
   call   mem5      ; voy a estiqueta mem5
   

DUDAS:


1) Que valor llevan C3 C4 y C5?
2) Esta bien cargado el 0 en el contador?
3) No me he atrevido a meterle mano a la seleccion del POTE graves porque no se todavia como seleccionar entre uno y otro...decodificador?
4) Tambien me he saltado la lectura de la posicion del POTE Grave porque necesito que me deis breves apuntes sobre SPI.
5) De donde puedo sacar las entradas que hay que darles al LCD para mostrar las letras que quiera?

Un saludo! Fito.
Título: RE: Mesa de mezclas
Publicado por: mirazulado en 23 de Febrero de 2006, 08:27:00
Disculpen que me meta, pero yo tambien hubiera utilizado un integrado procesador de sonido, como dice antoniof.. ahora en general cuando se propone un proyecto en cualquier escuela, curso o universidad no siempre se busca que el proyecto sea competitivo sino que sea educativo, por lo que si se usa potes deslizables o de eje es indistinto ya que lo que importa es la experiencia a eso me parece que se refiere el profesor de Fito al no darle importacia a estos detalles..
Por otro lado he experimentado con un controlador MIDI y descubri que controlar sonido con pulsadores up/down es inaceptable en cualquier equipo de sonido medianamente decente ya que de ninguna forma un pulsador puede "copiar" la velocidad de la muñeca para corregir o modificar algun item del sonido, en este caso no hay como los potes analogicos !
El metodo que cita el profe de Fito es una buena solucion, pero tiene el grabe problema (no tanto por lo visual ya que si usamos pulsadores tendriamos el mismo problema salvo que se haga una barra de led que indique el estado actual del control) que cuando se cambia el programa el pote no se mueve y si hay una gran diferencia entre lo que marca el pote y lo que dice el programa cuando se toca el pote de escucha un cambio abrupto del salto instantaneo del valor almacenado al nuevo valor que marca el pote...
Este ultimo es el metodo que yo utilice... soluciones.. potes motorizados (muy caro) o encoder que es lo que usan muchas mesas y controles MIDI, esta es una muy buena solucion, pero donde vivo no se consiguen y son caros tambien.. aparte hay que hacer una rueda de LED que cubra el encoder y muestre la posicion actual del programa..
Bueno espero no haber sido muy extenso y que se comprenda..
Saludos Mariano..
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 23 de Febrero de 2006, 11:33:00
Escrito originalmente por fito20

1) Que valor llevan C3 C4 y C5?
2) Esta bien cargado el 0 en el contador?
3) No me he atrevido a meterle mano a la seleccion del POTE graves porque no se todavia como seleccionar entre uno y otro...decodificador?
4) Tambien me he saltado la lectura de la posicion del POTE Grave porque necesito que me deis breves apuntes sobre SPI.
5) De donde puedo sacar las entradas que hay que darles al LCD para mostrar las letras que quiera?
Un saludo! Fito.


Hola fito20, bueno si as tomado esta decisión sigamos pues con el tema, te respondo las preguntas:

1) ¿A que te refieres con C3, C4 yC5?

2) Si esta bien cargado el contador, pero ten en cuenta que lo cargaste con un 0, si solo quieres borrar el contador (ponerlo a cero) puedes usar (clrf cont), o que tu as usado se utiliza en el caso de que el contador se cargue con un valor distinto de cero.

3) ¿Qué pote digital usaras? Con respecto al decodificador no te conviene, solo pon cada pin CS (chip selec) de los potes a un pin distinto del PIC o sea 2 potes = 2 pin del PIC.

4) En el mismo datasheet del pote encontraras apuntes del SPI.

5) Al LCD le conectas los pines RS, E, D4, D5, D6 y D7, a cualquier pin del PIC y listo, pero por comodidad a la hora de programar y de diseñar el PCB conviene que estén juntos

Otro consejo, en el caso de usar el pin RA4 (pin 6 del PIC 16F876) ten en cuenta que es del tipo colector abierto por lo que le deberás conectar una resistencia de 1K desde este pin a 5Vcc y luego utilizarlo de la manera habitual.      

Hola antoniof nunca es tarde para unirse al grupo, a ese integrado ya lo conocía y no lo e recomendado por los motivos que ya a explicado fito20.

Hola mirazulado todos esos problemas que comentas ya están solucionados, gracias de todos formas, ahora el amigo fito20 a optado por realizar un simple EQ controlado por medios digitales.

Un saludo

Atte CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 23 de Febrero de 2006, 12:45:00
Hola mirazulado.

Gracias por tus ideas, pero finalmente he decidido realizar el EQ. Espero que mi profesor no se lo tome a mal. Aun no me ha contestado el mail.

Hola de nuevo, Carlos.

Te contesto las preguntas:

1) ¿A que te refieres con C3, C4 yC5?

Me refiero a RC3 (SCK), RC4 (SPI data in) y RC5 (SPI data out). A la hora de asignar los pines como entradas o salidas, es necesario que defina RC4 como entrada y RC5 como salida?...y ademas cuando no se este usando la entrada serie es conveniente ponerla como salida por si acaso y cuando no se use la salida serie configurarla como entrada tambien por si acaso?

Por otro lado, RC3 es la señal de reloj, que ira conectada a la señal de reloj del pote supongo...se configura como salida tambien?

2) Si esta bien cargado el contador, pero ten en cuenta que lo cargaste con un 0, si solo quieres borrar el contador (ponerlo a cero) puedes usar (clrf cont), o que tu as usado se utiliza en el caso de que el contador se cargue con un valor distinto de cero.

Ok. En lugar de cargarle el valor 0, lo borrare y ya esta (no habia caido en eso)

3) ¿Qué pote digital usaras?

Finalmente el AD5232 que es el que analog me ha enviado de muestra.

4) En el mismo datasheet del pote encontraras apuntes del SPI.

Ya, pero no los termino de entender muy bien...los revisare a ver si saco algo en claro.

5) Al LCD le conectas los pines RS, E, D4, D5, D6 y D7, a cualquier pin del PIC y listo, pero por comodidad a la hora de programar y de diseñar el PCB conviene que estén juntos

Ok!

Otro consejo, en el caso de usar el pin RA4 (pin 6 del PIC 16F876) ten en cuenta que es del tipo colector abierto por lo que le deberás conectar una resistencia de 1K desde este pin a 5Vcc y luego utilizarlo de la manera habitual.

Cierto, no me habia dado cuenta.

Mañana subo los nuevos avances. Un saludo amigo.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 24 de Febrero de 2006, 00:39:00
Hola fito20, te respondo la pregunta 1 que había quedado inconclusa.

1) No es necesario que configures esos pines como entradas o salida, ya que al setear la comunicación en modo SPI solos se ponen en el estado correspondiente, de todas maneras si desea los puedes configurar tú solo para saber si están utilizados, una ves que ya esta seteado el modo SPI no es mas necesario que toques la configuración de esos pines (no trae beneficios) y de todas maneras para configurarlos todos como entrada deberás deshabilitar el modo SPI para que trabajen de modo normal, por lo que te llevaría tiempo y todo esto sin sentido.

Un saludo.

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 24 de Febrero de 2006, 07:41:00
Ok.

Estoy estudiando la SPI. En cuanto tenga mas codigo programado lo subo. Un saludo.

PD: Sigo sin contestacion del profesor
Título: RE: Mesa de mezclas
Publicado por: fito20 en 24 de Febrero de 2006, 09:40:00
Bueno, lo primero que quiero hacer es que el PIC lea la posicion del potenciometro de graves...

Una vez lo tengo seleccionado con el chipselect, le tengo que enviar por SPI la secuencia de 16 bits que creo es la que he marcado en la foto que acabo de subir:

http://album.miarroba.com/fito20/0/1/" target="_BLANK"><img src="http://fotos.miarroba.com/thumb/2844039AFD2043FF274C1F43FF274B.jpg

Donde pone A0 que po ngo A0?? y en las X da igual si son 0 o 1 no?...

Al darle tension al pote, este carga lo que tenga en la EEMEM al RDAC automaticamente...con esta secuencia pasaria del RDAC al pto serie...pero solamente introduciendole esa secuencia hace todo?...estoy hecho un lio...
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 24 de Febrero de 2006, 13:52:00
Hola fito20, lo que estas haciendo con esa instrucción que me marcaste en le foto es escribir el registro RDAC y no leerlo como tu estas intentando.

Un saludo

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 25 de Febrero de 2006, 04:57:00
Hola Carlos.

He subido un nuevo dibujo.

http://album.miarroba.com/fito20/0/1/" target="_BLANK"><img src="http://fotos.miarroba.com/thumb/234404AA7B24440036CA23440036C9.jpg

Segun el datasheet del AD5232, los comandos 9 y 10 sirven para leer una EEMEM y para leer la posicion del potenciometro, respectivamente.

Entonces:

1) Pongo el CS del pote a 0 para activarlo (logica baja)
2) Envio el comando 10 (para leer la posicion del pote)
3) Pongo el CS del pote a 1 para desactivarlo y activar el SDO
4) Ya puedo leer a traves del SPI data in del PIC el SDO del pote

Es asi la secuencia?
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 25 de Febrero de 2006, 14:58:00
Hola fito20, aparentemente la secuencia que utilizaras esta correcta, yo me e equivocado en el comentario del post anterior, lo único que no me queda en claro de mirar le datasheet es el uso del pin CS, no creo que se tenga que poner a 1 para que envíe los datos por la salida, pero como dije, no estoy seguro, de todas formas ya lo probaras tu en la practica.

Un saludo.

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 26 de Febrero de 2006, 13:50:00
Ok Carlos...mañana subo parte del codigo
Título: RE: Mesa de mezclas
Publicado por: fito20 en 27 de Febrero de 2006, 05:33:00
;---------------Encabezado-------------

LIST   p=16f876       
radix   hex       

;------------mapa de memoria---------

status   equ   0x03      ; Aquí le asignamos nombres a los
trisa   equ   0x05      ; registros indicando
porta   equ   0x05
trisb   equ   0x06      ; la posición
portb   equ   0x06      
trisc   equ   0x07
portc   equ   0x07      ; en la que se encuentran

temp1   equ   0x20      ; temporal 1
temp2   equ   0x21      ; temporal 2

cont   equ   0x20      ; defino contador

sspcon   equ   0x14      ; control SPI
sspstat   equ   0x94      ; estado SPI
sspbuf   equ   0x13      ; buffer SPI


; INICIO


reset   org   0x00      ; origen del programa, aquí comenzaré
            ; siempre que ocurra un reset
   goto    inicio      ; salto a "inicio"
   org   0x05      ; origen del código de programa
inicio   bsf   status,5   ; pongo rp0 a 1 y paso al banco1
   movlw   b"00000"   ; cargo W con 00000 salidas
   movwf   trisa      ; y paso el valor a trisa puerto A display
   movlw   b"11111111"   ; cargo W con 11111111 entradas
   movwf   trisb      ; y paso el valor a trisb puerto B interruptores
   movlw   b"00010000"   ; cargo W con 00010000
   movwf   trisc      ; y paso el valor a trisc puerto C solo entrada SPI data in
   bcf   status,5   ; pongo rp0 a 0 y regreso al banco0

   clrf   portb      ; limpio el puerto B
   clrf   cont      ; limpio el contador   

   movlw   b"00110000"   ; no collision, no overflow, autoconfigure, clock high level, FOSC/4
   movwf   sspcon      ; pasamos estos valores a control SPI



; ORDENAR LECTURA DEL POT GRAVES


   bsf   portc,1      ; pone un 1 para desactivar pot medios-altos
   bcf   portc,0      ; pone un 0 para activar pot graves-ganancia

   movlw   b"10010001"   ; leer memoria EEMEM RDAC2 graves
   movwf   temp1      ; la pasamos a temp1
   movlw   0x08
   movwf   temp2      ; Inicializa el contador

spi   bsf   portc,5      ; Sube data
   btfss   temp1,7      ; Comprueba el bit y lo baja si es cero
   bcf   portc,5
   nop         ; Envia el bit
   bsf   portc,3
   nop         ; Da un pulso de reloj
   bcf   portc,3
   nop
   rlf   temp1,f      ; Rotamos a la izquierda "temp1"
   decfsz   temp2,f      ; Comprobamos el contador, para ver si hemos enviado los 8 bits
   goto   spi      ; Si no, repetimos el bucle
   bcf   portc,5
   return         ; Fin

   
   movlw   b"00000000"   ; el resto de bits son X, la cadena es de 16 bits
   movwf   temp1      ; la pasamos a temp1
   movlw   0x08
   movwf   temp2      ; Inicializa el contador

spi2   bsf   portc,5      ; Sube data
   btfss   temp1,7      ; Comprueba el bit y lo baja si es cero
   bcf   portc,5
   nop         ; Envia el bit
   bsf   portc,3
   nop         ; Da un pulso de reloj
   bcf   portc,3
   nop
   rlf   temp1,f      ; Rotamos a la izquierda "temp1"
   decfsz   temp2,f      ; Comprobamos el contador, para ver si hemos enviado los 8 bits
   goto   spi2      ; Si no, repetimos el bucle
   bcf   portc,5
   return         ; Fin

   

; LEER POSICION POT GRAVES


   bsf   portc,0      ; pone un 1 para desactivar pot graves-ganancia

spi_cnt   movlw   0x08
   movwf   temp2      ;Inicializa el contador

spi_lee   btfss   portc,3
   goto   spi_lee
   bsf   status,0
   btfss   portc,4      ;Copia el valor de data en el carry
   bcf   status,0
   rlf   temp1,f      ;Para guardarlo en el temporal

spi_bck   btfsc   portc,3
   goto   spi_bck
   decfsz   temp2,f      ;Comprobamos el contador, para ver si hemos recibido los 8 bits
   goto   spi_lee      ;Si no, repetimos el bucle
   movf   temp1,w
   return         ;Fin. Tenemos la posicion del POT GRAVES en el registro w



MOSTRAR POSICION EN EL LCD





test   btfsc   portb,0      ; Si alguien presiona interruptor 1 CAMBIO
   call   cambio      ; voy a etiqueta cambio
   btfsc   portb,1      ; si alguien presiona interruptor 2 UP
   call   up      ; voy a etiqueta up
   btfsc   port,2      ; si alguien presiona interruptor 3 DOWN
   call   down      ; voy a etiqueta down
   btfsc   port,3      ; si alguien presiona interruptor 4 MEM1
   call   mem1      ; voy a etiqueta mem1
   btfsc   port,4      ; si alguien presiona interruptor 5 MEM2
   call   mem2      ; voy a etiqueta mem2
   btfsc   port,5      ; si alguien presiona interruptor 6 MEM3
   call   mem3      ; voy a estiqueta mem3
   btfsc   port,6      ; si alguien presiona interruptor 7 MEM4
   call   mem4      ; voy a estiqueta mem4
   btfsc   port,7      ; si alguien presiona interruptor 8 MEM5
   call   mem5      ; voy a estiqueta mem5
   







DUDAS:


1) El clock del PIC que lo genero a traves de un cristal de cuarzo 4MHz?

2) Esta bien configurado sspcon? que es FOSC/4?
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 02 de Marzo de 2006, 17:28:00
Hola fito20, el programa que propones, aparte de no funcionar de manera correcta tú implementas la comunicación SPI por medio de software pudiendo esta realizarse por medio de hardware, acá te dejo un programita para el uso y configuración del modulo SSP:

Codigo:
;---------------Encabezado--------------------------------------------------------------------------

   LIST      P = 16F876
   INCLUDE      <P16F876.INC>

;------------Configuración de bits------------------------------------------------------------------
__CONFIG   _CP_OFF&_DEBUG_OFF&_WRT_ENABLE_ON&_CPD_OFF&_LVP_OFF&_BODEN_ON&_PWRTE_ON&_WDT_OFF&_XT_OSC

;------------Configuración de pines-----------------------------------------------------------------
#DEFINE      CAMBIO   PORTB,0       ; direccion del pulsador CAMBIO
#DEFINE      UP   PORTB,1      ; direccion del pulsador UP
#DEFINE      DOWN   PORTB,2      ; direccion del pulsador DOWN
#DEFINE      MEM1   PORTB,3      ; direccion del pulsador MEM1
#DEFINE      MEM2   PORTB,4      ; direccion del pulsador MEM2
#DEFINE      MEM3   PORTB,5      ; direccion del pulsador MEM3
#DEFINE      MEM4   PORTB,6      ; direccion del pulsador MEM4
#DEFINE      MEM5   PORTB,7      ; direccion del pulsador MEM5

#DEFINE      CS1   PORTC,0      ; direccion del pin de seleccion del CHIP 1
#DEFINE      CS2   PORTC,1      ; direccion del pin de seleccion del CHIP 2
#DEFINE      SCK   PORTC,3      ; pin del CLOCK para la comunicacion SPI
#DEFINE      SDI   PORTC,4      ; pin de entrada de datos para la comunicacion SPI
#DEFINE      SDO   PORTC,5      ; pin de salida de datos para la comunicacion SPI

;------------Definicion de memoria RAM--------------------------------------------------------------
POT_GANANCIA   EQU   .32
POT_GRAVES   EQU   .33

;------------Definicion de macros-------------------------------------------------------------------
GR_GA   macro
   bcf   PORTC,0         ; pone un 0 para activar pot graves-ganancia
   bsf   PORTC,1         ; pone un 1 para desactivar pot medios-altos
   endm

ME_AL   macro
   bsf   PORTC,0         ; pone un 1 para desactivar pot graves-ganancia
   bcf   PORTC,1         ; pone un 0 para activar pot medios-altos
   endm

NO_CHIP   macro
   bsf   PORTC,0         ; pone un 1 para desactivar pot graves-ganancia
   bsf   PORTC,1         ; pone un 1 para desactivar pot medios-altos
   endm

;---------------------------------------------------------------------------------------------------
   ORG   .0         ; vector de RESET
   goto   INICIO         ;
   ORG   .4         ; vector de INTERRUPCION
   goto   INICIO         ;

;---------------------------------------------------------------------------------------------------
OUTPUT   movwf   SSPBUF         ; Coloca el dato de W en wl bufer
RET   bsf   STATUS,RP0      ; selecciona el banco 1
   btfss   SSPSTAT,BF      ; verifica si la recepcion termino
   goto   RET         ; si no a terminado regresa a RET
   bcf   STATUS,RP0      ; selecciona el banco 0
   movf   SSPBUF,W         ; coloca el dato recibido en W
   return            ; retorna de la sub-rutina

;---------------------------------------------------------------------------------------------------
;SENSADO DE PULSADORES
TEST   btfsc   CAMBIO         ; Si alguien presiona interruptor 1 CAMBIO
   call   SUB_CAMBIO      ; voy a etiqueta cambio
   btfsc   UP         ; si alguien presiona interruptor 2 UP
   call   SUB_UP         ; voy a etiqueta up
   btfsc   DOWN         ; si alguien presiona interruptor 3 DOWN
   call   SUB_DOWN         ; voy a etiqueta down
   btfsc   MEM1         ; si alguien presiona interruptor 4 MEM1
   call   SUB_MEM1         ; voy a etiqueta mem1
   btfsc   MEM2         ; si alguien presiona interruptor 5 MEM2
   call   SUB_MEM2         ; voy a etiqueta mem2
   btfsc   MEM3         ; si alguien presiona interruptor 6 MEM3
   call   SUB_MEM3         ; voy a estiqueta mem3
   btfsc   MEM4         ; si alguien presiona interruptor 7 MEM4
   call   SUB_MEM4         ; voy a estiqueta mem4
   btfsc   MEM5         ; si alguien presiona interruptor 8 MEM5
   call   SUB_MEM5         ; voy a estiqueta mem5
   return

;---------------------------------------------------------------------------------------------------
INICIO   clrf   PORTB         ; limpio el puerto B

   bsf   STATUS,RP0      ; pongo rp0 a 1 y paso al banco1
   bcf   STATUS,RP1
   movlw   b"11100000"      ; cargo W con 00000 salidas
   movwf   TRISA         ; y paso el valor a trisa puerto A display
   movlw   b"11111111"      ; cargo W con 11111111 entradas
   movwf   TRISB         ; y paso el valor a trisb puerto B interruptores
   movlw   b"00010000"      ; cargo W con 00010000
   movwf   TRISC         ; y paso el valor a trisc puerto C solo entrada SPI data in
   movlw   B"10000000"      ;
   movwf   SSPSTAT         ; cargo el reguistro SSPSTAT con el valor anterior
   bcf   STATUS,RP0      ; pongo rp0 a 0 y regreso al banco0

   NO_CHIP            ; llama a la macro de deshabilitar los 4 potes.
   movlw   b"00110010"      ; no collision, no overflow, habilito el puerto SPI, clock inactivo en nivel alto, FOSC/64
   movwf   SSPCON         ; pasamos estos valores a control SPI

; LEER POSICION POT GANANCIA
   GR_GA            ; llama a la macro de habilitar el pote. de graves-ganancia
   movlw   B"10010000"      ; coloca el byte para leer memoria EEMEM RDAC1 graves
   call   OUTPUT         ; transmite el byte anterior
   movlw   B"00000000"      ; coloca 8 bits 0 para generar el clock
   call   OUTPUT         ; transmite el byte anterior
   movwf   POT_GANANCIA      ; el dato de W lo pasa a la memoria POT_GANANCIA
; LEER POSICION POT GRAVES
   movlw   B"10010001"      ; coloca el byte para leer memoria EEMEM RDAC2 graves
   call   OUTPUT         ; transmite el byte anterior
   movlw   B"00000000"      ; coloca 8 bits 0 para generar el clock
   call   OUTPUT         ; transmite el byte anterior
   movwf   POT_GRAVES      ; el dato de W lo pasa a la memoria POT_GRAVES
   NO_CHIP            ; llama a la macro de deshabilitar los 4 potes.

   goto   $

;---------------------------------------------------------------------------------------------------
   END


Espero te sea de utilidad, lo que no entiendas solo tienes que consultar.

Un saludo

Atte. CARLOS
Título: RE: Mesa de mezclas
Publicado por: fito20 en 03 de Marzo de 2006, 05:22:00
Muchisimas gracias Carlos, ya te estaba echando de menos por aqui...claro que me sirve...es muchisimo mas facil asi...

Le voy a echar un ojo y te comento las dudas que tenga. Un saludo y muchisimas gracias por tu tiempo
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 03 de Marzo de 2006, 05:46:00
Hola fito20, en realidad estaba ausentado por problemas con mi servicio de internet, no es que te haya dejado sin ayuda.

Un saludo.

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 03 de Marzo de 2006, 08:23:00
Ok Carlos, no te preocupes.

Tu programa esta muy bien organizado usando macros.

No es necesario definir las variables a una direccion de memoria (mapa de memoria) como por ejemplo:

status       eq       0x20

O eso debo añadirselo al codigo que han puesto arriba?
Título: RE: Mesa de mezclas
Publicado por: fito20 en 03 de Marzo de 2006, 09:35:00
Carlos, ya tengo parte del codigo programado en base a modelo.

Sobre todo quiero que le eches un ojo a como hago el cambio de un potenciometro a otro al pulsar el interruptor de CAMBIO.

Lo que he hecho es memorizar en un contador un 1 despues de la lectura del GAIN. Asi, para despues de la lectura del GRAVES coloco un 2, despues de la lectura del MEDIOS un 3 y despues de la lectura de ALTOS, un 0.


Para 0: 00000000
Para 1: 00000001
Para 2: 00000010
Para 3: 00000011

Cuando pulsamos CAMBIO, se comprueba el contador. Se mira primero el 2º bit, si es 1 puede ser medios-altos, asi que nos vamos a MEDAL. Alli examinamos el 1º bit y si es 0 es medios y si es 1 es altos.

En caso de que el 2º bit sea 0, comprobamos es 1º bit, si tambien es 0 es gain, y si es 1 es graves.

¿Como puedo subir el codigo como tu para que no se descentre?
Título: RE: Mesa de mezclas
Publicado por: fito20 en 04 de Marzo de 2006, 04:25:00
Codigo:
;---------------Encabezado-------------

LIST      P = 16F876
INCLUDE      <P16F876.INC>


;------------Configuración de bits------------------------------------------------------------------

__CONFIG   _CP_OFF&_DEBUG_OFF&_WRT_ENABLE_ON&_CPD_OFF&_LVP_OFF&_BODEN_ON&_PWRTE_ON&_WDT_OFF&_XT_OSC


;------------mapa de memoria---------

status   equ   0x03      ; Aquí le asignamos nombres a los
trisa   equ   0x05      ; registros indicando
porta   equ   0x05
trisb   equ   0x06      ; la posición
portb   equ   0x06      
trisc   equ   0x07
portc   equ   0x07      ; en la que se encuentran

temp1   equ   0x20      ; temporal 1
temp2   equ   0x21      ; temporal 2

gananc   equ   0x22      ; posicion GAIN
graves   equ   0x23      ; posicion GRAVES
medios   equ   0x24      ; posicion MEDIOS
altos   equ   0x25      ; posicion ALTOS


mem1gr   equ   0x28      ; Preset mem1 graves
mem1me   equ   0x29      ; Preset mem1 medios
mem1al   equ   0x30      ; Preset mem1 altos
mem2gr   equ   0x31      ; Preset mem2 graves
mem2me   equ   0x32      ; Preset mem2 medios
mem2al   equ   0x33      ; Preset mem2 altos
mem3gr   equ   0x34      ; Preset mem3 graves
mem3me   equ   0x35      ; Preset mem3 medios
mem3al   equ   0x36      ; Preset mem3 altos
mem4gr   equ   0x37      ; Preset mem4 graves
mem4me   equ   0x38      ; Preset mem4 medios
mem4al   equ   0x39      ; Preset mem4 altos
mem5gr   equ   0x40      ; Preset mem5 graves
mem5me   equ   0x41      ; Preset mem5 medios
mem5al   equ   0x42      ; Preset mem5 altos

cont   equ   0x20      ; defino contador

sspcon   equ   0x14      ; control SPI
sspstat   equ   0x94      ; estado SPI
sspbuf   equ   0x13      ; buffer SPI


;------------Configuración de pines-----------------------------------------------------------------

#DEFINE      CAMBIO   PORTB,0    ; direccion del pulsador CAMBIO
#DEFINE      UP   PORTB,1      ; direccion del pulsador UP
#DEFINE      DOWN   PORTB,2      ; direccion del pulsador DOWN
#DEFINE      MEM1   PORTB,3      ; direccion del pulsador MEM1
#DEFINE      MEM2   PORTB,4      ; direccion del pulsador MEM2
#DEFINE      MEM3   PORTB,5      ; direccion del pulsador MEM3
#DEFINE      MEM4   PORTB,6      ; direccion del pulsador MEM4
#DEFINE      MEM5   PORTB,7      ; direccion del pulsador MEM5

#DEFINE      CS1   PORTC,0      ; direccion del pin de seleccion del CHIP 1
#DEFINE      CS2   PORTC,1      ; direccion del pin de seleccion del CHIP 2
#DEFINE      SCK   PORTC,3      ; pin del CLOCK para la comunicacion SPI
#DEFINE      SDI   PORTC,4      ; pin de entrada de datos para la comunicacion SPI
#DEFINE      SDO   PORTC,5      ; pin de salida de datos para la comunicacion SPI


;------------Definicion de memoria RAM--------------------------------------------------------------

POT_GANANCIA   EQU   .32
POT_GRAVES   EQU   .33
POT_MEDIOS   EQU   .34
POT_ALTOS   EQU   .35


;------------Definicion de macros-------------------------------------------------------------------

GR_GA   macro
   bcf   PORTC,0         ; pone un 0 para activar pot graves-ganancia
   bsf   PORTC,1         ; pone un 1 para desactivar pot medios-altos
   endm

ME_AL   macro
   bsf   PORTC,0         ; pone un 1 para desactivar pot graves-ganancia
   bcf   PORTC,1         ; pone un 0 para activar pot medios-altos
   endm

NO_CHIP   macro
   bsf   PORTC,0         ; pone un 1 para desactivar pot graves-ganancia
   bsf   PORTC,1         ; pone un 1 para desactivar pot medios-altos
   endm



;---------------------------------------------------------------------------------------------------
   ORG   .0         ; vector de RESET
   goto   INICIO         ;
   ORG   .4         ; vector de INTERRUPCION
   goto   INICIO         ;

;---------------------------------------------------------------------------------------------------
OUTPUT   movwf   SSPBUF         ; Coloca el dato de W en wl bufer
RET   bsf   STATUS,RP0      ; selecciona el banco 1
   btfss   SSPSTAT,BF      ; verifica si la recepcion termino
   goto   RET         ; si no a terminado regresa a RET
   bcf   STATUS,RP0      ; selecciona el banco 0
   movf   SSPBUF,W      ; coloca el dato recibido en W
   return            ; retorna de la sub-rutina

;---------------------------------------------------------------------------------------------------
;SENSADO DE PULSADORES

TEST   btfsc   CAMBIO         ; Si alguien presiona interruptor 1 CAMBIO
   call   SUB_CAMBIO      ; voy a etiqueta cambio
   btfsc   UP         ; si alguien presiona interruptor 2 UP
   call   SUB_UP         ; voy a etiqueta up
   btfsc   DOWN         ; si alguien presiona interruptor 3 DOWN
   call   SUB_DOWN      ; voy a etiqueta down
   btfsc   MEM1         ; si alguien presiona interruptor 4 MEM1
   call   SUB_MEM1      ; voy a etiqueta mem1
   btfsc   MEM2         ; si alguien presiona interruptor 5 MEM2
   call   SUB_MEM2      ; voy a etiqueta mem2
   btfsc   MEM3         ; si alguien presiona interruptor 6 MEM3
   call   SUB_MEM3      ; voy a estiqueta mem3
   btfsc   MEM4         ; si alguien presiona interruptor 7 MEM4
   call   SUB_MEM4      ; voy a estiqueta mem4
   btfsc   MEM5         ; si alguien presiona interruptor 8 MEM5
   call   SUB_MEM5      ; voy a estiqueta mem5
   return

;---------------------------------------------------------------------------------------------------
;CAMBIO DE POTENCIOMETROS

SUB_CAMBIO   btfsc   cont,1      ; comprobamos el 2ºbit del contador, si es 0 salta 1 instruccion
      goto   MEDALT
      btfsc   cont,0      ; comprobamos el 1º bit del contador, si es 0 salta 1 instruccion
      goto   GRAVES
      goto   GAIN      ; el valor del contador es 0, GAIN.

GRAVES      GR_GA
      movlw   B"10010001"   ; coloca el byte para leer memoria EEMEM RDAC2 graves
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_GRAVES   ; el dato de W lo pasa a la memoria POT_GRAVES
      NO_CHIP
      MOSTRAR POSICION POT GRAVES EN LCD

      movlw   B"00000010"   ; ponemos un 1 en el contador
      movwf   cont

      goto   TEST

MEDALT      btfsc   cont,0      ; comprobamos el 1º bit del contador, si es 0 salta 1 instruccion
      goto   ALTOS
      goto   MEDIOS


MEDIOS      ME_AL
      movlw   B"10010000"   ; coloca el byte para leer memoria EEMEM RDAC1 medios
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_MEDIOS   ; el dato de W lo pasa a la memoria POT_MEDIOS
      NO_CHIP
      MOSTRAR POSICION POT MEDIOS EN LCD

      movlw   B"00000011"   ; ponemos un 1 en el contador
      movwf   cont
      goto   TEST

ALTOS      ME_AL
      movlw   B"10010001"   ; coloca el byte para leer memoria EEMEM RDAC2 altos
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_ALTOS   ; el dato de W lo pasa a la memoria POT_ALTOS
      NO_CHIP
      MOSTRAR POSICION POT ALTOS EN LCD

      movlw   B"00000000"      ; ponemos un 1 en el contador
      movwf   cont
      goto   TEST


;---------------------------------------------------------------------------------------------------
;SUBIR UNA POSICION EN EL POTENCIOMETRO

SUB_UP   btfsc   cont,1         ; comprobamos el 2ºbit del contador, si es 0 salta 1 instruccion   
   goto   MEDALTUP
   btfsc   cont,0         ; comprobamos el 1º bit del contador, si es 0 salta 1 instruccion
   goto   GRAVESUP
   goto   GAINUP         ; el valor del contador es 0, GAIN.

GAINUP   GR_GA
   movlw   B"11100000"   ; coloca el byte para subir en una posicion el valor de RDAC1
   call   OUTPUT      ; transmite el byte anterior
   movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
   call   OUTPUT      ; transmite el byte anterior
   movwf   POT_GANANCIA   ; el dato de W lo pasa a la memoria POT_GANANCIA
   NO_CHIP
   MOSTRAR POSICION POT GANANCIA EN LCD
   goto   TEST

GRAVESUP   GR_GA
      movlw   B"11100001"   ; coloca el byte para subir en una posicion el valor de RDAC2
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_GRAVES   ; el dato de W lo pasa a la memoria POT_GRAVES
      NO_CHIP
      MOSTRAR POSICION POT GRAVES EN LCD
      goto   TEST

MEDALTUP   btfsc   cont,0      ; comprobamos el 1º bit del contador, si es 0 salta 1 instruccion
      goto   ALTOSUP
      goto   MEDIOSUP

MEDIOSUP   ME_AL
      movlw   B"11100000"   ; coloca el byte para subir en una posicion el valor de RDAC1
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_MEDIOS   ; el dato de W lo pasa a la memoria POT_MEDIOS
      NO_CHIP
      MOSTRAR POSICION POT MEDIOS EN LCD
      goto   TEST

ALTOSUP      ME_AL
      movlw   B"11100001"   ; coloca el byte para subir en una posicion el valor de RDAC2
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_ALTOS   ; el dato de W lo pasa a la memoria POT_ALTOS
      NO_CHIP
      MOSTRAR POSICION POT ALTOS EN LCD
      goto   TEST

;---------------------------------------------------------------------------------------------------
;BAJAR UNA POSICION EN EL POTENCIOMETRO

SUB_DOWN   btfsc   cont,1         ; comprobamos el 2ºbit del contador, si es 0 salta 1 instruccion   
      goto   MEDALTDW
      btfsc   cont,0         ; comprobamos el 1º bit del contador, si es 0 salta 1 instruccion
      goto   GRAVESDW
      goto   GAINDW         ; el valor del contador es 0, GAIN.

GAINDW   GR_GA
   movlw   B"01100000"   ; coloca el byte para bajar en una posicion el valor de RDAC1
   call   OUTPUT      ; transmite el byte anterior
   movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
   call   OUTPUT      ; transmite el byte anterior
   movwf   POT_GANANCIA   ; el dato de W lo pasa a la memoria POT_GANANCIA
   NO_CHIP
   MOSTRAR POSICION POT GANANCIA EN LCD
   goto   TEST

GRAVESDW   GR_GA
      movlw   B"01100001"   ; coloca el byte para bajar en una posicion el valor de RDAC2
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_GRAVES   ; el dato de W lo pasa a la memoria POT_GRAVES
      NO_CHIP
      MOSTRAR POSICION POT GRAVES EN LCD
      goto   TEST

MEDALTDW   btfsc   cont,0      ; comprobamos el 1º bit del contador, si es 0 salta 1 instruccion
      goto   ALTOSDW
      goto   MEDIOSDW

MEDIOSDW   ME_AL
      movlw   B"01100000"   ; coloca el byte para bajar en una posicion el valor de RDAC1
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_MEDIOS   ; el dato de W lo pasa a la memoria POT_MEDIOS
      NO_CHIP
      MOSTRAR POSICION POT MEDIOS EN LCD
      goto   TEST

ALTOSDW      ME_AL
      movlw   B"01100001"   ; coloca el byte para bajar en una posicion el valor de RDAC2
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_ALTOS   ; el dato de W lo pasa a la memoria POT_ALTOS
      NO_CHIP
      MOSTRAR POSICION POT ALTOS EN LCD
      goto   TEST


;---------------------------------------------------------------------------------------------------
;ALMACENAR O CARGAR PRESET EN MEM1

SUB_MEM1   call   retardo2s   ; esperamos 2 segundos y volvemos a comprobar
      btfsc   port,3      ; vuelve a comprobar el Interruptor de mem1
      goto   almprst      ; el boton ha estado presionado durante 2 segundos y se almacena el preset
               ; en caso que se suelte, se carga el preset anteriormente guardado
      GR_GA
      movlw   B"10110000"   ; cargar lo que envio por serie a RDAC1
      call   OUTPUT      ; transmite el byte anterior
      movlw   POT_GAEEPROM   ; coloca el valor del GAIN almacenado
      call   OUTPUT      ; transmite el byte anterior
      
      movlw   B"10110001"   ; cargar lo que envio por serie a RDAC2
      call   OUTPUT      ; transmite el byte anterior
      movlw   POT_GREEPROM   ; coloca el valor del GRAVES almacenado
      call   OUTPUT      ; transmite el byte anterior

      ME_AL
      movlw   B"10110000"   ; cargar lo que envio por serie a RDAC1
      call   OUTPUT      ; transmite el byte anterior
      movlw   POT_MEEEPROM   ; coloca el valor del MEDIOS almacenado
      call   OUTPUT   

      movlw   B"10110001"   ; cargar lo que envio por serie a RDAC2
      call   OUTPUT      ; transmite el byte anterior
      movlw   POT_ALEEPROM   ; coloca el valor del ALTOS almacenado
      call   OUTPUT   
      
      goto   GAIN

;---------------------------------------------------------------------------------------------------
INICIO   clrf   PORTB         ; limpio el puerto B
   

   bsf   STATUS,RP0      ; pongo rp0 a 1 y paso al banco1
   bcf   STATUS,RP1
   movlw   B"11100000"      ; cargo W con 00000 salidas
   movwf   TRISA         ; y paso el valor a trisa puerto A display
   movlw   B"11111111"      ; cargo W con 11111111 entradas
   movwf   TRISB         ; y paso el valor a trisb puerto B interruptores
   movlw   B"00010000"      ; cargo W con 00010000
   movwf   TRISC         ; y paso el valor a trisc puerto C solo entrada SPI data in
   movlw   B"10000000"      ;
   movwf   SSPSTAT         ; cargo el reguistro SSPSTAT con el valor anterior
   bcf   STATUS,RP0      ; pongo rp0 a 0 y regreso al banco0

   NO_CHIP            ; llama a la macro de deshabilitar los 4 potes.
   movlw   B"00110010"      ; no collision, no overflow, habilito el puerto SPI, clock inactivo en nivel alto, FOSC/64
   movwf   SSPCON         ; pasamos estos valores a control SPI


   
; LEER POSICION POT GANANCIA
GAIN   GR_GA            ; llama a la macro de habilitar el pote. de graves-ganancia
   movlw   B"10010000"      ; coloca el byte para leer memoria EEMEM RDAC1 gain
   call   OUTPUT         ; transmite el byte anterior
   movlw   B"00000000"      ; coloca 8 bits 0 para generar el clock
   call   OUTPUT         ; transmite el byte anterior
   movwf   POT_GANANCIA      ; el dato de W lo pasa a la memoria POT_GANANCIA
   NO_CHIP
   MOSTRAR POSICION POT GANANCIA EN LCD
   
   movlw   B"00000001"      ; ponemos un 1 en el contador
   movwf   cont

   goto   TEST

   goto   $
;---------------------------------------------------------------------------------------------------
   END

Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 04 de Marzo de 2006, 11:07:00
Hola fito20, para subir los programas y que queden bien primero lo que hago es copiar el programa en el notepad de windows, hay lo centro todo y luego lo paso al post, después usando la función PRESENTAR EN CODIGO que ofrece miarroba, de las teclas superiores
de donde se encuentra el espacio del mensaje  redactado, la N° 10 de izquierda a derecha.

La otra forma de hacer que se cambie la función con la tecla CAMBIO es haciendo 4 rutinas diferentes (una por cada función) dentro de cada rutina se comprueba el estado de la tecla y si esta presionada se salta a la rutina siguiente, llegando a la ultima se salta a la primera, de esta forma no necesitas andar sumando ni comprobando el estado de los bits dentro de una variable, solo sensas la tecla y saltas a la otra, es realmente sencillo.

Acuérdate que luego de presionada la tecla debes hacer que los comandos de esta se anulen por un periodo determinado de tiempo por ejemplo 1 segundo, porque en el caso de no hacerlo te será muy difícil seleccionar una función ya que saltaría demasiado rápido de una a otra, lo mismo sucedería con el programa que as implementado vos.

Un saludo.

Atte. CARLOS  

Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 04 de Marzo de 2006, 11:28:00
Escrito originalmente por fito20
Codigo:

status   equ   0x03      ; Aquí le asignamos nombres a los
trisa   equ   0x05      ; registros indicando
porta   equ   0x05
trisb   equ   0x06      ; la posición
portb   equ   0x06      
trisc   equ   0x07
portc   equ   0x07      ; en la que se encuentran




Hola fito20, veo que defines los registros, te comento que si usas (como en este caso) en el encabezado el “include” no es necesario que definas las direcciones de los registros, solo usando letras mayúsculas con para el nombre del registro alcanza ej. STATUS, TRISA, PORTA, etc.

Un saludo

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 04 de Marzo de 2006, 11:52:00
Ok Carlos, voy a modificar el CAMBIO como indicas. Tambien tengo ya programado el almacen y carga de presets. Lo subo aqui mañana o te lo mando a alguna direccion de correo...es bastante largo...lo que tu me digas. Un saludo.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 04 de Marzo de 2006, 17:59:00
Hola fito20, puedes usar mi e-mail: fcp_19@hotmail.com

Un saludo.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 05 de Marzo de 2006, 05:57:00
Carlos te he enviado un mail. Un saludo.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 05 de Marzo de 2006, 14:19:00
Hola fito20, si lo e recibido, lo miro y luego comento, ok.

Un saludo

Atte. CARLOS
Título: RE: Mesa de mezclas
Publicado por: fito20 en 05 de Marzo de 2006, 14:36:00
Ok. Gracias!
Título: RE: Mesa de mezclas
Publicado por: fito20 en 08 de Marzo de 2006, 04:44:00
Hola Carlos.

Me estuve leyendo el datasheet del 16F876 para ver como se leia y escribia la EEPROM. Venian dos ejemplos, pero despues de mucho mirarlo no supe como adaptarlo a mi programa, por eso decidi usar la EEPROM de los potenciometros.

Con respecto a tu pregunta de si he probado la rutina de comunicación con los potes, me llegaron los potes de analog...los AD5232...pero no son "cucarachas" como los PIC o demas integrados, sino que son de los pequeños con las patas abiertas, por lo que no puedo conectarlos a una placa de pruebas para ensayarlo, sino que van directamente soldados a un PCB. ¿Que puedo hacer?
Título: RE: Mesa de mezclas
Publicado por: fito20 en 08 de Marzo de 2006, 05:20:00
Voy a intentar modificar el programa para que guarde los presets en el PIC. Ahora te aviso.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 08 de Marzo de 2006, 06:52:00
Te he enviado un mail Carlos con las nuevas modificaciones del programa. Tal y como mencionaste, he almacenado los presets en el PIC en lugar de usar la EEPROM de los potes.

Como puedo ensayar los potes que me han mandado si no los puedo clavar en una placa de pruebas?

He estado mirando la pagina y solo mandan samples de este tipo.

Un saludo.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 08 de Marzo de 2006, 20:35:00
Hola fito20, para probar los potes puedes usar dos métodos:

* Hacer una plaquita en la cual sueldes los potes y de esta saques los cables hacia el protoboard.

* Poner pedacitos de cables rígidos en el protoboard y luego soldar uno por uno de estos a los pines del pote.

La primera es la mejor forma pero la mas lenta.

Te comento que el programa tal cual me lo mandas esta lejos de funcionar, muy lejos, te recomendaría que empieces a optimizarlo ya que si sigues de esa manera no te entrara ni en un disco rígido de PC Muchas risas

La ayuda por el momento que te puedo dar es que pruebes si los comandos funcionan en los potes o sea si estos responden a los comando, hace una rutina cortita que haga que suban su resistencia y luego que las baje, programa el PIC, monta el proto y con un multímetro mide la salida del pote, si anda o cuando logres que funcione me pasas la rutina y después si te podré dar una mano con certeza de que te funcionara, pero por lo pronto solo estamos hablando en el aire ya que no sabemos si lo básico lo puede hacer.

Una ves que me pases la rutina que haga que suba y baje la resistencias de los pote. en un par de días te puedo pasar las rutina que realice el resto de las funciones de manera correcta.

Un saludo.

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 09 de Marzo de 2006, 04:00:00
Si que es un poco largo el programa...sobre todo la carga y almacen de presets que deberian ser tan solo 2 rutinas y no 10...Sonrisa Gigante

Me voy a poner manos a la obra con lo del POTE, a ver si lo hago funcionar, lo malo es que son patillas muy muy finas...a ver como lo hago...en cuanto lo tenga te aviso. Un saludo Carlos.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 09 de Marzo de 2006, 05:06:00
Bueno Carlos, el ensayo de dicho potenciometro mediante cables (2º opcion) es imposible...y como no tengo posibilidades de realizar un PCB por encontrarme lejos de la facultad, he estado investigando nuevos potenciometros digitales que tuvieran un package DIP...y he encontrado el DS1867 de DALLAS, asi que he pedido muestras gratuitas y estoy a la espera de que me las envien.

Mientras me gustaria que me dijeses si he entendido bien el mecanismo de funcionamiento del nuevo potenciometro (esta peor explicado que en el analog).

Para empezar las cadenas de bits que se envian y se reciben son de 17bits, con lo que no me sirve la subrrutina que me enviaste para subir datos al POTE ya que iba de 8 en 8.

Tampoco me queda clara la lectura de la posicion del potenciometro, ya no se puede elegir entre el RDAC1 y el RDAC2 sino que siempre te va a enviar la posicion de los dos potenciometros...?¿

Te dejo el enlace del datasheet a ver si tu que entiendes mas de esto lo descifras.

http://pdfserv.maxim-ic.com/en/ds/DS1867.pdf
Título: RE: Mesa de mezclas
Publicado por: fito20 en 12 de Marzo de 2006, 09:09:00
Bueno, pues he cambiado de potenciometros una vez mas...al final he vuelto a mirar y me quedo con los AD5204 de analog, que aunque no tiene memoria EEPROM me hacen el apaño...cuando arranque el ecualizador le metere en el programa que me ponga la posicion de los potes a la mitad para no tener que partir cada pote de la posicion 0...y ya esta, no hay mas problema ya que no usaba la memoria de los potes para nada ya que los presets van almacenados en el PIC.

Dejo aqui el enlace al datasheet del AD5204:

http://www.analog.com/UploadedFiles/Data_Sheets/140808745AD5204_6_0.pdf

Le voy a echar un ojo mientras me llegan las muestras que he pedido y voy a diseñar un programita que me permita subir y bajar posiciones. Despues lo ensayare y cuando funcione te mando la rutina y ya vemos el resto del programa.

Un saludo Carlos.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 12 de Marzo de 2006, 13:58:00
Hola fito20, OK estaré esparando la respuesta cuando ya consigas controlar los potes. espero que tengas suerte.

Un saludo

Atte. CARLOS
Título: RE: Mesa de mezclas
Publicado por: fito20 en 14 de Marzo de 2006, 05:02:00
Hola Carlos.

Aun estoy a la espera de los potenciometros, pero he estado haciendo un esquema del montaje para probar el up y el down, y no se si el resto de entradas y salidas que quedan sin usar debo conectarlas a alimentacion...o mejor las configuro como salidas y listo?
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 14 de Marzo de 2006, 17:40:00
Hola fito20, la mejor manera que yo conozco para conectar los pines sin uso de un PIC es setearlos como entrada y conectarlos a masa, de esta forma al leer dicho pin tendrás un cero, y por culpa de malos manejos no será posible que quemes uno de estos.

Un saludo.

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 15 de Marzo de 2006, 02:24:00
Muchas gracias Carlos. Espero que entre hoy y mañana me lleguen los potes y pueda ensayarlos. Un saludo.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 23 de Marzo de 2006, 13:42:00
Pues me acaban de llegar los potenciometros. Este finde no podre ensayarlos. Asi que el lunes empezare.

Te mantengo informado.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 27 de Marzo de 2006, 19:52:00
Hola fito20, estare en la espera de tu mensaje, un saludo.

Atte. CARLOS.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 28 de Marzo de 2006, 17:03:00
Pues he tenido problemillas con el PIC ayer y hoy. El puerto A solamente me funciona como salida...como entrada no obedece a estimulos...muy raro...

Como el display esta en el puerto A y por lo tanto como salida, no habra problemas. A ver si mañana puedo ensayar el pote pinchandolo en otro puerto.

Un saludo.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 28 de Marzo de 2006, 18:04:00
Hola fito20. probablemente la causa de que los pines del puerto A no funcionen como entradas sea que no as desactivado los convertidores A/D, de fabrica vienen configuradas como entradas analógicas y para que sean digitales debes desactivarlas.

Suerte, un saludo

Atte. CARLOS

Título: RE: Mesa de mezclas
Publicado por: fito20 en 29 de Marzo de 2006, 03:21:00
Ah, pues no lo sabia. Mirare en el datasheet para desactivar el convertidos A/D. En breve me pongo con ello. Gracias Carlos Giño
Título: RE: Mesa de mezclas
Publicado por: fito20 en 29 de Marzo de 2006, 12:42:00
Lo del puerto A ya esta solucionado. Tal y como me dijiste, solo habia que desactivar el convertidor.

He ensayado la rutina que me pasaste "output" para comunicacion SPI pero no funciona Carlos, no cambia la posicion del pote. Mañana lo intentare con otra que tengo. Se te ocurre algo?

Un saludo.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 29 de Marzo de 2006, 14:23:00
Hola fito20. la rutina que yo te habia enviado era para los primeros potes que teniamos pensado usar, lo cual no quiere decir que para estos potes sea la misma trama de comunicacion, por lo que deberas mirar en el datasheet cual es la trama de estos ultimos.

Un saludo y suerte.

Atte. CARLOS.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 29 de Marzo de 2006, 14:56:00
Ok. Mañana sin falta lo repasare. Un saludo.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 01 de Abril de 2006, 04:37:00
El tema esta mas o menos solucionado...al arrancar pongo a 1 el SHUTDOWN y un 0 en PRESET, los potes se colocan a 25K cada uno, luego pongo un 1 en PRESET y se mantiene la posicion.

Sin embargo el programa se esta ejecutando continuamente y el pin de PRESET pasa continuamente de 0 a 1...pongo el programita, seguro que es una tonteria, pero no veo donde esta el error para que se este ejecutando continuamente el programa...

Codigo:
reset   org   0x00         ; origen del programa, aquí comenzará siempre que ocurra un reset
   goto    inicio        ; salta a "inicio"
   
inicio   bcf   STATUS,5
   bcf   STATUS,6
   clrf   POT_GANANCIA
   clrf   PORTA
   clrf   PORTB
   clrf   PORTC
   bsf   STATUS,5     ; banco1
   movlw   0x06
   movwf   ADCON1
   movlw   0XCF
   movwf   TRISA
   movlw   b"11111111"  ;
   movwf   TRISB        ; y pasa el valor a trisb
   movlw   b"00001000"
   movwf   TRISC
   bcf   STATUS,5     ; banco 0
   
   bsf   PORTC,1
   bsf   PORTC,6   
   call   Retardo_100ms
   bcf   PORTC,2
   call   Retardo_100ms
   bsf   PORTC,2
   
   
Retardo_100ms   movlw   d"100"         ; Aporta 1 ciclo máquina. Este es el valor de "M".
      goto   Retardos_ms      ; Aporta 2 ciclos máquina.

Retardos_ms   movwf   R_ContB         ; Aporta 1 ciclo máquina.

R1ms_BucleExterno   movlw   d"249"      ; Aporta Mx1 ciclos máquina. Este es el valor de "K".
         movwf   R_ContA         ; Aporta Mx1 ciclos máquina.

R1ms_BucleInterno   nop            ; Aporta KxMx1 ciclos máquina.
         decfsz   R_ContA         ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
         goto   R1ms_BucleInterno      ; Aporta (K-1)xMx2 ciclos máquina.
         decfsz   R_ContB         ; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
         goto   R1ms_BucleExterno    ; Aporta (M-1)x2 ciclos máquina.
         
         return            ; El salto del retorno aporta 2 ciclos máquina

;------------------------------------------
   end           ; se acabó
;------------------------------------------
Título: RE: Mesa de mezclas
Publicado por: fito20 en 02 de Abril de 2006, 04:32:00
Bueno, este problema parece que ya esta resuelto. Sigo investigando.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 03 de Abril de 2006, 06:45:00
Hola Carlos, hay un chaval en el foro que me esta echando una mano con la comunicacion con el pote. En cuanto tenga la rutina lista te la paso. Un saludo.
Título: RE: Mesa de mezclas
Publicado por: Chaly29 en 03 de Abril de 2006, 20:34:00
Hola fito20, me parece bien tener una segunda opinion, ya que como te e comentado yo nunca realice ningun circuito con potes digitales.

Tambien seria interesante que lo que se avance se vaya colocando en el foro para que todos lo puedan ver.

Un saludo.

Atte. CARLOS.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 04 de Abril de 2006, 03:28:00
En cuanto tenga el codigo de comunicacion lo subo (creo que ya queda muy poco).

Un saludo.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 04 de Abril de 2006, 04:41:00
Carlos, te pongo el link del hilo donde estamos viendo la comunicacion con el POTE

http://miarroba.com/foros/ver.php?foroid=6510&temaid=5071690&ultimomsg=si

Un saludo.
Título: RE: Mesa de mezclas
Publicado por: fito20 en 04 de Abril de 2006, 10:40:00
POR FIN!! Carlos, al fin he conseguido que el potenciometro se mueva...pero es algo raro...te explico lo que he hecho.

He desarrollado un codigo en el que al accionar un pulsador, manda la secuencia de 16 bits en la que (supuestamente) debe colocar el pote 2 en una determinada posicion.

Sin embargo, al pulsar, se actua sobre el pote 1, y no lo coloca en una posicion, sino que al ir pulsandolo varias veces, va aumentando la resistencia del mismo hasta llegar a los 50K...

Te adjunto el codigo por si ves que es lo que esta pasando.

Un saludo.

Codigo:
;---------------Encabezado-------------

   LIST   p=16f876       
   radix   hex       
   INCLUDE   <P16F876.INC>

;------------mapa de memoria---------

   
reg1   equ   0x20   ; Estos 3 registros los utilizaré
reg2   equ   0x21   ; para hacer el retardo
reg3   equ   0x22           
R_ContB   equ   0x23
R_ContA   equ   0x24
R_ContC   equ   0x25
R_ContE   equ   0x28
R_ContD   equ   0x29

temp1   equ   0x26
temp2   equ   0x27

#DEFINE   UP   PORTB,1      ; direccion del pulsador UP
#DEFINE   DOWN   PORTB,2      ; direccion del pulsador DOWN
#DEFINE   MIDS   PORTB,3


#DEFINE   CS1   PORTC,0      ; direccion del pin de seleccion del CHIP 1
#DEFINE   PR   PORTC,2      ; pin del PRESET para poner los potes a midscale
#DEFINE   SHDN   PORTC,6

POT_GANANCIA   EQU   .32


GR_GA   macro
   bcf   PORTC,0      ; pone un 0 para activar pot graves-ganancia
   endm


NO_CHIP   macro
   bsf   PORTC,0      ; pone un 1 para desactivar pot graves-ganancia
   endm


;-------Configuración de puertos-------

reset   org   0x00         ; origen del programa, aquí comenzará siempre que ocurra un reset
   goto    inicio        ; salta a "inicio"
   
inicio   bcf   STATUS,RP0
   bcf   STATUS,RP1
   clrf   POT_GANANCIA
   clrf   PORTA
   clrf   PORTB
   clrf   PORTC
   bsf   STATUS,RP0    ; banco1
   movlw   0x06
   movwf   ADCON1
   movlw   0XCF
   movwf   TRISA
   movlw   b"11111111"  
   movwf   TRISB           ; y pasa el valor a trisb
   movlw   b"00010000"
   movwf   TRISC
   movlw   B"10000000"   
   movwf   SSPSTAT      ; cargo el reguistro SSPSTAT con el valor anterior
   bcf   STATUS,RP0   ; banco 0
   movlw   B"00110010"   ; no collision, no overflow, habilito el puerto SPI, clock inactivo en nivel alto, FOSC/64
   movwf   SSPCON      ; pasamos estos valores a control SPI
   
   call   Retardo_1s
   NO_CHIP         ; llama a la macro de deshabilitar los 4 potes.
   call   Retardo_1s

   bsf   PORTC,1      ; ponemos un 1 en LED para encenderlo y ver que funciona el circuito
;   bsf   PORTC,6       ; ponemos un 1 en SHUTDOWN
;   bsf   PORTC,2      ; ponemos un 1 en PRESET

   call   Retardo_1s

test   btfsc   PORTB,2
   call   subdown
   goto   test


subdown   GR_GA
   bsf   PORTC,6
   bsf   PORTC,2
   call   Retardo_1s
   bsf   PORTC,7
   bcf   STATUS,RP1
   bcf   STATUS,RP0   ; banco 0
   movlw   B"00000001"   ; apunta a la direccion RDAC2
   call   spien
   movlw   B"0001111"   ; coloca el pote en la posicion 3
   call   spien
   NO_CHIP
   call   Retardo_1s
   bcf   PORTC,7
   return

output   movwf   SSPBUF
   bsf   STATUS,RP0   ; banco 1
ret   btfss   SSPSTAT,BF
   goto   ret
   bcf   STATUS,RP0   ; banco 0
   movf   SSPBUF,W
   return
   
   

;Envia el byte que viene en el registro "w" mediaante el protocolo spi.


spien   call   Retardo_100ms
   movwf   temp1      ;Salva el byte a transmitir en el registro temporal "temp1"
   movlw   0x08
   movwf   temp2      ;Inicializa el contador
   
bck   bsf   PORTC,5      ;Sube data
   btfss   temp1,7      ;Comprueba el bit y lo baja si es cero
   bcf   PORTC,5
   nop         ;Envia el bit
   bsf   PORTC,3
   nop         ;Da un pulso de reloj
   bcf   PORTC,3
   nop
   rlf   temp1,f      ;Rotamos a la izquierda "temp1"
   decfsz   temp2,f      ;Comprobamos el contador, para ver si hemos enviado los 8 bits
   goto   bck      ;Si no, repetimos el bucle
   bcf   PORTC,5
   return         ;Fin

 
Retardo_1s            ; La llamada "call" aporta 2 ciclos máquina.
   movlw   d"10"         ; Aporta 1 ciclo máquina. Este es el valor de "N".
   goto   Retardo_1Decima      ; Aporta 2 ciclos máquina.

Retardo_1Decima
   movwf   R_ContC         ; Aporta 1 ciclo máquina.
R1Decima_BucleExterno2
   movlw   d"100"         ; Aporta Nx1 ciclos máquina. Este es el valor de "M".
   movwf   R_ContB         ; Aporta Nx1 ciclos máquina.
R1Decima_BucleExterno
   movlw   d"249"         ; Aporta MxNx1 ciclos máquina. Este es el valor de "K".
   movwf   R_ContA         ; Aporta MxNx1 ciclos máquina.
R1Decima_BucleInterno          
   nop            ; Aporta KxMxNx1 ciclos máquina.
   decfsz   R_ContA,F      ; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar).
   goto   R1Decima_BucleInterno   ; Aporta (K-1)xMxNx2 ciclos máquina.
   decfsz   R_ContB,F      ; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar).
   goto   R1Decima_BucleExterno   ; Aporta (M-1)xNx2 ciclos máquina.
   decfsz   R_ContC,F      ; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar).
   goto   R1Decima_BucleExterno2   ; Aporta (N-1)x2 ciclos máquina.
   return            ; El salto del retorno aporta 2 ciclos máquina.




Retardo_100ms            ; La llamada "call" aporta 2 ciclos máquina.
   movlw   d"100"         ; Aporta 1 ciclo máquina. Este es el valor de "M".
   goto   Retardos_ms      ; Aporta 2 ciclos máquina.

Retardos_ms
   movwf   R_ContD         ; Aporta 1 ciclo máquina.
R1ms_BucleExterno
   movlw   d"249"         ; Aporta Mx1 ciclos máquina. Este es el valor de "K".
   movwf   R_ContE         ; Aporta Mx1 ciclos máquina.
R1ms_BucleInterno
   nop            ; Aporta KxMx1 ciclos máquina.
   decfsz   R_ContE         ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
   goto   R1ms_BucleInterno      ; Aporta (K-1)xMx2 ciclos máquina.
   decfsz   R_ContD         ; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
   goto   R1ms_BucleExterno    ; Aporta (M-1)x2 ciclos máquina.
   return            ; El salto del retorno aporta 2 ciclos máquina

;------------------------------------------
   end           ; se acabó
;------------------------------------------


Título: Re: Mesa de mezclas
Publicado por: fito20 en 09 de Abril de 2006, 09:53:09
Hola Carlos. Cuando puedas echale un ojo a este hilo, por favor.

http://www.todopic.com.ar/foros/index.php?topic=8127.15

Un saludo.