Autor Tema: PIC18F2550 - Configuracion Osciladores  (Leído 10691 veces)

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

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
PIC18F2550 - Configuracion Osciladores
« en: 07 de Octubre de 2012, 18:59:15 »
Hola, estoy empezando con este micro y por lo que estoy leyendo en el DS es bastante distinto a los 16F que he usado (los básicos).
Bueno, el tema es que me estoy volviendo loco con la configuracion del Oscilador interno. No quiero usar el USB ni cristal externo, simplemente configurar el oscilador interno a la máxima frecuencia que pueda llegar. Ya que estamos si me dicen la configuración más básica de los fuses no me vendrían mal tampoco...

Saludos y gracias!
-
Leonardo Garberoglio

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: PIC18F2550 - Configuracion Osciladores
« Respuesta #1 en: 07 de Octubre de 2012, 20:43:51 »
Mirando el esquema del oscilador, figura 2.1, tendrías que colocar Internal oscillator, port function on RA6, EC used by USB (INTIO) en FOSC3:FOSC0 y establecer 8 MHz en OSCCON6:OSCCON4 debido a que por default en un reset queda en 1 MHz. También asegura que OSCCON1:OSCCON0 indique oscilador interno.

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

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: PIC18F2550 - Configuracion Osciladores
« Respuesta #2 en: 07 de Octubre de 2012, 21:25:39 »
Ok, voy a ver como lo hago en CCS. Seguro que en el .h del micro estan la definicion de esos bits de esos registros.
Entonces en la parte del uC, con el oscilador interno lo máximo que puedo correr es 8Mhz?
El PLL es solo para el USB? En caso de poner un cristal externo, cuál sería la máxima velocidad que puedo obtener? 20MHz?

Saludos!
-
Leonardo Garberoglio

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: PIC18F2550 - Configuracion Osciladores
« Respuesta #3 en: 07 de Octubre de 2012, 21:28:22 »
Entonces en la parte del uC, con el oscilador interno lo máximo que puedo correr es 8Mhz?

Si.

El PLL es solo para el USB? En caso de poner un cristal externo, cuál sería la máxima velocidad que puedo obtener? 20MHz?

No, para USB y para el CPU. Con 20 MHz, habilitando el PLL se puede obtener 48MHz. (Tener en cuenta que al PLL deben ingresar solo 4MHz)


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

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: PIC18F2550 - Configuracion Osciladores
« Respuesta #4 en: 07 de Octubre de 2012, 21:38:46 »
Hola Elgarbe y suky:
      acá va una prueba de un blink de leds cada 1 segundo con oscilador interno en c18.
     Hay una guia muy interesante que hizo Redpic sobre como configurar los pic con módulo usb.
http://picmania.garcia-cuervo.net/conceptos.php#USB4Mhz
     también podés ver esta guia de estudio http://www.todopic.com.ar/foros/index.php?topic=38202.0
      Es básicamente la traducción del datasheet del pic 18f4550 y algunos comentarios que fui agregando. Espero te sea de utilidad.
         Saludos desde San Nicolás. :)
                       Jukinch
Código: [Seleccionar]
/*
programa: prueba oscilador interno
pic: 18f4550
crystal: NO     CPU: 1Mhz (valor por defecto)

CONEXIONES:
1 led en port d0 con una resistencia en serie de 470ohms
1 led en port D1 con una resistencia en serie de 470ohms

Los leds cambian de estado cada 1 segundo. Uno enciende y el otro se apaga cada vez.
*/

/*Includes globales*/

#include <p18f4550.h>
#include <delays.h>

/*Includes locales*/


/* Bits de configuración*/
#pragma config FOSC = INTOSCIO_EC // Oscilador interno, uso de pin RA6 activado, El USB usa Clock Externo.
#pragma config WDT = OFF //desactivamos watchdog timer
#pragma config PWRT = ON // activamos power up timer


/*declaración de funciones*/




//////////////////////////////////////////////////////////////////////////////////////////////////
//                                        Programa Principal                                                  //
//////////////////////////////////////////////////////////////////////////////////////////////////


