ఉష్ణోగ్రత సెన్సార్ టెక్నాలజీ

STM32 కోసం DS18B20 డిజిటల్ ఉష్ణోగ్రత సెన్సార్ రూపకల్పన

DS18B20 ఉష్ణోగ్రత సెన్సింగ్ వైర్ స్టెయిన్‌లెస్ స్టీల్ ప్రోబ్ కిట్

DS18B20 అనేది హోస్ట్‌తో కమ్యూనికేట్ చేయడానికి ఒకే బస్ టైమింగ్‌ని ఉపయోగించే డిజిటల్ ఉష్ణోగ్రత సెన్సార్. మాత్రమే 1 ఉష్ణోగ్రత డేటా రీడింగ్‌ను పూర్తి చేయడానికి వైర్ అవసరం;

DS18B20 సులభంగా గుర్తింపు కోసం అంతర్నిర్మిత 64-బిట్ ఉత్పత్తి క్రమ సంఖ్యను కలిగి ఉంది. బహుళ DS18B20 సెన్సార్‌లను కనెక్ట్ చేయవచ్చు 1 వైర్, మరియు 64-బిట్ గుర్తింపు ప్రమాణీకరణ ద్వారా, వివిధ సెన్సార్ల నుండి సేకరించిన ఉష్ణోగ్రత సమాచారాన్ని విడిగా చదవవచ్చు.

DS18B20 ఉష్ణోగ్రత సెన్సింగ్ వైర్ స్టెయిన్‌లెస్ స్టీల్ ప్రోబ్ కిట్

DS18B20 ఉష్ణోగ్రత సెన్సింగ్ వైర్ స్టెయిన్‌లెస్ స్టీల్ ప్రోబ్ కిట్

DS18B20 ఉష్ణోగ్రత సెన్సార్ ప్రోబ్ TPE ఓవర్‌మోల్డింగ్ కిట్

DS18B20 ఉష్ణోగ్రత సెన్సార్ ప్రోబ్ TPE ఓవర్‌మోల్డింగ్ కిట్

1 వైర్ DS18B20 ఉష్ణోగ్రత సెన్సార్

1 వైర్ DS18B20 ఉష్ణోగ్రత సెన్సార్

DS18B20కి పరిచయం
2.1 DS18B20 యొక్క ప్రధాన లక్షణాలు
1. పూర్తిగా డిజిటల్ ఉష్ణోగ్రత మార్పిడి మరియు అవుట్‌పుట్.
2. అధునాతన సింగిల్ బస్ డేటా కమ్యూనికేషన్.
3. 12-బిట్ రిజల్యూషన్ వరకు, ± 0.5 డిగ్రీల సెల్సియస్ వరకు ఖచ్చితత్వంతో.
4. 12-బిట్ రిజల్యూషన్ వద్ద గరిష్ట పని చక్రం 750 మిల్లీసెకన్లు.
5. పారాసిటిక్ వర్కింగ్ మోడ్‌ను ఎంచుకోవచ్చు.
6. గుర్తించే ఉష్ణోగ్రత పరిధి –55° C ~+125° C (–67° F ~+257° F).
7. అంతర్నిర్మిత EEPROM, ఉష్ణోగ్రత పరిమితి అలారం ఫంక్షన్.
8. 64-బిట్ ఫోటోలిథోగ్రఫీ ROM, అంతర్నిర్మిత ఉత్పత్తి క్రమ సంఖ్య, బహుళ-మెషిన్ కనెక్షన్ కోసం అనుకూలమైనది.
9. వివిధ ప్యాకేజింగ్ రూపాలు, వివిధ హార్డ్‌వేర్ సిస్టమ్‌లకు అనుగుణంగా ఉంటాయి.

DS18B20 చిప్ ప్యాకేజీ నిర్మాణం

DS18B20 చిప్ ప్యాకేజీ నిర్మాణం

2.2 DS18B20 పిన్ ఫంక్షన్
GND వోల్టేజ్ గ్రౌండ్;
DQ సింగిల్ డేటా బస్సు;
VDD విద్యుత్ సరఫరా వోల్టేజ్;
NC ఖాళీ పిన్;

DS18B20 చిప్ RAM మరియు EEPROM నిర్మాణ రేఖాచిత్రం

