Stap 12: Code en Video voor de werkende versie
Zoals we door de laatste versie zagen, werkt de interrupt knop niet goed omdat de interrupt wordt geactiveerd op een stijgende rand aan pin PD2 en de interrupt handler vervolgens de ADC-conversie roept. Echter krijgt de ADC dan de spanning lezen voordat het gestabiliseerd en dus het leest onzin.
Wat we nodig hebben is het introduceren van een vertraging tussen de interrupt op PD2 en de ADC lezen op PC0. We zullen dit doen door toevoeging van een timer/teller, een teller overflow interrupt en een vertraging-routine. Gelukkig weten we al hoe dit te doen van Tutorial 3! Dus zullen we Kopieer en plak de relevante code vanaf daar.
Ik heb de resulterende code en een video toont het in bewerking gegeven.
U zult merken dat de lezingen niet zo nauwkeurig zijn als men zou hopen. Dit is waarschijnlijk vanwege een aantal bronnen:
- We zijn te tikken van de output van de spanning van het toetsenblok om te activeren op PD2 die gevolgen heeft voor de lezing in PC0.
- We weten niet echt hoe lang uit te stellen na de trigger om de beste lezing.
- het duurt een paar cycli voor de ADC-conversie te voltooien wat betekent dat we niet snelle brand op het toetsenbord kunnen.
- Er is waarschijnlijk ruis in het toetsenbord zelf.
- enz...
Dus, hoewel we erin geslaagd om het toetsenblok te werken, en we het nu in toepassingen gebruiken kunnen met behulp van de waarden van de druk op de toets op een andere manier in plaats van hen gewoon uitvoeren naar het display analyzer, het is niet erg nauwkeurig en het is erg vervelend. Dat is de reden waarom ik denk dat de beste manier om de draad van toetsenborden is gewoon te houden van elke uitgang via het toetsenbord op een andere poort en beslissen welke toets is ingedrukt door welke poorten Zie een spanning. Dat is eenvoudig, zeer snel en zeer nauwkeurig.
In feite, zijn er slechts twee redenen waarom men zou willen rijden een toetsenbord de manier waarop die wij hier hebben gedaan:
- Het gebruikt slechts 2 van de pinnen op onze microcontroller in plaats van 8.
- Het is een groot project te tonen van de verschillende aspecten van het ADC op de microcontroller die van de standaard dingen die u vindt daar zoals temperatuur lezingen afwijkt, draaien potentiometers, enz. Ik wilde een voorbeeld van geactiveerde enkele lezingen en externe pin auto-triggering in plaats van gewoon gratis CPU-opslokkende Loopmodus.
Anyway, hier is een laatste paar oefeningen voor je:
Oefening 6: herschrijven de ADC-conversie voltooid interrupt handler als een Look-up tabel wilt gebruiken. Dat wil zeggen zodat het de analoge waarde met het eerste item in de tabel gecontroleerd en als het is groter als uit de interrupt, resultaat als het niet dan het weer stappen Z naar het volgende item in de tabel en de takken op de proef. Dit zal verkorten de code en de interrupt routine opruimen en het ziet er mooier maken. (Ik zal een mogelijke oplossing als de volgende stap)
Oefening 7: haak het toetsenblok naar 8 pinnen op de microcontroller
en schrijf de eenvoudige driver voor it en ervaring hoeveel mooier het is. Kun je denken aan een paar manieren om het werk van onze methode beter te maken?
Dat is alles voor deze tutorial. Ik heb de definitieve versie met pointers bijgevoegd. Als we onze weg dichter bij ons uiteindelijke doel, zullen we gebruiken het toetsenbord nogmaals in Tutorial 9 om te laten zien hoe om te controleren van zeven segment verschijnt met het (en het opbouwen van iets interessant dat toepassingen de extra toetsen op het toetsenbord van de telefoon) we zullen overgaan tot dingen met knooppersen in plaats daarvan controleren (aangezien die methode beter bij het eindproduct dat we past richting met deze tutorials bouwen) en we zullen gewoon het toetsenblok ijskast.
Zie je volgende keer!