P02 Sleep y Watchdog Timer PDF

Title P02 Sleep y Watchdog Timer
Author abigail gomez
Course Diseño de sistemas digitales
Institution Universidad Privada del Valle
Pages 4
File Size 277 KB
File Type PDF
Total Downloads 65
Total Views 140

Summary

En el modo Sleep (Power-down) el procesador se sitúa en el estado más bajo de consumo de corriente.
El reloj de sistema es apagado de manera que el procesador se detiene, sin embargo los puertos de E/S mantienen sus estados actuales....


Description

Diseño de Sistemas Digitales

Docente: Ing. Roger Guachalla Narváez [email protected]

PRACTICA 02: Sleep y Watchdog Timer I.

Objetivos



Entender los conceptos de ahorro de Energía y mejora de Confiabilidad de un sistema microcontrolado a través del modo Sleep y el temporizador Watchdog Calcular el consume de energía en la tarjeta Arduino



Realizar un ejemplo demostrativo con Sleep y Watchdog con el microcontrolador ATMEGA3228 (Arduino)



II. Fundamento Teórico Concepto del modo Sleep En el modo Sleep (Power-down) el procesador se sitúa en el estado más bajo de consumo de corriente. El reloj de sistema es apagado de manera que el procesador se detiene, sin embargo los puertos de E/S mantienen sus estados actuales. Por lo tanto, para poder minimizar el consumo de energía, los puertos de salida no deben dar (source) o recibir (sink) corriente y los pins no usados deben estar configurados como entradas y puestos a High (Vdd) o Low (Vss) como sea más conveniente para el diseño. Diferentes eventos pueden hacer que el procesador despierte del modo Sleep:  Reset al sistema  Rebalse del temporizador Watchdog  Interrupción de un periférico del procesador (Timers, Puerto Serial, Interrupción externa, etc.) En el caso de un Reset el programa iniciará nuevamente de la dirección 00h de la ROM Flash del procesador. Los otros dos casos harán que el procesador despierte y continúe la ejecución del programa.

Concepto del Watchdog Timer El Watchdog Timer o WDT es un timer independiente que posee su propio reloj y que la rebalsar produce un Reset en el procesador o hace que despierte y salga de modo Sleep. Le permite al procesador recuperarse de un error de software que obstruya la continuación de un programa, tal como un bucle infinito. El tiempo de rebalse de WDT es programable por software. El WDT corre libremente y al rebalsar automáticamente realiza una de las siguientes tareas:  

Produce un Reset al procesador Despierta al procesador si estaba previamente en modo Sleep

En el primer caso, ara prevenir que el procesador reinicie constantemente (cada vez que el WDT rebalse) se debe limpiar (poner en cero) el valor del WDT periódicamente a través del programa. En el segundo caso el WDT actúa con el modo Sleep para que el procesador realice una secuencia de: a) b) c) d) e)

Despertar Realizar acción Dormir Esperar al WDT Regresar al inciso a)

Esto con el fin de ahorrar energía optimizando el consumo de corriente.

III. Consumo de energía en el Arduino Si se requiere implementar un sistema de control embebido portátil es obligatorio el uso de baterías para su alimentación. Está claro que cuanto menos consuma nuestro equipo más duraran las baterías. Pero ¿Cuánto durarán las baterías? El problema radica en calcular adecuadamente la duración de las baterías para que el proyecto sea viable. Por eso se debe empezar dimensionando adecuadamente la batería en función del consumo de corriente. Podemos empezar midiendo el consumo en vacío de la tarjeta Arduino y así poder hacer algunos cálculos sencillos. No se puede usar el conector de barrilete o el USB porque se requiere colocar en serie el Multímetro en modo Amperímetro para medir el consumo real de corriente. Incluso si se rompiera el cable de alimentación de barrilete, sería muy mala idea medir el consumo por ahí, porque esa es la entrada al regulador LM7805 que incorporan todos los Arduinos UNO y MEGA, que si bien es económico es pésimo en cuanto a eficiencia energética. Hasta el punto que si usamos un típico alimentador de 9V, el regulador LM7805 básicamente desperdicia la mitad de la energía ( 1 – 5/9 = 45%) en forma de calor. Para nuestra medida vamos a optar por alimentar nuestro Arduino desde los pines de tensión en los laterales, a 5V y GND:

Cálculo de la duración de la batería Los parámetros importantes de una batería son: La tensión que proporcionan en Voltios y la capacidad de corriente que normalmente se mide en mAh ( mili amperios hora) El tiempo de duración de la batería viene dado por la ecuación: 𝑇𝑖𝑒𝑚𝑝𝑜 [𝐻𝑜𝑟𝑎𝑠] =

