Paso 6: El código
Descargar el archivo adjunto .ino y utilizar su método preferido para compilar y cargar en tu ATtiny85. Mi método preferido es usar un Arduino UNO como programador como se describe aquí. Establecer su ATtiny a 1MHz antes de subir si es posible. Si desea llegar con él entonces tienes mi permiso para saltar al siguiente paso, pero espero que encuentres la siguiente broca informativo.
Este código toma ventaja del modo de suspensión de ATtiny85 para conservar las pilas. Es algo como esto:
Despierta >> interruptor de circuito de ratonera en >> comprobar si ratonera circuito abierto >> Si está abierta, interruptor de circuito de transmisor de 250 milisegundos >> circuito de interruptor de la ratonera de >> ir a dormir durante 10 minutos... etc.
Cuando en modo de reposo, el microcontrolador utiliza una pequeña cantidad pequeña de energía. En teoría la batería cr2032 poco podría mantenerla meses o incluso años. Puesto que sólo despierta por una fracción de segundo que cada diez minutos o así, energía requisito se mantiene baja. Si usted está realmente loco por conseguir el máximo provecho de su batería, puedo ver al menos un lugar donde tal vez podría añadir una resistencia al circuito y hay algunos ajustes que podría hacer al código - pero te permitirá descubrirlo. Por favor comente si lo haces!
¿¿El ATtiny sabe cuando es el momento de despertar? El código establece algo que se llama un Watchdog Timer (WDT) para provocar una interrupción cuando el tiempo de espera (o se desborda). De forma predeterminada, un desbordamiento WDT causará el ATtiny restablecer si el programa se atasca por alguna razón, pero no queremos que esto suceda aquí. Por suerte, esta funcionalidad puede desactivarse y el WDT puede configurarse sólo para una interrupción del fuego.
El código adjunto es sobre todo un sketch de Arduino bastante estándar. Si eres un Arduinohead como yo, partes de este código pueden frontera en un territorio desconocido. Se trata de unas matemáticas poco (véase esta fantástica introducción) con referencia a la hoja de datos de ATtinyx5. El programa manipula el Watchdog Timer Control de registro de la ATtiny85 - véase la sección 8.5.2 de la hoja de datos para obtener más información. Este registro es un pedazo de ocho bits de memoria en el chip que controla lo que hace el temporizador de vigilante. Cada bit de este registro tiene un cierto significado para el microcontrolador - se vuelven ciertas funcionalidades on u off dependiendo de si el bit es un 1 o un 0. Estos bits se manejan en el código por un poco de magia de matemáticas C bit!
por ejemplo
WDTCR | = (1 << WDCE | 1 << WDE)
WDTCR se refiere al registro de Control de temporizador perro guardián, digamos que para este ejemplo inicialmente es 00000001.
La | = es el compuesto bit a bit u operador en C - es sólo una forma abreviada de que denota una operación en un grupo de bits (8 bits en el caso de WDTCR).
<< es un operador de cambio izquierda bit a bit. Un rápido vistazo a la sección 8.5.2 de la hoja de datos mostrará que la broca WDCE (Watchdog cambio permiten) del registro WDTCR es el quinto de la derecha. WDCE se define como 4, por lo tanto 1 << 4 cambiaría un 1 valor de derecha a izquierda (comenzando en la posición 0) para dar 00010000. WDE se define como 3 que da 00001000. | es la notación C de OR bit a bit. Tan (1 << WDCE | 1 << WDE) es (00010000 | 00001000) que da 00011000.
Por lo tanto 00000001 | = 00011000 dará 00011001. ¡ UF!
La función ISR(WDT_vect) es la rutina de servicio de interrupción que se llama cada vez que el temporizador del vigilante provoca una interrupción. La WDT_vect identifica el vector de interrupción del temporizador perro guardián. El tiempo de espera máximo en que el WDT se podía fijar es de unos 8 segundos. Debido a esto el ISR incrementa un contador y el microcontrolador sólo comprobará el circuito trampa cuando el contador llega a 75, que serían unos 10 minutos.