Autor Tema: DSPIC33EP256GP502 Iniciación..  (Leído 203 veces)

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

Desconectado Pinolillo16

  • PIC16
  • ***
  • Mensajes: 173
DSPIC33EP256GP502 Iniciación..
« en: 08 de Febrero de 2017, 22:05:52 »
Hola amigos de todo pic, verán me regalaron unos dspic33ep pero jamas los he trabajado. Quisiera empezar a manejarlos ya que solo me he enfocado a usar los 16 y 18f en asm. Realmente quisiera aprender de estos dspic, pero antes de comenzar quisiera que me dijeran uds. como puedo comenzar, quisiera algo básico y después probar sus perifericos. Despues de bajar el xc16 que debo hacer?

Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 5322
Re:DSPIC33EP256GP502 Iniciación..
« Respuesta #1 en: 09 de Febrero de 2017, 09:27:25 »
Citar
Despues de bajar el xc16 que debo hacer?

Podrias comenzar con ejemplos simples, como parpadear un LED, Ya que por lo que parece conoces lo que es ASM, asi que vas a saber ubicar los registros en el datasheet del microcontrolador y XC es parecido a un ASM pero en C. No se que conocimiento tengas de C.

No solo se te va a complicar por la cantidad nueva de registros que tenes sino que ademas vas a tener problemas con el lenguaje si es que no lo conoces. Ahora si conoces C, lo mismo te aconsejaria ir por ese lado. Pero te resultaria mucho mas facil.

ASM en dsPIC es muy distinto a la flia PIC16 y PIC18, yo hice un hilo con algo de dsPIC, mirando las rutinas de inicializacion, cambiandolas, siempre usando XC16 como base, pero programando en ASM, aun asi para lo unico que se usa es cuando se necesita aprovechar al maximo las operaciones DSP.

http://www.todopic.com.ar/foros/index.php?topic=45240.msg376311#msg376311

Pero no te lo recomiendo para empezar por que cambia todo, mejor hacer algo simple, como intentar usar un timer, encender un led, etc. Luego de alli queda en vos como avanzar.

Desconectado Pinolillo16

  • PIC16
  • ***
  • Mensajes: 173
Re:DSPIC33EP256GP502 Iniciación..
« Respuesta #2 en: 09 de Febrero de 2017, 22:39:26 »
KillerJC gracias, bien de C conozco lo básico. La idea es aprender y progresar, veras en ASM me ha pasado que se me complica el código cuando debo de hacer operaciones con flotante, ahi la necesidad de comenzar a utilizar C para aplicaciones con mas procesamiento. Realmente no  me ha sido posible encontrar algun sitio donde este paso a paso la programación de DSPICs bueno al menos no que haya visto, entonces quiero colaborar haciendo lo mio y si no es mucho pedir con ayuda tuya y de los participantes de este foro.

No conozco mucho al respecto pero en los minutos que acabo de leer, encontre lo siguiente:

- Los DSP y PIC24F de 16 Bits, funcionan a mas velocidad que cualquier 16 o 18F. Con ciclo de instrucción de FOSC/2. Los datasheet veo que estan muy completos e inclusive por bloques en general. Estuve leyendo el "Oscillator Module" para iniciar por la configuración del oscilador. Se me hizo algo complejo poder comprenderlo, asi que opte por la funcion de code configurator del MPLABX, de donde obtengo lo siguiente:

osc.PNG
*osc.PNG
(23.71 kB . 426x491 - visto 61 veces)

Si quiero aprovechar la velocidad es correcta esta configuración?

Aqui las dudas:

No comprendo bien como afecta el feedback.

Al generar el codigo me arroja un main y varios .h donde esta la configuracion.


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 5322
Re:DSPIC33EP256GP502 Iniciación..
« Respuesta #3 en: 10 de Febrero de 2017, 08:48:21 »
Si el oscilador toma unos cuantos pasos mas.. En realidad lo que se complica es el PLL, ya que posee mas pasos para llegar a la frecuencia final.

En si lo unico que te importa de como calcularlo es esta imagen:



En ella no solo vas a ver los divisores, sino que ademas tenes que cumplir de forma exacta con los limites ( los valores de los limites en la imagen son incorrectos, referite a la seccion "oscillator" ) que te impone cada etapa.
Otro cambio es que usualmente comenzabas calculando desde el cristal hacia el PLL. Ahora simplemente calculas lo externo al PLL tratando de cumplir las condiciones del mismo, para luego finalizar con el valor del PLL.

En el PDF explica como calcularlo, ejemplo, si queres tener 120Mhz a la salida del PLL. Comenzas calculando primero PLLPOST.
Segun la imagen tenes que cumplir que antes del PLLPOST la frecuencia tiene que ser de : 120Mhz <= Fvco <=340 Mhz
Los valores de PLLPOST son dividido 2/4/8/16 etc.. Si uso dividido 4 quiere decir que antes tenia 480Mhz lo cual es imposible, entonces tengo que usar dividido 2, lo cual me deja a Fvco en 240Mhz y esta en el rango permitido.

Ahora me voy al comienzo. con PLLPRE y me dice que a la salida debo tener si o si entre 0.8MHz y 8MHz, si poseo un cristal de 20Mhz y los valores de PLLPRE pueden ser 1/2/3/4/5/6/10/12
Debo elegir un valor tal que me caiga en esos limites, ademas lo ideal seria elegir un valor aproximado que sea al dividir 240MHz ( lo anterior) sea lo mas entero posible.
Si elegimos PLLPRE en la relacion 1:4, a la salida tendremos 5Mhz