𝐶𝑎𝑝𝑎𝑐𝑖𝑑𝑎𝑑 𝑑𝑒 𝑐𝑜𝑟𝑟𝑖𝑒𝑛𝑡𝑒 [𝑚𝐴/ℎ𝑜𝑟𝑎] 𝐶𝑜𝑛𝑠𝑢𝑚𝑜 𝑑𝑒𝑙 𝑐𝑖𝑟𝑐𝑢𝑖𝑡𝑜 [𝑚𝐴]

Para el caso del Arduino UNO que consume unos 46 mA al vacío usando baterías de una capacidad de 1200 mAh el tiempo de duración será de: 1200 mAh / 46 mA = 26.08 horas Tabla de consumo en mA de las tarjetas Arduino más conocidas

IV. Ejemplo: Sleep y WDT con el ATMEGA328 (Arduino) La tarjeta Arduino está diseñada más para ser fácil de usar que para consumir poca energía, sencillamente porque la eficiencia nunca entró en las especificaciones de diseño, hasta muy recientemente. La Liberia estándar de Arduino, no permite acceso a las funciones que sitúan al procesador en modo sleep y se debe usar la librería LowPower. Para este ejemplo se puede utilizar cualquier modelo de tarjeta Arduino basado en el microcontrolador ATMEGA328 (UNO, Nano, Mini.)

Ejemplo: Descripción 

Se medirá en consumo de corriente por medio del multímetro en serie con una fuente externa de alimentación de +5 V (o mejor aún +3.3 V)



Se realiza un programa sencillo de modo que se pueda hacer una lectura estable del consumo de corriente. El Arduino realiza infinitamente en el siguiente bucle: Ingresa en modo Sleep durante 8 segundos, y después cuando despierta, enciende durante 4 segundos el LED incluido, lo apaga y permanece otros 4 segundos despierto.

Ejemplo: Diagrama esquemático

Ejemplo: Código fuente

La línea #9 pone al Arduino 8 segundos en modo Sleep, mantiene apagados el conversor Análogo Digital y el circuito BOD (Brown Out Detection). EL WatchDog Timer acepta diferentes periodos de acuerdo a la siguiente tabla: SLEEP_15MS SLEEP_30MS SLEEP_60MS SLEEP_120MS SLEEP_250MS SLEEP_500MS SLEEP_1S SLEEP_2S SLEEP_4S SLEEP_8S SLEEP_FOREVER Como se observa, 8 segundos es el máximo tiempo que se puede usar, pero nada nos impide hacer un bucle de digamos 15 periodos de 4 segundos para hacer un minuto:

for (int i = 0 ; i < 16 ; i++) LowPower.powerDown(SLEEP_4S, ADC_OFF, BOD_OFF); Esto genera un lapso de 4 x 15 segundos = 60, en los que el WDT despierta el micro lo justo para hacer un incremento de la variable i, y volver a dormirse. Y no hay ninguna razón para no hacer lo mismo 4 x 15 x 60 = 1 hora si es que se requiere.

Si se utiliza la opción SLEEP_FOREVER solo se podrá salir con una interrupción.

V.

Procedimiento Experimental

Primera Firma Implementando el Ejemplo Llenar los valores del consumo de corriente para los siguientes casos: a) b) c) d)

Procesador Activo con Led Encendido Procesador Activo con Led Apagado Procesador en modo Sleep Procesador en modo Sleep con todos los puertos configurados como Entrada y los pines no utilizados conectados a tierra (Se debe modificar el programa para lograr esta condición)

Segunda Firma Realizar un Datalogger (Colector de Datos) de que capture la Temperatura (usando el sensor de temperatura LM35) ambiente cada minuto y la almacene en la memoria EEPROM del Arudino. Implementar un switch de selección de operación de manera que si está en 1 se proceda a la captura de datos y si está en 0 se envíen los datos de le EEPROM hacia el computador mediante el puerto serial y se observen en el Monitor Serial del IDE Arduino.

VI. Informe de Práctica I. II.

III.

Firmas del Docente en la Carátula que avale los procedimientos realizados en Laboratorio TRABAJO DE INVESTIGACION: Modo Sleep y Watchdog Timer en el PIC18F4550  Resumen escrito a mano (de un mínimo de 2 páginas)  Incluir Fuentes de Información (direcciones web, bibliografía) Conclusiones...


Similar Free PDFs