AVR: Watchdog als getimede interrupt


In deze tutorial ben ik met behulp van een Attiny85 microcontroller en ik wil een LED knipperen met ongeveer 1 tweede interval.

Meestal met Arduino en andere knipperen tutorials u gewoon gebruik maken van een vertraging van 1 tweede of 1000 milliseconden om te zetten in- en uitschakelen. In deze tutorial gaan we gebruiken een speciale functie van de MCU die zelden krijgen de aandacht die het verdient.

DE WATCHDOG
Nu die laat de hond dat je zou kunnen zeggen, en ik lach... haha...

De watchdog wordt gewoonlijk gebruikt als een veiligheidsmaatregel voor als de MCU op een onbereikbare plaats en het ophangt om wat voor reden, je heb geen enkele manier van het resetten en het opnieuw werkend te krijgen. Dus de watchdog een bijna afzonderlijk gedeelte van het MCU is, heeft het een klok van eigen (normaal gesproken een RC-kring) en een prescaler van deze klok, nu wat zij niet hebben is het vergelijken van een timer of een manier om een precieze timing instellen. Er is alleen de overloop.

Nu voor een ATtiny85 er 10 verschillende prescaling instellingen zijn te gebruiken, van 16 MS tot 8 seconden (Zie datasheet p.46 voor details). Normaal gesproken de watchdog opnieuw instellen van het MCU wordt gebruikt, maar het kan ook worden ingesteld op het uitvoeren van een interrupt.

Ten eerste, laten we beginnen met het opzetten van de watchdog.

 // Disable all interrupts cli(); /* Clear MCU Status Register. Not really needed here as we don't need to know why the MCU got reset. page 44 of datasheet */ MCUSR = 0; /* Disable and clear all Watchdog settings. Nice to get a clean slate when dealing with interrupts */ WDTCR = (1<<WDCE)|(1<<WDE);WDTCR = 0; // Setup Watchdog for interrupt and not reset, and a approximately 500ms timeout P.45WDTCR = (1<<WDIE) | (1<<WDP2) | (1<<WDP0); // Enable all interrupts.sei(); 

Dit is de veilige manier voor het instellen, de reden waarom we wat doen "reinigen" in het begin is om ervoor te zorgen dat we krijgen wat we willen. statische en wie weet wat kunnen verknoeien een MCU dus het is een goede zaak om het te doen rechts, als u niet wilt dat ze veilig zijn, alles wat je nodig hebt is deze regel

 WDTCR = (1<<WDIE) | (1<<WDP2) | (1<<WDP1); 

Nu we hebben heeft de watchdog instellen en niets te doen, ook niet echt, zoals de watchdog een veiligheidsmaatregel is het sommige ingewikkelde bewegingen. In dit geval zijn we het laten uitvoeren van een ISR elke 500ms (ongeveer) vertellen maar we een ISR daarvoor nog niet hebt gemaakt, en zoals ik al zei deze functie hebben enkele ingewikkelde manieren functioneren, zodat wanneer de ISR wordt uitgevoerd, de watchdog schakelt automatisch over van interrupt modus naar de modus opnieuw!!!
Tenzij de interrupt-modus opnieuw wordt ingeschakeld in de ISR.

