En un temporizador 555, las resistencias y los condensadores determinan la frecuencia y la duración de los pulsos del temporizador. ¿Cómo se actualiza esto en caso de un temporizador de microcontrolador?
En un temporizador 555, las resistencias y los condensadores determinan la frecuencia y la duración de los pulsos del temporizador. ¿Cómo se actualiza esto en caso de un temporizador de microcontrolador?
Los microcontroladores generalmente usan cristales u osciladores internos para generar un reloj de referencia. Esa frecuencia de reloj se puede multiplicar (en chips de gama más alta) utilizando un PLL. El reloj resultante se utiliza para ejecutar el sistema.
En su forma más simple, un temporizador es un contador más un valor de comparación (el período). En software, el usuario establece el período con un registro y enciende el reloj en el contador. Cuando el valor del contador alcanza el valor del período, la lógica de comparación genera un impulso. Esto puede provocar una interrupción de la CPU o (en algunas MCU) salir a través de un pin.
Dado que la lógica del temporizador es puramente digital, el período (en ciclos) debe calcularse en función de la frecuencia del reloj.
Editar: Parece que estás preguntando más sobre la implementación de bajo nivel. Se puede implementar un contador utilizando flip-flops disparados por el borde. Configure un flip-flop de modo que su salida se invierta en el flanco descendente de cada ciclo de reloj. (En un flip-flop D, puede conectar la salida a la entrada a través de un inversor). Tome dos de estos, y conecte la salida del primero a la entrada de reloj del segundo. Luego, suministra un reloj al primer flop. Ellos cambiarán de esta manera:
RefClk -> Q1 -> Q2
0 0 0
1 0 0
0 1 0 <-- falling clock edge inverts Q1
1 1 0
0 0 1 <-- falling clock edge inverts Q1, falling Q1 edge inverts Q2
1 0 1
0 1 1 <-- falling clock edge inverts Q1
1 1 1
0 0 0 <-- falling clock edge inverts Q1, falling Q1 edge inverts Q2
Al conectar más flip-flops juntos de esta manera, obtienes más bits en tu contador. Cada flop adicional alterna a la mitad de la tasa del flop anterior.
Como mencionó, un 555 IC utiliza un circuito RC para controlar la sincronización de la salida del 555. Muchos microprocesadores modernos tienen un circuito RC interno que también se puede usar para generar un tren de pulsos que el procesador utiliza para coordinar sus actividades internas. El circuito interno RC facilita la puesta en marcha de un proceso, pero no es muy preciso ni estable en caso de sobrecalentamiento. Para aplicaciones donde la precisión del circuito RC no es lo suficientemente buena, el proceso puede deshabilitar su reloj RC interno y usar un tren de pulsos de reloj digital proveniente de fuera del chip. Normalmente, este sería un circuito basado en un cristal que es mucho más preciso y estable que un RC. Sin embargo, no hay ninguna razón por la que no pueda usar un circuito 555 para generar el reloj de referencia para un procesador, pero tendrá los mismos problemas de estabilidad que el reloj RC interno porque se basa en resistencias y condensadores.
Sabiendo que el procesador tiene una fuente de reloj para trabajar, realiza operaciones de temporización simplemente contando sus pulsos de reloj de referencia. Cuanto más rápidos sean los pulsos de reloj en relación con la operación de sincronización deseada, más precisos serán los resultados. Si está intentando generar un pulso de 1.1 ms, pero su reloj de referencia es de 250 usec, un conteo de 4 obtendrá una salida de 1.0 ms y el conteo de 5 le dará un pulso de 1.25 ms. Si su reloj de referencia es 1 usec, puede obtener un pulso muy preciso de 1 ms. El procesador AVR en un Arduino normalmente se ejecuta a 16Mhz.
Entonces, ¿cómo un proceso realmente cuenta los pulsos de reloj? La función Temporizador / Contador dentro de un procesador tiene hardware para hacer precisamente eso. El circuito real se denomina contador binario, que consiste simplemente en varios flip-flops conectados entre sí, de modo que el primer flip-flop cambia el estado de cada reloj, el 2do flip-flop cambia el estado de cada reloj, el 3er flip-flop cambia de estado cada 4 ° reloj, etc. Un procesador pequeño normalmente tendrá contadores de 8 bits y / o contadores de 16 bits, que tienen 8 o 16 flip-flops respectivamente. Por lo tanto, la función de temporización / conteo de tiempo no se realiza con un RC sino digitalmente. Una búsqueda de "contadores digitales" mostrará un montón de artículos sobre cómo funcionan realmente.
Escribiendo en los registros que corresponden a los periféricos del contador / temporizador. Cada fabricante de MCU tiene su propia manera de manipular los temporizadores / contadores. Como es típico, la hoja de datos es el mejor lugar para obtener información específica del dispositivo sobre cómo hacer esto.
Te daré un ejemplo rápido. Después de leer la sección de la hoja de datos sobre los temporizadores de algunos MCU de 8 bits populares, verá que la mayoría de los periféricos con temporizador tienen un divisor de reloj. Si el reloj del sistema de su MCU funciona a 1MHz, y establece el divisor de reloj del temporizador en 1: 4, obtendrá una tasa de conteo de temporizador de 250 kHz. Lo que eso significa es que un registro específico en la memoria de la MCU se incrementará una vez cada 4uS. Lo hace todo por ti mismo. Ahora tiene una referencia de tiempo de marcación dentro de la MCU en la que puede basar eventos de temporización.
Todo esto se hace sin necesidad de seleccionar componentes externos para determinar las frecuencias y los ciclos de trabajo, como se hace con un 555 (con la excepción de un cristal externo, que puede servir como el oscilador del chip).
Lea otras preguntas en las etiquetas timer