Autor Tema: Consulta sobre PIC24 y/o XC16  (Leído 1288 veces)

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

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Consulta sobre PIC24 y/o XC16
« en: 28 de Diciembre de 2013, 19:49:22 »
  Quisiera hacer una consulta con respecto a este pic de 16 bits y como no es un dsPIC la realizo aquí. Si los moderadores creen que correspondería otro lugar por favor muévanlo donde corresponda.

  Recién he comenzado mis experiencias con USB y sólo he hecho un par de cosas con XC8 y un 18F2550. Para dar un gran salto -al menos para mí- se me ocurrió hacer una capturadora de sonido USB.
  Mi idea es capturar una señal con 16 bits de resolución (ya tengo unos ADC samples de Texas, se comunican vía SPI y pueden trabajar hasta 250KHz de muestreo) a una frecuencia de muestreo de 48KHz.

  Básicamente pensé en una interrupción por algún timer cada 1/48KHz para disparar y hacer la lectura del ADC y almacenar lo leído en un array (seguramente deberé implementar un buffer circular). Luego tendría que pasar el array al buffer del EndPoint y he aquí el problema... simulando desde MPLAB he visto que con el 18F2550 copiar el buffer de lectura (un array de 48 elementos "signed int") hacia otro array de 48 elementos me demora 1847 ciclos de instrucción, lo cual es demasiado. ya que supera con creces el tiempo que tengo entre muestreo y muestreo.

  El 18F2550 es un micro de 8 bits por lo tanto manejar valores de 16bits le llevará mas instrucciones, así que pensé en utilizar un PIC24 para ganar velocidad (suponiendo que reduciría a la mitad el tiempo de trabajo).

  Bueno, hice la prueba también simulando en MPLAB el copiar un array "signed int" de 48 elementos a otro array y efectivamente hubo un cambio muy grande en cuanto a los ciclos consumidos, ahora son 854.
  Al haberlo simulado con un PIC de 16MIPs el tiempo sigue siendo elevado y supera con creces el tiempo que tengo entre muestreo y muestreo.

  Aclaro que ambas pruebas fueron hechas de la siguiente forma

Código: C
  1. for (indice = 0; indice < 47; indice++)
  2.     copia[indice] = original[indice]

  Probaré utilizando punteros para ver si hay alguna diferencia en la cantidad de ciclos de instrucción.

  He visto PIC24 que trabajan a 70 MIPS, éstos sí me servirían ya que 854 ciclos * 14.2857ns (que es el tiempo de instrucción) son 12.2uS que es un tiempo mucho muy menor al que tengo entre muestreo y muestreo

  Claro que aún con estos tiempos sólo podré implementar una capturadora mono... pero al menos será algo. 



  Pasada toda la introducción al tema, vienen las consultas... ¿Debo pensar en utilizar el PIC de 70 MIPS, o podré plantear de otra forma el programa? Éste PIC de 70MIPS no es soportado por el PicKIT2 y allí hay otro problema a resolver.

  Otra consulta es con respecto a XC16, ya que no he podido ver el ASM generado por el mismo. Es que me parecen excesivos 854 ciclos para copiar 48 signed int de un lugar a otro. ¿Hay alguna forma de generar un archivo .list? porque he tildado varias cosas en MPLAB-X e igualmente sigue sin generar el list.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Consulta sobre PIC24 y/o XC16
« Respuesta #1 en: 29 de Diciembre de 2013, 12:23:48 »
  Estuve mirando un poco mejor los PIC24 y/o dsPIC de 70MIPS y veo que todos ellos tienen canales de DMA. El inconveniente es que el PicKit2 no soporta ninguno de ellos.  :5]  :5]  :5]
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas