Étape 2: Le programme
Le PIC10F206 est un interruptions de partie-pas vraiment simple et seulement une pile de niveau 2, donc vous ne pouvez tout sous-routines imbriquées-vous verrez l’utilisation libérale de goto de dans le programme en conséquence. La puce est cadencé à 4 MHz à l’aide de l’oscillateur interne RC, alors il exécute les instructions de 1M par seconde. Quand un objet brise les rayons IR, il faut la IS471 puces sont contigus 400 US pour changer d’État. De là l’uC a besoin de quelques microsecondes pour détecter le changement et commander le relais pour fermer. Le relais prend environ 1,5 ms pour fermer entraînant tout un retard total de 2 ms de poutres brisées au relais fermé.J’ai développé la puce de programme à l’aide de MPLAB. Il est gratuit Assembleur/IDE de Microchip Tech. J’ai aussi utilisé mon clone chinois ICD2 (environ 50 $ sur ebay) pour programmer en réalité l’IC. J’avais besoin d’utiliser un grand nombre de boucles de retard donc j’ai ancré sur le web et a trouvé un programme appelé PICLoops ici :
http://www.MNSi.net/~Boucher/picloops.html
PICLoops génère automatiquement le code assembleur de chronométrage boucle pour vous si vous lui dites ce qu’uC vous utilisez et la vitesse d’horloge. Par la suite, je suis tombé sur un programme similaire en ligne ici :
http://www.piclist.com/techref/piclist/CodeGen/Delay.htm
L’autre va générer des retards qui sont précis à un seul cycle d’horloge où PICLoops n’est pas aussi précis. Une est très bien pour ce soft parce que le moment n’est pas critique et l’uC s’exécute sur un oscillateur RC en tout cas.
Le programme bops principalement en allers retours entre la vérification de la touche mode et vérifier si les poutres sont interrompus. Les œuvres de commutateur de mode par en tenant compte du nombre du nombre de fois la touche a été enfoncée. Chaque fois que le bouton est enfoncé l’intervalle entre les impulsions au relais obtient assez pour la fréquence d’impulsion de l’étape raccourcie de 1 Hz. La plus grande partie du code est les délais différents utilisés par les modes de pulsation.
Lorsque vous modifiez le mode de pulsation la LED clignote pour indiquer le nouveau mode. Vous pouvez dire ce que la nouvelle fréquence de pulsation est en comptant la LED clignote - 4fois signifie 4 Hz, etc.. La LED clignote ont été chronométrée assez lent que vous serez en mesure de les compter. Si l’appareil est en mode d’impulsion 10Hz, appuyant à nouveau sur le bouton vous ramène en mode continu.
Il y a un timer chien de garde qui s’exécute pendant que le programme s’exécute. Si la minuterie n’est pas réinitialisée avant elle déborde, l’uC se remet en marche. C’est pourquoi tenir que le bouton mode pour 2,3 secondes provoque l’uC remettre à la mode continu. Lorsque vous appuyez sur le bouton, l’uC attend que vous pour le dégager avant de faire quoi que ce soit. Une des premières choses qu’il le fait après que vous relâcherez est de réinitialiser le compteur de chien de garde. Si vous ne relâchez pas le bouton, le timer chien de garde déborde et redémarre le programme en mode continu.
J’ai joint l’Assemblée inscription pour ceux qui sont curieux et le fichier .hex pour ceux qui veulent juste brûler la puce et faire avec elle. Je salue toute critique de ma technique de programmation de l’un de vous PIC Assemblée experts là-bas.
Remarque-le relais ferme pour les 25 États membres quand il fonctionne en mode pulsé. Certaines caméras peuvent exiger une impulsion plus longtemps. Ce délai est défini dans la ligne qui indique « appel delay25 » près du haut de l’article rlypuls du code. Si 25 ms est trop courte pour votre appareil photo, modifiez cette ligne pour dire « appel Russie50 », puis modifiez la ligne qui dit « appeler delay75 » pour dire « appeler Russie50 ». Qui augmentera le temps d’impulsion de 50 ms et conserve toutes les fréquences d’impulsions à même pas de 1 Hz.
Le programme occupe seulement 173 octets sur les 512 octets disponibles dans la puce, vous pouvez ajouter toutes sortes de fonctionnalités à la chose si vous le désirez, bien que l’interface va être un peu limite.