Stap 11: Hoe we ontdoen van de knop? Versie 3
Er zijn talloze manieren die we kunnen overgaan. Eerst konden we hardware om zich te ontdoen van de knop toevoegen. We kunnen bijvoorbeeld proberen een transistor aanbrengend met het circuit op de uitvoerregel van de ToetsIndrukken (KeyPress), zodat het zou een klein straaltje van de stroom van de output nemen en een 5V puls naar de interrupt pin PD2 sturen.
Dat waarschijnlijk zou echter te lawaaierig op zijn minst en in het ergste geval dat het zou niet genoeg tijd om een nauwkeurige ToetsIndrukken (KeyPress) te lezen aangezien de uitvoer van de spanning van het toetsenblok niet zou tijd om stabilze hebben voordat de ADC lezen is gevangen toestaan.
Dus zouden we eerder komen met een softwareoplossing. Wat wij zouden willen doen is het toevoegen van een interrupt op de pin PD2 en schrijf een interrupt handler voor het waarin één lezing van de toetsenbord-pin. Met andere woorden, we ontdoen van de interrupt autotrigger van de ADC, en het toevoegen van een externe interrupt die de ADC erin roept. Op die manier het signaal om te lezen van de ADC komt na het signaal PD2 al heeft plaatsgevonden en dit dingen geven kan genoeg tijd om te stablize naar een nauwkeurige spanning voordat de PC0 pin gelezen en omgezet. Wij hadden nog een voltooiing van de ADC onderbreken die output het resultaat aan de weergave van de analysator aan het eind.
Zinvol? Goed laten we het doen...
Neem een kijkje op de nieuwe code gekoppeld.
Ziet u de volgende wijzigingen:
- Wij toegevoegd een rjmp adres .org 0x0002 om de INT0 externe interrupt
- We veranderd het EIMSK-register om aan te geven dat wij willen onderbreken op de INT0 pin
- Wij veranderde de ADATE in het ADCSRA register autotriggering uitschakelen pin
- We verlost van de ADCSRB-instellingen, omdat ze niet relevant wanneer ADATE uitgeschakeld is
- We moeten niet langer reset van de vlag van externe trigger, aangezien de INT0 interrupt routine dit automatisch gebeurt wanneer het is voltooid--eerder we niet een interrupt routine hebben, we gewoon geactiveerd de ADC off van een signaal op dat pin, dus we moesten met de hand die markering wissen.
Nu in de interrupt handler noemen we gewoon een conversie van de ADC.
Oefening 5: uitvoeren van deze versie en zien wat er gebeurt.