Étape 4: Microcontrôleur Code
Explication de code :
Chronométrage :
Le ratio magique pour convertir l’heure habituelle nouvelle terre est 0,25 NET Minutes 1 seconde (ou 1 Minute NET pour toutes les 4 secondes de temps écoulé). Ceci est calculé les ratios 360 Deg nette par 24h et 60minutes NET par degré de NET.
Au comte NET, le code utilise intégré Timer1 le commandant de bord (TMR1) module avec un cristal de 32,768 kHz externe pour un chronométrage. Pour atteindre le ratio magique de 1 Min NET toutes les 4 secondes, nous pouvons utiliser le registre TMR1 de 16 bits avec un prescaler de 1:2. (Les 16 bits TMR1 déborde à 65536 comtes, cristal tourne à 32768 impulsions par seconde. 65536/32768 = débordement toutes les 2 secondes. Il suffit d’ajouter dans le diviseur de 1:2 et voilà ! Interrompre toutes les 4 secondes!)
Affichage :
Le commandant de bord lui-même fonctionne sur l’oscillateur interne de 4MHz. L’affichage à LED 7 segments cinq est scannés à intervalle fixe contrôlé par Timer0 (TMR0). Chaque fois que TMR0 déborde, le PIC va commuter l’affichage suivant (pour time division multiplexing). La clé de multiplexage par répartition temps affiche est pour eux comme balayer rapidement que possible et à intervalles réguliers. Dans le cas contraire, votre œil percevra de scintillement dans l’affichage.
Temps/boutons de réglage :
Réglage de l’heure s’effectue par deux boutons - un seul bouton incrémente NET par degrés et un NET Minutes. Les boutons sont surveillés en permanence par le PIC dans la boucle principale du programme. Pour enregistrer les broches e/s, les boutons sont reliés à ce qui est normalement une broche de sortie. Lorsque le commandant de bord vérifie les statut de bouton, il passe ce NIP I/O à une entrée et prend une lecture.
Lorsqu’un bouton est détecté, le programme va à une fonction de réglage de temps spécifique à chaque bouton. Cette fonction incrémente la variable suivi de temps, à l’instar de l’interruption TMR1. Une simple pression s’incrémente l’une étape horloge, en maintenant enfoncé que le bouton se traduira à l’avance continue. Il y a une fonction de retard dans le code de debounce la presse initiale et de fournir le calendrier pour l’avance continue.