AVR Assembler Övningsexempel 7 (11 / 12 steg)
Steg 11: Hur får vi bort knappen? Version 3
Det finns många sätt vi kunde fortsätta. Först kan vi lägga till hårdvara för att bli av med knappen. Till exempel kan vi prova att sätta en transistor i kretsen på arbetsledningen av knapptryckning så att det skulle ta en liten rännil av strömmen från produktionen och skicka en 5V puls till avbryta pin PD2.
Dock som skulle förmodligen vara alltför bullriga åtminstone och i värsta fall det inte skulle ge tillräckligt med tid för en noggrann knapptryckning behandlingen eftersom Matningsspänning på knappsatsen inte skulle ha tid att stabilze innan ADC läsa fångas.
Så skulle vi snarare komma med en programvarulösning. Vad vi vill göra är lägga till ett avbrott på PD2 PIN-koden och skriv en avbrottshanterare för den som kräver en enda behandling av knappsatsen pin. Med andra ord, vi bli av med autotrigger avbrottet från ADC, och lägga till ett externt avbrott som anropar ADC inuti den. Så signalen till läsa ADC kommer efter PD2 signalen redan har skett och att detta kanske ger saker tillräckligt med tid att stablize till en korrekt spänning innan PC0 PIN-koden läses och omvandlas. Vi skulle fortfarande ha en ADC avslutad avbryta som matar ut resultatet till analyzer displayen i slutet.
Vettigt? Och låt oss göra det...
Ta en titt på den nya koden bifogas.
Du se följande förändringar:
- Vi lagt till en rjmp på adress .org 0x0002 att hantera INT0 externa avbrottet
- Vi bytte EIMSK registret för att ange vi vill avbryta på INT0 stift
- Vi ändrade ADATE pin i ADCSRA register att inaktivera autotriggering
- Vi fick bort ADCSRB inställningarna eftersom de är irrelevant när ADATE är avstängd
- Vi har inte längre att återställa flaggan extern trigger eftersom rutinen INT0 avbrott gör detta automatiskt när den är klar - tidigare hade vi inte ett avbrott rutin, vi bara utlöste ADC bort av en signal på att pin, så vi fick klart att flagga för hand.
Nu i avbrottshanterare kallar vi helt enkelt en enda konvertering från ADC.
Övning 5: kör denna version och se vad som händer.