Stap 11: Vastleggen van de gegevens van het besturingselement van de IR-afstandsbediening
Ga eerst opent u het gegevensblad van de AT90USB1686 en lees alles over de timers. In het bijzonder, timer 1 en haar input capture unit volledig te begrijpen. Ik heb een bijlage op timers, lees die.
We zullen de timer continu draaien. De input capture-eenheid zal ons een tijdstempel van wanneer de IR ontvanger de uitvoer verandert. Deze manier, we kunnen meten de lengte van elk "op" en "off" pulse.
We zijn net zo niet verward, niet vergeten dat onze ontvanger actieve laag, wat betekent dat een "ON pulse" wanneer de output laag is, en een "OFF-pulse" is wanneer de uitgang hoog is. De aan / uit verwijst naar het al dan niet de IR licht wordt verzonden.
We weten uit de golfvorm ik heb gevangen en u in de vorige stap getoond dat een opdracht wordt herhaald over en weer, terwijl de knop op de afstandsbediening ingedrukt wordt gehouden. We weten wanneer deze opdracht wordt herhaald, omdat elke opdracht met de langste "aan de pols begint".
Kennen van deze feiten, kunnen wij met succes vastleggen en overeenkomen met een reeks van pulsen tegen een bekend patroon met behulp van software. Wij kunnen gewoon de pulsen opnemen in een matrix, en wanneer we detecteren een echt lange "aan de pols", wij weten om te beginnen met opnemen aan het begin van de array.
Alle opdrachten bevatten hetzelfde aantal pulsen, dus we houden telling van hoeveel pulsen om te weten wanneer een opdracht is beëindigd. Wanneer de opdracht eindigt, proberen we te voldoen aan onze opgenomen matrix naar een bekende matrix om te zien welke opdracht is verzonden, met het proces van eliminatie.
Opmerking: Deze methode is niet volledig bewijs, maar ik heb geprobeerd andere methoden, zoals het doen van een vergelijking in omgekeerde volgorde na elke ON-puls (in tegenstelling tot na een bepaald aantal op pulsen). De hoeveelheid gegevens die we moeten om te vergelijken en de langzame microcontroller veroorzaakt het proces van de vergelijking te nemen te lang, en de microcontroller "gemist" sommige peulvruchten.
Als u de lijst met bekende opdrachten, u gewoon kabellengte tot de microcontroller met de IR-ontvanger, en dan de seriële poort die u vertellen hoe lang elk pulsen. Ik heb opstelling een utility genaamd "IR Code Visualizer" geschreven in Javascript, dat zal u laten bekijken de seriële poort output als een golfvorm, zoals een logic analyzer.
Dus kabellengte tot de IR ontvanger output naar pin poort-D-4, oftewel de input capture reactor 1 van input, en sluit vervolgens de macht en de grond van de IR ontvanger. Hiervoor hoeft u niet een diagram, althans dat hoop ik... Maar ik heb ook een anyway.
Nemen de bestanden die ik heb verstrekt, compileren, uploaden en uitvoeren op de Teensy ++. Dan open de seriële terminal, en druk op een knop op de afstandsbediening. Hier ziet u de pulsen weergegeven op het scherm. De resultaten voor elke knop opslaan, plak ze in de "IR Code Visualizer" om te zien de golfvorm.
Ik zal u laten zien hoe de resultaten te gebruiken in de volgende stap.
Pop quiz, wat is de eenheid die wordt gebruikt om vast te leggen en de winkel de IR puls breedte waarden die wij gebruiken?
De Teensy ++ heeft een 16 MHz kristal, maar wij lopen het op 3,3 v in plaats van 5V, dus we zijn met behulp van "clock_prescale_set(clock_div_2);" zodat het eigenlijk op 8 MHz draait. De source code toont de timer 1 wordt geconfigureerd voor het gebruik van een prescaler "delen door 8", zodat de timer is actief op 1 MHz. 1/1000000 seconden is dus 1 nanoseconde, en dat is wat de waarden worden vastgelegd en opgeslagen in.
--Gekopieerd uit mijn bijlage op timers