Dus, laten we een blinky ISR

 ISR(WDT_vect) {// Flip bit 3 of PORTB PORTB ^= (1<<3); /* ReEnable the watchdog interrupt, as this gets reset when entering this ISR and automatically enables the WDE signal that resets the MCU the next time the timer overflows */WDTCR |= (1<<WDIE); } 

Nu hebben we een ISR die flips de LED die u hebt aangesloten op de PORTB3 in- en uitschakelen per 1/2 seconde en wordt de interrupt opnieuw ingeschakeld.
Was niet zo eenvoudig?

Hier is de volledige MrBlinky c bestand.

Gerelateerde Artikelen

Een volledige starter gids voor AVR's

Een volledige starter gids voor AVR's

hebt gespeeld met de Arduino en nu hebben een smaak voor microcontrollers?Hebt u geprobeerd verder te gaan dan de Arduino maar werd gestopt door de dichte gegevensbladen?Dit is de instructable voor u!Ik was bezig een instructable voor de epilog wedst
Raspberry Pi en Arduino: betrouwbare bouwsystemen met WatchDog Timers

Raspberry Pi en Arduino: betrouwbare bouwsystemen met WatchDog Timers

Samenvatting: In dit Instructable kijken we hoe het bouwen van meer betrouwbare computersystemen die gebruikmaken van de WatchDog timers. Laten we zien hoe u kunt instellen en gebruiken van de Raspberry Pi en Arduino interne watchdog timers. Ook legg
AVR chronograaf van concept aan PCB

AVR chronograaf van concept aan PCB

een chronograaf is een apparaat dat wordt gebruikt voor het meten van de snelheid van een object doorgeven.  In zijn eenvoudigste vorm, hierbij twee sensoren van een soort die 'zien' van het object, een apparaat dat tijd meten kan, en sommige output
AVR Assembler Tutorial 6

AVR Assembler Tutorial 6

Welkom bij Tutorial 6!Today's tutorial zullen kort waar zullen we het ontwikkelen van een eenvoudige methode om gegevens tussen een atmega328p en een andere met twee poorten verbinden hen te delen. Wij zullen vervolgens nemen de dobbelstenen rol van
AVR Assembler Tutorial 10

AVR Assembler Tutorial 10

Welkom bij Tutorial 10!Sorry dat het zo lang duurde om deze volgende aflevering eruit maar dit is een behoorlijk hectische tijd van het jaar. In ieder geval, is hier het!We hebben een lange weg afgelegd en u bent waarschijnlijk al bekwaam genoeg is o
Een geavanceerde benadering van programmering van Arduino & AVR

Een geavanceerde benadering van programmering van Arduino & AVR

Dit instructable is een must read voor iedereen die vertrouwd is met core AVR chips en Arduino.Nou, om meer specifieke, bij het lezen van de instructable, zal u zitten kundig voor:1) weten het juiste verschil tussen AVR en Arduino.2) programmering Ar
Nokia 3310 LCD verbinden met USB met behulp van AVR

Nokia 3310 LCD verbinden met USB met behulp van AVR

Wat doe je met een oude telefoon, een microcontroller en veel tijd?U haak van de oude telefoon LCD-scherm bij de computer USB natuurlijk!In dit project gaan we communiceren met een Nokia 3310 LCD display via USB! Hoe gaan we dat doen? We gaan de LCD
Maken van interne Interrupt In Arduino

Maken van interne Interrupt In Arduino

Interrupt is een proces waar u bepaalde tusk via interrupt functie zonder onderbreking van uw continue programma kunt voltooien. Stel bijvoorbeeld dat u wilt 2 uur slapen en daarna wil u naar uw werk. Nu, is het belangrijk om wakker na 2 uur om naar
AVR LCD de badge

AVR LCD de badge

dus, you gonna een conferentie/meetup/nerdfest en u wilt iets doen dat u zich onderscheidt van normale mensen.  Een LCD de badge wordt verzorgd door een ATtiny2313 is een geweldige manier om dat te doen.  Dit is een algemene doel LCD display-eenheid
Interrupts, Arduino + Push Switch + Debouncing

Interrupts, Arduino + Push Switch + Debouncing

aangezien ik ben begonnen met behulp van de Arduino heb ik vond het geweldig. Hoewel ik vond één ding zeer ingewikkeld met de Arduino die ik niet kon achterhalen waarom het gebeurde tot vandaag, letterlijk vandaag. Wat is het? Het heeft een drukknop
Een beschermhoes voor de Atmel AVR Dragon

Een beschermhoes voor de Atmel AVR Dragon

dit instructable zal u tonen hoe gemakkelijk wijzigen een voorhanden plastic geval aanhouden en beschermen uw AVR Dragon PCB.Atmel bevordert hun AVR Dragon als low-cost product ontwikkeltool voor gebruik met hun AVR-microcrontollers. Terwijl het prod
LED Cube 8 x 8 x 8

LED Cube 8 x 8 x 8

maken uw eigen 8 x 8 x 8 LED kubus 3-dimensionale weergave!Wij vinden dat dit Instructable is de meest uitgebreide stapsgewijze handleiding voor het bouwen van een 8 x 8 x 8 die LED kubus ooit gepubliceerd op de kernholocaust. Het leert je alles van
Interactieve virtuele spelen voor de partijen van de verjaardag van de kids'

Interactieve virtuele spelen voor de partijen van de verjaardag van de kids'

ooit gekeken naar een Wii of Xbox spel en dacht dat 'Ik wou dat ik kon maken een spel dat mijn kinderen zou willen spelen'.  Nou, dit instructable zal u tonen hoe.  We beginnen met het spel concept alvorens ze naar de ontwerp-, hardware- en firmwarev
Auto acculader met PIC12F683

Auto acculader met PIC12F683

Deze keer ik ben beginnen met een apparaat dat ik al gebouwd, helaas niet zal er geen foto's van de werkelijke bouwen, gewoon een snelle artikel over hoe ik dacht het en hoe werkt het.Een kort verhaal over hoe het hele ding begonMijn oom heeft een mo