Korsade IR-strålen kamera/blixt Trigger (2 / 5 steg)
Steg 2: Programmet
PIC10F206 är en riktigt enkel del-inga avbrott och endast en 2 nivå stack, så du inte kan göra alla kapslade subrutiner-ser du liberal användning av goto's i programmet som ett resultat. Chipet är igång på 4 MHz med en inre RC-oscillator så det utför 1M instruktioner per sekund. När ett objekt bryter IR balkar, det tar IS471 marker abut 400 USA att byta tillstånd. Därifrån måste uC bara några mikrosekunder att upptäcka förändringen och beställa reläet att stänga. Reläet tar ca 1.5 ms för att stänga resulterar om en 2 ms totala fördröjning från balkar brutit till relä stängd.Jag utvecklade Programmera chip med MPLAB. Det är Microchip Tech gratis assembler/IDE. Jag har också använt min kinesiska ICD2 klon (ca $50 på ebay) faktiskt programmera IC. Jag behövde till använda en hel del dröjsmål slingor så jag rotade på nätet och hittade ett program som heter PICLoops här:
http://www.mnsi.net/~Boucher/picloops.html
PICLoops genererar automatiskt timing loop-kod för dig om du säger det vad uC som du använder och klockhastighet. Senare sprang jag in i ett liknande on-line program här:
http://www.piclist.com/techref/piclist/Codegen/Delay.htm
För det andra kommer att generera förseningar som har en noggrannhet på en klockcykel där PICLoops inte är fullt så exakt. Antingen är bra för denna app att tidpunkten inte är kritisk och uC körs på en RC-oscillator ändå.
Programmet bops främst fram och tillbaka mellan kontroll på mode-knappen och kontroll för att se om balkar avbryts. Läget switch fungerar genom att hålla en löpande räkning av antal gånger på knappen har tryckts. Varje gång knappen trycks fördröjningen mellan pulserna till reläet får förkortas nog att kliva puls frekvens av 1 Hz. Den största delen av koden är olika förseningarna används av puls-lägen.
När du ändrar pulsläge lysdioden blinkar för att visa det nya läget. Du kan berätta vad den nya puls frekvensen är genom att räkna de LED blinkar - 4 gånger innebär 4 Hz, etc. LAMPAN blinkar har varit tidsinställda långsam nog att du kommer att kunna räkna dem. Om enheten är i 10 Hz pulsläge, tar trycka på knappen igen dig tillbaka till kontinuerligt läge.
Det finns en vakthund timer som körs medan programmet körs. Om timern inte är återställas innan det svämmar över, att uC återställa sig själv. Det är därför hålla knappen mode för 2,3 sekunder orsakar uC återställa till kontinuerligt läge. När du trycker på knappen, väntar uC på dig att släppa det innan du gör något. En av de första saker som det gör när du släpper det är nollställa timern vakthund. Om du inte släpper knappen, vakthund timern svämmar över och startar om programmet i kontinuerligt läge.
Jag har bifogat den församlingen notering filen för dem som är nyfikna och hex-filen för dem som bara vill bränna chip och göras med det. Jag välkomnar all kritik mot min programmering teknik från någon av du PIC församlingen experter där ute.
Obs-reläet stänger för 25 ms när det fungerar pulsläge. Vissa kameror kan kräva en längre puls. Denna försening ligger i lina så pass säga "Ring delay25" längst upp på den rlypuls delen av koden. Om 25 ms är för kort för din kamera, ändra den linjen för att säga "Ring delay50", då ändra raden där det står "Ring delay75" för att säga "Ring delay50". Som kommer att öka puls tid att 50 ms och fortfarande hålla alla puls frekvenser på ens 1 Hz steg.
Programmet upptar endast 173 bytes av tillgängliga 512 byte i chip, så kan du lägga till alla typer av funktionalitet till sak om du önskar, men användargränssnittet-kommer att vara något begränsande.