Hur man ska tolka riktningen av rotation från en digital rotary switch med en PIC (4 / 5 steg)
Steg 4: Programvara teori om Operation
Vi vet grå kodade AB mönstret upprepas varje fyra positioner så om vi gör rutinarbete för övergångar mellan dessa fyra positioner det kommer fungera för alla andra. Observera att fyra placera i en cykel, det finns fyra kanter. En stigande kant och en fallande kant för A in samt B ingång. Mikroprocessorn avbryts varje gång det finns en kant vilket innebär att mikrokontroller avbryts när ratten vrids. Som ett resultat, måste ISR att räkna ut vilken väg vredet vändes. Att hjälpa oss att lista ut hur man gör detta, vänder vi oss till vågformen för medurs rotation.
Märke att någon tid A har en kant, dess nya värdet är alltid för B. När vredet går från position 1 till 2 och en övergångar från logik-0 till logik-1. B är fortfarande 0 för denna övergång och matchar inte det nya värdet av A. När vredet går från position 3 till 4, har A en fallande kant medan B förblir logik-1. Märka igen, att B och det nya värdet av A är olika. Rätt nu, vi kan se att helst A orsakar avbrottet under Medsols rotation, dess nya värde för B. Låt oss kolla B för att se vad som händer. B har en stigande kanten när växeln övergångar från position 2 till 3. Här, det nya värdet av B är samma som A. söker på det sista återstående kanten för Medsols rotation, B har en fallande kant flytta från position 4 till 5. (Position 5 är samma som position 1.) Det nya värdet av B är samma som en här! Nu kan vi göra några avdrag! Om A orsakar mellanjobbet och det nya värdet av A är olika än B, var rotation medurs. Dessutom, om B orsakar mellanjobbet och det nya värdet av B är samma som A, var sedan rotationen medurs.
Låt oss snabbt undersöka fallet av moturs rotation. Precis som Medsols rotation moturs rotation kommer att orsaka fyra avbrott i en cykel: två för input A och två för ingång B. ingång A har en stigande kanten när vredet flyttas från 4 till 3 plats och en fallande kant flytta från position 2 till 1. När vredet flyttar från position 4 till 3, är det nya värdet av A samma som värdet av B. Observera att när ett drag från position 2 till 1 dess nytt värde är samma som för B också. Nu kan vi se att när A orsakar mellanjobbet och dess nya värdet matchar B rotation var motsols. Snabbt, ska vi titta på input B att kontrollera allt. B kommer att orsaka ett avbrott när vredet flyttar från position 5 (som är samma som 1) 4 och när ratten rör sig från position 3 till 2. I båda fallen, det nya värdet av B matchar inte det befintliga värdet för en som är den motsatsen för fall när B orsakar avbrottet för Medsols rotation. Detta är goda nyheter. Allt checkar ut som det ska.
För att sammanfatta, om en orsaker mellanjobbet och dess nya värde matchar inte värdet av B eller om B orsakar mellanjobbet och det nya värdet av B matchar värdet av A vet vi var det medsols rotation. Vi kan kontrollera de andra fallen för moturs rotation i programvara eller kan vi anta att eftersom det inte var Medsols rotation det var moturs. Min rutin helt enkelt gjort antagandet.