DS18B20 చిప్ RAM మరియు EEPROM నిర్మాణ రేఖాచిత్రం

2.3 DS18B20 పని సూత్రం మరియు అప్లికేషన్
DS18B20 ఉష్ణోగ్రత గుర్తింపు మరియు డిజిటల్ డేటా అవుట్‌పుట్ పూర్తిగా ఒక చిప్‌లో ఏకీకృతం చేయబడ్డాయి, కాబట్టి ఇది బలమైన వ్యతిరేక జోక్య సామర్థ్యాన్ని కలిగి ఉంటుంది. దాని ఒక పని చక్రం రెండు భాగాలుగా విభజించవచ్చు, అవి ఉష్ణోగ్రత గుర్తింపు మరియు డేటా ప్రాసెసింగ్.

18B20 మూడు రకాల మెమరీ వనరులను కలిగి ఉంది. అవి: ROM రీడ్-ఓన్లీ మెమరీ, DS18B20ID కోడ్‌ను నిల్వ చేయడానికి ఉపయోగిస్తారు; మొదటిది 8 బిట్స్ సింగిల్-లైన్ సిరీస్ కోడ్ (DS18B20 కోడ్ 19H), క్రింది 48 బిట్స్ అనేది చిప్ యొక్క ప్రత్యేక క్రమ సంఖ్య; చివరిది 8 బిట్స్ అనేది CRC కోడ్ (రిడెండెన్సీ చెక్) పైన పేర్కొన్న వాటిలో 56 బిట్స్. డేటా ఉత్పత్తిలో సెట్ చేయబడింది మరియు వినియోగదారు మార్చలేరు. DS18B20 మొత్తం కలిగి ఉంది 64 ROM యొక్క బిట్స్.

RAM డేటా రిజిస్టర్, అంతర్గత గణన మరియు డేటా యాక్సెస్ కోసం ఉపయోగించబడుతుంది, విద్యుత్ వైఫల్యం తర్వాత డేటా పోతుంది, DS18B20 మొత్తం కలిగి ఉంది 9 RAM యొక్క బైట్లు, ప్రతి బైట్ 8 బిట్స్. మొదటి మరియు రెండవ బైట్‌లు ఉష్ణోగ్రత మార్పిడి తర్వాత డేటా విలువ సమాచారం; మూడవ మరియు నాల్గవ బైట్‌లు వినియోగదారు యొక్క EEPROM యొక్క అద్దం చిత్రం (సాధారణంగా ఉష్ణోగ్రత అలారం విలువ నిల్వ కోసం ఉపయోగిస్తారు). పవర్ రీసెట్ చేసినప్పుడు దాని విలువ రిఫ్రెష్ అవుతుంది. ఐదవ బైట్ అనేది వినియోగదారు యొక్క మూడవ EEPROM యొక్క అద్దం చిత్రం. 6వ, 7వ, మరియు 8వ బైట్‌లు కౌంట్ రిజిస్టర్‌లు, వినియోగదారులు అధిక ఉష్ణోగ్రత రిజల్యూషన్‌ను పొందేందుకు వీలుగా రూపొందించబడ్డాయి. అవి అంతర్గత ఉష్ణోగ్రత మార్పిడి మరియు గణన కోసం తాత్కాలిక నిల్వ యూనిట్లు కూడా. 9వ బైట్ మొదటిది CRC కోడ్ 8 బైట్లు. EEPROM అనేది చాలా కాలం పాటు సేవ్ చేయవలసిన డేటాను నిల్వ చేయడానికి ఉపయోగించే అస్థిరత లేని మెమరీ, ఎగువ మరియు దిగువ ఉష్ణోగ్రత అలారం విలువలు, మరియు ధృవీకరణ డేటా. DS18B20 మొత్తం కలిగి ఉంది 3 EEPROM యొక్క బిట్స్, మరియు యూజర్ ఆపరేషన్‌ను సులభతరం చేయడానికి RAMలో మిర్రర్ ఇమేజ్‌లు ఉన్నాయి.

