Stap 4: berekeningen
De PIC18F13K50 is ingesteld op 48MHz wordt uitgevoerd. Het duurt 4 cycli uitvoeren van één instructiecyclus, zodat de MCU 12 MIPS (Million Instructions per Second bedraagt). Dus de tijd die het duurt voor de PIC voor het uitvoeren van één instructiecyclus is gelijk aan (1 / 12 MIPS), die is 83.3333 nanoseconden/instructie.
We weten dat de afstand tussen de balken"IR" precies 4 inch is. Zodat alles wat we nodig hebben is nu te weten hoe lang het duurde het projectiel om te reizen van beam #1 naar lichtbundels #2. Dit is wat Timer1 is gebruikt voor. Elke instructiecyclus (83.3333 ns) de waarde van TMR1H:TMR1L zal verhogen.
Zeggen dat we een paintball ontslagen door middel van de chronograaf. Zodra de paintball heeft reisde door de chronograaf en brak beam #2, we gaan en lees de waarde van TMR1H:TMR1L (het is een 16-bits waarde). Omwille van de voorbeelden, zullen we zeggen de waarde die we lezen was 15,930. Hier is hoe we de snelheid van de paintball berekenen:
MCU snelheid = 12 MIPS
= 83.3333 ns/ins
Afstand = 4 in.
= 1/3 ft
Tijd = MCU snelheid * TMR1H:TMR1L
83.3333 ns/ins = * 15,930 instructies
= 1.3275 milliseconden
Snelheid = afstand / tijd
= (1/3 ft) / 1.3275 ms
= 251 feet per seconde
De paintball reiste met een snelheid van 251 fps. Terwijl deze manier van berekenen perfect in orde is, in mijn code herschikt ik gewoon de vergelijking dus de MCU het een beetje sneller kan berekenen. De vergelijking die ik in mijn code gebruiken is:
Snelheid = ((FOSC / 4) / TMR1H:TMR1L) / 3
= ((12 MIPS) / 15,930) / 3
= 251fps