Stap 2: Het programma
De PIC10F206 is een echt eenvoudige deel-no interrupts en alleen een 2 niveau stack, zodat je niet kan een geneste subroutines doen-je ziet liberale gebruik van goto is dientengevolge in het programma. De chip wordt uitgevoerd bij 4 MHz met behulp van de interne RC-oscillator, dus 1M instructies per seconde wordt uitgevoerd. Wanneer een object de IR stralen breekt, duurt de IS471 chips abut 400 Amerikaanse status wijzigen. Vanaf daar moet de uC enkele microseconden de wijziging herkend en om de relay te sluiten. De estafette neemt ongeveer 1,5 ms in te sluiten als gevolg over een vertraging 2 ms totale van de balken gebroken aan relay gesloten.Ik ontwikkelde een programma-chip met behulp van MPLAB. Het is de Microchip Tech's gratis assembler/IDE. Ik gebruikte ook mijn Chinese ICD2 kloon (ongeveer $50 op ebay) eigenlijk programmeren de IC. Ik moest een heleboel vertraging lussen gebruiken zodat ik geworteld rond op het web en vond een programma genaamd PICLoops hier:
http://www.mnsi.net/~Boucher/picloops.html
PICLoops genereert automatisch timing lus montage-code voor u als u vertellen welke uC u gebruikt en de kloksnelheid. Later kwam ik een soortgelijk on-line programma hier:
http://www.piclist.com/techref/piclist/CodeGen/delay.htm
Ten tweede zal het genereren van vertragingen die zijn nauwkeurig tot één klokcyclus waar PICLoops is niet zo nauwkeurig. Ofwel is prima voor dit app omdat de timing niet kritisch en de uC wordt uitgevoerd op een RC-oscillator anyway.
Het programma bops voornamelijk heen en weer tussen het controleren van de modusknop en controleren om te zien of de balken worden onderbroken. De modus-schakelaar werkt door het bijhouden van een lopende telling van het aantal keren dat de knop is ingedrukt. Telkens wanneer de knop wordt ingedrukt de vertraging tussen de pulsen naar de Relais krijgt genoeg om de stap van de puls-frequentie van 1 Hz ingekort. Het grootste deel van de code is de verschillende vertragingen door de puls modi gebruikt.
Wanneer u de pulse modus de LED knippert om aan te geven van de nieuwe modus. U kunt vertellen wat de nieuwe frequentie van de puls is door te tellen de LED knippert - 4 keer betekent 4 Hz, enz. De LED knippert hebben langzaam genoeg geweest getimede dat u zal zitten kundig voor hen tellen. Als de eenheid in 10 Hz pulse modus is, gaat druk op de knop opnieuw u terug naar continue mode.
Er is een waakhond-timer die wordt uitgevoerd terwijl het programma wordt uitgevoerd. Als de timer is niet opnieuw instelt voordat het overloopt, wordt de uC gereset zelf. Daarom houden dat de mode-knop voor 2,3 seconden zorgt ervoor dat de uC weer continu instellen. Wanneer u op de knop, wacht de uC u voor vrijmaking op vooraleer gedoe iets. Een van de eerste dingen die het doet nadat u vrij te geven is de waakhond timer reset. Als u niet de knop loslaat, wordt de waakhond timer overloopt en het programma opnieuw wordt gestart in de continue mode.
Ik heb de vergadering aanbieding voor degenen die nieuwsgierig zijn en het hexadecimaal bestand voor degenen die wil gewoon te branden van de chip en worden gedaan met het bijgevoegd. Ik ben blij met elke kritiek op mijn programmering techniek van om het even welk van u PIC vergadering deskundigen daar.
Opmerking-de estafette wordt gesloten voor 25 ms als zij in pulse modus opereert. Sommige camera's mogelijk een langere puls. Die vertraging ligt in wachtrij welk says "call delay25" in de buurt van de bovenkant van de rlypuls-sectie van de code. Als 25 ms is te kort voor uw camera, wijzigt die lijn om te zeggen "oproep delay50" en de lijn die zegt "delay75 call" om te zeggen "call delay50". Dat zal verhogen van de puls-tijd om 50 ms en nog steeds houden alle frequenties van de pols op zelfs in stappen van 1 Hz.
Het programma beslaat slechts 173 bytes uit de beschikbare 512 bytes in de chip, dus kunt u allerlei soorten functionaliteit aan het ding als u wenst, hoewel de gebruikersinterface is gonna worden enigszins beperken.