DS18B20 డిఫాల్ట్‌గా 12-బిట్ రిజల్యూషన్ మోడ్‌లో పని చేస్తుంది. మార్పిడి తర్వాత పొందిన 12-బిట్ డేటా DS18B20 యొక్క రెండు 8-బిట్ RAMలలో నిల్వ చేయబడుతుంది (మొదటి రెండు బైట్లు). మొదటిది 5 బైనరీలోని బిట్స్ సైన్ బిట్స్. కొలిచిన ఉష్ణోగ్రత కంటే ఎక్కువ ఉంటే 0, ఇవి 5 బిట్స్ ఉన్నాయి 0. కొలిచిన విలువను గుణించండి 0.0625 వాస్తవ ఉష్ణోగ్రత పొందడానికి. కంటే తక్కువ ఉష్ణోగ్రత ఉంటే 0, ఇవి 5 బిట్స్ ఉన్నాయి 1. కొలిచిన విలువను విలోమం చేయాలి, ద్వారా జోడించబడింది 1, ఆపై గుణించాలి 0.0625 వాస్తవ ఉష్ణోగ్రత పొందడానికి. లేదా ఉష్ణోగ్రతను సంగ్రహించడానికి బిట్ ఆపరేషన్ ఉపయోగించండి: దశాంశ స్థానాలు దిగువను ఆక్రమిస్తాయి 4 బిట్స్, మరియు ఎగువ బిట్‌లు పూర్ణాంక బిట్‌లు (ప్రతికూల సంఖ్యలు పరిగణించబడవు).

2.4 DS18B20 చిప్ ROM సూచన పట్టిక
1. ROM చదవండి [33హెచ్] (హెక్సాడెసిమల్ కమాండ్ వర్డ్ స్క్వేర్ బ్రాకెట్లలో ఉంటుంది).
ఈ ఆదేశం బస్ కంట్రోలర్‌ను DS18B20 యొక్క 64-బిట్ ROMని చదవడానికి అనుమతిస్తుంది. బస్సులో ఒక DS18B20 మాత్రమే ఉన్నప్పుడు మాత్రమే ఈ సూచనను ఉపయోగించవచ్చు. ఒకటి కంటే ఎక్కువ కనెక్ట్ అయితే, కమ్యూనికేషన్ సమయంలో డేటా వైరుధ్యాలు ఏర్పడతాయి.

2. అచ్ ROM [55హెచ్]
ఈ సూచనను కంట్రోలర్ జారీ చేసిన 64-బిట్ క్రమ సంఖ్య అనుసరించబడుతుంది. బస్సులో బహుళ DS18B20లు ఉన్నప్పుడు, కంట్రోలర్ జారీ చేసిన అదే క్రమ సంఖ్య కలిగిన చిప్ మాత్రమే ప్రతిస్పందించగలదు, మరియు ఇతర చిప్‌లు తదుపరి రీసెట్ కోసం వేచి ఉంటాయి. ఈ సూచన సింగిల్-చిప్ మరియు బహుళ-చిప్ కనెక్షన్ కోసం అనుకూలంగా ఉంటుంది.

3. ROMని దాటవేయి [CCH]
ఈ సూచన చిప్ ROM కోడ్‌కు ప్రతిస్పందించకుండా చేస్తుంది. ఒకే బస్సు విషయంలో, సమయాన్ని ఆదా చేయడానికి ఈ సూచనను ఉపయోగించవచ్చు. బహుళ చిప్‌లు కనెక్ట్ చేయబడినప్పుడు ఈ సూచనను ఉపయోగించినట్లయితే, డేటా వైరుధ్యాలు ఏర్పడతాయి, లోపాల ఫలితంగా.

4. శోధన ROM [F0H]
చిప్ ప్రారంభించిన తర్వాత, బస్‌కు బహుళ చిప్‌లు కనెక్ట్ చేయబడినప్పుడు అన్ని పరికరాల 64-బిట్ ROMను తొలగించడం ద్వారా గుర్తించడానికి శోధన సూచన అనుమతిస్తుంది.

5. అలారం శోధన [ప్రతి]
బహుళ చిప్స్ విషయంలో, అలారం చిప్ శోధన సూచన TH కంటే ఎక్కువ లేదా TL కంటే తక్కువ ఉష్ణోగ్రత యొక్క అలారం స్థితిని కలిసే చిప్‌లకు మాత్రమే ప్రతిస్పందిస్తుంది. చిప్ పవర్ ఆఫ్ చేయనంత కాలం, ఉష్ణోగ్రత మళ్లీ కొలవబడే వరకు మరియు అలారం స్థితిని చేరుకోని వరకు అలారం స్థితి నిర్వహించబడుతుంది.

