¿Se pueden ejecutar los microcontroladores a frecuencias de reloj arbitrariamente bajas?

103

La hoja de datos para el ATTiny13A, por ejemplo, enumera la frecuencia mínima de 0 MHz. ¿Significa esto que el reloj puede ejecutarse a cualquier frecuencia arbitrariamente baja sin efectos nocivos? ¿Asumo que consume una corriente más baja a velocidades de reloj más bajas? ¿0 MHz significa que puede detener el reloj por completo, y mientras se siga aplicando energía, recordará su estado indefinidamente?

endolito
fuente
34
Me gustaría agregar, esta es una excelente pregunta. La mayoría de los EE superiores no se toman el tiempo para leer y pensar en las hojas de datos, lo cual es un complemento para usted o un insulto para ellos, me gustaría dar a entender ambos.
Kortuk
No estoy completamente seguro de que el oscilador RC interno esté apagado a menos que usted lo indique específicamente (a través de varias opciones de ahorro de energía). No estoy seguro de para qué se utiliza, pero al menos para EEPROM y probablemente ADC.
jippie
1
@jippie, ¿qué RC interno estás diciendo? ATMegaX, por ejemplo, tiene el RC interno para el reloj del sistema (normalmente 8Mhz, con preescalador div 8 opcional), tiene el oscilador watchdog. El reloj del sistema está seleccionado con fusible y probablemente esté apagado cuando se usa un reloj externo. Los otros, como dijiste, pueden estar desactivados por los modos de ahorro de energía, pero dudo que pasen por el reloj del sistema.
Diego C Nascimento

Respuestas:

73

Si. Si la hoja de datos dice "operación totalmente estática", puede registrarla a cualquier velocidad, incluso a 0 Hz. Un chip "dinámico" necesita tener un reloj a una velocidad específica o pierde su estado.

todbot
fuente
1
¿Tienes un ejemplo de un micro que permite esto?
MrEvil
44
Los microcontroladores que contienen flash en el chip pueden especificar una velocidad de reloj de flash mínima (y máxima) al escribir en flash. Sin embargo, cuando se lee desde flash, esto no se aplica.
Steve Melnikoff
8
MrEvil, la serie Atmel AVR ATtiny mencionada en la pregunta es completamente estática, ya que creo que la mayoría de los chips Atmel AVR. Y creo que la mayoría de los microcontroladores PIC de Microchip.
todbot
77
En realidad, creo que el ADC en el ATTiny13A no funciona a bajas frecuencias, ¿tal vez debido a la descomposición del condensador de muestreo y retención? "Por defecto, los circuitos de aproximación sucesivos requieren una frecuencia de reloj de entrada entre 50 kHz y 200 kHz para obtener la resolución máxima ... El módulo ADC contiene un preescalador, que genera una frecuencia de reloj ADC aceptable a partir de cualquier frecuencia de CPU superior a 100 kHz".
endolith
8
endolito: estoy de acuerdo, los ADC generalmente no funcionan a bajas frecuencias. Hasta donde puedo decir, todo lo demás en prácticamente todos los microcontroladores modernos continúa funcionando bien hasta "0 Hz", también conocido como "pausa indefinidamente". En particular, muchos microcontroladores tienen un modo de "reposo de baja potencia" que detiene todos los relojes, hasta que algo, generalmente una persona que presiona un botón, lo despierta y se reanuda justo donde lo dejó. en.wikipedia.org/wiki/Static_logic_(digital_logic)
davidcary
23

Estoy publicando otra respuesta, solo porque la última pregunta que tenía no fue respondida antes.

Todbot es completamente correcto. También atraerá menor potencia a velocidades más bajas. También significa que si suministra su reloj desde otro procesador, por ejemplo, podría dejar de suministrarlo en cualquier momento y luego comenzar a registrarlo más tarde, siempre que no vaya más rápido que la velocidad máxima, estará bien.

Los chips que tengo cambian de orden de magnitud entre un oscilador de 32768Hz y uno de 1MHz. He tenido aplicaciones en las que no necesitaba velocidad, solo necesitaba a otro pequeño que manejara algunos datos básicos por mí.

Espero que esto ayude.

