Paso 2: sobre el programa
Modos de funcionamiento:
--Usuario entrada/opciones
Modo espera para dormir
Modo sueño--PWM
Inicio
Durante el arranque se ilumina el LED durante unos 2 segundos indicar operación.
El dispositivo comprueba si el botón de entrada se pulsa y se mantiene durante el encendido durante los segundos 2 iniciales. Si fue, se introduce el "modo inmediato": los LEDs empiezan a parpadear. Esto es sobre todo así guyfrom7up podría probar fácilmente el hardware sin tener que esperar durante cuatro horas;-).
También podría usarse para "catnap" tipo Estados de sueño.
¿Sin embargo, también podríamos añadir un poco de código para variar la anchura de pulso... creo que whattay?
La configuración del temporizador e IRQ para el estado de espera inicial
Después de la comprobación de entrada de usuario, etc. y configurar el IRQ, el ATtiny13 es inmediata en modo de reposo. En este modo sólo los temporizadores, relojes y las IRQ son funcionales. Por supuesto, esta es una medida de ahorro de energía.
Tiempo de conversión para un contador de 16 bits, por el valor del temporizador de escalador (veces aprox.)--
Una espera de ~ 4 horas es posible con la combinación de bandera CS02 y CS00, un escalador del reloj de 1024. En este estado, se desencadena la IRQ 4.6 veces por segundo. La espera estado fácilmente podría ser bien ajustado, utilizando el contador de 16 bits (para las duraciones < 4 horas) junto con el contador waitstate (para más retrasos.)
Cuatro horas es un retraso tan bueno como cualquiera, una duración más larga waitstate no se utiliza. Un retraso más largo sería una cuestión trivial de implementar.
Nota: guyfrom7up ha encontrado que el waitstate para sus AVRs es un poco más de 4 horas, mientras que el mío es un poco menos. El oscilador interno del RAV no es muy exacto, pero es suficiente para nuestras necesidades...
En 4,6 IRQ por segundo, potencia de CPU consumo debe ser muy bajo. Por supuesto el AVR no puede ser en modo de apagado, ya requiere un externo despierte la señal. Nuestro debe programado internamente, por lo que SLEEP_MODE_IDLE es nuestra mejor opción.
IRQ por segundo, para cada escalador (aprox.)--
La configuración de temporizador y IRQ para soñar modo PWM
El valor del temporizador de escalador cambia a CS00 cuando empieza MODE_DREAMING, para crear las transiciones suaves de la pwm de software. El ciclo de trabajo de la CPU (y IRQ) es mucho mayor (alrededor de 4,7 K por segundo.) Pero el ciclo de trabajo del LED es mucho menos de lo que sería con un simple interruptor on/off. Dibujar una compensación entre la cpu y el LED actual...
El ancho total del pulso (longitud) de lo blink LED es controlado por las constantes MACRO_WIDTH y MACRO_GAP. El PWM es manejado por incrementar el pwm y variables de transición por las constantes PWM_VAL y TRANS_VAL. alteración de las constantes cambiará cómo rápidamente el PWM "rampas para arriba".
En la actualidad, la frecuencia del pulso soñando con frecuencia LED es aproximadamente 1,5 hz.
Tamaño del programa
La versión actual (0.2b) utiliza sólo 438 bytes de memoria flash. Esto es muy por debajo del límite de 1 K en el ATtiny13.
Para agregar más características es sin duda capaz de hacer.