Autor Tema: dsPIC33F - Capítulo 1: El OSCILADOR  (Leído 11614 veces)

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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
dsPIC33F - Capítulo 1: El OSCILADOR
« en: 10 de Diciembre de 2006, 16:30:41 »
Tras llevarme los últimos días cacharreando con el oscilador de mi primer dsPIC33F (un 33FJ64MC706 montado sobre dsRRBOARD) voy a escribir lo que he descubierto sobre esa pequeña maravilla.

El oscilador de dicho micro más bien debería llamarse, el conjunto de osciladores, porque como podéis ver en este esquema dispone de un montón de alternativas para hacer funcionar el corazón de nuestro magnífico dsPIC33F.


Los modos de funcionamiento que pone a nuestra disposición son:
  • Oscilador Interno: que puede entrar directo al micro, con división por 16, con división por N o a través del módulo PLL
  • Oscilador Primario: con configuraciones HS, XT y EC, que también puede entrar directo al micro o a través del PLL
  • Oscilador Interno de bajo consumo: es un oscilador especial que funciona a una frecuencia de 32KHz a piñón fijo
  • Oscilador Secundario: podemos meter otro oscilador por la patilla del timer y utilizarlo como motor del micro aunque en este caso no disponemos de PLL

Lo mejor de todo es que nuestra pequeña maravilla nos permite cambiar dinámicamente en plena ejecución entre las distintas modalidades de oscilador, lo que convierte a nuestro micro en un arma muy versátil en aplicaciones donde el control de tiempos sea crítico o donde haya que cuidar mucho el consumo.

A este respecto, también pone a nuestra disposición un post-divisor que sólo afecta a la CPU, al que los chicos de Microchip han bautizado como DOZE. La característica de este divisor es que permite marcar un ritmo a la CPU hasta 256 veces inferior al del clock principal, con lo que el consumo baja en esa relación, pero manteniendo los periféricos a todo trapo.
¿Que para qué sirve?, pues imagina un entorno donde las comunicaciones entre nuestro micro y otros dispositivos (RAM, ADC,...) vayan a toda leche, pero sin embargo la capacidad de gestión no sea crítica.

El módulo PLL aporta una flexibilidad extraordinaria, puesto que de una frecuencia de origen es capaz de obtener 512*32*3 = 49152 combinaciones distintas.

Para colmo, el oscilador interno que por defecto trabaja a 7,37 MHz puede "tunearse" desde 6,48MHz hasta 8,22MHz en micropasos de aproximadamente 30KHz.

Pues estas características, y algunas más que descubriréis en la datasheet son capaces de hacer volar a nuestro micro a 55MIPS. Sí, he dicho bien, el límite teórico es de 40MIPS pero el mío ha estado trabajando toda una mañana a 55MIPS sin despeinarse.

Además, me quedo muy tranquilo porque tiene un bit que le protege contra subidas de temperatura. Por fin podemos hacer overclocking sin miedo a freir nuestros micros.

Os recomiendo lo probéis, seguro que no os decepciona. Si os da miedo enfrentaros a la datasheet, he preparado un asistente de configuración que genera el código automáticamente para configurar nuestro oscilador en C30. Podéis entrar en el asistente aquí: Asistente para la configuración del oscilador de la familia dsPIC33F

Aquí algunos ejemplos:
OSCILADOR INTERNO + PLL VOLANDO A 41MIPS



OSCILADOR INTERNO DIV 32 A 128Khz


Espero que lo disfrutéis por lo menos la mitad que yo.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: dsPIC33F - Capítulo 1: El OSCILADOR
« Respuesta #1 en: 10 de Diciembre de 2006, 17:46:10 »
Simplemente: ¡¡¡ I M P R E S I O N A N T E !!!

Gracias Manolo por tu magnifico aporte. A ver si de una vez me lanzo a los dsPIC ... creo que por ahí tengo alguno ... uf qué reto.  :mrgreen:

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: dsPIC33F - Capítulo 1: El OSCILADOR
« Respuesta #2 en: 10 de Diciembre de 2006, 18:18:31 »
 :-/ :-/¡Felicitaciones Manolo! :-/ :-/

Sigues asombrandonos como de costumbre.

