Haz una pregunta
  Foros de Electrónica » Principiantes » Cuestiones Elementales de Electrónica
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

06/06/2013 #1


Reloj interno del pic 18f2550
Porfavor como puedo configurar el reloj interno del pic 18f2550 a 48 MHz utilizando el Proton Basic, es para conexion USB 2.0
07/06/2013 #2
Moderador

Avatar de D@rkbytes

Éstas son las configuraciones que se usan para obtener los 48MHz para el módulo USB.

Con un cristal de 4MHz.
Código:
; Palabra de configuración
Config_Start
    FOSC=XTPLL_XT,USBDIV=2,PLLDIV=1,VREGEN=On,PBADEN=OFF
    FCMEN=OFF,IESO=OFF,PWRT=On,WDT=OFF,LVP=OFF
Config_End
;*******************************************************************************
Xtal 48MHz                      ; Definir una frecuencia de 48MHz. (CPU Core)
Con un cristal de 8MHz.
Código:
; Palabra de configuración
Config_Start
    FOSC=HSPLL_HS,USBDIV=2,PLLDIV=2,VREGEN=On,PBADEN=OFF
    FCMEN=OFF,IESO=OFF,PWRT=On,WDT=OFF,LVP=OFF
Config_End
;*******************************************************************************
Xtal 48MHz                      ; Definir una frecuencia de 48MHz. (CPU Core)
A partir de aquí ya solo vas cambiando el factor de división del PLL.
Cristal de 12MHz. = PLLDIV=3
Cristal de 16MHz. = PLLDIV=4
Cristal de 20MHz. = PLLDIV=5
Cristal de 24MHz. = PLLDIV=6
Cristal de 40MHz. = PLLDIV=10

Suerte.
07/06/2013 #3

Avatar de ByAxel

carlitos1801 dijo: Ver Mensaje
Porfavor como puedo configurar el reloj interno del pic 18f2550 a 48 MHz utilizando el Proton Basic, es para conexion USB 2.0
Si te refieres al oscilador interno de 8Mhz del PIC... no se puede, si vez la hoja de datos te darás cuenta que si activas el oscilador interno solo puede ir al CPU y periféricos. Para el USB tiene que ser si o si oscilador externo y la configuración es como se menciona D@rkbytes
14/12/2013 #4

Avatar de Edwar09

Hola, alguien me puede decir que le modifico a mi código para que trabaje con el oscilador interno

Encontre esto en la dcumentacion del ccs

////////////////////////////////////////////////////////////////// INTERNAL RC
// Constants used in setup_oscillator() are:
#define OSC_31250 0x8000
#define OSC_PLL_ON 0x4000
#define OSC_PLL_OFF 0
#define OSC_31KHZ 0
#define OSC_125KHZ 0x10
#define OSC_250KHZ 0x20
#define OSC_500KHZ 0x30
#define OSC_1MHZ 0x40
#define OSC_2MHZ 0x50
#define OSC_4MHZ 0x60
#define OSC_8MHZ 0x70

Código:
#include <18F2550.h>
#fuses HS,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,CPUDIV1,NOVREGEN
#use delay(clock=20000000)
#use fast_io(A)
#use fast_io(B)
#define LCD_DATA_PORT getenv("SFR:PORTB")
#include <lcd.c>


unsigned int8 value_IR;
unsigned int8 value_red;
unsigned int8 value_blue;

