Het interpreteren van de draairichting van een digitale draaischakelaar met een PIC (5 / 5 stap)

Stap 5: Software


ik heb niet gebruik maken van de ingebouwde interrupts in PIC Basic Pro. Ik gebruikte een paar bestanden die ik in mijn code vanaf Darrel Taylor naar station de routine opgenomen. Dit is waar een enorme krediet aan Darrel behoort! De bestanden zijn gratis. Enkel bezoek zijn website voor meer informatie, andere toepassingen en de bestanden te downloaden. Als u een foto met Darrel Taylor interrupts niet gebruikt, kunt u dit gedeelte overslaan. Enkel opstelling de interrupts zo nodig op het platform dat u gebruikt.

Om de Darrel Taylor (DT) zijn interrupts instellen er twee dingen te doen:

1.) inclusief de DT_INTS-14.bas en ReEnterPBP.bas bestanden in uw code.

2.) kopiëren en plak deze in uw code.

ASM
INT_LIST macro; IntSource, Label, Type, ResetFlag?
INT_Handler RBC_INT, _ISR, PBP, ja
endm
INT_CREATE
ENDASM

Voeg tabs en spaties als de afbeelding aan het einde van de Instructable zodat u dingen een beetje gemakkelijker in uw code zien kunt. U zult moeten aanpassen iets aan uw behoeften. Onder Label, ISR Vervang door de naam van de subroutine die uw ISR. Vergeet niet het onderstrepingsteken! U het nodig hebt!

Als u de interrupts werken, zijn er twee meer dingen te doen:

1.) schrijven de ISR. Dit zul je schrijven net als je gaat schrijven een subroutine PBP behalve dat moet u invoegen van @ INT_RETURN aan het einde van de subroutine in plaats van terugkeer. Dit zal de interrupt erkennen en waar deze was gebleven in de hoofdlus op uitvoering van het programma terugkomen.

Binnen de ISR moet u duidelijk de interrupt-vlag, zodat het programma niet raken in een recursieve-interrupt verstrikt doet. Gewoon lezen van PORTB is dat alles moet worden gedaan om te wissen de interrupt-vlag op de PIC16F877A. Elke verschillende microcontroller heeft een andere manier van clearing interrupt vlaggen. Controleer de data sheet voor uw microcontroller.

2.) wanneer u het punt bereikt in de code die u wilt inschakelen van de interrupt, deze lijn van code worden gebruikt:

@ INT_ENABLE RBC_INT

Wanneer u zin voor ontredderen de interrupt gewoon gebruik maken van:

@ INT_DISABLE RBC_INT

Er is een heleboel dingen verpakt in wat ik alleen gedekt zodat ik snel zal samenvatten. Tot nu toe uw programma moet als volgt uitzien:

; Om het even welk nodig instellen of code

OMVATTEN "DT_INTS-14.bas"
OMVATTEN "ReEnterPBP.bas"

ASM
INT_LIST macro; IntSource, Label, Type, ResetFlag?
INT_Handler RBC_INT, _myISR, PBP, ja
endm
INT_CREATE
ENDASM

; Alle andere nodig instellen of code

@ INT_ENABLE RBC_INT
; Is de code die moet weten welke weg de knop draaien
@ INT_DISABLE RBC_INT

; Andere code

EINDE; Einde van programma

myISR:
ISR code hier
@ INT_RETURN

(Interrupt Handler Set Up tabel)

Ik denk dat dit is waar iedereen die geen gebruik van een PIC maakt of DT interrupts opnieuw kunnen meedoen. Nu, moeten we eigenlijk schrijven de ISR zodat de microcontroller weet welke kant is de knop draaien. Herinner mij uit de sectie software theorie dat we dat de richting van rotatie afleiden kunnen als we weten de ingang waardoor de interrupt, de nieuwe waarde en de waarde van de andere input. Hier is de pseudocode:

Lees PORTB in een kras variabele om te wissen de interrupt-vlag
Controleer als A de interrupt veroorzaakt.
Als de waarde true is,
Vergelijk A en B.
Controleer indien verschillend, indien verschillend,
Het was rechtsom draaien
Anders,
Het was tegen de klok in
Endif

Controleer als B de interrupt veroorzaakt.
Als de waarde true is,
Vergelijk A en B
Controleer of anders, als dezelfde,
Het was rechtsom draaien
Anders,
Het was tegen de klok in
Endif

Retourneren uit interrupt