¡Hombre!, esperad, esperad, que te nos alejas a años luz de distancia y nosotros intentando alcanzarte en sulqui.

En realidad no viajamos sobre el sulqui. Somos los que lo van tirando(léase: los caballos) :mrgreen: :mrgreen:
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 611
Re: dsPIC33F - Capítulo 1: El OSCILADOR
« Respuesta #3 en: 14 de Diciembre de 2006, 00:43:25 »
Pues! que está realmente espectacular. Lo he visto en tu página manolo y obviamente le puse 5 estrellas
Voy a ver si estreno el equipo insolador que me armé --> con la placa de la dsRRBOARD y una vez que la tenga hecha, me meto con los dsPics. (Espero no tirar muchas placas  :D que por cierto aun no consigo en mi ciudad)
Como ves sigo tus pasos... o al menos intento....

Dices que 55MIPS!!!!  sin despeinarse!!!!   voy a ver el tema ese del bit de temperatura...

Sería factible hacer un sistema donde el dsPic corriese a la máxima velocidad posible....  por ejemplo: Yo no quiero que el chip pase de 40ºC, y quiero la mayor velocidad posible. Eso se puede o no? O sólo hasta la temperatura que el fabricante estipula?
     

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: dsPIC33F - Capítulo 1: El OSCILADOR
« Respuesta #4 en: 14 de Diciembre de 2006, 02:01:11 »
El bit de temperatura sólo protege al micro al umbral indicado por Microchip; no es configurable.
Lo de hacer algo para que corra al máximo deberás hacerlo tú en pruebas y luego dejarlo configurado.

De todas formas, sí me gustaría indicar que la tarea que yo le encargué al dsPIC a 55 MIPS era muy simple; generar un parpadeo por el PORTB. Quizás en tareas más exigentes o manejando otros periféricos pueda tener algún efecto secundario esa alta velocidad.

Desconectado cyberian

  • PIC10
  • *
  • Mensajes: 14
Re: dsPIC33F - Capítulo 1: El OSCILADOR
« Respuesta #5 en: 08 de Junio de 2011, 14:03:06 »
Hola Nocturno, he adquirido algunos dsPIC33FJ128MC804, TQFP44, ya me he armado una plaquetita de desarrollo, y le puse un cristal de 10MHz, con 2 capacitores de 15pF, a 10mm de distancia del dsPIC. El circuito básico que armé es el que aparece en el datasheet, puse un capacitor de tantalio de 10uF en VCAP.
Logré hacerlo funcionar a 40MIPS, PERO CON EL OSCILADOR INTERNO. La forma que uso para probar que estoy trabajando a 40MIPS, es la siguiente. Interrumpo el dspic y conmuto un pin. (TRABAJO EN C30). El timer 1 desborda dada 65535 incrementos, con el osciloscopio mido el tiempo de desborde, me da 1.58ms, esto lo que tarda el dspic en contar 16bits, entonces el timpo por bit es 1.58ms/65536=24ns=>41MIPS.
Yo quiero usar el cirstar para llegar a los 40MIPS, no el oscilador interno, y no hay caso, no lo puedo configurar. La verdad que hago todo con componentes SMD, y no quiero desoldar el cristar para ver si está roto, o la patita del dspic no funciona. Po favor, me podrías asistir en la configuración del oscilador para usar el cristal de 10MHZ.
Mi código de prueba. La punta de prueba del osciloscopio la conecto al pin B9. El código así como está funciona bárbaro. Uso MPLAB 8.7 y C30 v3.25. Pickit 3. Agradezco mucho tu ayuda.

#include <p33fj128mc804.h>      /* DSPIC a utilizar */
#include <timer.h>

_FBS( RBS_NO_RAM & BSS_NO_FLASH & BWRP_WRPROTECT_OFF )
_FSS( RSS_NO_RAM & SSS_NO_FLASH & SWRP_WRPROTECT_OFF )
_FGS( GSS_OFF & GCP_OFF & GWRP_OFF )
_FOSCSEL( FNOSC_PRI & IESO_ON )
_FOSC( FCKSM_CSECMD & IOL1WAY_OFF & OSCIOFNC_OFF & POSCMD_XT )
_FWDT( FWDTEN_OFF & WINDIS_OFF & WDTPRE_PR128 & WDTPOST_PS32768 )
_FPOR( PWMPIN_ON & HPOL_ON & LPOL_ON & ALTI2C_OFF & FPWRT_PWR128 )
_FICD( JTAGEN_OFF & ICS_PGD3 )

