Autor Tema: Dudas sobre la configuración del oscilador de los PIC's  (Leído 8519 veces)

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

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Dudas sobre la configuración del oscilador de los PIC's
« en: 14 de Noviembre de 2024, 10:19:09 »
Hola a todos, hace tiempo que no entro en el foro, ya saben problemas de tiempo.
Tengo una duda sobre la configuración del oscilador de los pic's, por ejemplo, utilicemos el PIC18F4620, en su hoja de datos dice que se puede utilizar cristales de hasta 25MHz.
En la hoja de datos dice que si utilizo la opción de HSPLL multiplico la frecuencia del cristal por 4.
Entonces ¿si utilizo un cristal de 4MHz se multiplicaría esa frecuencia por 4 dando un resultado de 16MHz? y ¿éste último valor sería el que utilizaría para los cálculos de la velocidad de timer?

Y según la formula de cálculo del ciclo máquina es :
Tcm= 4/Fosc

donde Tcm es el ciclo máquina, 4 es una constante y ¿Fosc es la velocidad del cristal que le he puesto al pic en lugar de poner 4MHz tendría que hacer el cálculo con 16MHz?

Saludos
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Dudas sobre la configuración del oscilador de los PIC's
« Respuesta #1 en: 14 de Noviembre de 2024, 10:39:05 »
Hola a todos, hace tiempo que no entro en el foro, ya saben problemas de tiempo.
Tengo una duda sobre la configuración del oscilador de los pic's, por ejemplo, utilicemos el PIC18F4620, en su hoja de datos dice que se puede utilizar cristales de hasta 25MHz.
En la hoja de datos dice que si utilizo la opción de HSPLL multiplico la frecuencia del cristal por 4.
Entonces ¿si utilizo un cristal de 4MHz se multiplicaría esa frecuencia por 4 dando un resultado de 16MHz? y ¿éste último valor sería el que utilizaría para los cálculos de la velocidad de timer?

Y según la formula de cálculo del ciclo máquina es :
Tcm= 4/Fosc

donde Tcm es el ciclo máquina, 4 es una constante y ¿Fosc es la velocidad del cristal que le he puesto al pic en lugar de poner 4MHz tendría que hacer el cálculo con 16MHz?

Saludos

Yo tengo entendido que Fosc es la frecuencia del CPU, y en este microcontrolador, parece ser el mismo para los periféricos.

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Dudas sobre la configuración del oscilador de los PIC's
« Respuesta #2 en: 14 de Noviembre de 2024, 10:56:38 »
... por ejemplo, utilicemos el PIC18F4620, en su hoja de datos dice que se puede utilizar cristales de hasta 25MHz.
En la hoja de datos dice que si utilizo la opción de HSPLL multiplico la frecuencia del cristal por 4.
Entonces ¿si utilizo un cristal de 4MHz se multiplicaría esa frecuencia por 4 dando un resultado de 16MHz? y ¿éste último valor sería el que utilizaría para los cálculos de la velocidad de timer?
Si.

Citar
Y según la formula de cálculo del ciclo máquina es :
Tcm= 4/Fosc
Si, pero ojo que es la frecuencia ya multiplicada. O sea 16MHz.


Una manera cómoda de configurar es usando el Project Wizard que trae el CCS (PCWWIZ.exe).   
 

* 4620.jpg
(62.68 kB, 742x619 - visto 258 veces)

(ojo que los tiempos a la salida del prescaler están redondeados)

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re:Dudas sobre la configuración del oscilador de los PIC's
« Respuesta #3 en: 14 de Noviembre de 2024, 12:16:32 »
Vale mucha gracias, he estado haciendo cálculos para que mi timer0 se desborde a los 1ms luego me hago una función que cuente esos desbordamientos para encender un led a los 1 segundos, pero los cálculos parecen buenos pero el tiempo no se ajusta, ¿alguien me puede echar una mano con eso?.

