- Ρύθμιση και απαίτηση υλικού
- Διάγραμμα κυκλώματος για διασύνδεση LED με Nuvoton N76E003
- Χρονοδιακόπτες στο Nuvoton N76E003
- Μητρώα χρονοδιακόπτη στο Nuvoton N76E003
- Τύποι ώρας στο Nuvoton N76E003
- Προγραμματισμός μικροελεγκτή Nuvoton N76E003 για χρονοδιακόπτες
- Κωδικός που αναβοσβήνει και επαλήθευση εξόδου για τη λειτουργία χρονοδιακόπτη
Στα προηγούμενα μαθήματα Nuvoton Microcontroller, χρησιμοποιήσαμε ένα βασικό πρόγραμμα LED που αναβοσβήνει ως οδηγό έναρξης και επίσης διασυνδέσαμε το GPIO ως είσοδο για τη σύνδεση ενός διακόπτη αφής. Με αυτό το σεμινάριο, γνωρίζουμε πλήρως πώς να διαμορφώσουμε το έργο Keil και να ρυθμίσουμε το περιβάλλον για τον προγραμματισμό του μικροελεγκτή N76E003 Nuvoton. Είναι καιρός να χρησιμοποιήσετε ένα εσωτερικό περιφερειακό της μονάδας μικροελεγκτή και να προχωρήσετε λίγο πιο μακριά χρησιμοποιώντας το ενσωματωμένο χρονόμετρο του N76E003.
Στο προηγούμενο σεμινάριό μας, χρησιμοποιήσαμε μόνο καθυστέρηση λογισμικού για να αναβοσβήσουμε μια λυχνία LED, επομένως σε αυτό το σεμινάριο, θα μάθουμε πώς να χρησιμοποιούμε τη λειτουργία καθυστέρησης χρονοδιακόπτη καθώς και το χρονοδιακόπτη ISR (Interrupt Service Routine) και να αναβοσβήνουμε δύο μεμονωμένες λυχνίες LED. Μπορείτε επίσης να ρίξετε μια ματιά στο Arduino Timer Tutorial και το PIC Timer tutorial για να ελέγξετε πώς να χρησιμοποιείτε χρονοδιακόπτες με άλλους μικροελεγκτές. Χωρίς να χάνουμε πολύ χρόνο ας αξιολογήσουμε τι είδους εγκατάσταση υλικού χρειαζόμαστε.
Ρύθμιση και απαίτηση υλικού
Δεδομένου ότι η απαίτηση αυτού του έργου είναι να μάθουμε Timer ISR και τη λειτουργία χρονοδιακόπτη καθυστέρησης, θα χρησιμοποιήσουμε δύο LED, από τα οποία ένα θα αναβοσβήνει χρησιμοποιώντας χρονοδιακόπτη καθυστέρηση στο loop loop και ένα άλλο θα αναβοσβήνει μέσα στη λειτουργία ISR.
Δεδομένου ότι ένα LED είναι διαθέσιμο στον πίνακα ανάπτυξης N76E003, αυτό το έργο απαιτεί ένα επιπλέον LED και την τρέχουσα περιοριστική αντίσταση για τον περιορισμό του ρεύματος LED. Τα στοιχεία που απαιτούμε -
- Οποιοδήποτε χρώμα των LED
- Αντίσταση 100R
Για να μην αναφέρουμε, εκτός από τα παραπάνω στοιχεία, χρειαζόμαστε πλακέτα ανάπτυξης με βάση τον μικροελεγκτή N76E003, καθώς και τον προγραμματιστή Nu-Link. Επιπρόσθετα, απαιτούνται καλώδια αρτοποιίας και σύνδεσης για τη σύνδεση όλων των εξαρτημάτων.
Διάγραμμα κυκλώματος για διασύνδεση LED με Nuvoton N76E003
Όπως μπορούμε να δούμε στο παρακάτω σχήμα, το LED δοκιμής είναι διαθέσιμο μέσα στην πλακέτα ανάπτυξης και είναι συνδεδεμένο στη θύρα 1.4. Ένα επιπλέον LED είναι συνδεδεμένο στη θύρα 1.5. Η αντίσταση R3 χρησιμοποιείται για τον περιορισμό του ρεύματος LED. Αριστερά αριστερά, εμφανίζεται η σύνδεση διεπαφής προγραμματισμού.
Χρονοδιακόπτες στο Nuvoton N76E003
Το διάγραμμα ακίδων του N76E003 φαίνεται στην παρακάτω εικόνα-
Όπως μπορούμε να δούμε, κάθε ακίδα έχει διαφορετικές προδιαγραφές και κάθε ακίδα μπορεί να χρησιμοποιηθεί για πολλαπλούς σκοπούς. Ωστόσο, το pin 1.5 που χρησιμοποιείται ως pin εξόδου LED, θα χάσει το PWM και άλλες λειτουργίες. Όμως, αυτό δεν είναι πρόβλημα καθώς δεν απαιτείται άλλη λειτουργικότητα για αυτό το έργο.
Ο λόγος για τον οποίο επιλέξαμε τον ακροδέκτη 1.5 ως έξοδο και τον ακροδέκτη 1.6 ως είσοδο είναι η πλησιέστερη διαθεσιμότητα των ακίδων GND και VDD για εύκολη σύνδεση. Ωστόσο, σε αυτόν τον μικροελεγκτή από 20 ακίδες, 18 ακίδες μπορούν να χρησιμοποιηθούν ως ακροδέκτες GPIO και οποιοιδήποτε άλλοι ακροδέκτες GPIO μπορούν να χρησιμοποιηθούν για σκοπούς εξόδου και εισαγωγής, εκτός από τον ακροδέκτη 2.0 που χρησιμοποιείται αποκλειστικά για επαναφορά εισόδου και δεν μπορεί να χρησιμοποιηθεί ως παραγωγή. Όλες οι ακίδες GPIO μπορούν να διαμορφωθούν με τον παρακάτω τρόπο λειτουργίας.
Σύμφωνα με το φύλλο δεδομένων, τα PxM1.n και PxM2.n είναι δύο καταχωρητές που χρησιμοποιούνται για τον προσδιορισμό της λειτουργίας ελέγχου της θύρας I / O. Δεδομένου ότι χρησιμοποιούμε LED και χρειαζόμαστε τον ακροδέκτη ως γενικές καρφίτσες εξόδου, επομένως θα χρησιμοποιήσουμε τη λειτουργία σχεδόν διπλής κατεύθυνσης για τις ακίδες.
Μητρώα χρονοδιακόπτη στο Nuvoton N76E003
Ο χρονοδιακόπτης είναι σημαντικό για κάθε μονάδα μικροελεγκτή. Ο μικροελεγκτής διαθέτει ενσωματωμένο περιφερειακό χρονοδιακόπτη. Το nuvoton N76E003 έρχεται επίσης με περιφερειακά χρονοδιακόπτη 16-bit. Ωστόσο, κάθε χρονοδιακόπτης χρησιμοποιείται για διαφορετικούς σκοπούς, και πριν χρησιμοποιήσετε οποιαδήποτε διεπαφή χρονοδιακόπτη, είναι σημαντικό να γνωρίζετε για το χρονόμετρο.
Τύποι ώρας στο Nuvoton N76E003
Χρονόμετρα 0 και 1:
Αυτά τα δύο χρονόμετρα χρονοδιακόπτη0 και χρονόμετρο1 είναι ίδια με 8051 χρονόμετρα. Αυτά τα δύο χρονόμετρα μπορούν να χρησιμοποιηθούν ως γενικός χρονοδιακόπτης ή ως μετρητές. Αυτά τα δύο χρονόμετρα λειτουργούν σε τέσσερις λειτουργίες. Στη λειτουργία 0, αυτοί οι χρονοδιακόπτες θα λειτουργούν σε λειτουργία χρονοδιακόπτη / μετρητή 13 bit. Στη λειτουργία 1, το bit ανάλυσης αυτών των δύο χρονιστών θα είναι 16 bit. Στη λειτουργία 2, τα χρονόμετρα διαμορφώνονται ως λειτουργία αυτόματης φόρτωσης με ανάλυση 8 bit. Στη λειτουργία 3, ο χρονοδιακόπτης 1 σταματά και ο χρονοδιακόπτης 0 μπορεί να χρησιμοποιηθεί ταυτόχρονα ως μετρητής και χρονοδιακόπτης.
Από αυτές τις τέσσερις λειτουργίες, η Λειτουργία 1 χρησιμοποιείται στις περισσότερες περιπτώσεις. Αυτά τα δύο χρονόμετρα μπορούν να χρησιμοποιήσουν το Fsys (Συχνότητα συστήματος) σε σταθερή ή προκαθορισμένη λειτουργία (Fys / 12). Μπορεί επίσης να χρονομετρηθεί από μια εξωτερική πηγή ρολογιού.
Χρονόμετρο 2:
Ο χρονοδιακόπτης 2 είναι επίσης ένας χρονοδιακόπτης 16-bit που χρησιμοποιείται κυρίως για τη λήψη κυματομορφής. Χρησιμοποιεί επίσης το ρολόι συστήματος και μπορεί να χρησιμοποιηθεί σε διαφορετικές εφαρμογές διαιρώντας τη συχνότητα ρολογιού χρησιμοποιώντας 8 διαφορετικές κλίμακες. Μπορεί επίσης να χρησιμοποιηθεί σε λειτουργία σύγκρισης ή για δημιουργία PWM.
Όπως το Timer 0 και το Timer 1, το Timer 2 μπορεί να χρησιμοποιηθεί σε λειτουργία αυτόματης φόρτωσης.
Χρονόμετρο 3:
Ο χρονοδιακόπτης 3 χρησιμοποιείται επίσης ως χρονοδιακόπτης 16-bit και χρησιμοποιείται για την πηγή ρολογιού ρυθμού baud για το UART. Έχει επίσης δυνατότητα αυτόματης επαναφόρτωσης. Είναι σημαντικό να χρησιμοποιήσετε αυτό το χρονόμετρο μόνο για σειριακή επικοινωνία (UART) εάν η εφαρμογή απαιτεί επικοινωνία UART. Συνιστάται να μην χρησιμοποιείτε αυτό το χρονόμετρο για άλλους σκοπούς σε μια τέτοια περίπτωση λόγω της διαδικασίας διένεξης στη ρύθμιση του χρονοδιακόπτη.
Χρονόμετρο Watchdog:
Ο χρονοδιακόπτης Watchdog μπορεί να χρησιμοποιηθεί ως τυπικός χρονοδιακόπτης 6-bit αλλά δεν χρησιμοποιείται για το σκοπό αυτό. Η χρήση του χρονοδιακόπτη Watchdog ως χρονοδιακόπτης γενικής χρήσης ισχύει για εφαρμογές χαμηλής κατανάλωσης ενέργειας, όπου ο μικροελεγκτής παραμένει ως επί το πλείστον σε κατάσταση αναμονής.
Το χρονόμετρο Watchdog, όπως υποδηλώνει το όνομα, ελέγχει πάντα εάν ο μικροελεγκτής λειτουργεί σωστά ή όχι. Στην περίπτωση ενός μικροελεγκτή που έχει κρεμαστεί ή σταματήσει, το WDT (Watcher Dog Timer) επαναφέρει αυτόματα τον μικροελεγκτή, ο οποίος διασφαλίζει ότι ο μικροελεγκτής λειτουργεί σε συνεχή ροή κώδικα χωρίς να κολλήσει, να κρεμαστεί ή να σταματήσει.
Χρονοδιακόπτης αυτόματης αφύπνισης:
Αυτό είναι ένα άλλο περιφερειακό χρονοδιακόπτη που εξυπηρετεί μια ειδική διαδικασία χρονισμού το ίδιο με ένα χρονόμετρο παρακολούθησης. Αυτό το χρονόμετρο, ξυπνά το σύστημα περιοδικά όταν ο μικροελεγκτής λειτουργεί σε κατάσταση χαμηλής ισχύος.
Αυτό το περιφερειακό χρονόμετρο μπορεί να χρησιμοποιηθεί εσωτερικά ή χρησιμοποιώντας εξωτερικά περιφερειακά για να ξυπνήσει τον μικροελεγκτή από τη λειτουργία αναστολής λειτουργίας. Για αυτό το έργο, θα χρησιμοποιήσουμε το χρονοδιακόπτη 1 και το χρονόμετρο 2.
Προγραμματισμός μικροελεγκτή Nuvoton N76E003 για χρονοδιακόπτες
Ρύθμιση των ακίδων ως έξοδος:
Ας ξεκινήσουμε πρώτα με το τμήμα εξόδου. Χρησιμοποιούμε δύο LED, το ένα είναι το ενσωματωμένο LED, το οποίο ονομάζεται Test και συνδέεται με τη θύρα P1.4 και ένα εξωτερικό LED συνδεδεμένο με τον ακροδέκτη P1.5.
Επομένως, αυτές οι δύο ακίδες είναι διαμορφωμένες ως ακίδα εξόδου για τη σύνδεση αυτών των δύο LED χρησιμοποιώντας τα παρακάτω αποσπάσματα κώδικα.
# καθορισμός δοκιμής_LED P14 # καθορισμός LED1 P15
Αυτές οι δύο ακίδες ορίζονται ως οιονεί αμφίδρομη καρφίτσα στη λειτουργία εγκατάστασης.
ρύθμιση κενού (κενό) {P14_Quasi_Mode; P15_Quasi_Mode; }
Ρύθμιση της λειτουργίας χρονοδιακόπτη:
Στη λειτουργία εγκατάστασης, ο Χρονοδιακόπτης 2 χρειάζεται να διαμορφωθεί για να πάρει την επιθυμητή έξοδο. Για αυτό, θα ορίσουμε τον καταχωρητή T2MOD με συντελεστή διαχωρισμού ρολογιού 1/128 και θα τον χρησιμοποιήσουμε σε λειτουργία καθυστέρησης αυτόματης φόρτωσης. Εδώ είναι η επισκόπηση του μητρώου T2MOD-
Τα 4,5 και 6-bit του καταχωρητή T2MOD ρυθμίζουν το χρονόμετρο 2 διαχωριστικό ρολογιού και το 7ο bit ρυθμίζει τη λειτουργία αυτόματης φόρτωσης. Αυτό γίνεται χρησιμοποιώντας την παρακάτω γραμμή -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Αυτές οι δύο γραμμές ορίζονται στο αρχείο Function_define.h ως
# καθορισμός TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #define TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Τώρα, αυτές οι γραμμές ορίζουν την τιμή χρονισμού που απαιτείται για το Timer 2 ISR.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Το οποίο ορίζεται περαιτέρω στο αρχείο Function_define.h ως
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
Έτσι, το 16000000 είναι η κρυσταλλική συχνότητα 16 Mhz που ρυθμίζει την καθυστέρηση 100 ms.
Κάτω από δύο γραμμές θα αδειάσουν τα Timer 2 Low και High byte.
TL2 = 0; TH2 = 0;
Τέλος, ο παρακάτω κώδικας θα επιτρέψει τη διακοπή του χρονοδιακόπτη 2 και την έναρξη του χρονοδιακόπτη 2
set_ET2; // Ενεργοποίηση Timer2 interrupt set_EA; σύνολο_TR2; // Χρονοδιακόπτης2
Η πλήρης λειτουργία ρύθμισης φαίνεται στους παρακάτω κωδικούς-
ρύθμιση κενού (κενό) { P14_Quasi_Mode; P15_Quasi_Mode; TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode; RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8; TL2 = 0; TH2 = 0; set_ET2; // Ενεργοποίηση Timer2 interrupt set_EA; σύνολο_TR2; // Χρονοδιακόπτης εκτέλεσης }
Λειτουργία χρονοδιακόπτη 2 ISR:
Η λειτουργία Timer 2 ISR φαίνεται στον παρακάτω κώδικα.
void Timer2_ISR (void) διακοπή 5 { clr_TF2; // Clear Timer2 Interrupt Flag LED1 = ~ LED1; // Εναλλαγή LED1, συνδεδεμένο στο P1.5. }
Κωδικός που αναβοσβήνει και επαλήθευση εξόδου για τη λειτουργία χρονοδιακόπτη
Ο κωδικός (που δίνεται παρακάτω) κατά τη σύνταξη επέστρεψε 0 προειδοποίηση και 0 Σφάλματα και τον έκανα χρησιμοποιώντας την προεπιλεγμένη μέθοδο αναβοσβήνει στο Keil. Αφού αναβοσβήνουν, οι λυχνίες LED αναβοσβήνουν σε καθορισμένη καθυστέρηση χρονοδιακόπτη όπως έχει προγραμματιστεί.
Δείτε το βίντεο που δίνεται παρακάτω για μια πλήρη επίδειξη του τρόπου λειτουργίας του πίνακα για αυτόν τον κωδικό. Ελπίζω να απολαύσατε το σεμινάριο και να μάθετε κάτι χρήσιμο εάν έχετε οποιεσδήποτε ερωτήσεις αφήστε το στην παρακάτω ενότητα σχολίων. Μπορείτε επίσης να χρησιμοποιήσετε τα φόρουμ μας για να δημοσιεύσετε άλλες τεχνικές ερωτήσεις.