Το DS18B20 είναι ένας ψηφιακός αισθητήρας θερμοκρασίας που χρησιμοποιεί έναν μόνο χρονισμό διαύλου για επικοινωνία με τον κεντρικό υπολογιστή. Μόνο 1 Απαιτείται καλώδιο για την ολοκλήρωση της ανάγνωσης των δεδομένων θερμοκρασίας;
Το DS18B20 διαθέτει ενσωματωμένο σειριακό αριθμό προϊόντος 64-bit για εύκολη αναγνώριση. Μπορούν να συνδεθούν πολλαπλοί αισθητήρες DS18B20 1 Σύρμα, και μέσω ελέγχου ταυτότητας 64-bit, Οι πληροφορίες θερμοκρασίας που συλλέγονται από διαφορετικούς αισθητήρες μπορούν να διαβαστούν χωριστά.
Εισαγωγή στο DS18B20
2.1 Κύρια χαρακτηριστικά του DS18B20
1. Πλήρως ψηφιακή μετατροπή και έξοδος θερμοκρασίας.
2. Προηγμένη επικοινωνία δεδομένων ενός διαύλου.
3. Ανάλυση έως και 12 bit, με ακρίβεια έως ±0,5 βαθμούς Κελσίου.
4. Ο μέγιστος κύκλος εργασίας σε ανάλυση 12 bit είναι 750 χιλιοστά του δευτερολέπτου.
5. Μπορεί να επιλεγεί η λειτουργία παρασιτικής λειτουργίας.
6. Το εύρος θερμοκρασίας ανίχνευσης είναι –55°C ~+125°C (–67° F ~+257° F).
7. Ενσωματωμένο EEPROM, λειτουργία συναγερμού ορίου θερμοκρασίας.
8. 64-bit φωτολιθογραφία ROM, ενσωματωμένος σειριακός αριθμός προϊόντος, βολικό για σύνδεση πολλών μηχανών.
9. Διάφορες φόρμες συσκευασίας, προσαρμοστούν σε διαφορετικά συστήματα υλικού.
2.2 Λειτουργία pin DS18B20
Γείωση τάσης GND;
Μονός δίαυλος δεδομένων DQ;
Τάση τροφοδοσίας VDD;
Κενός πείρος NC;
2.3 Αρχή και εφαρμογή DS18B20
Η ανίχνευση θερμοκρασίας DS18B20 και η έξοδος ψηφιακών δεδομένων είναι πλήρως ενσωματωμένα σε ένα τσιπ, έτσι έχει ισχυρότερη ικανότητα κατά των παρεμβολών. Ο ένας κύκλος εργασίας του μπορεί να χωριστεί σε δύο μέρη, δηλαδή ανίχνευση θερμοκρασίας και επεξεργασία δεδομένων.
18Το B20 έχει τρεις μορφές πόρων μνήμης. Είναι: Μνήμη ROM μόνο για ανάγνωση, χρησιμοποιείται για την αποθήκευση του κωδικού DS18B20ID; το πρώτο 8 τα bit είναι κώδικας σειράς μιας γραμμής (Ο κωδικός DS18B20 είναι 19H), τα ακόλουθα 48 bit είναι ο μοναδικός σειριακός αριθμός του τσιπ; το τελευταίο 8 τα bit είναι ο κωδικός CRC (έλεγχος απόλυσης) των παραπάνω 56 κομμάτια. Τα δεδομένα ορίζονται κατά την παραγωγή και δεν μπορούν να αλλάξουν από τον χρήστη. Το DS18B20 έχει συνολικά 64 bits της ROM.
Καταχωρητής δεδομένων RAM, χρησιμοποιείται για εσωτερικούς υπολογισμούς και πρόσβαση σε δεδομένα, τα δεδομένα χάνονται μετά από διακοπή ρεύματος, Το DS18B20 έχει συνολικά 9 byte μνήμης RAM, κάθε byte είναι 8 κομμάτια. Το πρώτο και το δεύτερο byte είναι οι πληροφορίες τιμής δεδομένων μετά τη μετατροπή θερμοκρασίας; the third and fourth bytes are the mirror image of the user’s EEPROM (commonly used for temperature alarm value storage). Its value will be refreshed when the power is reset. The fifth byte is the mirror image of the user’s third EEPROM. The 6th, 7ου, and 8th bytes are count registers, which are designed to allow users to obtain higher temperature resolution. They are also temporary storage units for internal temperature conversion and calculation. The 9th byte is the CRC code of the first 8 byte. EEPROM is a non-volatile memory used to store data that needs to be saved for a long time, upper and lower temperature alarm values, and verification data. Το DS18B20 έχει συνολικά 3 bits of EEPROM, and there are mirror images in RAM to facilitate user operation.
DS18B20 works in 12-bit resolution mode by default. Τα δεδομένα 12 bit που λαμβάνονται μετά τη μετατροπή αποθηκεύονται σε δύο RAM 8 bit του DS18B20 (τα δύο πρώτα byte). Το πρώτο 5 τα bit στο δυαδικό είναι bit πρόσημου. Εάν η μετρούμενη θερμοκρασία είναι μεγαλύτερη από 0, αυτοί 5 bits είναι 0. Απλώς πολλαπλασιάστε τη μετρούμενη τιμή επί 0.0625 για να πάρετε την πραγματική θερμοκρασία. Εάν η θερμοκρασία είναι μικρότερη από 0, αυτοί 5 bits είναι 1. Η μετρούμενη τιμή πρέπει να αντιστραφεί, προστέθηκε από 1, και μετά πολλαπλασιάζεται επί 0.0625 για να πάρετε την πραγματική θερμοκρασία. Ή χρησιμοποιήστε τη λειτουργία bit για εξαγωγή θερμοκρασίας: τα δεκαδικά ψηφία καταλαμβάνουν το κάτω 4 κομμάτια, και τα πάνω bits είναι ακέραια bit (αρνητικοί αριθμοί δεν λαμβάνονται υπόψη).
2.4 Πίνακας οδηγιών ROM chip DS18B20
1. Διαβάστε τη ROM [33H] (η δεκαεξαδική λέξη εντολής βρίσκεται σε αγκύλες).
Αυτή η εντολή επιτρέπει στον ελεγκτή διαύλου να διαβάσει τη ROM 64-bit του DS18B20. Αυτή η οδηγία μπορεί να χρησιμοποιηθεί μόνο όταν υπάρχει μόνο ένα DS18B20 στο δίαυλο. Εάν είναι συνδεδεμένα περισσότερα από ένα, θα προκύψουν συγκρούσεις δεδομένων κατά την επικοινωνία.
2. atch ROM [55H]
Αυτή η οδηγία ακολουθείται από έναν σειριακό αριθμό 64-bit που εκδίδεται από τον ελεγκτή. Όταν υπάρχουν πολλά DS18B20 στο λεωφορείο, Μόνο το τσιπ με τον ίδιο σειριακό αριθμό με αυτό που εκδόθηκε από τον ελεγκτή μπορεί να απαντήσει, και οι άλλες μάρκες θα περιμένουν για την επόμενη επαναφορά. Αυτή η οδηγία είναι κατάλληλη για σύνδεση μονού και πολλαπλών τσιπ.
3. Παράλειψη ROM [CCH]
Αυτή η οδηγία κάνει το τσιπ να μην ανταποκρίνεται στον κωδικό ROM. Στην περίπτωση ενός μόνο λεωφορείου, αυτή η οδηγία μπορεί να χρησιμοποιηθεί για εξοικονόμηση χρόνου. Εάν αυτή η οδηγία χρησιμοποιείται όταν είναι συνδεδεμένα πολλά τσιπ, θα προκύψουν συγκρούσεις δεδομένων, με αποτέλεσμα λάθη.
4. Αναζήτηση ROM [F0H]
Αφού αρχικοποιηθεί το τσιπ, η εντολή αναζήτησης επιτρέπει την αναγνώριση της ROM 64-bit όλων των συσκευών με εξάλειψη όταν συνδέονται πολλαπλά τσιπ στο δίαυλο.
5. Αναζήτηση συναγερμού [ΚΑΘΕ]
Στην περίπτωση πολλαπλών τσιπ, η εντολή αναζήτησης τσιπ συναγερμού ανταποκρίνεται μόνο σε τσιπ που πληρούν την συνθήκη συναγερμού θερμοκρασίας υψηλότερη από TH ή μικρότερη από TL. Όσο το τσιπ δεν είναι απενεργοποιημένο, η κατάσταση συναγερμού θα διατηρηθεί μέχρι να μετρηθεί ξανά η θερμοκρασία και να μην επιτευχθεί η κατάσταση συναγερμού.
6. Γράψτε το Scratchpad [4EH]
Αυτή είναι η οδηγία για την εγγραφή δεδομένων στη μνήμη RAM. Τα δύο byte δεδομένων που γράφτηκαν στη συνέχεια θα αποθηκευτούν στη διεύθυνση 2 (TH του συναγερμού RAM) και διεύθυνση 3 (TL μνήμης RAM συναγερμού). Η διαδικασία εγγραφής μπορεί να τερματιστεί με ένα σήμα επαναφοράς.
7. Διαβάστε το Scratchpad (ανάγνωση δεδομένων από τη μνήμη RAM) [BEH]
Αυτή η οδηγία θα διαβάσει δεδομένα από τη μνήμη RAM, ξεκινώντας από τη διεύθυνση 0 και μέχρι τη διεύθυνση 9, ολοκληρώνοντας την ανάγνωση του συνόλου των δεδομένων RAM. Το τσιπ επιτρέπει στο σήμα επαναφοράς να τερματίσει τη διαδικασία ανάγνωσης, ήτοι, Τα επόμενα περιττά byte μπορούν να αγνοηθούν για να μειωθεί ο χρόνος ανάγνωσης.
8. Αντιγράψτε το Scratchpad (αντιγράψτε τα δεδομένα RAM στην EEPROM) [48H]
Αυτή η οδηγία αποθηκεύει τα δεδομένα στη μνήμη RAM σε EEPROM, έτσι ώστε τα δεδομένα να μην χαθούν όταν είναι απενεργοποιημένη. Δεδομένου ότι το τσιπ είναι απασχολημένο με την επεξεργασία αποθήκευσης EEPROM, όταν ο ελεγκτής στέλνει μια χρονική θυρίδα ανάγνωσης, τις εξόδους του διαύλου “0”, και όταν ολοκληρωθούν οι εργασίες αποθήκευσης, θα βγει το λεωφορείο “1”.
Σε παρασιτική λειτουργία, πρέπει να χρησιμοποιηθεί ένα ισχυρό pull-up αμέσως μετά την έκδοση αυτής της εντολής και να διατηρηθεί για τουλάχιστον 10 MS για να διατηρηθεί η λειτουργία του τσιπ.
9. Μετατροπή Τ (μετατροπή θερμοκρασίας) [44H]
Αφού λάβετε αυτή την οδηγία, το τσιπ θα εκτελέσει μια μετατροπή θερμοκρασίας και θα αποθηκεύσει την τιμή θερμοκρασίας που έχει μετατραπεί στην 1η και 2η διεύθυνση της μνήμης RAM. Δεδομένου ότι το τσιπ είναι απασχολημένο με την επεξεργασία μετατροπής θερμοκρασίας, όταν ο ελεγκτής στέλνει μια χρονική θυρίδα ανάγνωσης, τις εξόδους του διαύλου “0”, και όταν ολοκληρωθούν οι εργασίες αποθήκευσης, θα βγει το λεωφορείο “1”. Σε παρασιτική λειτουργία, πρέπει να χρησιμοποιηθεί ένα ισχυρό pull-up αμέσως μετά την έκδοση αυτής της εντολής και να διατηρηθεί για τουλάχιστον 500 MS για να διατηρηθεί η λειτουργία του τσιπ.
10. Ανάκληση EEPROM (Αντιγράψτε την τιμή συναγερμού στο EEPROM στη μνήμη RAM) [B8H]
Αυτή η οδηγία αντιγράφει την τιμή συναγερμού στο EEPROM στο 3ο και 4ο byte στη μνήμη RAM. Δεδομένου ότι το τσιπ είναι απασχολημένο με την επεξεργασία αντιγραφής, όταν ο ελεγκτής στέλνει μια χρονική θυρίδα ανάγνωσης, τις εξόδους του διαύλου “0”, και όταν ολοκληρωθούν οι εργασίες αποθήκευσης, τις εξόδους του διαύλου “1”. Εξάλλου, αυτή η εντολή θα εκτελεστεί αυτόματα όταν το τσιπ ενεργοποιηθεί και γίνει επαναφορά. Τοιουτοτροπώς, τα δύο bit byte συναγερμού στη μνήμη RAM θα είναι πάντα η κατοπτρική εικόνα των δεδομένων στο EEPROM.
11. Διαβάστε το Τροφοδοτικό (Διακόπτης λειτουργίας λειτουργίας) [B4H]
Αφού εκδοθεί αυτή η οδηγία, εκδίδεται κενό χρόνου ανάγνωσης, και το τσιπ θα επιστρέψει τη λέξη κατάστασης ισχύος. “0” είναι το παρασιτικό κράτος εξουσίας και “1” είναι η εξωτερική κατάσταση ισχύος.
2.5 DS18B20 Διάγραμμα χρονισμού
2.5.1 DS18B20 Διάγραμμα σχέσης επαναφοράς και απόκρισης
Πριν από κάθε επικοινωνία πρέπει να γίνεται επαναφορά. Ο χρόνος επαναφοράς, χρόνος αναμονής, και ο χρόνος απόκρισης θα πρέπει να προγραμματιστεί αυστηρά σύμφωνα με το χρονοδιάγραμμα.
DS18B20 κενό χρόνου ανάγνωσης και εγγραφής: Η ανάγνωση και η εγγραφή δεδομένων DS18B20 επιβεβαιώνεται από το bit επεξεργασίας χρονικού διαστήματος και τη λέξη εντολής για ανταλλαγή πληροφοριών.
2.5.2 Γράψτε δεδομένα 0 και δεδομένα 1 στο DS18B20
Στα πρώτα 15uS του χρονικού διαστήματος δεδομένων εγγραφής, το λεωφορείο πρέπει να τραβηχτεί χαμηλά από τον ελεγκτή, και μετά θα είναι ο χρόνος δειγματοληψίας τσιπ για τα δεδομένα διαύλου. Ο χρόνος δειγματοληψίας είναι 15~60uS. Εάν ο ελεγκτής τραβήξει το δίαυλο ψηλά κατά τη διάρκεια του χρόνου δειγματοληψίας, σημαίνει γραφή “1”, και αν ο ελεγκτής τραβήξει το λεωφορείο χαμηλά, σημαίνει γραφή “0”.
Κάθε bit μετάδοσης θα πρέπει να έχει ένα bit έναρξης χαμηλού επιπέδου τουλάχιστον 15uS, και τα μετέπειτα δεδομένα “0” ή “1” πρέπει να ολοκληρωθεί εντός 45 uS.
Ο χρόνος μετάδοσης ολόκληρου του bit θα πρέπει να διατηρείται στα 60~120uS, Διαφορετικά η κανονική επικοινωνία δεν μπορεί να είναι εγγυημένη.
Σημείωμα: Το DS18B20 διαβάζει και γράφει δεδομένα από το χαμηλό bit.
2.5.3 Ανάγνωση δεδομένων 0 και δεδομένα 1 από DS18B20
Ο χρόνος δειγματοληψίας του ελέγχου κατά τη διάρκεια του χρονικού διαστήματος ανάγνωσης θα πρέπει να είναι πιο ακριβής. Κατά τη διάρκεια του χρονικού διαστήματος ανάγνωσης, ο κεντρικός υπολογιστής πρέπει επίσης να δημιουργήσει ένα χαμηλό επίπεδο τουλάχιστον 1uS για να υποδείξει την έναρξη του χρόνου ανάγνωσης. Τότε, σε 15uS μετά την απελευθέρωση του λεωφορείου, το DS18B20 θα στείλει το εσωτερικό bit δεδομένων. Αυτή τη στιγμή, εάν ο έλεγχος διαπιστώσει ότι το λεωφορείο είναι ψηλά, σημαίνει διάβασμα “1”, και αν το λεωφορείο είναι χαμηλά, σημαίνει ανάγνωση δεδομένων “0”. Πριν διαβάσετε κάθε κομμάτι, ο ελεγκτής προσθέτει ένα σήμα έναρξης.
Σημείωμα: Το bit δεδομένων πρέπει να διαβαστεί εντός 15 uS από την έναρξη του κενού ανάγνωσης για να διασφαλιστεί η σωστή επικοινωνία.
Κατά την επικοινωνία, 8 κομμάτια από “0” ή “1” χρησιμοποιούνται ως byte, και η ανάγνωση ή η εγγραφή του byte ξεκινά από το χαμηλό bit.
2.5.4 Σειρά θερμοκρασίας ανάγνωσης μία φορά (μόνο ένα DS18B20 στο λεωφορείο)
1. Αποστολή σήματος επαναφοράς
2. Ανίχνευση σήματος απόκρισης
3. Αποστολή 0xCC
4. Αποστολή 0x44
5. Αποστολή σήματος επαναφοράς
6. Ανίχνευση σήματος απόκρισης
7. Γράψτε 0xcc
8. Γράψτε 0xbe
9. Βρόχος 8 φορές για να διαβάσετε το χαμηλό byte θερμοκρασίας
10. Βρόχος 8 φορές για να διαβάσετε το υψηλό byte θερμοκρασίας
11. Συνθέστε δεδομένα θερμοκρασίας 16-bit και επεξεργαστείτε
3. Κωδικός προγράμματος οδήγησης
3.1 DS18B20.γ
#συμπεριλαμβάνω “ds18b20.h”
/*
Λειτουργία: Αρχικοποίηση DS18B20
Σύνδεση υλικού: PB15
*/
άκυρο DS18B20_Init(κενός)
{
RCC->APB2ENR|=1<<3; //PB
GPIOB->CRH&=0x0FFFFFFFF;
GPIOB->CRH|=0x30000000;
GPIOB->ODR|=1<<15; //Τράβηγμα
}
/*
Λειτουργία: Ελέγξτε εάν υπάρχει η συσκευή DS18B20
Επιστρεφόμενη αξία: 1 σημαίνει ότι η συσκευή δεν υπάρχει 0 σημαίνει ότι η συσκευή είναι κανονική
*/
u8 DS18B20_CheckDevice(κενός) //Περιέχει επαναφορά παλμού, παλμό ανίχνευσης
{
DS18B20_OUTPUT_MODE();//Εκκίνηση σε λειτουργία εξόδου
DS18B20_OUT=0; //Δημιουργία παλμού επαναφοράς
DelayUs(750); //Δημιουργήστε χαμηλό επίπεδο 750us
DS18B20_OUT=1; //Λεωφορείο απελευθέρωσης
DelayUs(15); //Περιμένετε την απόκριση DS18B20
αν(DS18B20_CleckAck())//Ανίχνευση παλμού ύπαρξης
{
απόδοση 1;
}
απόδοση 0;
}
/*
Λειτουργία: Ανίχνευση παλμού ύπαρξης συσκευής DS18B20
Επιστρεφόμενη αξία: 1 υποδηλώνει σφάλμα 0 δείχνει φυσιολογικό
*/
u8 DS18B20_CleckAck(κενός)
{
u8 cnt=0;
DS18B20_INPUT_MODE();//Εκκίνηση σε λειτουργία εισαγωγής
ενώ(DS18B20_IN&&CNT<200) //Περιμένετε για παλμό ύπαρξης απόκρισης DS18B20
{
DelayUs(1);
cnt++;
}
αν(CNT>=200)απόδοση 1; //σφάλμα
cnt=0;
ενώ((!DS18B20_IN)&&CNT<240) //περιμένετε μέχρι το DS18B20 να απελευθερώσει το δίαυλο
{
DelayUs(1);
cnt++;
}
αν(CNT>=240)απόδοση 1; //σφάλμα
απόδοση 0;
}
/*
Λειτουργία: Γράψτε ένα byte
Πρώτα μάθετε πώς να γράφετε λίγο.
*/
άκυρο DS18B20_WriteByte(u8 cmd)
{
u8 i;
DS18B20_OUTPUT_MODE(); //Εκκίνηση σε λειτουργία εξόδου
για(i=0;εγώ<8;i++)
{
DS18B20_OUT=0; //Δημιουργία χρονικού διαστήματος εγγραφής (γράψε έναρξη)
DelayUs(2);
DS18B20_OUT=cmd&0x01; //Αποστολή πραγματικού bit δεδομένων
DelayUs(60); //Περιμένετε να ολοκληρωθεί η εγγραφή
DS18B20_OUT=1; //Αφήστε το λεωφορείο και προετοιμαστείτε για την επόμενη μετάδοση
cmd>>=1; //Συνεχίστε να στέλνετε το επόμενο bit δεδομένων
}
}
/*
Λειτουργία: Διαβάστε ένα byte
Πρώτα μάθε να διαβάζεις λίγο.
*/
u8 DS18B20_ReadByte(κενός)
{
u8 i,δεδομένα=0;
για(i=0;εγώ<8;i++)
{
DS18B20_OUTPUT_MODE(); //Εκκίνηση σε λειτουργία εξόδου
DS18B20_OUT=0; //Δημιουργία χρονικού διαστήματος ανάγνωσης (ανάγνωση έναρξη)
DelayUs(2);
DS18B20_OUT=1; //Λεωφορείο απελευθέρωσης
DS18B20_INPUT_MODE(); //Εκκίνηση σε λειτουργία εισαγωγής
DelayUs(8); //Περιμένετε την έξοδο δεδομένων DS18B20
δεδομένα>>=1; //Γεμίστε λίγο ψηλά με 0, προεπιλογή είναι 0
αν(DS18B20_IN) δεδομένα|=0x80;
DelayUs(60);
DS18B20_OUT=1; //Λεωφορείο απελευθέρωσης, περιμένετε να διαβάσετε το επόμενο κομμάτι δεδομένων
}
επιστροφή δεδομένων;
}
/*
Λειτουργία: Διαβάστε τα δεδομένα θερμοκρασίας του DS18B20 μία φορά
Επιστρεφόμενη αξία: διαβάζονται τα δεδομένα θερμοκρασίας
Εξεταζόμενη κατάσταση: Υπάρχει μόνο ένα DS18B20 συνδεδεμένο στο λεωφορείο
*/
u16 DS18B20_ReadTemp(κενός)
{
u16 θερμοκρασία=0;
u8 temp_H,temp_L;
DS18B20_CheckDevice(); //Αποστολή παλμού επαναφοράς, ανίχνευση παλμού
DS18B20_WriteByte(0xCC); //Παράλειψη ανίχνευσης ακολουθίας ROM
DS18B20_WriteByte(0x44); //Ξεκινήστε μια μετατροπή θερμοκρασίας
//Περιμένετε να ολοκληρωθεί η μετατροπή της θερμοκρασίας
ενώ(DS18B20_ReadByte()!=0xFF){}
DS18B20_CheckDevice(); //Αποστολή παλμού επαναφοράς, ανίχνευση παλμού
DS18B20_WriteByte(0xCC); //Παράλειψη ανίχνευσης ακολουθίας ROM
DS18B20_WriteByte(0xBE); //Διαβάστε τη θερμοκρασία
temp_L=DS18B20_ReadByte(); //Διαβάστε δεδομένα χαμηλής θερμοκρασίας
temp_H=DS18B20_ReadByte(); //Διαβάστε δεδομένα υψηλής θερμοκρασίας
temp=temp_L|(temp_H<<8); //Θερμοκρασία σύνθεσης
θερμοκρασία επιστροφής;
}
3.2 DS18B20.h
#ifndef DS18B20_H
#ορίστε DS18B20_H
#συμπεριλαμβάνω “stm32f10x.h”
#συμπεριλαμβάνω “sys.h”
#συμπεριλαμβάνω “καθυστέρηση.η”
#συμπεριλαμβάνω “ds18b20.h”
#συμπεριλαμβάνω “usart.h”
/*Διεπαφή πακέτου*/
//Εκκινήστε το DS18B20 σε λειτουργία εισόδου
#ορίστε DS18B20_INPUT_MODE() {GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x80000000;}
//Εκκινήστε το DS18B20 σε λειτουργία εξόδου
#ορίστε DS18B20_OUTPUT_MODE(){GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x30000000;}
//Έξοδος θύρας IO DS18B20
#ορίστε το DS18B20_OUT PBout(15)
//Είσοδος θύρας IO DS18B20
#ορίστε το PBin DS18B20_IN(15)
//Δήλωση λειτουργίας
u8 DS18B20_CleckAck(κενός);
u8 DS18B20_CheckDevice(κενός);
άκυρο DS18B20_Init(κενός);
u16 DS18B20_ReadTemp(κενός);
u8 DS18B20_ReadByte(κενός);
άκυρο DS18B20_WriteByte(u8 cmd);
#endif
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 Λειτουργία καθυστέρησης
/*
Λειτουργία: Καθυστέρηση μέσα μας
*/
άκυρο DelayUs(σε εμάς)
{
#ifdef _SYSTICK_IRQ_
int i,ι;
για(i=0;iVAL=0; //Τιμή μετρητή CNT
SysTick->LOAD=9*εμάς; //9 σημαίνει 1us
SysTick->CTRL|=1<<0; //Έναρξη χρονοδιακόπτη
κάνω
{
tmp=SysTick->CTRL; //Κατάσταση ανάγνωσης
}ενώ((!(tmp&1<<16))&&(tmp&1<<0));
SysTick->VAL=0; //Τιμή μετρητή CNT
SysTick->CTRL&=~(1<<0); //Απενεργοποιήστε το χρονόμετρο
#endif
};i++)>
3.4 main.c Καλέστε το DS18B20 για να διαβάσετε τη θερμοκρασία και να το εκτυπώσετε στη σειριακή θύρα
#συμπεριλαμβάνω “stm32f10x.h”
#συμπεριλαμβάνω “ds18b20.h”
u8 DS18B20_ROM[8]; //Αποθηκεύστε τον κωδικό ROM 64-bit του DS18B20
int main(κενός)
{
u16 θερμ;
USARTx_Heat(USART1,72,115200);//Αρχικοποίηση σειριακής θύρας 1
DS18B20_Θερμότητα(); //Αρχικοποίηση DS18B20
/*1. Διαβάστε τον κωδικό ROM 64-bit του DS18B20*/
//Αποστολή παλμού επαναφοράς, ανίχνευση παλμού ύπαρξης
ενώ(DS18B20_CheckDevice())
{
εκτύπωση(“Η συσκευή DS18B20 δεν υπάρχει!\n”);
Καθυστέρηση κα(500);
}
//Στείλτε την εντολή για να διαβάσετε τον κωδικό ROM 64-bit
DS18B20_WriteByte(0x33);
//Βρόχος ανάγνωσης κώδικα ROM 64-bit
για(i=0;εγώ<8;i++)
{
DS18B20_ROM[εγώ]= DS18B20_ReadByte();
εκτύπωση(“DS18B20_ROM[%ρε]=0x%Xn”,εγώ,DS18B20_ROM[εγώ]);
}
ενώ(1)
{
/*2. Λειτουργήστε ταυτόχρονα όλα τα DS18B20 στο δίαυλο για να ξεκινήσετε τη μετατροπή της θερμοκρασίας*/
DS18B20_CheckDevice(); //Αποστολή παλμού επαναφοράς, ανίχνευση παλμού
DS18B20_WriteByte(0xCC); //Παράλειψη ανίχνευσης ακολουθίας ROM
DS18B20_WriteByte(0x44); //Ξεκινήστε μια μετατροπή θερμοκρασίας (αφήστε όλα τα DS18B20 του διαύλου να μετατρέψουν τη θερμοκρασία)
Καθυστέρηση κα(500); //Περιμένετε να ολοκληρωθούν όλες οι μετατροπές θερμοκρασίας DS18B20 στη γραμμή
/*3. Ενιαία στοχευμένη ένδειξη της θερμοκρασίας κάθε DS18B20*/
DS18B20_CheckDevice(); //Αποστολή παλμού επαναφοράς, ανίχνευση παλμού
DS18B20_WriteByte(0x55); //Αποστολή εντολής για αντιστοίχιση ROM
για(i=0;εγώ<8;i++) //Αποστολή κωδικού 64 bit
{
DS18B20_WriteByte(DS18B20_ROM[εγώ]);
}
DS18B20_WriteByte(0xBE); //Διαβάστε τη θερμοκρασία
temp=DS18B20_ReadByte(); //Διαβάστε δεδομένα θερμοκρασίας χαμηλής τάξης
θερμός|=DS18B20_ReadByte()<<8; //Διαβάστε δεδομένα θερμοκρασίας υψηλής τάξης
εκτύπωση(“temp1=%d.%dn”,θερμός>>4,θερμός&0xF);
εκτύπωση(“temp2=%fn”,θερμοκρασία*0,0625);
Καθυστέρηση κα(500);
}
}
English
Afrikaans
العربية
বাংলা
bosanski jezik
Български
Català
粤语
中文(简体)
中文(漢字)
Hrvatski
Čeština
Nederlands
Eesti keel
Suomi
Français
Deutsch
Ελληνικά
हिन्दी; हिंदी
Magyar
Bahasa Indonesia
Italiano
日本語
한국어
Latviešu valoda
Lietuvių kalba
македонски јазик
Bahasa Melayu
Norsk
پارسی
Polski
Português
Română
Русский
Cрпски језик
Slovenčina
Slovenščina
Español
Svenska
ภาษาไทย
Türkçe
Українська
اردو
Tiếng Việt