Saludos
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Dudas sobre la configuración del oscilador de los PIC's
« Respuesta #4 en: 14 de Noviembre de 2024, 13:09:24 »
Subí el código.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re:Dudas sobre la configuración del oscilador de los PIC's
« Respuesta #5 en: 14 de Noviembre de 2024, 14:47:25 »
es que no uso CCs si no C18 pero de todas maneras me gustaría aprenderlo por las formulas
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Dudas sobre la configuración del oscilador de los PIC's
« Respuesta #6 en: 14 de Noviembre de 2024, 14:57:36 »
es que no uso CCs si no C18 pero de todas maneras me gustaría aprenderlo por las formulas

Igual deberías subirlo.

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re:Dudas sobre la configuración del oscilador de los PIC's
« Respuesta #7 en: 15 de Noviembre de 2024, 05:42:14 »

Datos proporcionados:
1). Timer0 de 8 bits: El contador va de 0 a 255 (total de 256 valores).
2). Preescaler de 1:128: El prescaler divide la frecuencia de reloj del timer.
3). Cristal de 4 MHz: La frecuencia del oscilador principal es de 4 MHz.
4). HSPLL activado: Este configura el microcontrolador para usar el PLL (Phase-Locked Loop) que multiplica la frecuencia del cristal por 4. Entonces, la frecuencia del reloj del sistema será:

Frecuencia del sistema = 4MHz × 4 = 16 MHz

Calcular el ciclo de reloj del Timer0:
El temporizador del PIC18F4620 se ejecuta a la frecuencia de reloj del sistema, que en este caso es 16 MHz.

La frecuencia del Timer0 (sin prescaler) sería simplemente la frecuencia del sistema:

𝑓timer = 16MHz

El prescaler de 1:128 divide esta frecuencia entre 128, por lo que la frecuencia real del Timer0 será:

𝑓timer, real = 16MHz/128 = 125KHz

Esto significa que el temporizador cuenta cada 1/125,000 segundos, o lo que es lo mismo, 8 microsegundos por cada incremento del contador.

Calcular el tiempo que tarda el Timer0 en desbordarse:
Un Timer0 de 8 bits tiene un rango de conteo de 0 a 255, lo que da un total de 256 ciclos. Por lo tanto, el tiempo total que tarda en desbordarse es:

Tiempo para desbordarse = 256 × 8𝜇s = 2048𝜇s = 2.048ms

Ajustar el valor de inicio para obtener 1 ms:
El tiempo de desbordamiento es un múltiplo de 2.048 ms. Necesitamos que el temporizador se desborde en 1 ms, así que debemos hacer que el temporizador cuente hasta un valor menor para que el desbordamiento ocurra a 1 ms. La cantidad de tiempo que queremos contar es 1 ms, y sabemos que cada ciclo del timer dura 8 microsegundos. Entonces, el número de ciclos necesarios es:

Ciclos necesarios = 1ms/8μs = 125

Dado que el Timer0 es de 8 bits, podemos iniciar el contador con un valor que haga que cuente 125 ciclos antes de desbordarse. Como el contador comienza en 0, necesitamos que el valor inicial sea:

255 − 125 = 130

Entonces, se deberá configurar el Timer0 para que empiece a contar desde el valor 130.

¿son correctos esos cálculos?

Y añado el proyecto por si sirve de algo y comparto un enlace a dropbox por que es demasiado grande y no lo puedo subir aquí
Timer0.

gracias y un saludo
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Dudas sobre la configuración del oscilador de los PIC's
« Respuesta #8 en: 15 de Noviembre de 2024, 13:02:10 »
...
Calcular el ciclo de reloj del Timer0:
El temporizador del PIC18F4620 se ejecuta a la frecuencia de reloj del sistema, que en este caso es 16 MHz.
La frecuencia del Timer0 (sin prescaler) sería simplemente la frecuencia del sistema:
𝑓timer = 16MHz
No, la frecuencia de entrada al timer es fosc/4    -->  𝑓timer = 4MHz ,  tclk = 0.25us

El resto del procedimiento está bien.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Dudas sobre la configuración del oscilador de los PIC's
« Respuesta #9 en: 15 de Noviembre de 2024, 16:21:58 »
No, la frecuencia de entrada al timer es fosc/4    -->  𝑓timer = 4MHz ,  tclk = 0.25us

Para reforzar la idea:



Una recomendación al OP, es que lea las hojas de datos del MCU
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re:Dudas sobre la configuración del oscilador de los PIC's
« Respuesta #10 en: 15 de Noviembre de 2024, 17:25:29 »
...
Calcular el ciclo de reloj del Timer0:
El temporizador del PIC18F4620 se ejecuta a la frecuencia de reloj del sistema, que en este caso es 16 MHz.
La frecuencia del Timer0 (sin prescaler) sería simplemente la frecuencia del sistema:
𝑓timer = 16MHz
No, la frecuencia de entrada al timer es fosc/4    -->  𝑓timer = 4MHz ,  tclk = 0.25us

El resto del procedimiento está bien.

Entiendo que es 16MHz por que tengo activado el HSPLL que multiplica por 4 la velocidad del cristal, al ser un cristal de 4MHz el resulado es 16MHz... ¿es así o no?
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re:Dudas sobre la configuración del oscilador de los PIC's
« Respuesta #11 en: 18 de Noviembre de 2024, 11:35:58 »
Hola a todos de nuevo, pues creo que ya he dado con la solución y la pongo aquí a ver si está bien o tengo algún fallo.

* Formulas para el cálculo del timer0 para ajustarlo a que se desborde
a los 1000ms, lo usaremos de 8Bits, se puede configurar a 16Bits pero
pasa más tiempo para que se desborde el timer0 así que lo dejamos en 8bits

* En los microcontroladores pic si se tiene la opción de HSPLL se multiplica
por 4 la frecuencia del oscilador, si utilizamos un cristal de 4MHz
y activamos esa opción la frecuencia del oscilador será de 16MHz

-DATOS DEL PIC-
XTAL = 4MHz
HSPLL activado = x 4

*Cálculo de Fosc:
Fosc = 4 x 4000000; Fosc = 16000000

*Calculamos el ciclo máquina:

Tcm = 4/Fosc  donde Fosc es la frecuencia del oscilador,
Tcm = 4/16000000; Tcm = 0,00000025

*Cálculo del Tiempo máximo del TIMER0 con esto calculamos el valor que tenemos que
escribir en el registro TMR0L para que se derborde el timer0 al tiempo deseado

T = Tcm x Preescaler (256 - TMR0);

T = Tiempo máximo deseado
Tcm = Ciclo máquina
Preescaler = lo que configuramos en el microcontrolador
256 = valor constante
TMR0 = Valor a cargar en el registro, como no lo sabemos se le pone 0

T = (0,00000025 x 128) x (256 - 0); T = 0,008192sg; T = 8,2ms

*Cálculo carga del Timer0

TMR0 = 256 - ((T.Deseado x Fosc)/(4 x Preescaler));

*Datos:
T.Deseado = 1000ms = 0,001sg
Preescaler = 1:128

TMR0 = 256 - ((0,001 x 16000000)/(4 x 128)); TMR0 = 224,75

Cómo el registro del Timer0 (TMR0L) no puede tener numeros decimales pues redondeamos
hacia arriba por que está más cerca del 225 que del 224 y este es el valor que cargamos
en el TMR0L, ya que los timers no son exactos tendremos que ajustar para lograr la mejor
presición posible y para eso dejando el resultado que nos dio en la formula fijo, vamos
cambiando la función que hace el conteo del tiempo.

Así que dejando el TMR0L a 225 tengo que jugar con la función

Código: [Seleccionar]
void TickUpdate(void){
static long cont_TMR0 = 0;

 if(INTCONbits.TMR0IF)
    {

//Se limpia la bandera
        if(cont_TMR0++ == 955){
    LED_STATUS_0 ^= 1; //Parpadeo del led
    cont_TMR0 = 0;
    }
INTCONbits.TMR0IF = 0; //Limpiamos la bandera de aviso de desbordamiento del buffer del Timer0
        TMR0L = TICK_LOAD;
       
       
    }

}

Dejando la variable cont_TMR0 a 955 para que mas o menos se ajuste a la velocidad de un cronómetro comercial, habrá que ajustar más si se quiere más precisión pero así tira bien
Comparto proyecto por si alguien le quiere echar un vistazo:

Timer0
« Última modificación: 19 de Noviembre de 2024, 15:50:04 por Thulsa Doom »
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...