void main()
{

lcd_init();
set_tris_A(0b1110011);
set_tris_B(0);
setup_adc_ports(AN0_TO_AN1|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_us(10);

while(true)
{
   
   value_IR = read_adc();
   

}
15/12/2013 #5

Avatar de Ardogan

Algo que NO responde la pregunta de Edwar09 pero que se relaciona con lo hablado más arriba.
Para usar USB no se puede utilizar un oscilador interno, porque no tienen la precisión necesaria. Hace falta un cristal externo, que ni siquiera tiene que ser de gran exactitud (no hace falta que sea de 10ppm, con uno de 40 ppm ya alcanza).
Los osciladores internos de los micros (pics, msp430, otros no sé) andan en el orden del 1%, que no es suficientemente bueno para USB 1.0/2.0 (de 3.0 no digo porque no sé).
15/12/2013 #6
Moderador

Avatar de D@rkbytes

Edwar09 dijo: Ver Mensaje
Hola, ¿Alguien me puede decir que le modifico a mi código para que trabaje con el oscilador interno?
Utiliza esta palabra de configuración para usar el oscilador interno a 8MHz:
Código:
#fuses   NOFCMEN,NOIESO,NOBROWNOUT,PLL2,CPUDIV1,NOUSBDIV,NOVREGEN
#use     delay(internal = 8Mhz)
En el void main usa esto: setup_oscillator (OSC_8MHz | OSC_STATE_STABLE);

El oscilador interno puede trabajar a estas frecuencias:
8 MHz, 4 MHz, 2 MHz, 1 MHz, 500 kHz, 250 kHz, 125 kHz y 31 kHz.

Saludos.
18/12/2013 #7

Avatar de Edwar09

D@rkbytes dijo: Ver Mensaje
Utiliza esta palabra de configuración para usar el oscilador interno a 8MHz....
Ok aunque yo lo hice solo asi..

Código:
#include <18F2550.h>
#fuses INTRC,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,CPUDIV1,NOVREGEN
#use delay(clock=4000000)
Solo cambie el fuse HS por el fuse INTRC y con eso ya especificas que usaras el oscilador interno y solo basta con poner una velocidad valida en el clock y no use el set_up ni otra cosa.

Aunque me gustaría saber si con la forma que usted lo hizo puedo configurar mas cosas
o es mejor o que xD
pero de todos modos gracias
19/12/2013 #8
Moderador

Avatar de D@rkbytes

Edwar09 dijo: Ver Mensaje
Ok aunque yo lo hice solo asi..

Código:
#include <18F2550.h>
#fuses INTRC,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,CPUDIV1,NOVREGEN
#use delay(clock=4000000)
Solo cambie el fuse HS por el fuse INTRC y con eso ya especificas que usaras el oscilador interno y solo basta con poner una velocidad valida en el clock y no use el set_up ni otra cosa.

Aunque me gustaría saber si con la forma que usted lo hizo puedo configurar mas cosas
o es mejor o que xD
pero de todos modos gracias
Como lo hice es tan solo otra forma, si te fijas, en #use delay(options) selecciono "internal"
Con esta declaración se está indicando que se usará el oscilador interno y a que frecuencia trabajará.
Aparte omito algunos fuses, porque algunos tienen el valor necesario por defecto.
Por ejemplo; NOPROTECT y NODEBUG tendrán el mismo efecto en la palabra de configuración si no los pones.

Éstos son los valores que obtendrás con la palabra de configuración que usaste para 4MHz.


Y éstos son los valores con la palabra de configuración que yo usé para 4MHz.


Si te fijas, son similares y ambas funcionan, aunque existen algunas diferencias entre los valores.

Saludos.
Imágenes Adjuntas
Tipo de Archivo: jpg Edwar09.jpg (103,5 KB (Kilobytes), 145 visitas)
Tipo de Archivo: jpg D@rkbytes.jpg (102,4 KB (Kilobytes), 141 visitas)
31/08/2016 #9


D@rkbytes dijo: Ver Mensaje
Éstas son las configuraciones que se usan para obtener los 48MHz para el módulo USB.

Con un cristal de 4MHz.
Código:
; Palabra de configuración
Config_Start
    FOSC=XTPLL_XT,USBDIV=2,PLLDIV=1,VREGEN=On,PBADEN=OFF
    FCMEN=OFF,IESO=OFF,PWRT=On,WDT=OFF,LVP=OFF
Config_End
;*******************************************************************************
Xtal 48MHz                      ; Definir una frecuencia de 48MHz. (CPU Core)
Con un cristal de 8MHz.
Código:
; Palabra de configuración
Config_Start
    FOSC=HSPLL_HS,USBDIV=2,PLLDIV=2,VREGEN=On,PBADEN=OFF
    FCMEN=OFF,IESO=OFF,PWRT=On,WDT=OFF,LVP=OFF
Config_End
;*******************************************************************************
Xtal 48MHz                      ; Definir una frecuencia de 48MHz. (CPU Core)
A partir de aquí ya solo vas cambiando el factor de división del PLL.
Cristal de 12MHz. = PLLDIV=3
Cristal de 16MHz. = PLLDIV=4
Cristal de 20MHz. = PLLDIV=5
Cristal de 24MHz. = PLLDIV=6
Cristal de 40MHz. = PLLDIV=10

Suerte.
Esta configuracion es solo para la configuracion de los modos del oscilador y el funcionamiento del USB verdad ?
Como seria la configuracion si quiero modificar el control del oscilador solamente? porque tengo desabilitado el modo USB

Tengo un 18F4550 conectado a un cristal de 4MHz pero el funcionamiento del micro es muy lento. Segun lei en la hoja de datos del micro, los comentarios del foro y de D@rkbytes. Para configurar el oscilador tengo que acceder al los registros de configuracion OSCCON y OSCTUNE pero no estoy entendiendo como hacerlo, como me lo explica la hoja de datos.


Otra consulta. En un 18F, cuando se utiliza un oscilador externo. Se debe conectar solo una pata del oscilador al micro (OSC1) y la otra del micro queda libre (OSC2)? (imagen adjunta - hoja de datos)

Muchas gracias!!

---------- Actualizado después de 4 minutos ----------

Perdón. Creo que la pata del micro (OSC2) queda libre cuando estoy en modo HS. Y en mi caso al utilzar un cristal de 4 MHz, estoy en XT.
Imágenes Adjuntas
Tipo de Archivo: png Sin título.png (6,1 KB (Kilobytes), 3 visitas)
31/08/2016 #10

Avatar de ByAxel

Hola, tienes una confusión...

Oscilador externo (External clock) no indica "cristal", este modo solo utiliza la entrada OSC1 inyectando una señal cuadrada de otro circuito oscilante.
Los modos XT, HS y HSPLL usan cristal ocupando las lineas OSC1 OSC2.
Los modos INT y derivados usan el oscilador interno.

Incluye un multiplicador de frecuencia, se puede usar o no y son con la terminación PLL.

Guíate con el diagrama en la configuración de la oscilador (OSCILLATOR
CONFIGURATIONS pag.24 del datasheet), hay varios caminos para seleccionar la freq. adecuada.

Saludos.
31/08/2016 #11
Moderador

Avatar de D@rkbytes

Jose1306 dijo: Ver Mensaje
¿Esta configuración es sólo para la configuración de los modos del oscilador y el funcionamiento del USB verdad?
Sí, aunque también existe la posibilidad de no usar el módulo USB.
Jose1306 dijo: Ver Mensaje
¿Cómo sería la configuración si quiero modificar el control del oscilador solamente?
Porque tengo deshabilitado el modo USB.
Eso depende del modo y frecuencia que requieras.
Jose1306 dijo: Ver Mensaje
Tengo un 18F4550 conectado a un cristal de 4 MHz, pero el funcionamiento del micro es muy lento.
Según leí en la hoja de datos del micro, los comentarios del foro y de D@rkbytes.
Para configurar el oscilador tengo que acceder al los registros de configuración OSCCON y OSCTUNE, pero no estoy entendiendo cómo hacerlo, como me lo explica la hoja de datos.
Eso se debe a una mala selección de bits en la palabra de configuración.
Al no ser correcta se pone en funcionamiento el Fail-Safe Clock Monitor (FCMEN) y entra en acción el oscilador interno.
Si el registro OSCCON no está configurado, la frecuencia por defecto en el POR (Power On Reset) será de 1 MHz.
Ahora, si el bit FCMEN está desactivado y la palabra de configuración no es correcta, el microcontrolador no hará nada porque ninguno de los osciladores estará funcionando.
El registro OSCTUNE sirve para ajustar la frecuencia del oscilador interno.
Jose1306 dijo: Ver Mensaje
Otra consulta. ¿En un 18F, cuando se utiliza un oscilador externo.
Se debe conectar solo una pata del oscilador al micro (OSC1) y la otra del micro queda libre (OSC2)?
Sí, pero eso depende de la configuración de los bits FOSC3:FOSC0
Por ejemplo:
0101 = EC Oscillator CLKO function on RA6 (EC)
Jose1306 dijo: Ver Mensaje
Perdón. Creo que la pata del micro (OSC2) queda libre cuando estoy en modo HS.
Y en mi caso al utilizar un cristal de 4 MHz, estoy en XT.
Cuando usas el oscilador con un cristal, el pin RA6 (CLKO) siempre será la salida del oscilador.
El fuse XT es para cristales de hasta 4 MHz y el fuse HS es para cristales de hasta 48 MHz.
Para obtener los 48 MHz requeridos por el módulo USB, no se puede usar cualquier cristal.
Ver hoja de datos, sección; 2.3 (Oscillator Settings for USB)
En el modo de oscilador interno, el pin RA6 puede ser usado como un pin E/S
31/08/2016 #12


Perfecto. Gracias a los dos.

A ver si entiendo…….

Los relojes a los que se refiere todo el tiempo en la hoja de datos (primario, secundario e interno) son los que están dentro del micro. Y también se puede agregar uno periférico, que en mi caso es un cristal de 4MHz.

Entonces, al configurar el OSCCON lo que estoy configurando son los 3 relojes que trae el micro y que el cliente debe configurar de acuerdo a sus prestaciones. NOTA: Es por eso que en mi caso, al no configurar nada, por más que tenga conectado de forma periférica un oscilador de 4MHz el micro se está ejecutando a 1 MHz hasta el punto que a veces se reinicia solo.

Bien. Como quiero utilizar solo el oscilador periférico y apagar los relojes internos (del CPU). Lo que voy hacer es utilizar el modo “PRI_IDLE MODE” configurando el OSCCON de esta forma OSCCON = %1110100
1 – Ejecuto el modo IDLEN y la instrucción SLEEP al poner un 1 en el bit 7,
2 – Al bit 1 y bit 0, les doy los valores 00 para utilizar el modo PRI_IDLE.

Código:
Device 18F4550 
Declare Onboard_USB No 

; Palabra de configuración
Config_Start
    FOSC=XT_XT,USBDIV=2,PLLDIV=1,VREGEN=On,PBADEN=OFF
    FCMEN=OFF,IESO=OFF,PWRT=On,WDT=OFF,LVP=OFF
Config_End
;*******************************************************************************
Xtal 4MHz                      ; Definir una frecuencia de 48MHz. (CPU Core)
OSCCON = %11100000

No se como asignarle el valor 0 a los FOSC3:FOSC3.

No se que les parece si hago eso..

---------- Actualizado después de 8 minutos ----------

El problema es que cuando simulo en Proteus, me dice que la simulacion no ocurre en tiempo real porque se excede el CPU..


Otra cosa, encontre un pdf. de microchip que contiene todos las modificaciones en la configuracion de los PIC18F.

Adjunto la imagen de lo que me aparece en Proteus y el material que encontré por si le resulta útil a alguien.
Imágenes Adjuntas
Tipo de Archivo: jpg Sin título88.jpg (46,6 KB (Kilobytes), 2 visitas)
Archivos Adjuntos
Tipo de Archivo: pdf 18F4550 - Fuses ConfigSet.pdf (2,45 MB (Megabytes), 4 visitas)
31/08/2016 #13
Moderador

Avatar de D@rkbytes

Jose1306 dijo: Ver Mensaje
Los relojes a los que se refiere todo el tiempo en la hoja de datos (primario, secundario e interno) son los que están dentro del micro.
Y también se puede agregar uno periférico, que en mi caso es un cristal de 4MHz.
Pues si, el interno LFOSC, (31 KHz/31.25 KHz) sirve para el modo de reposo, es decir, cuando el microcontrolador es puesto en bajo consumo (Sleep) y queda en espera de una interrupción para despertar.
Como el oscilador principal consume más corriente, es por eso que se tiene la opción de qué oscilador quedará funcionando cuando el microcontrolador entre en modo de reposo.
Jose1306 dijo: Ver Mensaje
Entonces, al configurar el OSCCON lo que estoy configurando son los 3 relojes que trae el micro y que el cliente debe configurar de acuerdo a sus prestaciones.
NOTA: Es por eso que en mi caso, al no configurar nada, por más que tenga conectado de forma periférica un oscilador de 4MHz el micro se está ejecutando a 1 MHz hasta el punto que a veces se reinicia solo.
No. El registro OSCCON sirve para seleccionar la frecuencia del oscilador interno, entre otros parámetros.
Jose1306 dijo: Ver Mensaje
Bien. Como quiero utilizar solo el oscilador periférico y apagar los relojes internos (del CPU).
Lo que voy hacer es utilizar el modo “PRI_IDLE MODE” configurando el OSCCON de esta forma OSCCON = %1110100
1 – Ejecuto el modo IDLEN y la instrucción SLEEP al poner un 1 en el bit 7,
2 – Al bit 1 y bit 0, les doy los valores 00 para utilizar el modo PRI_IDLE.
Entonces no realices la configuración del registro OSCCON y desactiva el fuse FCMEN
Si la palabra de configuración es correcta para usar cristal o un oscilador externo, el microcontrolador deberá funcionar sin problemas.
Y como está inactivo el fuse FCMEN (Fail-Safe Clock Monitor) el oscilador interno no entrará en funcionamiento.
Por lo tanto, si la palabra de configuración no es correcta, el microcontrolador quedará inactivo.
Jose1306 dijo: Ver Mensaje
No se como asignarle el valor 0 a los FOSC3:FOSC0.

No sé qué les parece si hago eso.
Me parece que tienes que leer más la hoja de datos, ya que algunos bits son de sólo lectura.
01/09/2016 #14


Lei todo el capitulo del datasheet y sigo sin solucionar el problema.

Que frecuencia le tiene que llegar al CPU para funcionar bien? 48MHZ(Fcy)? ¿Es posible llegar a esa frecuencia con el oscilador externo de 4MHz?

Probe configurando el OSCON para utilizar solo el reloj interno y no me funciono, el micro no me prende.

Luego probe apagar el CFMEN para utilizar el oscilador primario y tampoco me funciona.

Alguien tiene el codigo que se necesita para configurarlo ? Creo que el problema es que no se como configurar los registros en proton, como pueden ver, lo que si se usar bien es el paint. Les adjunte una imagen con el camino que quiero tomar para saber si entienden y si es posible realizar lo que quiero.

O si les parece mejor a ustedes que tienen mas experiencia, le saco el cristal y utilizo solo el oscilador interno.
Imágenes Adjuntas
Tipo de Archivo: jpg Sin títulorer.jpg (77,8 KB (Kilobytes), 5 visitas)
01/09/2016 #15
Moderador

Avatar de D@rkbytes

Jose1306 dijo: Ver Mensaje
¿Es posible llegar a esa frecuencia con el oscilador externo de 4MHz?
Con esa frecuencia sí es posible.
Jose1306 dijo: Ver Mensaje
Probé configurando el OSCON para utilizar solo el reloj interno y no me funcionó, el micro no me prende.

Luego probé apagar el CFMEN para utilizar el oscilador primario y tampoco me funciona.
Seguramente no estás usando la palabra de configuración correcta.
Jose1306 dijo: Ver Mensaje
¿Alguien tiene el código que se necesita para configurarlo?
Creo que el problema es que no sé cómo configurar los registros en proton.
En el post #2 de éste mismo tema se encuentra, y con la sintaxis para Proton.
Jose1306 dijo: Ver Mensaje
O si les parece mejor a ustedes que tienen mas experiencia, le saco el cristal y utilizo solo el oscilador interno.
Si no necesitas precisión y tampoco requieres una frecuencia de operación mayor a 8 MHz, sí puedes usar el oscilador interno.
01/09/2016 #16


A que le llamas "necesitar precisión " ? Tengo conectado al micro un reloj DS1307 y una micro SD, la frecuencia del reloj interno afectaría su funcionamiento? Es decir, la comunicacion I2C.. SPI.. ,etc.
01/09/2016 #17
Moderador

Avatar de D@rkbytes

Jose1306 dijo: Ver Mensaje
¿A qué le llamas "necesitar precisión"?
A realizar operaciones con los ciclos de reloj del microcontrolador.
Jose1306 dijo: Ver Mensaje
Tengo conectado al micro un reloj DS1307 y una micro SD.
¿La frecuencia del reloj interno afectaría su funcionamiento, es decir, la comunicación I2C, SPI, etc.?
Sólo se verían afectados si la frecuencia de operación del bus está por debajo de los parámetros establecidos de comunicación.
05/09/2016 #18


Amigos. Al final pude solucionar el problema. Gracias.
Opte por utilizar el reloj interno a una frecuencia de 1MHz en lugar del oscilador externo.

¿Que opinarían ustedes sobre el consumo de batería del micro, si opera con el reloj interno en lugar del externo?

¿Como puedo ser mas eficiente en cuanto al consumo de batería al utilizar el reloj interno (¿función SLEEP?) ?

Saludos !
05/09/2016 #19
Moderador

Avatar de D@rkbytes

Esa información la encuentras en la hoja de datos.
Para empezar con algo al respecto, mira la sección 3.0 (POWER-MANAGED MODES)
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Cuestiones Elementales de Electrónica

Deseas aprender electrónica y necesitas ayuda para comenzar? Resuelve tus dudas en esta sección.

Cerrar
Foros de Electrónica » Principiantes » Cuestiones Elementales de Electrónica

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.