6. స్క్రాచ్‌ప్యాడ్‌ని వ్రాయండి [4EH]
ఇది RAMకి డేటాను వ్రాయడానికి సూచన. తరువాత వ్రాసిన రెండు బైట్ డేటా చిరునామాలో నిల్వ చేయబడుతుంది 2 (అలారం RAM యొక్క TH) మరియు చిరునామా 3 (అలారం RAM యొక్క TL). రీసెట్ సిగ్నల్ ద్వారా వ్రాసే ప్రక్రియను ముగించవచ్చు.

7. స్క్రాచ్‌ప్యాడ్ చదవండి (RAM నుండి డేటాను చదవండి) [BEH]
ఈ సూచన RAM నుండి డేటాను చదువుతుంది, చిరునామా నుండి ప్రారంభమవుతుంది 0 మరియు చిరునామా వరకు 9, మొత్తం RAM డేటా రీడింగ్‌ను పూర్తి చేస్తోంది. రీసెట్ సిగ్నల్ రీడింగ్ ప్రాసెస్‌ను ముగించడానికి చిప్ అనుమతిస్తుంది, అంటే, చదివే సమయాన్ని తగ్గించడానికి తదుపరి అనవసరమైన బైట్‌లను విస్మరించవచ్చు.

8. స్క్రాచ్‌ప్యాడ్‌ని కాపీ చేయండి (RAM డేటాను EEPROMకి కాపీ చేయండి) [48హెచ్]
ఈ సూచన RAMలోని డేటాను EEPROMలో నిల్వ చేస్తుంది, తద్వారా పవర్ ఆఫ్‌లో ఉన్నప్పుడు డేటా కోల్పోదు. చిప్ EEPROM నిల్వ ప్రాసెసింగ్‌తో బిజీగా ఉన్నందున, కంట్రోలర్ రీడ్ టైమ్ స్లాట్‌ను పంపినప్పుడు, బస్సు అవుట్‌పుట్‌లు “0”, మరియు నిల్వ పని పూర్తయినప్పుడు, బస్సు అవుట్‌పుట్ అవుతుంది “1”.
పరాన్నజీవి పని విధానంలో, చిప్ ఆపరేషన్‌ను నిర్వహించడానికి కనీసం 10MS వరకు ఈ సూచన జారీ చేయబడిన వెంటనే ఒక బలమైన పుల్-అప్ తప్పనిసరిగా ఉపయోగించబడాలి.

9. T మార్చండి (ఉష్ణోగ్రత మార్పిడి) [44హెచ్]
ఈ సూచనను స్వీకరించిన తర్వాత, చిప్ ఉష్ణోగ్రత మార్పిడిని చేస్తుంది మరియు మార్చబడిన ఉష్ణోగ్రత విలువను RAM యొక్క 1వ మరియు 2వ చిరునామాలలో నిల్వ చేస్తుంది. చిప్ ఉష్ణోగ్రత మార్పిడి ప్రాసెసింగ్‌తో బిజీగా ఉన్నందున, కంట్రోలర్ రీడ్ టైమ్ స్లాట్‌ను పంపినప్పుడు, బస్సు అవుట్‌పుట్‌లు “0”, మరియు నిల్వ పని పూర్తయినప్పుడు, బస్సు అవుట్‌పుట్ అవుతుంది “1”. పరాన్నజీవి పని విధానంలో, ఈ సూచన జారీ చేయబడిన వెంటనే బలమైన పుల్-అప్ తప్పనిసరిగా ఉపయోగించబడాలి మరియు చిప్ ఆపరేషన్‌ను నిర్వహించడానికి కనీసం 500MS వరకు నిర్వహించబడుతుంది.