void __attribute__((__interrupt__, auto_psv)) _T1Interrupt (void);
void InitTIMER1(void);

int main(void)
{

   // Configuro el oscilador para operar el dispositivo a 40MIPS
   // Fosc= Fin*M/(N1*N2), Fcy=Fosc/2
   // Fosc= 7.37M*43/(2*2)=79.22Mhz para ~40MIPS
   PLLFBD=43;                           // M=43
   CLKDIVbits.PLLPOST=0;                  // N1=2
   CLKDIVbits.PLLPRE=0;                  // N2=2
   OSCTUN=0;                           // Sintonizo el oscilador FRC, si lo uso

   // Desabilito el  Watch Dog
   RCONbits.SWDTEN=0;
   // Intercambio de clock para incorporar el PLL
   __builtin_write_OSCCONH(0x01);            // Configuro el cambio a
                                    // FRC con PLL (NOSC=0b001)
   __builtin_write_OSCCONL(0x01);            // Inicio el cambio de reloj
   while (OSCCONbits.COSC != 0b001);         // Espero a que termine el cambio de clock

   // Espero mientras de traba el PLL
   while(OSCCONbits.LOCK!=1) {};

   /* Configuración de puertos */
   TRISBbits.TRISB9=0;                      // Pin RB9 como salida

   /* Programa principal */
   InitTIMER1();

   while(1);
    return 0;
}

void __attribute__((__interrupt__, auto_psv)) _T1Interrupt (void)
{
   IFS0bits.T1IF = 0;
    LATBbits.LATB9=~LATBbits.LATB9;
    WriteTimer1(0);
   return;
}

void InitTIMER1(void)
{
   ConfigIntTimer1(T1_INT_PRIOR_6 & T1_INT_ON);
   WriteTimer1(0);
   OpenTimer1(T1_ON & T1_IDLE_STOP & T1_GATE_OFF & T1_PS_1_1 & T1_SYNC_EXT_OFF &
            T1_SOURCE_INT, 0xFFFF);
}

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: dsPIC33F - Capítulo 1: El OSCILADOR
« Respuesta #6 en: 08 de Junio de 2011, 14:17:07 »
Tenes que colocar oscilador primario, y HS.

Así lo hago en un dspic33FJ64GP802 :

Código: [Seleccionar]
_FOSCSEL(FNOSC_PRIPLL & IESO_OFF)
_FOSC(FCKSM_CSECMD & IOL1WAY_OFF & OSCIOFNC_OFF & POSCMD_XT) // Conmutación de Clock habilitada, Fail-Safe Clock des-habilitado, OSC2 Clout, Cristal XT.


Código: [Seleccionar]
// Configuramos PLL para trabajar a 40 MIPS con Cristal de 4MHz.-
PLLFBD = 0x004E; // M=80.
  CLKDIV = 0x0000; //N1=2, N2=2.
// Cambiamos clock para incroporar PLL.-
__builtin_write_OSCCONH(0b011); // Indicamos cambio a clock primario con PLL.-
__builtin_write_OSCCONL(0x01); // Iniciamos cambio.-
while(OSCCONbits.OSWEN == 1) {}; // Esperamos a que se termine el cambio de clock.


En tu caso como es de 10MHz debes colocar HS en lugar de XT.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado cyberian

  • PIC10
  • *
  • Mensajes: 14
Re: dsPIC33F - Capítulo 1: El OSCILADOR
« Respuesta #7 en: 08 de Junio de 2011, 20:41:46 »
Gracias suky, ahora lo pruebo y te comento.

Desconectado cyberian

  • PIC10
  • *
  • Mensajes: 14