Kortuk
fuente
99
Siempre he querido ejecutar la línea de reloj de un microcontrolador con un botón pulsador. Deje que el humano sea el reloj. :) En una nota seria, una cosa realmente buena de estos diseños estáticos es que su consumo de energía es lineal con la velocidad del reloj: ralentice el reloj y use menos energía. Esto puede ser realmente útil.
todbot
55
Sí, pero me gusta señalar que el consumo de energía es una función lineal con un desplazamiento, incluso sin un reloj todavía consumen energía, especialmente con cualquier salida activada. Acabamos de conseguir nuevos pasantes en mi trabajo, sugeriré que usemos un botón y veamos qué sucede.
Kortuk
13
@todbot Buena idea. :-) Pero asegúrese de eliminar el botón pulsador.
starblue
44
Intente con una "manivela de rutina" (como en el significado de la jerga: jargon.net/jargonfile/g/grindcrank.html ) :-)) (y sí, hace muchos años construí un código paso a paso cuando estaba usando Turbo Pascal en la escuela :-)
Axeman
@todbot No es realmente exagerado o difícil, si puedes aceptar una abstracción aproximada. Hay varios ejemplos de personas que usan estos dispositivos para enseñar cómo funcionan las computadoras. Myke Predko tiene un libro realmente bueno, e incluso viene con PCB (aunque no para el proyecto informático): amazon.com/Digital-Electronics-Guidebook-Michael-Predko/dp/…
Lou
17

La mayoría de los diseños modernos de microcontroladores funcionarán con cualquier patrón en su entrada de reloj, siempre y cuando ningún pulso alto esté por debajo de una cierta longitud mínima, ningún pulso bajo esté por debajo de una cierta longitud mínima, y ​​no haya bajo-alto-bajo o alto-bajo-alto El par de pulsos está por debajo de cierta longitud. Esencialmente, lo que sucede es que después de que el chip realiza todas las acciones asociadas con un borde de reloj particular, el chip estará en un estado en el que no está haciendo nada más que esperar al siguiente borde de reloj. Si el próximo borde del reloj no llega durante diez días, entonces (a menos que el chip tenga algún perro guardián externo) el chip estará en el mismo estado que si el borde hubiera llegado en el momento en que el chip estaba listo para él.

Tenga en cuenta que, en general, pausar el reloj en un microcontrolador reducirá sustancialmente el consumo de corriente, pero no tanto como usar la función de "suspensión". El consumo de corriente de la mayoría de los microcontroladores en modo de "ejecución" se puede estimar bastante bien como una corriente de reposo constante más una cierta cantidad de corriente por ciclo por segundo (que podría expresarse más 'naturalmente' como carga por ciclo). Por ejemplo, un chip puede tener una corriente de reposo de 10uA, más una corriente de 0.1mA / MHz (100pC / ciclo). Ejecutar dicho chip a 10MHz produciría una corriente de 1.01mA. Ejecutarlo a 1MHz produciría 0.11mA. Ejecutarlo a 100KHz produciría 0.02mA. Ejecutarlo a 1Hz producirá 0.0100001mA. Por otro lado, el chip podría ofrecer una corriente de reposo de 1uA. Generalmente, entrar en modo de suspensión apagará completamente las áreas del chip que no harán nada útil mientras el chip está en reposo, evitando así cualquier corriente de fuga que tales áreas puedan tener. En algunos casos, también reducirá el voltaje a áreas como los archivos de registro a un nivel donde los archivos de registro puedan contener su contenido, pero no acceder a ellos muy rápidamente (ya que no se accederá en absoluto, la velocidad de acceso no importa) .