10. EEPROMని రీకాల్ చేయండి (EEPROMలో అలారం విలువను RAMకి కాపీ చేయండి) [B8H]
ఈ సూచన EEPROMలోని అలారం విలువను RAMలో 3వ మరియు 4వ బైట్‌లకు కాపీ చేస్తుంది. చిప్ కాపీ ప్రాసెసింగ్‌లో బిజీగా ఉన్నందున, కంట్రోలర్ రీడ్ టైమ్ స్లాట్‌ను పంపినప్పుడు, బస్సు అవుట్‌పుట్‌లు “0”, మరియు నిల్వ పని పూర్తయినప్పుడు, బస్సు అవుట్‌పుట్‌లు “1”. అదనంగా, చిప్‌ని ఆన్ చేసి రీసెట్ చేసినప్పుడు ఈ సూచన స్వయంచాలకంగా అమలు చేయబడుతుంది. ఈ విధంగా, ర్యామ్‌లోని రెండు అలారం బైట్ బిట్‌లు ఎల్లప్పుడూ EEPROMలోని డేటా యొక్క మిర్రర్ ఇమేజ్‌గా ఉంటాయి.

11. విద్యుత్ సరఫరా చదవండి (వర్కింగ్ మోడ్ స్విచ్) [B4H]
ఈ సూచనను జారీ చేసిన తర్వాత, రీడ్ టైమ్ గ్యాప్ జారీ చేయబడింది, మరియు చిప్ దాని పవర్ స్థితి పదాన్ని తిరిగి ఇస్తుంది. “0” పరాన్నజీవి శక్తి స్థితి మరియు “1” బాహ్య శక్తి స్థితి.

2.5 DS18B20 టైమింగ్ రేఖాచిత్రం
2.5.1 DS18B20 రీసెట్ మరియు రెస్పాన్స్ రిలేషన్షిప్ రేఖాచిత్రం
ప్రతి కమ్యూనికేషన్ ముందు తప్పనిసరిగా రీసెట్ చేయాలి. రీసెట్ సమయం, వేచి ఉండే సమయం, మరియు ప్రతిస్పందన సమయం ఖచ్చితంగా టైమింగ్ ప్రకారం ప్రోగ్రామ్ చేయబడాలి.
DS18B20 రీడ్ అండ్ రైట్ టైమ్ గ్యాప్: DS18B20 డేటా రీడింగ్ మరియు రైటింగ్ అనేది టైమ్ గ్యాప్ ప్రాసెసింగ్ బిట్ మరియు సమాచార మార్పిడికి కమాండ్ వర్డ్ ద్వారా నిర్ధారించబడుతుంది.

DS18B20 రీసెట్ మరియు ప్రతిస్పందన సంబంధ రేఖాచిత్రం

DS18B20 రీసెట్ మరియు ప్రతిస్పందన సంబంధ రేఖాచిత్రం

2.5.2 డేటా వ్రాయండి 0 మరియు డేటా 1 DS18B20కి
రైట్ డేటా టైమ్ గ్యాప్‌లో మొదటి 15uSలో, కంట్రోలర్ ద్వారా బస్సును కిందికి లాగాలి, ఆపై అది బస్ డేటా కోసం చిప్ నమూనా సమయం అవుతుంది. నమూనా సమయం 15~60uS. నమూనా సమయంలో నియంత్రిక బస్సును ఎత్తుకు లాగితే, దాని అర్థం రాయడం “1”, మరియు కంట్రోలర్ బస్సును తక్కువగా లాగితే, దాని అర్థం రాయడం “0”.
ట్రాన్స్మిషన్ యొక్క ప్రతి బిట్ కనీసం 15uS యొక్క తక్కువ-స్థాయి ప్రారంభ బిట్‌ను కలిగి ఉండాలి, మరియు తదుపరి డేటా “0” లేదా “1” 45uS లోపు పూర్తి చేయాలి.
మొత్తం బిట్ యొక్క ప్రసార సమయం 60~120uS వద్ద ఉంచాలి, లేకపోతే సాధారణ కమ్యూనికేషన్ హామీ ఇవ్వబడదు.
గమనిక: DS18B20 తక్కువ బిట్ నుండి డేటాను చదువుతుంది మరియు వ్రాస్తుంది.

డేటా వ్రాయండి 0 మరియు డేటా 1 DS18B20కి

డేటా వ్రాయండి 0 మరియు డేటా 1 DS18B20కి