Re: dsPIC33F - Capítulo 1: El OSCILADOR
« Respuesta #8 en: 08 de Junio de 2011, 22:41:27 »
Muchas gracias Suky, había hecho un código similar al tuyo y no tuve resultados, ahora copié tu código y tampoco.
El problema estaba en la soldadura, al soldar el TQFP, me quedó unido con una puntita de estaño una patita del cristal al Vss que está al lado. La quité con un alfiler y salió volando.
Muchas gracias, porque ahora tu código de funciona de 10!. Hay diferencias, al menos el la pantalla del osciloscopio, con el cristal es 40us más rápido.  :D
He notado que se puede "overclokear" este dsPIC, lo puedo hacer funcionar á más de 40 MIPS, hay algún riesgo en eso??? No quiero romperlo y tener que desoldar y soldar este micro es un dolor. Además de la pérdida.
Me quedo contento. :-/

Desconectado cicloide2

  • PIC18
  • ****
  • Mensajes: 359
Re:dsPIC33F - Capítulo 1: El OSCILADOR
« Respuesta #9 en: 19 de Septiembre de 2021, 16:30:01 »
Tras llevarme los últimos días cacharreando con el oscilador de mi primer dsPIC33F (un 33FJ64MC706 montado sobre dsRRBOARD) voy a escribir lo que he descubierto sobre esa pequeña maravilla.

El oscilador de dicho micro más bien debería llamarse, el conjunto de osciladores, porque como podéis ver en este esquema dispone de un montón de alternativas para hacer funcionar el corazón de nuestro magnífico dsPIC33F.


Los modos de funcionamiento que pone a nuestra disposición son:
  • Oscilador Interno: que puede entrar directo al micro, con división por 16, con división por N o a través del módulo PLL
  • Oscilador Primario: con configuraciones HS, XT y EC, que también puede entrar directo al micro o a través del PLL
  • Oscilador Interno de bajo consumo: es un oscilador especial que funciona a una frecuencia de 32KHz a piñón fijo
  • Oscilador Secundario: podemos meter otro oscilador por la patilla del timer y utilizarlo como motor del micro aunque en este caso no disponemos de PLL

Lo mejor de todo es que nuestra pequeña maravilla nos permite cambiar dinámicamente en plena ejecución entre las distintas modalidades de oscilador, lo que convierte a nuestro micro en un arma muy versátil en aplicaciones donde el control de tiempos sea crítico o donde haya que cuidar mucho el consumo.

A este respecto, también pone a nuestra disposición un post-divisor que sólo afecta a la CPU, al que los chicos de Microchip han bautizado como DOZE. La característica de este divisor es que permite marcar un ritmo a la CPU hasta 256 veces inferior al del clock principal, con lo que el consumo baja en esa relación, pero manteniendo los periféricos a todo trapo.
¿Que para qué sirve?, pues imagina un entorno donde las comunicaciones entre nuestro micro y otros dispositivos (RAM, ADC,...) vayan a toda leche, pero sin embargo la capacidad de gestión no sea crítica.

El módulo PLL aporta una flexibilidad extraordinaria, puesto que de una frecuencia de origen es capaz de obtener 512*32*3 = 49152 combinaciones distintas.

Para colmo, el oscilador interno que por defecto trabaja a 7,37 MHz puede "tunearse" desde 6,48MHz hasta 8,22MHz en micropasos de aproximadamente 30KHz.

Pues estas características, y algunas más que descubriréis en la datasheet son capaces de hacer volar a nuestro micro a 55MIPS. Sí, he dicho bien, el límite teórico es de 40MIPS pero el mío ha estado trabajando toda una mañana a 55MIPS sin despeinarse.

Además, me quedo muy tranquilo porque tiene un bit que le protege contra subidas de temperatura. Por fin podemos hacer overclocking sin miedo a freir nuestros micros.

Os recomiendo lo probéis, seguro que no os decepciona. Si os da miedo enfrentaros a la datasheet, he preparado un asistente de configuración que genera el código automáticamente para configurar nuestro oscilador en C30. Podéis entrar en el asistente aquí: Asistente para la configuración del oscilador de la familia dsPIC33F

Aquí algunos ejemplos:
OSCILADOR INTERNO + PLL VOLANDO A 41MIPS



OSCILADOR INTERNO DIV 32 A 128Khz


Espero que lo disfrutéis por lo menos la mitad que yo.