void main()
{
ADCON0 = 0X00,ADCON1 = 0X0F,CMCON = 0X07; //puerto A con todos los pines digitales
TRISA = 0X00; // puertos A B y C como salida. Recordar Tip: el 0 es una o de ouput y el 1 una I de input!!!
TRISB = 0X00;
TRISC = 0X00;
LATA = 0X00; // ponemos los puertos en cero
LATB = 0X00;
LATC = 0X00;
    TRISDbits.TRISD0 = 0; // Seteamps el pin D1 como salida para el LED
    TRISDbits.TRISD1 = 0; // Seteamps el pin D1 como salida para el LED
    LATDbits.LATD0 = 1;    // Encendemos el led0
LATDbits.LATD1 = 0;    // Apagamos el led1

    while(1)
    {
        LATDbits.LATD0 = ~LATDbits.LATD0; // Intercambiamos el estado del pin del led (Toggle LED)
LATDbits.LATD1 = ~LATDbits.LATD1; // Intercambiamos el estado del pin del led (Toggle LED)
        Delay10KTCYx(25); //Delay de 250K ciclos (1 segundo a 1MHz. Ya que cada instrucción toma 4 ciclos)
    }

}
   
« Última modificación: 08 de Octubre de 2012, 03:09:43 por jukinch »
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: PIC18F2550 - Configuracion Osciladores
« Respuesta #5 en: 08 de Octubre de 2012, 04:14:35 »
La idea es que elijas el modo de oscilador interno con los fuses y luego desde el código elijas la frecuencia cambiando los bits del registro OSCCON (2-2 del datasheet pág. 32) Puntualmente los bits IRCF2 IRCF1 e IRCF0.

IRCF2:IRCF0: Internal Oscillator Frequency Select bits
111 = 8 MHz (INTOSC drives clock directly)
110 = 4 MHz
101 = 2 MHz
100 = 1 MHz(3) this is the default
011 = 500 kHz
010 = 250 kHz
001 = 125 kHz
000 = 31 kHz (from either INTOSC/256 or INTRC directly)

Ejemplo para oscilador interno a 4mhz

// en los bits de configuración elegir el modo de oscilador
#pragma config FOSC = INTOSC_EC

// dentro del código Setear la frecuencia de trabajo
IRCF2 = 1; IRCF1 = 1; IRCF0 = 0; // ejemplo a 4mhz

"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: PIC18F2550 - Configuracion Osciladores
« Respuesta #6 en: 08 de Octubre de 2012, 12:01:23 »
Jukinch, gracias por los ejemplos!!!!

Suky, gracias por enseñar a pescar y no regalar el pescado directamente, muchos se enojan, pero siempre es mejor orientar a dar todo servido.

Finalmente con sus consejos y dando vueltas al datasheet y al manual del ccs pude configurar el osc interno, a 8 mhz y habilitar RA6 como salida de Fosc/4:

Código: [Seleccionar]
#FUSES INTRC
...
#use delay(clock=8000000)
...
setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_PLL_OFF);

A la salida del pin A6 tengo una bonita onda de 2MHz!!!

Saludos!
-
Leonardo Garberoglio

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: PIC18F2550 - Configuracion Osciladores
« Respuesta #7 en: 08 de Octubre de 2012, 12:15:10 »
Jukinch, gracias por los ejemplos!!!!

+1

Suky, gracias por enseñar a pescar y no regalar el pescado directamente, muchos se enojan, pero siempre es mejor orientar a dar todo servido.

 ;-) Si, muchos se enojan, pero después tienen un problema similar y otra vez recurren a un tercero  :tongue: Igualmente los ejemplos se que se pueden encontrar son base fundamental para ir aprendiendo.


Saludos!

No contesto mensajes privados, las consultas en el foro

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: PIC18F2550 - Configuracion Osciladores
« Respuesta #8 en: 08 de Octubre de 2012, 12:31:19 »
Son las cosas lindas de este estupendo foro  ((:-)). Entre todos vamos aprendiendo.
Gracias a este hilo me puse a estudiar el tema y comprendí a fondo como configurar del oscilador interno. :)
          Saludos y gracias a ambos.
                              Jukinch


"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado Dididito

  • PIC10
  • *
  • Mensajes: 1
Re: PIC18F2550 - Configuracion Osciladores
« Respuesta #9 en: 20 de Mayo de 2015, 10:52:01 »
Hola a todos,

Estoy intentando utilizar este micro, configurando el oscilador externo (utilizo un cristal de 16MHz). Y estoy teniendo muchisimos problemas, no me funciona bien, y sin embargo cuando utilizo el oscilador interno si funciona. Me gustaría operar a la máxima frecuencia posible por si en algún caso añado aplicación por USB con el microcontrolador, es decir a 48MHz.

He seguido el camino que más o menos señalo en la imagen que adjunto.

Os copio mi archivo Configuration_bits.c. A parte de este archivo, ¿hay algo más que tenga que configurar que esté olvidando?:

Código: [Seleccionar]
// CONFIG1L
#pragma config PLLDIV = 4       // PLL Prescaler Selection bits (Divide by 4 (16 MHz oscillator input))
#pragma config CPUDIV = OSC1_PLL2// System Clock Postscaler Selection bits ([Primary Oscillator Src: /1][96 MHz PLL Src: /2])
#pragma config USBDIV = 2       // USB Clock Selection bit (used in Full-Speed USB mode only; UCFG:FSEN = 1) (USB clock source comes from the 96 MHz PLL divided by 2)

// CONFIG1H
#pragma config FOSC = HSPLL_HS  // Oscillator Selection bits (HS oscillator, PLL enabled (HSPLL))
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
#pragma config IESO = OFF       // Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)

// CONFIG2L
#pragma config PWRT = OFF       // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOR = OFF        // Brown-out Reset Enable bits (Brown-out Reset disabled in hardware and software)
#pragma config BORV = 0         // Brown-out Reset Voltage bits (Maximum setting)
#pragma config VREGEN = ON      // USB Voltage Regulator Enable bit (USB voltage regulator enabled)

// CONFIG2H
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit))
#pragma config WDTPS = 32768    // Watchdog Timer Postscale Select bits (1:32768)

// CONFIG3H
#pragma config CCP2MX = ON      // CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
#pragma config PBADEN = ON      // PORTB A/D Enable bit (PORTB<4:0> pins are configured as analog input channels on Reset)
#pragma config LPT1OSC = OFF    // Low-Power Timer 1 Oscillator Enable bit (Timer1 configured for higher power operation)
#pragma config MCLRE = ON       // MCLR Pin Enable bit (MCLR pin enabled; RE3 input pin disabled)

// CONFIG4L
#pragma config STVREN = OFF     // Stack Full/Underflow Reset Enable bit (Stack full/underflow will not cause Reset)
#pragma config LVP = OFF        // Single-Supply ICSP Enable bit (Single-Supply ICSP disabled)
#pragma config XINST = OFF      // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))

// CONFIG5L
#pragma config CP0 = OFF        // Code Protection bit (Block 0 (000800-001FFFh) is not code-protected)
#pragma config CP1 = OFF        // Code Protection bit (Block 1 (002000-003FFFh) is not code-protected)
#pragma config CP2 = OFF        // Code Protection bit (Block 2 (004000-005FFFh) is not code-protected)
#pragma config CP3 = OFF        // Code Protection bit (Block 3 (006000-007FFFh) is not code-protected)

// CONFIG5H
#pragma config CPB = OFF        // Boot Block Code Protection bit (Boot block (000000-0007FFh) is not code-protected)
#pragma config CPD = OFF        // Data EEPROM Code Protection bit (Data EEPROM is not code-protected)

// CONFIG6L
#pragma config WRT0 = OFF       // Write Protection bit (Block 0 (000800-001FFFh) is not write-protected)
#pragma config WRT1 = OFF       // Write Protection bit (Block 1 (002000-003FFFh) is not write-protected)
#pragma config WRT2 = OFF       // Write Protection bit (Block 2 (004000-005FFFh) is not write-protected)
#pragma config WRT3 = OFF       // Write Protection bit (Block 3 (006000-007FFFh) is not write-protected)

// CONFIG6H
#pragma config WRTC = OFF       // Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) are not write-protected)
#pragma config WRTB = OFF       // Boot Block Write Protection bit (Boot block (000000-0007FFh) is not write-protected)
#pragma config WRTD = OFF       // Data EEPROM Write Protection bit (Data EEPROM is not write-protected)

// CONFIG7L
#pragma config EBTR0 = OFF      // Table Read Protection bit (Block 0 (000800-001FFFh) is not protected from table reads executed in other blocks)
#pragma config EBTR1 = OFF      // Table Read Protection bit (Block 1 (002000-003FFFh) is not protected from table reads executed in other blocks)
#pragma config EBTR2 = OFF      // Table Read Protection bit (Block 2 (004000-005FFFh) is not protected from table reads executed in other blocks)
#pragma config EBTR3 = OFF      // Table Read Protection bit (Block 3 (006000-007FFFh) is not protected from table reads executed in other blocks)

// CONFIG7H
#pragma config EBTRB = OFF      // Boot Block Table Read Protection bit (Boot block (000000-0007FFh) is not protected from table reads executed in other blocks)

Muchísimas gracias a todos los que podáis ayudar.