Stap 6: De code
Download de bijgevoegde Ino bestand en gebruik uw favoriete methode om te compileren en uploaden naar uw ATtiny85. Mijn favoriete methode is het gebruik van een Arduino UNO als programmeur als beschreven hier. Stel uw ATtiny start op 1MHz voordat het uploaden indien mogelijk. Als je gewoon krijgen wilt op mee dan heb je mijn toestemming om naar de volgende stap, maar ik hoop dat u vindt de volgende bit informatief.
Deze code maakt gebruik van de ATtiny85 de slaapstand om de batterijstroom te besparen. Het gaat iets als dit:
Wakker >> Switch muizenval circuit op >> controleren of muizenval circuit geopend is >> als open, overschakelen op zender circuit voor 250 milliseconden >> Switch muizenval circuit uit >> gaan slapen gedurende 10 minuten... enz.
Wanneer in de slaapstand staat, gebruikt de microcontroller een uiterst kleine kleine hoeveelheid stroom. In theorie kan de weinig cr2032 batterij houden gaan voor maanden of zelfs jaren. Aangezien het slechts voor een fractie van een seconde wakker wordt elke tien minuten of zo, kracht vereiste laag gehouden. Als je echt gek op om het meeste uit uw batterij, begrijp ik ten minste één plaats waar je kan een weerstand misschien toevoegen aan het circuit en er zijn sommige tweaks die je zou kunnen aan de code doen - maar ziek ' verhuren u postuur op uiterlijk. Stuur een reactie als je!
Dus hoe weet de ATtiny wanneer het tijd is om wakker te worden? De code stelt iets genaamd een "Watchdog-Timer' (WDT) aan het activeren van een interrupt wanneer het time-out (of overloop). Standaard een overflow WDT zal leiden tot de ATtiny resetten indien het programma vast te om wat voor reden zitten komt, maar we willen niet dat dit gebeurt hier. Gelukkig, deze functionaliteit kan worden uitgeschakeld en de WDT kan worden omhoog enkel in brand gestoken een interrupt.
De bijgevoegde code is meestal een vrij standaard Arduino schets. Als je een Arduinohead zoals ik ben, kunnen delen van deze code grenzen aan sommige onbekend terrein. Het gaat om wat beetje wiskunde (Zie deze fantastische introductie) met betrekking tot het ATtinyx5 gegevensblad. Het programma manipuleert de Watchdog Timer besturingselement registreren van de ATtiny85 - Zie sectie 8.5.2 van het gegevensblad voor meer informatie. Dit register is een 8-bits Brok van geheugen in de chip die bepaalt wat de watchdog-timer doet. Elke bit van dit register heeft een bepaalde betekenis voor de microcontroller - ze uitschakelen bepaalde functionaliteiten afhankelijk van de bit een 1 of een 0. Deze bits worden afgehandeld in de code door een klein beetje van C bits math magie!
BV
WDTCR | = (1 << WDCE | 1 << WDE)
WDTCR verwijst naar de Watchdog Timer besturingselement registreren, laten we zeggen, omwille van dit voorbeeld is het in eerste instantie 00000001.
De | = is de compound bitsgewijze of exploitant in C - het is gewoon een verkorte manier ter aanduiding van een OR-bewerking op een groep van bits (8 bits in het geval van WDTCR).
<< is een bitsgewijze linker shift-operator. Een snelle blik op 8.5.2 gedeelte van het gegevensblad zal tonen dat de WDCE (Watchdog verandering inschakelen) stukje van het WDTCR-register de vijfde van rechts is. WDCE is gedefinieerd als 4, dus 1 << 4 zou een 1 waarde van rechts naar links (vanaf positie 0) verschuiven zodat 00010000. WDE wordt gedefinieerd als 3 waardoor 00001000. | de C-notatie voor bitsgewijze OR. Dus (1 << WDCE | 1 << WDE) is (00010000 | 00001000) waardoor 00011000.
Daarom 00000001 | = 00011000 00011001 zal geven. Oef!
De ISR(WDT_vect) functie is de Interrupt Service Routine die wordt aangeroepen telkens wanneer die de watchdog-timer zorgt ervoor dat een interrupt. De WDT_vect identificeert de watchdog-timer-interruptvector. De maximale time-out voor die de WDT kon bedraagt is ongeveer 8 seconden. Hierdoor verhoogt de ISR een teller en de microcontroller zal alleen het circuit muizenval controleren wanneer de teller raakt 75, die ongeveer 10 minuten zou zijn.