Ahora solo resta calcular el PLLDIV ( o de feedback, que es el que compone realmente el PLL, los demas son divisores solamente ), Y lo calculamos como:

240MHz / 5MHz = 48

O para que se entienda... Realmente el PLL es la parte central, la cual debe ingresar una frecuencia entre 0.8 y 8MHz y posee una salida de entre 120 y 340MHz, se deben cumplir estos valores para que el PLL se enganche y funcione.

Los codigos te los da el mismos datasheet:


Código: C
  1. // Oscilador interno al inicio y deshabilita el cambio automatico al oscilador principal, FUSES
  2. _FOSCSEL(FNOSC_FRC & IESO_OFF);
  3.  
  4. // Habilita el cambio de clock y configura el oscilador principal POSC en modo XT
  5. _FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_XT);
  6.  
  7. int main()
  8. {
  9.  
  10. // Configure PLL prescaler, PLL postscaler, PLL divisor
  11. PLLFBD=46; // M=48
  12. CLKDIVbits.PLLPOST=0; // N2=2
  13. CLKDIVbits.PLLPRE=2; // N1=4
  14.  
  15. // Inicio cambio de clock Al oscilador Primario con POLL (NOSC=0b011)
  16. __builtin_write_OSCCONH(0x03);
  17. __builtin_write_OSCCONL(OSCCON | 0x01);
  18.  
  19. // Espera hasta el cambio de clock
  20. while (OSCCONbits.COSC!= 0b011);
  21.  
  22. // Espera hasta que el PLL enganche
  23. while (OSCCONbits.LOCK!= 1);

Una cosa mas, vas a ver que posee una funcion  __builtin, esto es porque ese registro ademas de escribirse simplemente uno debe realizar una secuencia, es un modo de proteccion contra un cambio involuntario. Por eso mismo se usan estas funciones.

Desconectado Pinolillo16

  • PIC16
  • ***
  • Mensajes: 173
Re:DSPIC33EP256GP502 Iniciación..
« Respuesta #4 en: 13 de Febrero de 2017, 22:08:28 »
Killer , gracias por la respuesta. Caray veo que si es mas complejo de lo que esperaba. Estuve leyendo y tratando de comprender, corrigeme si me equivoco.

En la entrada del PFD como lo dice la imagen debo tener entrada entre: 0.8Mhz y 8Mhz. Como yo uso cristal de 20MHZ lo divido entre 4 con la instrucción CLKDIVbits.PLLPRE=2; // N1=4 aqui ya esta en rango por que son 5Mhz.

Después el PLLPOST lo configure con 0, del datasheet asumo que la frecuencia de salida es dividida entre 2, debido a los bits que configure.

El FeedBack me ayuda a poder multiplicar mi frecuencia de trabajo para llevarla a los limites permititdos tal como lo mencionas supongo.

Entonces concluyo lo siguiente:

- Mi oscilador es HS de 20 Mhz, para meterlo en rango al PLL lo divido entre 4 para que quede en 5Mhz y este a su vez es multiplicado por 48 para alcanzar una FVCO ( Frecuencia de Salida PLL + Feedback segun entiendo)llegando a 240Mhz, con el PLL post divido la frecuencia una vez mas para que ya empiece a funcionar mi sistema con FVCO/2 según lo configure, si esto es correcto significa que una vez que se ejecuta el cambio mi DSP estara trabajando a 120Mhz?

Encontre el código solo que mi pregunta es en lo siguiente:

_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_XT);

No deberia cambiarlo por HS.

Ahora y para sacarle jugo, es mejor con oscilador interno o externo? Siempre me ha gustado llevar los PICs a su máxima velocidad, en este quiero hacer lo mismo. En la hoja de datos dice que corre a 70 MIPS, segun como lo configure anteriormente estaria en 60 MIPS?

Saludos


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 5322
Re:DSPIC33EP256GP502 Iniciación..
« Respuesta #5 en: 23 de Febrero de 2017, 15:44:35 »
Citar
- Mi oscilador es HS de 20 Mhz, para meterlo en rango al PLL lo divido entre 4 para que quede en 5Mhz y este a su vez es multiplicado por 48 para alcanzar una FVCO ( Frecuencia de Salida PLL + Feedback segun entiendo)llegando a 240Mhz, con el PLL post divido la frecuencia una vez mas para que ya empiece a funcionar mi sistema con FVCO/2 según lo configure, si esto es correcto significa que una vez que se ejecuta el cambio mi DSP estara trabajando a 120Mhz?

Correcto

Citar
No deberia cambiarlo por HS.

Deberias hacerlo. La regla Microchip fue siempre de que >4Mhz es HS.

Citar
Ahora y para sacarle jugo, es mejor con oscilador interno o externo? Siempre me ha gustado llevar los PICs a su máxima velocidad, en este quiero hacer lo mismo. En la hoja de datos dice que corre a 70 MIPS, segun como lo configure anteriormente estaria en 60 MIPS?

Cualquiera... El Interno tiene mas error. es decir no es exactametne la frecuencia que dice tener.. PEEEEEEEEERO si eso no te importa entonces dale para adelante. Ademas al interno lo podes hacer pasar por el PLL tambien. Deberias probarlo ponerlo a 140Mhz, segun la hoja de datos dice que si.