Hoe weten we als een verandering op A of B veroorzaakt de interrupt? Ontdekken van de nieuwe waarde van het gewijzigde input en de andere (ongewijzigd) input is gemakkelijk, omdat we ze binnen de ISR. kan lezen We willen weten wat de status van elk een was voordat de uitvoering wordt verzonden naar de ISR. Dit gebeurt in de belangrijkste routine. De belangrijkste routine zit en wacht op een byte-variabele die noemden we CWflag worden ingesteld op 1 in- of uitgeschakeld op 0 door de ISR. Nadat elk erkend verandering van de knop of als er geen knop activiteit, is de variabele ingesteld op 5 om aan te geven een ruststand. Als de vlag instellen krijgt of is uitgeschakeld, de belangrijkste routine onmiddellijk verhoogt of verlaagt de druk instelpunt op passende wijze op basis van de rotatie en vervolgens idle sets de CWflag variabele terug naar 5, omdat de knop nu opnieuw. Als de belangrijkste routine is het controleren van de CWflag, is het ook het documenteren van de staat van de A en B draaischakelaar waarden. Dit is werkelijk eenvoudig en ziet er als volgt:

oldA = A
oldB = B

Er is echt niets super mooie hier. Net omvatten die twee lijnen aan het begin van de lus controleert de CWflag voor rotatie. We updaten slechts de waarden van de logica van de ingangen van de draaiknop binnen de increment/decrement lus in de belangrijkste routine, zodat we welke input veroorzaakt de interrupt zien kunnen wanneer de ISR wordt uitgevoerd. Hier is de ISR-code:

ABchange:
kras PORTB = "Lees PORTB voor interrupt markering wissen

' A veroorzaakt de interrupt, Controleer B voor draairichting
IF oldA! = een dan
' Als A en B verschillend zijn, het was rechtsom draaien
IF A! = B THEN
GOTO CW
' Anders, het was linksom draaien
ANDERS
GOTO CCW
ENDIF
ENDIF

' Als B de interrupt veroorzaakt, controleert u A draairichting
Als oldB! = B THEN
' Als A en B hetzelfde zijn, het was rechtsom draaien
IF A DAN B ==
GOTO CW
' Anders, het was teller rechtsom draaien
ANDERS
GOTO CCW
ENDIF
ENDIF

CW:
CWflag = 1
@ INT_RETURN

CCW:
CWflag = 0
@ INT_RETURN

Ik heb de ISR-code opgenomen in een AB_ISR.bas-bestand omdat de tabbladen in de code worden niet weergegeven zoals die ze zou moeten.

Nu, omdat de ISR de oude waarden voor A en B het kan bepalen welke input veroorzaakt de interrupt-ingangen heeft, vergelijken met de andere (ongewijzigd) input en draairichting bepalen. Alle de belangrijkste routine moet doen is controleren de CWflag om te zien welke richting de knop veranderd (indien aanwezig) en een toename of decrement een teller, set punt of wat je leuk of behoefte aan.

Ik hoop dat dit helpt en niet is te verwarrend. Dit soort interface is vooral handig als uw systeem al interrupts wordt gebruikt als dit is slechts één meer onderbreken om toe te voegen. Geniet van!

Gerelateerde Artikelen

Hoe te programmeren van een PIC Microcontroller & lezen een Encoder

Hoe te programmeren van een PIC Microcontroller & lezen een Encoder

Inleiding: van elektronisch speelgoed & games magnetrons, microcontrollers bevinden zich zowat overal deze dagen! Maar hoe kunnen we deze kleine computers werken voor onze eigen elektronica projecten maken? Dat is waar deze tutorial komt - met gedeta
Digitale schilderij Les 1: De grondbeginselen van het gebruik van een grafisch tablet gebruikt

Digitale schilderij Les 1: De grondbeginselen van het gebruik van een grafisch tablet gebruikt

Computers hebben verandering gebracht naar iedere hoek van de moderne samenleving. Een van deze hoeken is kunst. Het internet staat vol van concept kunst, achtergronden en vele andere soorten afbeelding die zijn opgesteld door één of andere gebruiker
Het gebruik van uw digitale camera (canon alleen) als een gewone pc-webcam

Het gebruik van uw digitale camera (canon alleen) als een gewone pc-webcam

het onmogelijke is nu mogelijk nu met uw canon digicam. Het kan worden gebruikt voor chatten en video conferencing. De onderstaande CANON modellen zijn "enige" modellen die de functie ondersteunen:Digital IXUS 400Digital IXUS IIDigitale IXUS vDi
Laten we het maken van een game controller!

Laten we het maken van een game controller!