2.5.3 డేటా చదవడం 0 మరియు డేటా 1 DS18B20 నుండి
రీడ్ టైమ్ గ్యాప్ సమయంలో నియంత్రణ యొక్క నమూనా సమయం మరింత ఖచ్చితమైనదిగా ఉండాలి. చదివే సమయం గ్యాప్ సమయంలో, రీడ్ సమయం ప్రారంభాన్ని సూచించడానికి హోస్ట్ కనీసం 1uS యొక్క తక్కువ స్థాయిని కూడా ఉత్పత్తి చేయాలి. అప్పుడు, బస్సు విడుదలైన తర్వాత 15uSలో, DS18B20 అంతర్గత డేటా బిట్‌ను పంపుతుంది. ఈ సమయంలో, బస్సు ఎత్తులో ఉందని నియంత్రణ కనుగొంటే, దాని అర్థం చదవడం “1”, మరియు బస్సు తక్కువగా ఉంటే, దాని అర్థం డేటా చదవడం “0”. ప్రతి బిట్ చదవడానికి ముందు, కంట్రోలర్ ప్రారంభ సంకేతాన్ని జోడిస్తుంది.

డేటాను చదవండి 0 మరియు డేటా 1 DS18B20 నుండి

డేటాను చదవండి 0 మరియు డేటా 1 DS18B20 నుండి

గమనిక: సరైన కమ్యూనికేషన్‌ని నిర్ధారించడానికి రీడ్ గ్యాప్ ప్రారంభమైన 15uS లోపు డేటా బిట్‌ని చదవాలి.

కమ్యూనికేషన్ సమయంలో, 8 యొక్క బిట్స్ “0” లేదా “1” బైట్‌గా ఉపయోగించబడతాయి, మరియు బైట్ చదవడం లేదా వ్రాయడం తక్కువ బిట్ నుండి ప్రారంభమవుతుంది.

2.5.4 ఒకసారి పఠన ఉష్ణోగ్రత యొక్క క్రమం (బస్సులో ఒక్క DS18B20 మాత్రమే)

1. రీసెట్ సిగ్నల్ పంపండి
2. ప్రతిస్పందన సిగ్నల్‌ను గుర్తించండి
3. 0xCCని పంపండి
4. 0x44 పంపండి
5. రీసెట్ సిగ్నల్ పంపండి
6. ప్రతిస్పందన సిగ్నల్‌ను గుర్తించండి
7. 0xcc వ్రాయండి
8. 0xbe అని వ్రాయండి
9. లూప్ 8 ఉష్ణోగ్రత యొక్క తక్కువ బైట్‌ని చదవడానికి సార్లు
10. లూప్ 8 ఉష్ణోగ్రత యొక్క అధిక బైట్‌ను చదవడానికి సమయాలు
11. 16-బిట్ ఉష్ణోగ్రత డేటా మరియు ప్రాసెస్‌ని సింథసైజ్ చేయండి

3. డ్రైవర్ కోడ్

3.1 DS18B20.c
#చేర్చండి “ds18b20.h”
/*
ఫంక్షన్: DS18B20 ప్రారంభించడం
హార్డ్వేర్ కనెక్షన్: PB15
*/
శూన్యం DS18B20_Init(శూన్యం)
{
RCC->APB2ENR|=1<<3; //PB
GPIOB->CRH&=0x0FFFFFFF;
GPIOB->CRH|=0x30000000;
GPIOB->ODR|=1<<15; //పుల్-అప్
}

/*
ఫంక్షన్: DS18B20 పరికరం ఉందో లేదో తనిఖీ చేయండి
రిటర్న్ విలువ: 1 పరికరం ఉనికిలో లేదని అర్థం 0 పరికరం సాధారణమైనది అని అర్థం
*/
u8 DS18B20_CheckDevice(శూన్యం) //రీసెట్ పల్స్‌ను కలిగి ఉంటుంది, గుర్తింపు పల్స్
{
DS18B20_OUTPUT_MODE();//అవుట్‌పుట్ మోడ్‌కి ప్రారంభించండి
DS18B20_OUT=0; //రీసెట్ పల్స్‌ని రూపొందించండి
డిలేయులు(750); //750us తక్కువ స్థాయిని ఉత్పత్తి చేయండి
DS18B20_OUT=1; //బస్సును విడుదల చేయండి
డిలేయులు(15); //DS18B20 ప్రతిస్పందన కోసం వేచి ఉండండి
ఉంటే(DS18B20_CleckAck())//ఉనికి పల్స్‌ను గుర్తించండి
{
తిరిగి 1;
}
తిరిగి 0;
}

