- Απαιτούμενα στοιχεία:
- Διάγραμμα κυκλώματος:
- Μέτρηση θερμοκρασίας με LM35 χρησιμοποιώντας 8051:
- LCD 16x2:
- ADC0804 IC:
- Αισθητήρας θερμοκρασίας LM35:
- Επεξήγηση κώδικα:
Μερικές φορές οι άνθρωποι δυσκολεύονται να διαβάσουν τη θερμοκρασία από το αναλογικό θερμόμετρο λόγω διακυμάνσεων. Εδώ λοιπόν πρόκειται να δημιουργήσουμε ένα απλό Ψηφιακό θερμόμετρο χρησιμοποιώντας 8051 μικροελεγκτή στον οποίο ο αισθητήρας LM35 χρησιμοποιείται για τη μέτρηση της θερμοκρασίας. Χρησιμοποιήσαμε επίσης το LM35 για την κατασκευή ψηφιακού θερμομέτρου χρησιμοποιώντας Arduino, NodeMCU, PIC, Raspberry Pi και άλλους μικροελεγκτές.
Αυτό το έργο θα χρησιμεύσει επίσης ως κατάλληλη διασύνδεση του ADC0804 με 8051 και 16 * 2 LCD με 8051 μικροελεγκτή.
Απαιτούμενα στοιχεία:
- Πίνακας ανάπτυξης 8051
- Πίνακας ADC0804
- Οθόνη LCD 16 * 2
- Αισθητήρας LM35
- Ποτενσιόμετρο
- Καλώδια αλτών
Διάγραμμα κυκλώματος:
Το διάγραμμα κυκλώματος για ψηφιακό θερμόμετρο κύκλωμα χρησιμοποιώντας LM35 δίνεται παρακάτω:
Μέτρηση θερμοκρασίας με LM35 χρησιμοποιώντας 8051:
Ο μικροελεγκτής 8051 είναι ένας μικροελεγκτής 8 bit που έχει 128 bytes σε μνήμη RAM, 4K bytes σε chip ROM, δύο χρονοδιακόπτες, μία σειριακή θύρα και τέσσερις θύρες 8bit. Ο μικροελεγκτής 8052 είναι μια επέκταση του μικροελεγκτή. Ο παρακάτω πίνακας δείχνει τη σύγκριση 8051 μελών της οικογένειας.
χαρακτηριστικό |
8051 |
8052 |
ROM (σε byte) |
4K |
8 ΧΙΛ |
RAM (byte) |
128 |
256 |
Χρονόμετρα |
2 |
3 |
Καρφίτσες I / O |
32 |
32 |
Σειριακή θύρα |
1 |
1 |
Διακοπή πηγών |
6 |
8 |
LCD 16x2:
Η οθόνη LCD 16 * 2 είναι μια ευρέως χρησιμοποιούμενη οθόνη για ενσωματωμένες εφαρμογές. Ακολουθεί η σύντομη εξήγηση σχετικά με τις καρφίτσες και τη λειτουργία της οθόνης LCD 16 * 2. Υπάρχουν δύο πολύ σημαντικοί καταχωρητές μέσα στην οθόνη LCD. Είναι καταχωρητής δεδομένων και καταχωρητής εντολών. Ο καταχωρητής εντολών χρησιμοποιείται για την αποστολή εντολών όπως καθαρή οθόνη, δρομέας στο σπίτι κ.λπ., ο καταχωρητής δεδομένων χρησιμοποιείται για την αποστολή δεδομένων που θα εμφανίζονται σε οθόνη LCD 16 * 2. Στον παρακάτω πίνακα εμφανίζεται η περιγραφή των 16 * 2 lcd.
Καρφίτσα |
Σύμβολο |
Ι / Ο |
Περιγραφή |
1 |
Vss |
- |
Εδαφος |
2 |
Vdd |
- |
+5V τροφοδοτικό |
3 |
Θεω |
- |
Τροφοδοσία για έλεγχο της αντίθεσης |
4 |
RS |
Εγώ |
RS = 0 για το μητρώο εντολών, RS = 1 για μητρώο δεδομένων |
5 |
RW |
Εγώ |
R / W = 0 για εγγραφή, R / W = 1 για ανάγνωση |
6 |
μι |
Ι / Ο |
επιτρέπω |
7 |
Δ0 |
Ι / Ο |
Δίαυλος δεδομένων 8-bit (LSB) |
8 |
Δ1 |
Ι / Ο |
Δίαυλος δεδομένων 8-bit |
9 |
Δ2 |
Ι / Ο |
Δίαυλος δεδομένων 8-bit |
10 |
Δ3 |
Ι / Ο |
Δίαυλος δεδομένων 8-bit |
11 |
Δ4 |
Ι / Ο |
Δίαυλος δεδομένων 8-bit |
12 |
Δ5 |
Ι / Ο |
Δίαυλος δεδομένων 8-bit |
13 |
Δ6 |
Ι / Ο |
Δίαυλος δεδομένων 8-bit |
14 |
Δ7 |
Ι / Ο |
Δίαυλος δεδομένων 8-bit (MSB) |
15 |
ΕΝΑ |
- |
+ 5V για οπίσθιο φωτισμό |
16 |
κ |
- |
Εδαφος |
Στον παρακάτω πίνακα εμφανίζονται κωδικοί εντολών LCD που χρησιμοποιούνται συχνά.
Κωδικός (hex) |
Περιγραφή |
01 |
Εκκαθάριση οθόνης |
06 |
Δείκτης αύξησης (δεξιά μετατόπιση) |
0Α |
Απενεργοποιημένη, ο δρομέας είναι ενεργοποιημένος |
0C |
Ενεργοποίηση, απενεργοποιημένος δρομέας |
0F |
Η οθόνη είναι ενεργοποιημένη, ο δρομέας αναβοσβήνει |
80 |
Αναγκάστε τον κέρσορα στην αρχή της 1 ης γραμμής |
Γ0 |
Αναγκάστε τον κέρσορα στην αρχή της 2 ης γραμμής |
38 |
2 γραμμές και μήτρα 5 * 7 |
ADC0804 IC:
Το ADC0804 IC είναι ένα 8-bit παράλληλο ADC στην οικογένεια της σειράς ADC0800 από το National Semiconductor. Λειτουργεί με +5 βολτ και έχει ανάλυση 8 bit. Το μέγεθος του βήματος και το εύρος Vin ποικίλλουν για διαφορετικές τιμές του Vref / 2. Ο παρακάτω πίνακας δείχνει τη σχέση μεταξύ Vref / 2 και Vin range.
Vref / 2 (V) |
Vin (V) |
Μέγεθος βημάτων (mV) |
Άνοιξε |
0 έως 5 |
19.53 |
2.0 |
0 έως 4 |
15.62 |
1.5 |
0 έως 3 |
11.71 |
1.28 |
0 έως 2.56 |
10 |
Στην περίπτωσή μας το Vref / 2 συνδέεται στα 1,28 βολτ, οπότε το μέγεθος του βήματος είναι 10mV. Για ADC0804 το μέγεθος του βήματος υπολογίζεται ως (2 * Vref / 2) / 256.
Ο ακόλουθος τύπος χρησιμοποιείται για τον υπολογισμό της τάσης εξόδου:
Dout = μέγεθος Vin / step
Όπου το Dout είναι ψηφιακή έξοδος δεδομένων σε δεκαδικό, Vin = αναλογική τάση εισόδου και μέγεθος βήματος (ανάλυση) είναι η μικρότερη αλλαγή. Μάθετε περισσότερα για το ADC0804 εδώ, επίσης ελέγξτε τη διασύνδεση του ADC0808 με το 8051.
Αισθητήρας θερμοκρασίας LM35:
Το LM35 είναι ένας αισθητήρας θερμοκρασίας του οποίου η τάση εξόδου είναι γραμμικά ανάλογη με τη θερμοκρασία Κελσίου. Το LM35 έρχεται ήδη βαθμονομημένο και ως εκ τούτου δεν απαιτεί εξωτερική βαθμονόμηση. Εξάγει 10mV για κάθε βαθμό θερμοκρασίας Κελσίου.
Ο αισθητήρας LM35 παράγει τάση που αντιστοιχεί στη θερμοκρασία. Αυτή η τάση μετατρέπεται σε ψηφιακή (0 έως 256) από ADC0804 και τροφοδοτείται σε 8051 μικροελεγκτή. Ο μικροελεγκτής 8051 μετατρέπει αυτήν την ψηφιακή τιμή σε θερμοκρασία σε βαθμούς Κελσίου. Στη συνέχεια, αυτή η θερμοκρασία μετατρέπεται σε μορφή ascii που είναι κατάλληλη για προβολή. Αυτές οι τιμές ascii τροφοδοτούνται σε 16 * 2 lcd που εμφανίζει τη θερμοκρασία στην οθόνη του. Αυτή η διαδικασία επαναλαμβάνεται μετά από καθορισμένο διάστημα.
Ακολουθεί η εικόνα ρύθμισης για το ψηφιακό θερμόμετρο LM35 χρησιμοποιώντας το 8051:
Μπορείτε να βρείτε όλα τα ψηφιακά θερμόμετρα με βάση το LM35 εδώ.
Επεξήγηση κώδικα:
Το πλήρες πρόγραμμα C για αυτό το Ψηφιακό Θερμόμετρο χρησιμοποιώντας το LM35 παρέχεται στο τέλος αυτού του έργου. Ο κωδικός χωρίζεται σε μικρά μικρά κομμάτια και εξηγείται παρακάτω.
Για διασύνδεση 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; // Εγγραφή Επιλέξτε pin (RS) 16 * 2 lcd sbit rw = P2 ^ 6; // Καρφίτσα ανάγνωσης / εγγραφής (RW) 16 * 2 lcd sbit en = P2 ^ 5; // Ενεργοποίηση (E) ακροδέκτης 16 * 2 lcd
Ομοίως, για διασύνδεση ADC0804 με μικροελεγκτή 8051, πρέπει να ορίσουμε ακίδες στις οποίες συνδέεται το ADC0804 με μικροελεγκτή 8051. Ο ακροδέκτης RD του ADC0804 συνδέεται στο P3.0, ο ακροδέκτης WR του ADC0804 συνδέεται στο P3.1 και ο ακροδέκτης INTR του ADC0804 είναι συνδεδεμένος στο P3.2. Οι ακίδες δεδομένων συνδέονται στη θύρα 1 του 8051 μικροελεγκτή.
sbit rd_adc = P3 ^ 0; // Read (RD) pin ADC0804 sbit wr_adc = P3 ^ 1; // Εγγραφή (WR) ακροδέκτη ADC0804 sbit intr_adc = P3 ^ 2; // Καρφίτσα διακοπής (INTR) ADC0804
Στη συνέχεια πρέπει να καθορίσουμε ορισμένες λειτουργίες που χρησιμοποιούνται στο πρόγραμμα. Καθυστέρηση λειτουργία χρησιμοποιείται για να δημιουργήσει καθορισμένη χρονική καθυστέρηση, γ mdwrt λειτουργία χρησιμοποιείται για να στέλνει εντολές στο 16 * 2 οθόνη LCD, datawrt λειτουργία χρησιμοποιείται για να στείλει τα δεδομένα σε 16 * 2 οθόνη LCD και convert_display λειτουργία χρησιμοποιείται για τη μετατροπή των δεδομένων ADC σε θερμοκρασία και για προβολή σε οθόνη 16 * 2 lcd.
άκυρη καθυστέρηση (χωρίς υπογραφή int) // λειτουργία για δημιουργία καθυστέρησης κενό cmdwrt (χωρίς υπογραφή char); // λειτουργία για την αποστολή εντολών σε οθόνη 16 * 2 lcd άκυρη δεδομέναwrt (χωρίς υπογραφή char). // λειτουργία για την αποστολή δεδομένων σε οθόνη 16 * 2 lcd void convert_display (unsigned char). // λειτουργία για τη μετατροπή της τιμής ADC σε θερμοκρασία και εμφάνιση στην οθόνη 16 * 2 lcd
Στο κάτω μέρος του κώδικα, στέλνουμε εντολές σε 16 * 2 lcd. Εντολές όπως ευκρινή οθόνη, αύξηση του δρομέα, αναγκάζουν τον κέρσορα στην αρχή της 1 ης γραμμής αποστέλλονται σε 16 * 2 LCD οθόνη ένα προς ένα μετά από κάποια καθορισμένη χρονική καθυστέρηση.
για (i = 0; i <5; i ++) // αποστολή εντολών σε 16 * 2 lcd εμφανίζει μία εντολή τη φορά {cmdwrt (cmd); // λειτουργία κλήσης για αποστολή εντολών σε καθυστέρηση εμφάνισης 16 * 2 lcd (1). }
Σε αυτό το μέρος του κώδικα, στέλνουμε δεδομένα σε 16 * 2 lcd. Τα δεδομένα που θα εμφανίζονται σε οθόνη 16 * 2 lcd αποστέλλονται για προβολή ένα προς ένα μετά από κάποια καθορισμένη χρονική καθυστέρηση.
για (i = 0; i <12; i ++) // αποστολή δεδομένων σε 16 * 2 lcd εμφάνιση ενός χαρακτήρα κάθε φορά {datawrt (data1); // λειτουργία κλήσης για αποστολή δεδομένων σε καθυστέρηση εμφάνισης 16 * 2 lcd (1). } Σε αυτό το μέρος του κώδικα μετατρέπουμε την αναλογική τάση που παράγεται από τον αισθητήρα LM35 σε ψηφιακά δεδομένα και στη συνέχεια μετατρέπεται σε θερμοκρασία και εμφανίζεται σε οθόνη 16 * 2 lcd. Για να ξεκινήσει η μετατροπή ADC0804 πρέπει να στείλουμε έναν χαμηλό σε υψηλό παλμό στον ακροδέκτη WR του ADC0804, τότε πρέπει να περιμένουμε το τέλος της μετατροπής. Το INTR γίνεται χαμηλό στο τέλος της μετατροπής. Μόλις το INTR γίνει χαμηλό, το RD γίνεται χαμηλό για να αντιγράψει τα ψηφιακά δεδομένα στη θύρα 0 του 8051 μικροελεγκτή. Μετά από καθορισμένη χρονική καθυστέρηση, ξεκινά ο επόμενος κύκλος. Αυτή η διαδικασία επαναλαμβάνεται για πάντα.
ενώ (1) // επανάληψη για πάντα {wr_adc = 0; // στείλτε ΧΑΜΗΛΟ σε ΥΨΗΛΟ παλμό με καθυστέρηση πείρου WR (1). wr_adc = 1; ενώ (intr_adc == 1); // περιμένετε το τέλος της μετατροπής rd_adc = 0; // make RD = 0 για να διαβάσετε τα δεδομένα από την τιμή ADC0804 = P1; // αντιγραφή ADC data convert_display (τιμή); // λειτουργία κλήσης για μετατροπή δεδομένων ADC σε θερμοκρασία και εμφάνιση σε καθυστέρηση εμφάνισης 16 * 2 lcd (1000). // διάστημα μεταξύ κάθε κύκλου rd_adc = 1; // make RD = 1 για τον επόμενο κύκλο}
Στο κάτω μέρος του κώδικα, στέλνουμε εντολές σε οθόνη 16 * 2 lcd. Η εντολή αντιγράφεται στη θύρα 0 του 8051 μικροελεγκτή. Το RS είναι χαμηλό για εντολή εγγραφής. Το RW είναι χαμηλό για τη λειτουργία εγγραφής. Υψηλός έως χαμηλός παλμός εφαρμόζεται στον πείρο ενεργοποίησης (Ε) για να ξεκινήσει η λειτουργία εγγραφής εντολών.
άκυρο cmdwrt (χωρίς υπογραφή char x) {P0 = x; // στείλτε την εντολή στη θύρα 0 στην οποία είναι συνδεδεμένο 16 * 2 lcd rs = 0; // make RS = 0 για την εντολή rw = 0; // make RW = 0 για εγγραφή en = 1; // στείλτε έναν παλμό ΥΨΗΛΟΥ προς ΧΑΜΗΛΟ στον πινέλο Ενεργοποίησης (Ε) για να ξεκινήσει η καθυστέρηση λειτουργίας σύνταξης εντολών en = 0; }
Σε αυτό το μέρος του κώδικα, στέλνουμε δεδομένα σε οθόνη 16 * 2 lcd. Τα δεδομένα αντιγράφονται στη θύρα 0 του 8051 μικροελεγκτή. Το RS είναι υψηλό για εγγραφή εντολών. Το RW είναι χαμηλό για τη λειτουργία εγγραφής. Ο υψηλός έως ο χαμηλός παλμός εφαρμόζεται στον πείρο ενεργοποίησης (Ε) για να ξεκινήσει η λειτουργία εγγραφής δεδομένων.
άκυρο datawrt (χωρίς υπογραφή char y) {P0 = y; // στείλτε τα δεδομένα στη θύρα 0 στην οποία είναι συνδεδεμένα 16 * 2 lcd rs = 1; // make RS = 1 για την εντολή rw = 0; // make RW = 0 για εγγραφή en = 1; // στείλτε έναν παλμό ΥΨΗΛΟΥ προς ΧΑΜΗΛΟ στον ακροδέκτη Ενεργοποίηση (Ε) για να ξεκινήσει η καθυστέρηση λειτουργίας εγγραφής δεδομένων en = 0; }
Σε αυτό το μέρος του κώδικα, μετατρέπουμε τα ψηφιακά δεδομένα σε θερμοκρασία και τα εμφανίζουμε σε οθόνη 16 * 2 lcd.
void convert_display (τιμή χωρίς υπογραφή char) {unsigned char x1, x2, x3; cmdwrt (0xc6); // εντολή για να ρυθμίσετε τον κέρσορα στην 6η θέση της 2ης γραμμής σε 16 * 2 lcd x1 = (τιμή / 10); // διαιρέστε την τιμή με 10 και αποθηκεύστε το πηλίκο στη μεταβλητή x1 x1 = x1 + (0x30). // μετατρέψτε τη μεταβλητή x1 σε ascii προσθέτοντας 0x30 x2 = τιμή% 10; // διαιρέστε την τιμή με 10 και αποθηκεύστε το υπόλοιπο στη μεταβλητή x2 x2 = x2 + (0x30). // μετατρέψτε τη μεταβλητή x2 σε ascii προσθέτοντας 0x30 x3 = 0xDF; // τιμή ascii του βαθμού (°) σύμβολο δεδομένων (x1); // θερμοκρασία εμφάνισης σε 16 * 2 lcd display datawrt (x2); datawrt (x3); datawrt («C»); }
Επίσης, ελέγξτε άλλα θερμόμετρα χρησιμοποιώντας LM35 με διαφορετικούς μικροελεγκτές:
- Ψηφιακό θερμόμετρο χρησιμοποιώντας Arduino και LM35
- Μέτρηση θερμοκρασίας με χρήση μικροελεγκτή LM35 και AVR
- Μέτρηση θερμοκρασίας δωματίου με Raspberry Pi