Ik hou van vliegende spelen, maar het voelt alsof er nooit genoeg knoppen op mijn joystick.Dit instructable zal u tonen hoe te bouwen uw eigen panel schakelaar in geen tijd.Het zal werken met een spel en de computer die ondersteuning biedt voor een j
Het maken van een lepel Brass Knuckles door 123D vangst, MeshMixer & MakerBot.

Het maken van een lepel Brass Knuckles door 123D vangst, MeshMixer & MakerBot.

Deze tutorial illustreert hoe maak je een Brass Knuckles lepel enkel voor het geval dat een gewelddadige voedsel gevecht breekt los op uw volgende diner.Ik gebruikte:-Autodesk 123D vangen voor het scannen van de afbeelding in CAD-Autodesk MeshMixer m
Het installeren van een TV-antenne of antennekabel

Het installeren van een TV-antenne of antennekabel

Versión en españolVoordat u uw antenne koopt en uw hard verdiende geld besteden moet u overwegen een paar dingen. U moet vinden het type antenne dat u nodig hebt, de locatie van uw antenne, uw budget, uw vaardigheidsniveau en de rentabiliteit van he
Hoe het bouwen van een 24 Volt elektrische motorfiets

Hoe het bouwen van een 24 Volt elektrische motorfiets

Ik heb een paar elektrische voertuigen (EV) bouwt voor motorfietsen op Instructables gezien en ze waren allemaal zeer behulpzaam. Ik hoop toe te voegen aan diegenen die vooruit gegaan en gebouwd, gedeeld en hebben mij gemotiveerd om te bouwen. Dit is
Beginner's Guide to 3D printen met de Objet Connex 500: hoe het bouwen van een Tank raket draagraket (en reinigen van de puinhoop die u hebt gemaakt in het proces)

Beginner's Guide to 3D printen met de Objet Connex 500: hoe het bouwen van een Tank raket draagraket (en reinigen van de puinhoop die u hebt gemaakt in het proces)

de Objet Connex 500 3D Printer... een geheimzinnige, magie en verbazingwekkende Hi-Tech meesterwerk, staat van 3D-printen van hoog gedetailleerde prototypes. Weten over het werken met dit prachtige apparaat is een geheim alleen worden bekend door een
Het gebruik van een audio-mixer (zangbodem)

Het gebruik van een audio-mixer (zangbodem)

In dit instructable I 'm gonna doorlopen alle controle functies op de meeste mixers (mengpanelen, mengen van bureaus, audio consoles klankborden - ze allemaal verwijzen naar hetzelfde). Ik zal beginnen met de absolute grondbeginselen:Wat is een mixer
Hoe het bouwen van een paleis van de geheugen - SuperStruct Instructables serie

Hoe het bouwen van een paleis van de geheugen - SuperStruct Instructables serie

Hallo, en Welkom bij dit Instructable. Op de volgende bladzijden nemen we een kijkje op de basics van het gebruik van een tak van de "coördinatiemethode '' loci''" informatie op te slaan in het geheugen zo efficiënt mogelijk voor korte en/of lan
Hoe het bouwen van een Robot - The BeetleBot v2 (Revisited)

Hoe het bouwen van een Robot - The BeetleBot v2 (Revisited)

dit is de kever robot instructables revisited a la MythBusters stijl!Oorspronkelijk maakte ik een instructables over mijn kever robot versie 1.Het is nu tijd om u te tonen een nieuwe versie van deze prachtige robot. Deze nieuwe versie is veel gemakke
Het gebruik van een natte tegel zag to cut glazen flessen

Het gebruik van een natte tegel zag to cut glazen flessen

Gelieve gratie de minder dan stellaire foto's in dit Instructable.Het is jaren geleden toen ik had niets maar een goedkoop gemaaktdigitale camera. Ik hoop dat het snel bijwerken met veel betere beelden.Na de aankoop van vele gadgets en widgets te sni
Tutorial over het maken van een zwart Locust boog

Tutorial over het maken van een zwart Locust boog

allereerst ik wil excuses voor eventuele grammaticafouten, en eventuele andere fouten schriftelijk caus ik gebruikte google vertalen voor het vertalen van alle tekst die u hier ziet (Engl is niet mijn eigen languge dus schreef ik allemaal in mijn lan
Het gebruik van een 74HC595 Shift Register met een AVR ATtiny13

Het gebruik van een 74HC595 Shift Register met een AVR ATtiny13

als je hebt gespeeld met microcontrollers en elektronica dan u waarschijnlijk gezien hebt LED dot matrix displays en andere projecten die daar gebruik van shift registers zoals 7-segment displays en meer. Dit instructable gaat over een snelle intro a