- Απαιτούμενα στοιχεία:
- Διάγραμμα κυκλώματος:
- Χρησιμοποιώντας TIMER του 8051 για μέτρηση συχνότητας:
- 555 χρονοδιακόπτης ως πηγή συχνότητας:
- Εργασία και επεξήγηση κώδικα:
Η συχνότητα ορίζεται ως αριθμός κύκλων ανά δευτερόλεπτο. Μπορεί επίσης να οριστεί ως αμοιβαία του συνολικού χρόνου «Τ». Σε αυτό το έργο θα μετρήσουμε τον αριθμό των παλμών που εισέρχονται στο Port 3.5 του 8051 μικροελεγκτή και θα το εμφανίσουμε σε οθόνη LCD 16 * 2. Βασικά λοιπόν έχουμε τη μέτρηση της συχνότητας του σήματος στη θύρα 3.5 του 8051. Εδώ έχουμε χρησιμοποιήσει τσιπ AT89S52 8051, και ένα 555 IC χρησιμοποιείται σε λειτουργία Astable για τη δημιουργία του δείγματος παλμού για επίδειξη. Έχουμε δημιουργήσει προηγουμένως μετρητή συχνότητας χρησιμοποιώντας το Arduino.
Απαιτούμενα στοιχεία:
- 8051 μικροελεγκτής (AT89S52)
- Οθόνη LCD 16 * 2
- Πηγή συχνότητας (χρονοδιακόπτης 555)
- Ποτενσιόμετρο
- Σύνδεση καλωδίων
Διάγραμμα κυκλώματος:
Χρησιμοποιώντας TIMER του 8051 για μέτρηση συχνότητας:
Ο μικροελεγκτής 8051 είναι ένας μικροελεγκτής 8 bit που έχει 128 bytes σε μνήμη RAM, 4K bytes σε chip ROM, δύο χρονοδιακόπτες, μία σειριακή θύρα και τέσσερις θύρες 8bit. Ο μικροελεγκτής 8052 είναι μια επέκταση του μικροελεγκτή. Για να ρυθμίσετε τη θύρα 3.5 ως μετρητή, οι τιμές μητρώου TMOD ορίζονται σε 0x51. Το παρακάτω σχήμα δείχνει τον καταχωρητή TMOD.
ΠΥΛΗ | Γ / Τ | Μ1 | Μ0 | ΠΥΛΗ | Γ / Τ | Μ1 | Μ2 |
ΧΡΟΝΟΣ 1 | ΧΡΟΝΟΣ 0 |
GATE - όταν έχει ρυθμιστεί το GATE, ο χρονοδιακόπτης ή ο μετρητής ενεργοποιείται μόνο όταν ο πείρος INTx είναι ΥΨΗΛΟΣ και ο πείρος ελέγχου TRx έχει ρυθμιστεί. Όταν εκκαθαριστεί το GATE, ο χρονοδιακόπτης ενεργοποιείται όποτε το bit ελέγχου TRx είναι SET.
C / T - όταν C / T = 0, λειτουργεί ως χρονοδιακόπτης. Όταν C / T = 1, λειτουργεί ως μετρητής.
Τα M1 και M0 υποδεικνύουν τον τρόπο λειτουργίας.
Για TMOD = 0x51, ο χρονοδιακόπτης1 λειτουργεί ως μετρητής και λειτουργεί στη λειτουργία 1 (16bit).
Η οθόνη LCD 16 * 2 χρησιμοποιείται για την εμφάνιση της συχνότητας του σήματος σε Hertz (Hz). Εάν είστε νέοι με οθόνη LCD 16x2, ελέγξτε περισσότερα για τις καρφίτσες LCD 16x2 και τις εντολές της εδώ. Ελέγξτε επίσης τον τρόπο διασύνδεσης της οθόνης LCD με 8051.
555 χρονοδιακόπτης ως πηγή συχνότητας:
Η πηγή συχνότητας πρέπει να παράγει τετραγωνικά κύματα και το μέγιστο πλάτος περιορίζεται στα 5V, επειδή οι θύρες του 8051 μικροελεγκτή δεν μπορούν να χειριστούν τάση μεγαλύτερη από 5V. Η μέγιστη συχνότητα που μπορεί να μετρήσει είναι 655,35 KHz λόγω του περιορισμού μνήμης των καταχωρητών TH1 και TL1 (8bit το καθένα). Σε 100 χιλιοστά του δευτερολέπτου, τα TH1 και TL1 μπορούν να κρατήσουν έως και 65535 μετρήσεις. Ως εκ τούτου, η μέγιστη συχνότητα που μπορεί να μετρηθεί είναι 65535 * 10 = 655,35 KHz.
Σε αυτό το έργο μετρητή συχνότητας 8051, χρησιμοποιώ χρονοδιακόπτη 555 σε κατάσταση αστάθειας για την παραγωγή τετραγωνικών κυμάτων μεταβλητής συχνότητας Η συχνότητα του σήματος που παράγεται από το 555 IC, μπορεί να ποικίλει ρυθμίζοντας το ποτενσιόμετρο όπως φαίνεται στο βίντεο που δίνεται στο τέλος αυτού του Έργου.
Σε αυτό το έργο, ο Χρονοδιακόπτης1 (T1) μετρά τον αριθμό των παλμών που εισέρχονται στη θύρα 3.5 των 8051 μικροελεγκτών για 100 χιλιοστά του δευτερολέπτου. Οι τιμές καταμέτρησης θα αποθηκευτούν σε καταχωρητές TH1 και TL1 αντίστοιχα. Για να συνδυάσετε τις τιμές των καταχωρητών TH1 και TL1, χρησιμοποιείται ο παρακάτω τύπος.
Παλμοί = TH1 * (0x100) + TL1
Τώρα ο «παλμός» θα έχει αριθμό κύκλων σε 100 χιλιοστά του δευτερολέπτου. Αλλά η συχνότητα του σήματος ορίζεται ως αριθμός κύκλων ανά δευτερόλεπτο. Για να το μετατρέψετε σε συχνότητα, χρησιμοποιείται ο παρακάτω τύπος.
Παλμοί = Παλμοί * 10
Εργασία και επεξήγηση κώδικα:
Το πλήρες πρόγραμμα C για αυτόν τον μετρητή συχνότητας δίνεται στο τέλος αυτού του έργου. Ο κωδικός χωρίζεται σε μικρά μικρά κομμάτια και εξηγείται παρακάτω.
Για διασύνδεση LCD 16 * 2 με 8051 μικροελεγκτή, πρέπει να ορίσουμε ακίδες στις οποίες 16 * 2 lcd συνδέεται με 8051 μικροελεγκτή. Ο ακροδέκτης RS 16 * 2 lcd συνδέεται στο P2.7, ο ακροδέκτης RW 16 * 2 lcd συνδέεται στο P2.6 και ο ακροδέκτης E 16 * 2 lcd συνδέεται στο P2.5. Οι ακίδες δεδομένων συνδέονται στη θύρα 0 του 8051 μικροελεγκτή.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
Στη συνέχεια πρέπει να καθορίσουμε ορισμένες λειτουργίες που χρησιμοποιούνται στο πρόγραμμα. Η λειτουργία καθυστέρησης χρησιμοποιείται για τη δημιουργία καθορισμένης χρονικής καθυστέρησης. Η λειτουργία Cmdwrt χρησιμοποιείται για την αποστολή εντολών σε οθόνη 16 * 2 lcd. Η λειτουργία datawrt χρησιμοποιείται για την αποστολή δεδομένων σε οθόνη 16 * 2 lcd.
άκυρη καθυστέρηση (χωρίς υπογραφή int) άκυρο cmdwrt (χωρίς υπογραφή char). άκυρο datawrt (χωρίς υπογραφή char).
Σε αυτό το μέρος του κώδικα, στέλνουμε εντολές σε 16 * 2 lcd. Εντολές όπως ευκρινή οθόνη, αύξηση του δρομέα, αναγκάζουν τον κέρσορα στην αρχή της 1 ης γραμμής αποστέλλονται σε 16 * 2 LCD οθόνη ένα προς ένα μετά από κάποια καθορισμένη χρονική καθυστέρηση.
για (i = 0; i <5; i ++) {cmdwrt (cmd); καθυστέρηση (1) }
Σε αυτό το μέρος του κώδικα, ο χρονοδιακόπτης 1 διαμορφώνεται ως μετρητής και ο τρόπος λειτουργίας ορίζεται στη λειτουργία 1.
Ο χρονοδιακόπτης0 έχει ρυθμιστεί ως χρονοδιακόπτης και ο τρόπος λειτουργίας ορίζεται στη λειτουργία 1. Ο χρονοδιακόπτης 1 χρησιμοποιείται για τη μέτρηση του αριθμού των παλμών και ο χρονοδιακόπτης 0 χρησιμοποιείται για τη δημιουργία χρονικής καθυστέρησης. Οι τιμές TH1 και TL1 ορίζονται σε 0, για να διασφαλιστεί ότι η μέτρηση ξεκινά από το 0.
TMOD = 0x51; TL1 = 0; TH1 = 0;
Σε αυτό το μέρος του κώδικα, ο χρονοδιακόπτης δημιουργείται για 100 millisecond 100 χιλιοστά του δευτερολέπτου καθυστέρησης δημιουργείται χρησιμοποιώντας τη λειτουργία καθυστέρησης. Το TR1 = 1 είναι για την εκκίνηση του χρονοδιακόπτη και το TR1 = 0 είναι για διακοπή του χρονοδιακόπτη μετά από 100 χιλιοστά του δευτερολέπτου.
TR1 = 1; καθυστέρηση (100); TR1 = 0;
Σε αυτό το μέρος του κώδικα, οι τιμές μέτρησης που υπάρχουν στους καταχωρητές TH1 και TL1 συνδυάζονται και στη συνέχεια πολλαπλασιάζεται με 10 για να ληφθεί ο συνολικός αριθμός κύκλων σε 1 δευτερόλεπτο.
Παλμοί = TH1 * (0x100) + TL1; Παλμοί = παλμοί * 10;
Σε αυτό το μέρος του κώδικα, η τιμή συχνότητας μετατρέπεται σε μεμονωμένα byte για να διευκολύνεται η προβολή σε οθόνη 16 * 2 lcd.
d1 = παλμοί% 10; s1 = παλμοί% 100; s2 = παλμοί% 1000; s3 = παλμοί% 10000; s4 = παλμοί% 100000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10000; d6 = (παλμοί-s4) / 100000;
Σε αυτό το μέρος του κώδικα, μεμονωμένα ψηφία της τιμής συχνότητας μετατρέπονται σε μορφή ASCII και εμφανίζεται σε οθόνη 16 * 2 lcd.
Εάν (παλμοί> = 100000) δεδομέναwrt (0x30 + d6); εάν (παλμοί> = 10000) datawrt (0x30 + d5); εάν (παλμοί> = 1000) δεδομέναwrt (0x30 + d4); εάν (παλμοί> = 100) datawrt (0x30 + d3); εάν (παλμοί> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
Σε αυτό το μέρος του κώδικα, στέλνουμε εντολές σε οθόνη 16 * 2 lcd. Η εντολή αντιγράφεται στη θύρα 0 του 8051 μικροελεγκτή. Το RS είναι χαμηλό για εντολή εγγραφής. Το RW είναι χαμηλό για τη λειτουργία εγγραφής. Υψηλός έως χαμηλός παλμός εφαρμόζεται στον πείρο ενεργοποίησης (Ε) για να ξεκινήσει η λειτουργία εγγραφής εντολών.
άκυρο cmdwrt (χωρίς υπογραφή char x) {P0 = x; rs = 0; rw = 0; en = 1; καθυστέρηση (1) en = 0; }
Σε αυτό το μέρος του κώδικα, στέλνουμε δεδομένα σε οθόνη 16 * 2 lcd. Τα δεδομένα αντιγράφονται στη θύρα 0 του 8051 μικροελεγκτή. Το RS είναι υψηλό για εγγραφή εντολών. Το RW είναι χαμηλό για τη λειτουργία εγγραφής. Ο υψηλός έως ο χαμηλός παλμός εφαρμόζεται στον πείρο ενεργοποίησης (Ε) για να ξεκινήσει η λειτουργία εγγραφής δεδομένων.
άκυρο datawrt (χωρίς υπογραφή char y) {P0 = y; rs = 1; rw = 0; en = 1; καθυστέρηση (1) en = 0; }
Έτσι μπορούμε να μετρήσουμε τη συχνότητα οποιουδήποτε σήματος χρησιμοποιώντας 8051 Microcontroller. Δείτε τον πλήρη κώδικα και το Demo Video παρακάτω.