| Home Pic in Greek Οδηγός χρήσης Pic Εσωτερικό 16F84A [1] [2] [3] [4] |
Ο εσωτερικός κόσμος του PIC16F84A(3)
Specification of the timer (TMR0) - Το εσωτερικό του χρονομετρητή (TMR0) Στην επάνω εικόνα φαίνεται το διάγραμμα του χρονομετρητή (TMR0) και του επιτηρητή (WDT - watchdog timer). Ο προδιαιρέτης (prescaler) χρησιμοποιείται για τον TMR0 και τον WDT. Στο επάνω σχέδιο φαίνεται ο προδιαιρέτης σε χρήση με τον TMR0. Η επιλογή για το αν ο προδιαιρέτης (prescaler) θα χρησιμοποιηθεί για τον χρονομετρητή (TMR0) ή τον επιτηρητή (WDT) γίνεται από το bit PSA του καταχωρητή OPTION_REG. Ο προδιαιρέτης είναι ένας προγραμματιζόμενος ειδικός καταχωρητής του οποίου η τιμή καθορίζεται από τα bit PS0, PS1, PS2 του OPTION_REG. Ο χρονομετρητής TMR0 είναι ένας δυαδικός μετρητής των οκτώ bit (8 bit binary counter) και μπορεί να μετρήσει 256 αριθμούς ( από 0 έως 255). Όταν ο TMR0 υπερχειλίσει, δηλαδή από 255(FFh) γίνει 0(00h) δημιουργείται παλμός διακοπής (Interrupt) και το T0IF του καταχωρητή INTCON γίνεται "1" . Όταν δημιουργηθεί ο παλμός διακοπής (Interrupt) ο μετρητής προγράμματος ( PC - program counter) παίρνει την τιμή 0004h και το πρόγραμμα συνεχίζει να εκτελείται από αυτή την διεύθυνση. Για να ισχύσει η παραπάνω λειτουργία πρέπει τα bit GIE και T0IE του καταχωρητή INTCON να έχουν την τιμή "1". Επειδή μερικές φορές οι 256 αριθμοί που μπορεί να μετρήσει ο χρονομετρητής TMR0 είναι λίγοι, τότε χρησιμοποιείται ο προδιαιρέτης (prescaler). Δείτε το παρακάτω παράδειγμα για να καταλάβετε. Έστω ότι συνδέετε στα ποδαράκια OSC1 & OSC2 ένα κρύσταλλο 4MHz, από τον τύπο 4/Fosc, δηλαδή 4/4 δίνει κύκλο μηχανής 1μsec ή 1000nsec άρα σε 256 κύκλους που υπερχειλίζει ο TMR0 θα έχει περάσει χρόνος ίσος με 256 μsec, που μπροστά στο δευτερόλεπτο (1000000 μsec) είναι πολύ μικρός χρόνος. Αν λοιπόν χρειαζόσαστε περισσότερο χρόνο τότε πρέπει να χρησιμοποιήσετε τον προδιαιρέτη (prescaler). Η τιμές που μπορεί να πάρει ο προδιαιρέτης (prescaler) είναι συγκεκριμένες (2, 4, 8, 16, 32, 64, 128, 256). Έστω πως η τιμή του προδιαιρέτη είναι 2 τότε ο TMR0 θα αυξήσει το περιεχόμενο του ανά 2 κύκλους μηχανής ενώ Αν ο προδιαιρέτης έχει τιμή 256 τότε ο TMR0 θα αυξήσει το περιεχόμενο του ανά 256 κύκλους μηχανής. Όσον αφορά το παραπάνω παράδειγμα, με τιμή προδιαιρέτη 256, ο TMR0 θα υπερχειλίσει μετά από 256μsec X 256 = 65535μsec ή 65,5msec ή 0,06sec. Εκτός από τον εσωτερικό στον μικροεπεξεργαστή ταλαντωτή για την οδήγηση του χρονομετρητή (TMR0), μπορεί να χρησιμοποιηθεί και εξωτερική πηγή όπως ταλαντωτής R/C κ.λ.π. Για να ενεργοποιηθεί η εξωτερική πηγή χρονισμού στο ποδαράκι RA4/T0CKI πρέπει το bit TOCS του καταχωρητή OPTION_REG και το bit TRISA4 του καταχωρητή TRISA να πάρουν την τιμή "1". Η τιμή που έχει το bit T0SE του καταχωρητή OPTION_REG καθορίζει αν το σήμα σκανδαλισμού για το χρονομετρητή (TMR0) θα είναι το ανερχόμενο ή το κατερχόμενο μέτωπο του παλμού (the rising or falling of the clock pulse). Για σκανδαλισμό στο ανερχόμενο μέτωπο το bit T0SE πρέπει να έχει τιμή "0" ενώ για σκανδαλισμό στο κατερχόμενο μέτωπο πρέπει να έχει την τιμή "1". Ο επιτηρητής (WDT - watchdog timer) έχει δικό του ξεχωριστό ταλαντωτή, και υπερχειλίζει δίχως την χρήση προδιαιρέτη (prescaler) κάθε 18msec. Ο επιτηρητής (WDT) πρέπει να μηδενίζεται πριν υπερχειλίσει, μέσα από το πρόγραμμα με την χρήση της εντολής "CLRWDT". Εάν περάσουν τα 18msec και δεν μηδενιστεί τότε αναγκάζει τον μικροεπεξεργαστή να μηδενιστεί (reset) και να ξεκινήσει την εκτέλεση του προγράμματος από την αρχή. Αν χρειάζεται μεγαλύτερη διάρκεια πριν την υπερχείλιση του επιτηρητή (WDT) μπορεί να χρησιμοποιηθεί ο προδιαιρέτης (prescaler). Ο προδιαιρέτης (prescaler) που μεγαλώνει την διάρκεια του επιτηρητή (WDT) μπορεί να πάρει τιμές (2, 4, 8, 16, 32, 64, 128). Προσέξτε ότι δεν μπορεί να πάρει την τιμή 256. Με ανώτερη τιμή το 128 μπορεί να φτάσει χρόνο ίσο με 18msec x 128 = 2304msec ή 2,3sec. Η χρήση του επιτηρητή είναι απαραίτητη όταν τυχόν δυσλειτουργίες του προγράμματος μπορούν να προξενήσουν ζημιά ή καταστροφές. Για παράδειγμα αν ο μικροεπεξεργαστής ελέγχει την λειτουργία ενός αερόθερμου και από λάθος προγραμματισμό "κολλήσει", τότε μπορεί να υπάρξει σταμάτημα του ανεμιστήρα, υπερθέρμανση στης αντίστασης, καταστροφή της ή και πυρκαγιά. Για να απενεργοποιηθεί ο επιτηρητής (WDT) πρέπει το bit WDTE της διαμόρφωσης (configuration word) (διεύθυνση μνήμης ram 2007h) του μικροεπεξεργαστή να δηλωθεί ως "0". Ο εσωτερικός κόσμος του PIC16F84A(4)