/*
ఫంక్షన్: DS18B20 పరికరం ఉనికి పల్స్‌ను గుర్తించండి
రిటర్న్ విలువ: 1 లోపాన్ని సూచిస్తుంది 0 సాధారణ సూచిస్తుంది
*/
u8 DS18B20_CleckAck(శూన్యం)
{
u8 cnt=0;
DS18B20_INPUT_MODE();//ఇన్‌పుట్ మోడ్‌కి ప్రారంభించండి
అయితే(DS18B20_IN&&cnt<200) //DS18B20 ప్రతిస్పందన ఉనికి పల్స్ కోసం వేచి ఉండండి
{
డిలేయులు(1);
cnt++;
}
ఉంటే(cnt>=200)తిరిగి 1; //లోపం

cnt=0;
అయితే((!DS18B20_IN)&&cnt<240) //బస్సును విడుదల చేయడానికి DS18B20 కోసం వేచి ఉండండి
{
డిలేయులు(1);
cnt++;
}
ఉంటే(cnt>=240)తిరిగి 1; //లోపం
తిరిగి 0;
}

/*
ఫంక్షన్: ఒక బైట్ వ్రాయండి
ముందుగా కొంచెం రాయడం నేర్చుకోండి.
*/
DS18B20_WriteByte శూన్యం(u8 cmd)
{
u8 i;
DS18B20_OUTPUT_MODE(); //అవుట్‌పుట్ మోడ్‌కి ప్రారంభించండి
కోసం(i=0;i<8;i++)
{
DS18B20_OUT=0; //వ్రాసే సమయ గ్యాప్‌ని రూపొందించండి (ప్రారంభం వ్రాయండి)
డిలేయులు(2);
DS18B20_OUT=cmd&0x01; //వాస్తవ డేటా బిట్‌ని పంపండి
డిలేయులు(60); //రాయడం పూర్తయ్యే వరకు వేచి ఉండండి
DS18B20_OUT=1; //బస్సును విడుదల చేసి, తదుపరి ప్రసారానికి సిద్ధం చేయండి
cmd>>=1; //తదుపరి బిట్ డేటాను పంపడం కొనసాగించండి
}
}

/*
ఫంక్షన్: ఒక బైట్ చదవండి
మొదట కొంచెం చదవడం నేర్చుకోండి.
*/
u8 DS18B20_ReadByte(శూన్యం)
{
u8 i,డేటా=0;
కోసం(i=0;i<8;i++)
{
DS18B20_OUTPUT_MODE(); //అవుట్‌పుట్ మోడ్‌కి ప్రారంభించండి
DS18B20_OUT=0; //రీడ్ టైమ్ గ్యాప్‌ని రూపొందించండి (ప్రారంభం చదవండి)
డిలేయులు(2);
DS18B20_OUT=1; //బస్సును విడుదల చేయండి
DS18B20_INPUT_MODE(); //ఇన్‌పుట్ మోడ్‌కి ప్రారంభించండి
డిలేయులు(8); //DS18B20 డేటా అవుట్‌పుట్ కోసం వేచి ఉండండి
డేటా>>=1; //అధిక బిట్‌తో నింపండి 0, డిఫాల్ట్ 0
ఉంటే(DS18B20_IN) డేటా|=0x80;
డిలేయులు(60);
DS18B20_OUT=1; //బస్సును విడుదల చేయండి, తదుపరి బిట్ డేటా చదవడం కోసం వేచి ఉండండి
}
తిరిగి డేటా;
}

/*
ఫంక్షన్: DS18B20 ఉష్ణోగ్రత డేటాను ఒకసారి చదవండి
రిటర్న్ విలువ: ఉష్ణోగ్రత డేటా చదవబడుతుంది
పరిగణించబడిన పరిస్థితి: బస్సుకు కనెక్ట్ చేయబడిన ఒక DS18B20 మాత్రమే ఉంది
*/
u16 DS18B20_ReadTemp(శూన్యం)
{
u16 temp=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|(ఉష్ణోగ్రత_H<<8); //సంశ్లేషణ ఉష్ణోగ్రత
తిరిగి ఉష్ణోగ్రత;
}

