Autor Tema: Duda MikroBasic para DSPIC + Filtro digital  (Leído 8660 veces)

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

Desconectado papapitufo

  • PIC10
  • *
  • Mensajes: 17
Duda MikroBasic para DSPIC + Filtro digital
« en: 11 de Julio de 2007, 06:34:22 »
Hola:
Me imagino que la mayoría conoceis el software mencionado (también existe para C y Pascal). Para el caso tiene una herramienta que genera el código para implementar un filtro digital. Me parece muy intersante y he desarrollado una plaquita para poder realizar algunas pruebas.

Él micro que utilizo es un DSPIC30F4012 con cuarzo a 20MHZ y el conversor es un MCP4921. Realmente me he basado en el ejemplo que propone el software.
Realizo 4 pruebas y mi conversor (12 Bits SPI) funciona bien. Pero si intento obtener una rampa análogica (a base de incrementar un contador) la frecuencia de salida que obtengo es menor a 20Hz.

Por otro lado y si no he entendido mal la datasheet el Setting time del 4921 es de 4,4 micro segundos. O sea que se multiplicamos por la cantidad de combinaciones posibles a transmitir (4096) la frecuencia que hemos observado ya es correcta.

Mi pregunta es:
¿Como voy a poder filtrar una señal de 6KHz si soy incapaz de reproducir una de 40Hz siquiera?

Estoy algo liado. Probablemente lo mío sea un problema de concepto.
Espero que alguien me pueda hechar una mano.

De todas formas: Gracias.
« Última modificación: 11 de Julio de 2007, 06:39:54 por papapitufo »

Desconectado blackcat

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 600
Re: Duda MikroBasic para DSPIC + Filtro digital
« Respuesta #1 en: 12 de Julio de 2007, 23:10:45 »
Hola

   Yo no he utilizado el MikroC, pero no te entendi bien que es lo que deseas hacer  :? ... ¿ utilizar un filtro o generar una señal ?... en ambos casos y por los conceptos del Procesamiento Digital de Señales es importante contar con un muestreador CONSTANTE ... es decir cada cuando leemos una muestra de entrada (lo mas comun del ADC) o cada cuanto ponemos una muestra en la salida (en el DAC) ... en este caso ... podemos utilizar el Timer1 .. lo configuramos para que genere una interrupcion cada cierto tiempo por ejemplo cada 10ms cuando se de la interrupcion medimos la señal aplicamos el algoritmo necesario y sacamos el dato ... y esperamos hasta la proxima interrupcion ... Un concepto importante es la frecuencia de Nyquist ... si queres generar o filtrar señales de 6kHz debes muestrear como minimo al doble ... es decir a 12kHz o mas bien  generar una interrupcion cada 83.33us.. OTRO punto importante lei que estas usando un cristal de 20MHz .. por lo que supongo que no estas utilizando el PLL interno del micro y no estas aprovechando los 30MIPS que ofrece el pic ... TE RECOMIENDO que le heches un ojo a este detalle porque a 20MHz no se puede hacer mucho para el procesamiento digital.....    Yo ya he utilizado el MCP4921 y ya he filtrado audio a 44.1kHz y ademas tambien genere tonos DTMF (como los del telefono)  de hecho puse un ejemplo de ambos (creo) en este mismo foro pero esta escrito en C30 de MPLAB .... Cualquier pregunta te puedo ayudar!

Saludos
Control Automático, DSP & Microcontroladores

Desconectado papapitufo

  • PIC10
  • *
  • Mensajes: 17
Re: Duda MikroBasic para DSPIC + Filtro digital
« Respuesta #2 en: 13 de Julio de 2007, 06:13:59 »
Gracias por tu respuesta Blackcat22.
Quiero realizar un filtro utilizando un dspic. Lo de generar la señal viene por unas pruebas que hice previamente (más que nada para ver si chutaba mi conversor).
La idea es utilizar el timer 1 para muestrear a una frecuencia como mínimo 2 veces superior a la que queremos filtrar (según shanon), efectuar el correspondiente cálculo y enviar al DAC. De hecho el software de Mikroe te genera el código completo.

En cuanto al tema del PLL reconozco que no tengo muy claro como funciona.

Gracias.


Desconectado blackcat

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 600
Re: Duda MikroBasic para DSPIC + Filtro digital
« Respuesta #3 en: 13 de Julio de 2007, 22:45:33 »
Los dsPIC traen un PLL para multiplicar la frecuencia del micro .. como novedad (creo ) la serie dsPIC30F puede llegar a ejecutar 30millones de instrucciones por segundo (30MIPS) eso es muy rapido comparado con los pics de la serie 18F y de ahi para abajo .. el dsPIC ejecuta una instruccion cada cuatro ciclos del reloj del micro .. es decir para lograr los 30MIPS el reloj tiene que ser de 120MHz ... no vamos a poner un cristal de 120Mhz  :shock: :shock: dudo mucho que lo consigamos en la tiendita de componentes ... lo que se hace es utilizar un PLL el cual tiene miles de aplicaciones (no tantas!! :D) una de ellas es como funcion de oscilador .. lo encontramos mucho en aplicaciones de RF donde la frecuencia del oscilador debe ser sumamente precisa ... el PLL nos da muchas ventajas ya que aplica conceptos de control para mantener la frecuencia de oscilacion muy muy exacta, una precision increible y casi inmune respecto a cambios en la temperatura  ... como oscilador podemos multiplicar la frecuencia respecto a una referencia, en este caso, el cristal externo que le ponemos al micro ... para lograr los 120MHz debemos poner un cristal de 7.5MHz (maximo) ya que el PLL nos lo multipica por 16 .. de hecho una de las ventajas .. es que podemos cambiar la frecuencia de oscilacion en caliente ... a x8 o x4 o x1 ... no lo he intentado aun pero se que se puede ... Ademas un detalle interesante es que se puede overclockear pero el daño que pueda sufrir el dsPIC los desconozco ... yo le puse un cristal de 10Mhz y con PLL a x16 y no paso nada .. de hecho el programa funciono perfectamente ..   Ahora para seleccionar el PLL se efectua desde los bits de configuracion con la siguiente linea .. en C30 ... no se en mikroC:

_FOSC(CSW_FSCM_OFF & XT_PLL16);   //para los casi 30MIPS y con cristal de 7.3728MHz

Ahora la serie dsPIC33F puede correr a 40MIPS

La velocidad del dsPIC es sumamente importante porque para lograr muestrear señales de audio debemos generar interrupciones del timer a 44.1kHz o 23us aprox ... ahora ... debemos procesar una muestra dentro de ese tiempo ... un filtro IIR de orden 2 toma al menos 3 o 5 us procesarlo con punto fijo a 30MIPS ... previamente debimos sumarle el tiempo que duramos conviertiendo la muestra analogica .. a 200k samples per second nos toma como 5 o 7 us segun las mediciones que he hecho .. y luego de haberla procesado debemos sumarle el tiempo que nos toma poniendola en la salida o mas bien en el DAC ... que puede ser de unos 4us ... en total nos toma 16us tomar una muestra completa .. los 7 us restantes debemos poner el micro hacer tonto o lo ponemos en idle para esperar la proxima interrupcion

El dsPIC para audio de calidad CD no lo siento muy potente pero su precio (los 33F estan a $4  :P .. increible!), y la cantidad de foros, proyectos y codigo de ejemplo, appnotes .. no la encuentro en ningun otro micro ..  ademas a mi me gusta trabajar en control automatico donde si acaso se muestrea a 1ms para aplicaciones de motores, robotica etc .. es genial ..


Saludos!

 
« Última modificación: 13 de Julio de 2007, 22:50:28 por blackcat22 »
Control Automático, DSP & Microcontroladores

Desconectado papapitufo

  • PIC10
  • *
  • Mensajes: 17
Re: Duda MikroBasic para DSPIC + Filtro digital
« Respuesta #4 en: 14 de Julio de 2007, 08:38:09 »
Muchísimas gracias por tu explicación. Ahora entiendo el uso de PLL.
Si no lo he entendido mal el cuarzo de 10MHz es el máximo que puedo llegar a utilizar. ¿Cierto?
Por otra parte a mi lo que más me preocupa es la velocida de establecimiento en salida del DAC. Para mi cso es de unos 4,5MicroSeg.  Si no me fallan los cálculos para disponer de una señal de 5KHz a través de DAC (y después de filtrada) solo podría hacerlo con 44 puntos. Me parece un poco pobre.
En mi caso tengo que filtrar unas señales alternas de 1KHz a 12KHz. No veo nada claro que la señal de salida tenga muy buen aspecto. Esto es para aplicar en filoguiados y dicha señal tiene que ser muy limpia.
De todas formas lo mejor será hacer pruebas y luego hablaremos.

De nuevo gracias por la información.

Desconectado vlado888

  • PIC10
  • *
  • Mensajes: 1
Re: Duda MikroBasic para DSPIC + Filtro digital
« Respuesta #5 en: 26 de Junio de 2008, 23:47:39 »
buenas noches
la verdad soy nuevo en el mundo de los dspic, y como primer reto me he topado copn la implementacion de un filtro digital, he leido en la red y me dicen q ay muchos programas gratuitos como el q mikro basic, q me generan el codigo, la verdad no he podido usarlo bien, talvez alguno de ustedes me pudic ayudar con esto.

gracias

Desconectado electrogomez

  • PIC10
  • *
  • Mensajes: 2
Re: Duda MikroBasic para DSPIC + Filtro digital
« Respuesta #6 en: 20 de Mayo de 2009, 10:39:25 »
hola
una consulta como puedo calcular mi tiempo de conversion ADC en un dspic30f4011, como calculo el Tad y TCY o si me pudieran explicar un poco mas sobre esto

gracias :?

Desconectado blackcat

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 600
Re: Duda MikroBasic para DSPIC + Filtro digital
« Respuesta #7 en: 20 de Mayo de 2009, 13:49:02 »
El TCY es el tiempo de instruccion ... en el caso del dsPIC30F .. tenes: fcy = Fcristal * xPLL / 4 ... en el dsPIC33F es fcy = Fcristal * xPLL / 2 ...

en ambos casos tcy = 1/fcy

El tad mínimo viene en las especificaciones electricas del ADC en la hoja de datos del microcontrolador ... 
Control Automático, DSP & Microcontroladores

Desconectado victorg_ldj

  • PIC10
  • *
  • Mensajes: 4
Re: Duda MikroBasic para DSPIC + Filtro digital
« Respuesta #8 en: 26 de Enero de 2010, 03:22:30 »
Buenas muchachos soy de venezuela felicito al amigo blackcat exelente explicacion sobre el Pll, Bueno estoy trabajando en un proyecto Afinador de guitarra usando filtro digital y este tema esta buenisimo le pregunto a los amigos blackcat, papapitufo que veo que han trabajado con las herramientas de mirkrolelectronica (pascal dspic, basic dspic y c dspic).

Pregunto que rango debe tener la señal de entrada para el dspic? se que la señal debe ser adecuada pero no tengo informacion de el rango maximo o minimo.

Muchas gracias a todos estare trabajando en esto cualquier duda sobre afinacion de guitarra podre colocar informacion