Étape 3: Un regard intérieur sur les tâches PIC16F727
FOSC = 16000000 Hz
Finst = 4000000 Hz
Tinst = 1 / Finst = 250 ns
Une instruction prend 250 nanosecondes, il s’agit de la même fréquence que la minuterie atteint avec. S’il faut un timing de 1 millisecondes, nous laissons la minuterie exécuter pour 4000 mode d’emploi, puis le signal, que 1 ms se soit écoulé.
Pour que cela soit très précis, nous utiliserons des interruptions. Une interruption pour un microcontrôleur est comme une tape sur l’épaule pour vous. Vous êtes juste garde de votre propre entreprise, puis quelqu'un arrive, tapant votre épaule pour dire quelque chose. Vous quittez votre commercer, et faire attention à le « interruption » qui vient s’est produite. Après que vous avez terminé l’écoute, vous réagir d’une certaine manière, puis revenir en arrière pour les trucs que vous avez fait avant que quelqu'un vous interrompt. Cela dit la façon dont le PIC, vous juste réparé une interruption.
Le commandant de bord ne fait pas ce que vous voulez, il le fait, ce que vous dites qu’il fasse. Il s’agit d’une chose très importante à mémoriser : un bug de silicium est rarement la raison pourquoi votre projet ne démarre. C’est à 99,9 % du temps défectueux de programmation.
Que devons-nous dire le PIC à faire afin d’atteindre ce que nous voulons :
Configuration de l’oscillateur :
Il faut configurer l’oscillateur interne pour être la source d’horloge principale pour ce projet, nous le faisons en mettant 0 x 30 dans le registre OSCCON.
Activation des interruptions :
Tout d’abord, il faut activer le système d’interruption. Cela se fait en manipulant les bits dans le registre INTCON.
Il faut activer les interruptions globales et interruption Timer0. En regardant la feuille de données, nous voyons bit 7 à être l’interruption mondiale bit, et bit 5 à être l’interruption Timer0 activez bit. Le reste des bits sont des zéros, nous n’avez pas besoin de les changer. Cela donne une valeur binaire de b10100000, c'est-à-dire en hexadécimal 0xA0. Nous avons mis que dans le registre INTCON.
Convertisseurs :
Un diviseur est un compteur lui-même, qui incrémente à chaque instruction du cycle. Ces - par défaut - sont sur 1:1 afin qu’ils n’interfèrent avec le fonctionnement normal de la minuterie. La sortie du diviseur est connectée à l’entrée de la minuterie, comme nous pouvons voir sur le diagramme. Si nous fixons un diviseur à 1 / 2, sa sortie ira à « 1 » seulement après que 2 cycles d’instruction ont terminé. Cela signifie que la minuterie n’incrémente à chaque cycle d’instruction, mais à chaque 2-nd. Semblable à celui-ci, en définissant le Prédiviseur à diviser par 4, le TMR0 est obtenir incrémenté chaque cycle d’instruction de la 4-ème, et ainsi de suite.
Configuration Timer0 faire interrompre chaque milliseconde :
Timer0 compte les instructions en incrémentant la valeur du Registre TMR0. que la valeur est 8 bits de large, ce qui signifie, nous ne pouvons compter plus loin, 255. Si le compteur est à 255 et un incrément se produit, le registre déborderont et commencer le nouveau comptage de 0.
C’est le point, quand une minuterie peut signaler une interruption. Mais si cela se produit à chaque cycle de 256-th, comment pouvons nous utiliser pour compter jusqu'à 4000 ? Grâce à l’aide des convertisseurs.
4000 / 256 = 15,625
Nous avons besoin d’une division par 16 (la plus proche et le plus grand diviseur valeur) pour y arriver.
4000 / 16 = 250 ;
Puisque la minuterie offre une interruption au report de 255 -> 0, nous allons mettre juste un décalage de 250-256 = 6 dans le registre TMR0. Cette valeur doit être actualisé chaque fois que l’interruption est desservie. Il faut aussi désactiver l’indicateur, qui a été défini à « 1 », lorsque le roulement Timer0 s’est produite.
Cela étant dit, nous avons maintenant une interruption précise, qui produit à chaque milliseconde. J’ai implémenté généralement un compteur dans la routine d’interruption du service, je compte 1000 interrompt, mise en place d’un second signal. Compter les secondes doit se faire dans la boucle principale, il y a des compteurs simples qui comptent 60 secondes, puis débordent pour incrémenter la variable « minute ». Puis, la même manière, les "heures", "jours", « mois » variable est incrémentée.
Les chiffres
Si le projet est assez simple et a certains afficheurs 7 segments dans le schéma, je m’occupe jamais de localiser les broches de contrôleur de segment celui à côté de l’autre. Ce projet n’était pas une exception, définit le floue, vous pouvez le voir au début du programme sont en place pour simplifier les façons j’ai afficher les chiffres. Si vous prenez assez de temps pour essayer de les comprendre, vous verrez comment cette partie affiche effectivement est facile.