3.2 DS18B20.h

#ifndef DS18B20_H
#DS18B20_Hని నిర్వచించండి
#చేర్చండి “stm32f10x.h”
#చేర్చండి “sys.h”
#చేర్చండి “ఆలస్యం.h”
#చేర్చండి “ds18b20.h”
#చేర్చండి “usart.h”

/*ప్యాకేజీ ఇంటర్‌ఫేస్*/

//ఇన్‌పుట్ మోడ్‌కు DS18B20ని ప్రారంభించండి
#DS18B20_INPUT_MODEని నిర్వచించండి() {GPIOB->CRH&=0x0FFFFFFF;GPIOB->CRH|=0x80000000;}

//అవుట్‌పుట్ మోడ్‌కు DS18B20ని ప్రారంభించండి
#DS18B20_OUTPUT_MODEని నిర్వచించండి(){GPIOB->CRH&=0x0FFFFFFF;GPIOB->CRH|=0x30000000;}

//DS18B20 IO పోర్ట్ అవుట్‌పుట్
#DS18B20_OUT PBoutని నిర్వచించండి(15)

//DS18B20 IO పోర్ట్ ఇన్‌పుట్
#DS18B20_IN PBinని నిర్వచించండి(15)

//ఫంక్షన్ డిక్లరేషన్
u8 DS18B20_CleckAck(శూన్యం);
u8 DS18B20_CheckDevice(శూన్యం);
శూన్యం DS18B20_Init(శూన్యం);
u16 DS18B20_ReadTemp(శూన్యం);
u8 DS18B20_ReadByte(శూన్యం);
DS18B20_WriteByte శూన్యం(u8 cmd);
#endif

poYBAGDYdXCAWkKMAAAK8RNs4s030.png
3.3 ఆలస్యం ఫంక్షన్

/*
ఫంక్షన్: మనలో ఆలస్యం
*/
ఆలస్యం ఆలస్యం(int మాకు)
{
#ifdef _SYSTICK_IRQ_
int i,జె;
కోసం(i=0;iVAL=0; //CNT కౌంటర్ విలువ
SysTick->లోడ్=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]; //DS18B20 యొక్క 64-బిట్ ROM కోడ్‌ను నిల్వ చేయండి

పూర్ణాంక ప్రధాన(శూన్యం)
{
u16 ఉష్ణోగ్రత;
USARTx_హీట్(USART1,72,115200);//సీరియల్ పోర్ట్ ప్రారంభించడం 1
DS18B20_హీట్(); //DS18B20 ప్రారంభించడం

/*1. DS18B20*/ యొక్క 64-బిట్ ROM కోడ్‌ని చదవండి
//రీసెట్ పల్స్ పంపండి, ఉనికి పల్స్ గుర్తించండి
అయితే(DS18B20_CheckDevice())
{
printf(“DS18B20 పరికరం ఉనికిలో లేదు!\n”);
ఆలస్యం(500);
}
//64-బిట్ ROM కోడ్‌ని చదవడానికి ఆదేశాన్ని పంపండి
DS18B20_WriteByte(0x33);

//లూప్ రీడ్ 64-బిట్ ROM కోడ్
కోసం(i=0;i<8;i++)
{
DS18B20_ROM[i]= DS18B20_ReadByte();
printf(“DS18B20_ROM[%డి]=0x%Xn”,i,DS18B20_ROM[i]);
}

అయితే(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;i<8;i++) //64-బిట్ కోడ్‌ని పంపండి
{
DS18B20_WriteByte(DS18B20_ROM[i]);
}
DS18B20_WriteByte(0xBE); //ఉష్ణోగ్రత చదవండి
temp=DS18B20_ReadByte(); //తక్కువ-ఆర్డర్ ఉష్ణోగ్రత డేటాను చదవండి
ఉష్ణోగ్రత|=DS18B20_ReadByte()<<8; //అధిక-ఆర్డర్ ఉష్ణోగ్రత డేటాను చదవండి
printf(“temp1=%d.%dn”,ఉష్ణోగ్రత>>4,ఉష్ణోగ్రత&0xF);
printf(“temp2=%fn”,ఉష్ణోగ్రత*0.0625);

ఆలస్యం(500);
}
}