Cómo calcular el tiempo de un solo tick en el microcontrolador

5

He estado en el sistema integrado durante 8 meses. He trabajado la parte de aplicación más en comparación con el nivel bajo. Tengo preguntas básicas sobre sistemas de ticks,

  1. Cómo calcular el tick del sistema del temporizador, si estoy iniciando el temporizador de hardware de un controlador para generar cualquier retraso. Si tengo el temporizador de 16 bits por ejemplo y configuro el reloj del sistema para 8MHz. Según mi conocimiento, la marca única será T = 1 / f. Entonces, un solo tick tomará 0.125 microsegundos. ¿Es esto correcto? o cualquier otra dependencia para calcularlo. ¿Este cálculo variará con el controlador por controlador?
  2. ¿Hay alguna forma de configurar el reloj (por ejemplo, 1MHz) solo para el temporizador o cualquier otro periférico sin cambiar el reloj del sistema (por ejemplo, 8Mhz)
  3. Si el controlador pasa al modo de bajo consumo (por lo general, un cambio del modo de encendido). La resolución del temporizador también cambiará? si necesito cambiar la configuración del temporizador para cada modo de encendido.
pregunta user2732944

3 respuestas

8

Para responder a tu primera pregunta.

Básicamente, es lo mismo con todos los microcontroladores y su cálculo fue correcto. En su ejemplo, con un temporizador de 16 bits y, $$ f _ {\ text {SystemClock}} = f _ {\ text {timer}} = 8MHz $$

Como dijiste, tenemos una marca en cada, $$ T _ {\ text {timer}} = \ frac {1} {f _ {\ text {SystemClock}}} = \ frac {1} {f _ {\ text {timer}}} = \ frac {1} {8MHz } = 0.125μs $$

Con un temporizador de 16 bits significa,

$$ ticks _ {\ text {max}} = (2 ^ {16} - 1) = 65535 $$

garrapatas. Así que el temporizador se desbordará en cada,

$$ t _ {\ text {overflow}} = marcas _ {\ text {max}} \ times T _ {\ text {timer}} = 65535 \ times 0.125μs = 8.191875ms $$

Puede contar los desbordamientos para obtener un retraso específico. Ahora, si desea cambiar el valor de t overflow

  • Puede dividir fSystemClock como las otras respuestas lo mencionaron, y ejecutar su temporizador con una frecuencia diferente a la de f SystemClock . De esta manera, tendrá más tiempo entre dos marcas temporizador y t overflow será mayor.
  • O, puede establecer un valor máximo para el temporizador para que se desborde antes y t overflow será menor.

De esta manera, se puede obtener una gran cantidad de valor de retardo.

    
respondido por el Bence Kaulics
3

1. reloj de instrucciones / frecuencia del reloj del sistema

la frecuencia del reloj de instrucción es diferente en diferentes familias de microcontroladores.  un microcontrolador PIC tiene un reloj de instrucciones de 1/4 de la frecuencia de reloj. y cada instrucción (en su mayoría) (excepto goto) toma 1 ciclo de reloj de instrucción, goto toma 2 ciclos.

en una atmósfera µC, el reloj de instrucciones es el mismo que la frecuencia de reloj.

2. otro reloj para un solo temporizador

en varios µC puede configurar un grupo de divisores y configuraciones de desbordamiento, verifique la hoja de datos de su µC específico  en casi todos los PIC puede establecer divisores como 1/8, por lo que cada 8 ciclos de reloj de instrucciones el temporizador aumenta con uno. por lo tanto, el temporizador funciona a 1MHz si su reloj de instrucciones es de 8MHz (el oscilador funciona a 32MHz)

o un divisor de 1/2 para que su temporizador funcione a 1MHz si, reloj del sistema @ 2MHz y oscilador @ 8MHz

3. modo de baja potencia

algunos µC tienen múltiples osciladores internos, p. : a 8MHz a 4MHz y 32.786 kHz y si cambia entre esas frecuencias, puede reducir el consumo de energía. pero cambias el reloj de instrucciones y por lo tanto también el temporizador

    
respondido por el on8tom
2

Eso podría ser depende del registro de prescaler. El propósito del preescalador es permitir que el temporizador se marque a la velocidad que desee. Para temporizadores más cortos (8 y 16 bits), a menudo habrá una compensación entre la resolución (la alta resolución requiere una alta velocidad de reloj) y el rango (las altas velocidades de reloj hacen que el temporizador se desborde más rápidamente).

Por ejemplo, no puede (sin algunos trucos) obtener resolución 1us y un período máximo de 1 seg usando un temporizador de 16 bits. Si desea 1us de resolución, está limitado a un período máximo de aproximadamente 65 ms. Si desea un período máximo de 1 segundo, está limitado a aproximadamente 16us de resolución. El prescaler le permite hacer malabarismos con la resolución y el período máximo para adaptarse a sus necesidades.

Siga las hojas de datos del controlador que está utilizando. Ir a través del registro del temporizador. Algunos controladores tendrán preescalador de valor fijo (no modificable por el programador) y en algunos controladores puede ser modificable

Creo que esto responderá a tu primera y segunda pregunta

    
respondido por el Reshmi khanna

Lea otras preguntas en las etiquetas