Algunos microprocesadores, microcontroladores y otros dispositivos más antiguos tenían tiempos máximos de reloj alto y / o reloj bajo. Dichos procesadores hicieron uso de la lógica dinámica para salvar los circuitos. Como ejemplo de lógica dinámica, considere un registro de desplazamiento: un bit de registro estático típico requiere un circuito de dos transistores para mantener el valor, mientras que un bit de registro dinámico mantiene el valor en la puerta de un transistor de lectura. Se puede realizar un registro de desplazamiento dinámico con reloj de dos fases en NMOS utilizando cuatro NFET y dos resistencias por bit. Un registro de desplazamiento estático requeriría ocho NFET y cuatro resistencias por bit. Los enfoques de lógica dinámica no son tan comunes hoy en día. En la década de 1970, la capacitancia de la puerta era sustancial y no había forma de deshacerse de ella. Por lo tanto, no había ninguna razón particular para no aprovecharlo. Hoy, la capacitancia de la puerta es generalmente mucho más baja, y los fabricantes de chips están tratando activamente de reducirla aún más. Hacer que la lógica dinámica funcione de manera confiable a menudo requeriría un trabajo deliberado para aumentar la capacitancia de la puerta. En la mayoría de los casos, el área de chip adicional necesaria para aumentar la capacitancia se podría usar con la misma eficacia para agregar más transistores para que la capacitancia sea innecesaria.

Super gato
fuente
Usted menciona que NMOS y IIRC hay una conexión entre la popularidad de la lógica dinámica y el MOS complementario (CMOS) que aún no está disponible.
jpc
@jpc: He examinado los esquemas de varios chips NMOS, algunos con gran detalle, incluido el Atari 2600 TIA, que es un verdadero trabajo de genio, la gente todavía encuentra cosas nuevas que hacer con él tres décadas después. Creo que una ventaja de NMOS frente a CMOS desde el punto de vista de la conveniencia del diseño es que el 'disparo a través' (activación simultánea accidental de la unidad de lado alto y bajo) no es un factor, aunque confesaré algo de curiosidad sobre por qué CMOS no funciona a un voltaje lo suficientemente bajo como para que el punto de cruce en una entrada deje apagados los controladores de lado alto y bajo, en lugar de activar ambos.
supercat
@jpc: en NMOS, es posible implementar una puerta XOR con dos transistores y dos resistencias, si las entradas son lo suficientemente "fuertes". Incluso si uno tiene que agregar inversores a ambas entradas, una puerta xor de cuatro transistores y cuatro resistencias sería mejor que muchos otros enfoques. Sin embargo, nunca he visto el enfoque utilizado, aunque diseñé un circuito similar usando BJT alrededor de 1978 (el concepto de diseño funcionaría mejor con MOSFETS, pero no sabía nada sobre ellos).
supercat
2
+1 - Creo que la verdadera joya que mencionaste aquí es que las velocidades de reloj más bajas ahorran energía, pero no tanto como los modos de suspensión que están específicamente diseñados para optimizar el ahorro de energía. Mi instinto me dice que ahorrará más energía al ejecutar un oscilador rápido combinado con un uso juicioso del modo de suspensión, al correr constantemente a una frecuencia realmente baja.
Joel B
@JoelB: Eso depende de muchos factores. En muchos procesadores, hay un retraso entre encender un reloj rápido y poder usarlo realmente; durante este tiempo, uno desperdiciará energía. Si uno tuviera que despertarse, por ejemplo, 100x / segundo, puede ser mejor correr lentamente de manera continua que comenzar y detenerse constantemente. Por otro lado, si uno va a iniciar y detener el reloj rápido, puede ser bueno minimizar la cantidad de tiempo que está funcionando en la medida en que uno puede hacerlo sin perder energía adicional. Por ejemplo ...
supercat
12

Sí, puede detener el reloj por completo y reiniciarlo más adelante sin consecuencias. Incluso podría reemplazar el reloj por un botón y revisar su programa literalmente paso a paso (frecuencia: aproximadamente 0.1 Hz).

La potencia es casi lineal con la frecuencia: a 10 MHz, el microcontrolador consumirá 10 veces más potencia que a 1 MHz. Sin embargo, esto no significa que a 0 Hz el consumo sea completamente cero. Siempre hay disipación estática, pero eso es muy bajo, generalmente 1 uA o menos.

PD: observe que el ADC tiene una frecuencia mínima de funcionamiento. Si la frecuencia es demasiado baja, el capacitor sobre el cual se mide el voltaje se descargará demasiado y su medición será incorrecta.

flup
fuente
¿Presionar el botón? ¿Qué pasa con el rebote?
Peter Mortensen
1
Se requiere el rebote.
Vovanium