- అవసరమైన భాగాలు: -
- DS18B20 ఉష్ణోగ్రత సెన్సార్:
- సర్క్యూట్ రేఖాచిత్రం: -
- దశలు లేదా కోడ్ ప్రవాహం: -
- కోడ్ వివరణ:
- DS18B20 ఉష్ణోగ్రత సెన్సార్ నుండి డేటాను పొందడం:
సాధారణంగా, LM35 ఉష్ణోగ్రత సెన్సార్ ఉష్ణోగ్రతను కొలవడానికి మైక్రోకంట్రోలర్లతో ఉపయోగిస్తారు ఎందుకంటే ఇది చౌకగా మరియు సులభంగా లభిస్తుంది. కానీ LM35 అనలాగ్ విలువలను ఇస్తుంది మరియు మేము వాటిని ADC (అనలాగ్ టు డిజిటల్ కన్వర్టర్) ఉపయోగించి డిజిటల్గా మార్చాలి. కానీ ఈ రోజు మనం DS18B20 ఉష్ణోగ్రత సెన్సార్ను ఉపయోగిస్తున్నాము, దీనిలో ఉష్ణోగ్రత పొందడానికి ADC మార్పిడి అవసరం లేదు. ఇక్కడ మేము ఉష్ణోగ్రతను కొలవడానికి DS18B20 తో PIC మైక్రోకంట్రోలర్ను ఉపయోగిస్తాము.
కాబట్టి ఇక్కడ మేము మైక్రోచిప్ నుండి PIC16F877A మైక్రోకంట్రోలర్ యూనిట్ను ఉపయోగించి కింది స్పెసిఫికేషన్తో థర్మామీటర్ను నిర్మిస్తున్నాము.
- ఇది -55 డిగ్రీ నుండి +125 డిగ్రీ వరకు పూర్తి స్థాయి ఉష్ణోగ్రతను చూపుతుంది.
- ఉష్ణోగ్రత + / -.2 డిగ్రీ మారితే మాత్రమే ఇది ఉష్ణోగ్రతను ప్రదర్శిస్తుంది.
అవసరమైన భాగాలు: -
- Pic16F877A - PDIP40 ప్యాకేజీ
- బ్రెడ్ బోర్డు
- పికిట్ -3
- 5 వి అడాప్టర్
- LCD JHD162A
- DS18b20 ఉష్ణోగ్రత సెన్సార్
- పెరిఫెరల్స్ కనెక్ట్ చేయడానికి వైర్లు.
- 4.7 కే రెసిస్టర్లు - 2 పిసిలు
- 10 కే కుండ
- 20mHz క్రిస్టల్
- 2 PC లు 33pF సిరామిక్ కెపాసిటర్లు
DS18B20 ఉష్ణోగ్రత సెన్సార్:
DS18B20 ఉష్ణోగ్రతను ఖచ్చితంగా గ్రహించడానికి ఒక అద్భుతమైన సెన్సార్. ఈ సెన్సార్ ఉష్ణోగ్రత సెన్సింగ్పై 9 బిట్ నుండి 12 బిట్ రిజల్యూషన్ను అందిస్తుంది. ఈ సెన్సార్ ఒకే తీగతో కమ్యూనికేట్ చేస్తుంది మరియు అనలాగ్ ఉష్ణోగ్రతలను పొందటానికి మరియు వాటిని డిజిటల్గా మార్చడానికి ఏ ADC అవసరం లేదు.
సెన్సార్ యొక్క స్పెసిఫికేషన్: -
- -55 ° C నుండి + 125 ° C (-67 ° F నుండి + 257 ° F) వరకు ఉష్ణోగ్రతలు కొలుస్తుంది
- ± 0.5 ° C -10 ° C నుండి + 85. C వరకు ఖచ్చితత్వం
- 9 బిట్స్ నుండి 12 బిట్స్ వరకు ప్రోగ్రామబుల్ రిజల్యూషన్
- బాహ్య భాగాలు అవసరం లేదు
- సెన్సార్ 1-వైర్ ® ఇంటర్ఫేస్ను ఉపయోగిస్తుంది
డేటాషీట్ నుండి పై పిన్అవుట్ చిత్రాన్ని చూస్తే, సెన్సార్ BC547 లేదా BC557 ప్యాకేజీ, TO-92 లాగా కనిపిస్తుంది. మొదటి పిన్ గ్రౌండ్, రెండవ పిన్ డిక్యూ లేదా డేటా మరియు మూడవ పిన్ విసిసి.
డేటాషీట్ నుండి ఎలక్ట్రికల్ స్పెసిఫికేషన్ క్రింద ఉంది, ఇది మా డిజైన్ కోసం అవసరం. సెన్సార్ కోసం రేట్ చేయబడిన సరఫరా వోల్టేజ్ + 3.0V నుండి + 5.5V వరకు ఉంటుంది. ఇది పైన పేర్కొన్న సరఫరా వోల్టేజ్ మాదిరిగానే పుల్ అప్ సప్లై వోల్టేజ్ కూడా అవసరం.
అలాగే, -10 డిగ్రీ సి నుండి +85 డిగ్రీ సెల్సియస్ పరిధికి + -0.5 డిగ్రీల సెల్సియస్ ఉన్న ఖచ్చితత్వ మార్జిన్ ఉంది మరియు పూర్తి స్థాయి మార్జిన్ కోసం ఖచ్చితత్వం మారుతుంది, ఇది -5 -2 డిగ్రీకి + -2 డిగ్రీకి + 125 డిగ్రీ పరిధి.
మేము మళ్ళీ డేటాషీట్లో చూస్తే, సెన్సార్ యొక్క కనెక్షన్ స్పెసిఫికేషన్ చూస్తాము. మేము రెండు వైర్లు అవసరమయ్యే పరాన్నజీవి శక్తి మోడ్లో సెన్సార్ను కనెక్ట్ చేయవచ్చు, డాటా మరియు జిఎన్డి, లేదా బాహ్య విద్యుత్ సరఫరాను ఉపయోగించి సెన్సార్ను కనెక్ట్ చేయవచ్చు , ఇక్కడ మూడు వేర్వేరు వైర్లు అవసరమవుతాయి. మేము రెండవ కాన్ఫిగరేషన్ను ఉపయోగిస్తాము.
సెన్సార్ మరియు కనెక్షన్ సంబంధిత ప్రాంతాల యొక్క పవర్ రేటింగ్స్ గురించి మనకు ఇప్పుడు బాగా తెలుసు కాబట్టి, మేము ఇప్పుడు స్కీమాటిక్ తయారీపై దృష్టి పెట్టవచ్చు.
సర్క్యూట్ రేఖాచిత్రం: -
మేము సర్క్యూట్ రేఖాచిత్రాన్ని చూస్తే మనం చూస్తాము: -
16x2 అక్షర LCD PIC16F877A మైక్రోకంట్రోలర్లో అనుసంధానించబడి ఉంది, దీనిలో RB0, RB1, RB2 LCD పిన్ RS, R / W, మరియు E. లతో అనుసంధానించబడి ఉన్నాయి. మరియు RB4, RB5, RB6 మరియు RB7 లు LCD యొక్క 4 పిన్ D4, D5, D6, డి 7. LCD 4bit మోడ్ లేదా నిబుల్ మోడ్లో కనెక్ట్ చేయబడింది.
33 పిఎఫ్ యొక్క రెండు సిరామిక్ కెపాసిటర్తో 20MHz యొక్క క్రిస్టల్ ఓసిలేటర్ OSC1 మరియు OSC2 పిన్లలో అనుసంధానించబడి ఉంది. ఇది మైక్రోకంట్రోలర్కు స్థిరమైన 20Mhz క్లాక్ ఫ్రీక్వెన్సీని అందిస్తుంది.
DS18B20 కూడా పిన్ కాన్ఫిగరేషన్ ప్రకారం అనుసంధానించబడి ఉంది మరియు ముందు చర్చించినట్లుగా 4.7k పుల్ అప్ రెసిస్టర్తో. ఇవన్నీ నేను బ్రెడ్బోర్డ్లో కనెక్ట్ చేసాను.
మీరు పిఐసి మైక్రోకంట్రోలర్కు క్రొత్తగా ఉంటే, పిఐసి మైక్రోకంట్రోలర్తో ప్రారంభించండి మా పిఐసి మైక్రోకంట్రోలర్ ట్యుటోరియల్లను అనుసరించండి.
దశలు లేదా కోడ్ ప్రవాహం: -
- ఓసిలేటర్ కాన్ఫిగరేషన్ను కలిగి ఉన్న మైక్రోకంట్రోలర్ యొక్క కాన్ఫిగరేషన్లను సెట్ చేయండి.
- TRIS రిజిస్టర్తో సహా LCD కోసం కోరుకున్న పోర్ట్ను సెట్ చేయండి.
- Ds18b20 సెన్సార్ ఉన్న ప్రతి చక్రం రీసెట్తో ప్రారంభమవుతుంది, కాబట్టి మేము ds18b20 ను రీసెట్ చేస్తాము మరియు ఉనికి పల్స్ కోసం వేచి ఉంటాము.
- స్క్రాచ్ప్యాడ్ను వ్రాసి సెన్సార్ 12 బిట్ యొక్క రిజల్యూషన్ను సెట్ చేయండి.
- రీసెట్ పల్స్ తరువాత ROM రీడ్ను దాటవేయి.
- కన్వర్ట్ ఉష్ణోగ్రత ఆదేశాన్ని సమర్పించండి.
- స్క్రాచ్ప్యాడ్ నుండి ఉష్ణోగ్రత చదవండి.
- ఉష్ణోగ్రత విలువను ప్రతికూలంగా లేదా సానుకూలంగా ఉందో లేదో తనిఖీ చేయండి.
- 16x2 LCD లో ఉష్ణోగ్రతను ముద్రించండి.
- +/-. 20 డిగ్రీల సెల్సియస్ కోసం ఉష్ణోగ్రత మార్పుల కోసం వేచి ఉండండి.
కోడ్ వివరణ:
ఈ డిజిటల్ థర్మామీటర్ కోసం పూర్తి కోడ్ ఈ ట్యుటోరియల్ చివరిలో డెమోన్స్ట్రేషన్ వీడియోతో ఇవ్వబడింది. ఇక్కడ నుండి డౌన్లోడ్ చేయగల ఈ ప్రోగ్రామ్ను అమలు చేయడానికి మీకు కొన్ని హెడర్ ఫైల్స్ అవసరం.
మొదట, మేము పిక్ మైక్రోకంట్రోలర్లో కాన్ఫిగరేషన్ బిట్లను సెట్ చేసి, ఆపై శూన్యమైన ప్రధాన ఫంక్షన్తో ప్రారంభించాలి.
లైబ్రరీ హెడర్ ఫైల్, lcd.h మరియు ds18b20.h తో సహా నాలుగు పంక్తుల క్రింద ఉపయోగించబడుతుంది. మరియు xc.h మైక్రోకంట్రోలర్ హెడర్ ఫైల్ కోసం.
# చేర్చండి
ఉష్ణోగ్రత సెన్సార్కు ఆదేశాన్ని పంపడానికి ఈ నిర్వచనాలు ఉపయోగించబడతాయి. ఆదేశాలు సెన్సార్ డేటాషీట్లో ఇవ్వబడ్డాయి.
# స్కిప్_రోమ్ 0xCC # నిర్వచించండి కన్వర్ట్_టెంప్ 0x44 # రైట్_స్క్రాచ్ప్యాడ్ 0x4E # రిజల్యూషన్_12 బిట్ 0x7F ని నిర్వచించండి # రీడ్_స్క్రాచ్ప్యాడ్ 0xBE
సెన్సార్ డేటాషీట్ నుండి వచ్చిన ఈ టేబుల్ 3 అన్ని ఆదేశాలను చూపిస్తుంది, ఇక్కడ మాక్రోలు సంబంధిత ఆదేశాలను పంపడానికి ఉపయోగిస్తారు.
ఉష్ణోగ్రత +/- .20 డిగ్రీలు మారితే మాత్రమే ఉష్ణోగ్రత తెరపై ప్రదర్శించబడుతుంది. మేము ఈ టెంప్_గ్యాప్ మాక్రో నుండి ఈ ఉష్ణోగ్రత అంతరాన్ని మార్చవచ్చు. ఈ స్థూల వద్ద విలువను మార్చడం ద్వారా, స్పెసిఫికేషన్ మార్చబడుతుంది.
ప్రదర్శించబడిన ఉష్ణోగ్రత డేటాను నిల్వ చేయడానికి ఉపయోగించే ఇతర రెండు ఫ్లోట్ వేరియబుల్స్ మరియు వాటిని ఉష్ణోగ్రత గ్యాప్తో వేరు చేస్తాయి
# టెంప్_గ్యాప్ 20 ఫ్లోట్ ప్రీ_వాల్ = 0, ఎఫ్ట్_వాల్ = 0;
లో గర్జన ప్రధాన () ఫంక్షన్, lcd_init () ; LCD ని ప్రారంభించడానికి ఒక ఫంక్షన్. ఈ lcd_init () ఫంక్షన్ను lcd.h లైబ్రరీ నుండి పిలుస్తారు.
I / O పిన్లను ఇన్పుట్ లేదా అవుట్పుట్గా ఎంచుకోవడానికి TRIS రిజిస్టర్లు ఉపయోగించబడతాయి. ఉష్ణోగ్రత సెన్సార్ నుండి 12 బిట్ రిజల్యూషన్ డేటాను నిల్వ చేయడానికి రెండు సంతకం చేయని షార్ట్ వేరియబుల్ టెంప్ఎల్ మరియు టెంప్హెచ్ ఉపయోగించబడతాయి.
void main (శూన్యమైనది) {TRISD = 0xFF; TRISA = 0x00; TRISB = 0x00; //TRISDbits_t.TRISD6 = 1; సంతకం చేయని చిన్న టెంప్ఎల్, టెంప్హెచ్; సంతకం చేయని పూర్ణాంకం t, t2; ఫ్లోట్ తేడా 1 = 0, తేడా 2 = 0; lcd_init ();
అయితే లూప్ చూద్దాం, ఇక్కడ మనం (1) లూప్ ను చిన్న భాగాలుగా విడదీస్తున్నాము.
ఉష్ణోగ్రత సెన్సార్ కనెక్ట్ చేయబడిందో లేదో తెలుసుకోవడానికి ఆ పంక్తులు ఉపయోగించబడతాయి.
(ow_reset ()) {lcd_com (0x80); lcd_puts ("దయచేసి కనెక్ట్ చేయండి"); lcd_com (0xC0); lcd_puts ("టెంప్-సెన్స్ ప్రోబ్"); }
కోడ్ యొక్క ఈ విభాగాన్ని ఉపయోగించడం ద్వారా మేము సెన్సార్ను ప్రారంభిస్తాము మరియు ఉష్ణోగ్రతను మార్చడానికి ఆదేశాన్ని పంపుతాము.
lcd_puts (""); ow_reset (); రైట్_బైట్ (రైట్_స్క్రాచ్ప్యాడ్); రైట్_బైట్ (0); రైట్_బైట్ (0); రైట్_బైట్ (రిజల్యూషన్_12 బిట్); // 12 బిట్ రిజల్యూషన్ ow_reset (); రైట్_బైట్ (skip_rom); రైట్_బైట్ (కన్వర్ట్_టెంప్);
ఈ కోడ్ 12 బిట్ ఉష్ణోగ్రత డేటాను సంతకం చేయని రెండు చిన్న వేరియబుల్స్లో నిల్వ చేయడానికి.
అయితే (read_byte () == 0xff); __ ఆలస్యం_ఎంఎస్ (500); ow_reset (); రైట్_బైట్ (skip_rom); రైట్_బైట్ (రీడ్_స్క్రాచ్ప్యాడ్); టెంప్ఎల్ = రీడ్_బైట్ (); టెంప్హెచ్ = రీడ్_బైట్ ();
మీరు దిగువ పూర్తి కోడ్ను తనిఖీ చేస్తే, ఉష్ణోగ్రత సంకేతం సానుకూలంగా లేదా ప్రతికూలంగా ఉందో లేదో తెలుసుకోవడానికి మేము if-else పరిస్థితిని సృష్టించాము.
If స్టేట్మెంట్ కోడ్ను ఉపయోగించడం ద్వారా, మేము డేటాను మానిప్యులేట్ చేస్తాము మరియు ఉష్ణోగ్రత ప్రతికూలంగా ఉందో లేదో చూస్తాము మరియు ఉష్ణోగ్రత మార్పులు +/-.20 డిగ్రీల పరిధిలో ఉన్నాయో లేదో నిర్ణయిస్తాము. మరియు వేరే భాగాన్ని మేము ఉష్ణోగ్రత అనుకూల లేదా కాదు మరియు ఉష్ణోగ్రత గుర్తింపును మార్పులు లేదో తనిఖీ.
కోడ్
DS18B20 ఉష్ణోగ్రత సెన్సార్ నుండి డేటాను పొందడం:
1-వైర్ ® ఇంటర్ఫేస్ యొక్క సమయ అంతరాన్ని చూద్దాం. మేము 20Mhz క్రిస్టల్ ఉపయోగిస్తున్నాము. మేము ds18b20.c ఫైల్ లోపల చూస్తే, మనం చూస్తాము
# _XTAL_FREQ 20000000 ను నిర్వచించండి
ఈ నిర్వచనం XC8 కంపైలర్ ఆలస్యం దినచర్య కోసం ఉపయోగించబడుతుంది. 20Mhz క్రిస్టల్ ఫ్రీక్వెన్సీగా సెట్ చేయబడింది.
మేము ఐదు విధులు చేసాము
- ow_reset
- read_bit
- read_byte
- write_bit
- రైట్_బైట్
1-వైర్ ® ప్రోటోకాల్ కమ్యూనికేట్ చేయడానికి కఠినమైన సమయ సంబంధిత స్లాట్లు అవసరం. డేటాషీట్ లోపల, మేము ఖచ్చితమైన సమయ-స్లాట్ సంబంధిత సమాచారాన్ని పొందుతాము.
దిగువ ఫంక్షన్ లోపల మేము ఖచ్చితమైన సమయ స్లాట్ను సృష్టించాము. సంబంధిత సెన్సార్ పోర్ట్ యొక్క TRIS బిట్ను పట్టుకుని విడుదల చేయడానికి మరియు నియంత్రించడానికి ఖచ్చితమైన ఆలస్యాన్ని సృష్టించడం చాలా ముఖ్యం.
సంతకం చేయని చార్ ow_reset (శూన్యమైనది) {DQ_TRIS = 0; // ట్రిస్ = 0 (అవుట్పుట్) డిక్యూ = 0; // సెట్ పిన్ # నుండి తక్కువ (0) __delay_us (480); // 1 వైర్కు సమయం ఆలస్యం అవసరం DQ_TRIS = 1; // ట్రిస్ = 1 (ఇన్పుట్) __ ఆలస్యం_యూస్ (60); // 1 వైర్కు సమయం ఆలస్యం అవసరమైతే (DQ == 0) // ఉనికి ప్లస్ ఉంటే {__delay_us (480); తిరిగి 0; // రిటర్న్ 0 (1-వైర్ ఉనికి)} else {__delay_us (480); తిరిగి 1; // రిటర్న్ 1 (1-వైర్ ఉనికి లేదు)}} // 0 = ఉనికి, 1 = భాగం లేదు
ఇప్పుడు రీడ్ అండ్ రైట్లో ఉపయోగించిన కింది టైమ్ స్లాట్ వివరణ ప్రకారం, మేము వరుసగా రీడ్ అండ్ రైట్ ఫంక్షన్ను సృష్టించాము.
సంతకం చేయని చార్ రీడ్_బిట్ (శూన్యమైనది) {సంతకం చేయని చార్ i; DQ_TRIS = 1; డిక్యూ = 0; // టైమ్స్లాట్ ప్రారంభించడానికి DQ ని తక్కువగా లాగండి DQ_TRIS = 1; డిక్యూ = 1; // ఆపై అధికంగా తిరిగి (i = 0; i <3; i ++); // టైమ్స్లాట్ రిటర్న్ (DQ) ప్రారంభం నుండి 15us ఆలస్యం; // DQ లైన్ యొక్క రిటర్న్ విలువ} శూన్యమైన రైట్_బిట్ (చార్ బిట్వాల్) {DQ_TRIS = 0; డిక్యూ = 0; // టైమ్స్లాట్ ప్రారంభించడానికి DQ ని తక్కువ లాగండి (బిట్వాల్ == 1) DQ = 1; 1 __delay_us (5) వ్రాస్తే // DQ అధికంగా తిరిగి ఇవ్వండి; // టైమ్స్లాట్ యొక్క మిగిలిన విలువను పట్టుకోండి DQ_TRIS = 1; డిక్యూ = 1; } // ఆలస్యం ప్రతి లూప్కు 16us, ప్లస్ 24us అందిస్తుంది. అందువల్ల ఆలస్యం (5) = 104us
మరింత చెక్ అన్ని సంబంధిత శీర్షిక మరియు ఇక్కడ సి ఫైళ్లను.
కాబట్టి పిఐసి మైక్రోకంట్రోలర్తో ఉష్ణోగ్రత పొందడానికి డిఎస్ 18 బి 20 సెన్సార్ను మనం ఈ విధంగా ఉపయోగించవచ్చు.
మీరు LM35 తో సరళమైన డిజిటల్ థర్మామీటర్ను నిర్మించాలనుకుంటే, ఇతర మైక్రోకంట్రోలర్లతో ప్రాజెక్టుల క్రింద చెక్అవుట్ చేయండి:
- రాస్ప్బెర్రీ పైతో గది ఉష్ణోగ్రత కొలత
- Arduino మరియు LM35 ఉపయోగించి డిజిటల్ థర్మామీటర్
- LM35 మరియు 8051 ఉపయోగించి డిజిటల్ థర్మామీటర్
- LM35 మరియు AVR మైక్రోకంట్రోలర్ ఉపయోగించి ఉష్ణోగ్రత కొలత