MPLAB మరియు XC8 ఉపయోగించి PIC మైక్రోకంట్రోలర్లను నేర్చుకోవడం మా 9 వ ట్యుటోరియల్. ఇప్పటి వరకు, MPLABX తో ప్రారంభించడం, PIC తో LED బ్లింక్, PIC లో టైమర్స్, LCD ఇంటర్ఫేసింగ్, 7-సెగ్మెంట్ ఇంటర్ఫేసింగ్ వంటి అనేక ప్రాథమిక ట్యుటోరియల్లను మేము కవర్ చేసాము. మీరు సంపూర్ణ అనుభవశూన్యుడు అయితే, దయచేసి ఇక్కడ PIC ట్యుటోరియల్ల పూర్తి జాబితాను సందర్శించండి. మరియు నేర్చుకోవడం ప్రారంభించండి.
ఈ ట్యుటోరియల్లో, మా PIC మైక్రోకంట్రోలర్ PICF877A తో ADC ని ఎలా ఉపయోగించాలో నేర్చుకుంటాము. మైక్రోకంట్రోలర్ ప్రాజెక్టులలో చాలావరకు ఒక ADC (అనలాగ్ టు డిజిటల్ కన్వర్టర్) ను కలిగి ఉంటాయి, ఎందుకంటే ఇది వాస్తవ ప్రపంచం నుండి డేటాను చదవడానికి ఎక్కువగా ఉపయోగించే మార్గాలలో ఒకటి. ఉష్ణోగ్రత సెన్సార్, ఫ్లక్స్ సెన్సార్, ప్రెజర్ సెన్సార్, ప్రస్తుత సెన్సార్లు, వోల్టేజ్ సెన్సార్లు, గైరోస్కోప్లు, యాక్సిలెరోమీటర్లు, దూర సెన్సార్ వంటి దాదాపు అన్ని సెన్సార్లు మరియు తెలిసిన ప్రతి సెన్సార్ లేదా ట్రాన్స్డ్యూసర్ సెన్సార్ల పఠనం ఆధారంగా 0V నుండి 5V వరకు అనలాగ్ వోల్టేజ్ను ఉత్పత్తి చేస్తుంది. ఉదాహరణకు ఉష్ణోగ్రత సెన్సార్ ఉష్ణోగ్రత 25 సి అయినప్పుడు 2.1 వి ఇవ్వవచ్చు మరియు ఉష్ణోగ్రత 60 సి ఉన్నప్పుడు 4.7 వరకు వెళ్ళవచ్చు. వాస్తవ ప్రపంచ ఉష్ణోగ్రత తెలుసుకోవాలంటే, MCU ఈ ఉష్ణోగ్రత సెన్సార్ యొక్క అవుట్పుట్ వోల్టేజ్ను చదివి వాస్తవ ప్రపంచ ఉష్ణోగ్రతతో సంబంధం కలిగి ఉండాలి. అందువల్ల MCC ప్రాజెక్టులకు ADC ఒక ముఖ్యమైన పని సాధనం మరియు మన PIC16F877A లో దీన్ని ఎలా ఉపయోగించవచ్చో తెలుసుకోవడానికి అనుమతిస్తుంది.
ఇతర మైక్రోకంట్రోలర్లలో ADC ని ఉపయోగించడం గురించి మా మునుపటి కథనాలను కూడా తనిఖీ చేయండి:
- Arduino Uno లో ADC ని ఎలా ఉపయోగించాలి?
- రాస్ప్బెర్రీ పై ADC ట్యుటోరియల్
- 8051 మైక్రోకంట్రోలర్తో ADC0808 ఇంటర్ఫేసింగ్
PIC మైక్రోకంట్రోలర్ PIC16F877A లో ADC:
అనేక రకాల ADC అందుబాటులో ఉంది మరియు ప్రతి దాని స్వంత వేగం మరియు రిజల్యూషన్ కలిగి ఉంటుంది. ADC ల యొక్క అత్యంత సాధారణ రకాలు ఫ్లాష్, వరుస ఉజ్జాయింపు మరియు సిగ్మా-డెల్టా. లో PIC16F877A ఉపయోగిస్తారు ADC రకం వరుస అంచనాగా ADC అని పిలుస్తారు చిన్న లో లేదా ఎస్ఎఆర్. కాబట్టి మేము SAR ADC ను ఉపయోగించడం ప్రారంభించడానికి ముందు దాని గురించి కొంచెం తెలుసుకుందాం.
వరుస ఉజ్జాయింపు ADC: SAR ADC ఒక పోలిక మరియు కొన్ని తర్కం సంభాషణల సహాయంతో పనిచేస్తుంది. ఈ రకమైన ADC రిఫరెన్స్ వోల్టేజ్ను ఉపయోగిస్తుంది (ఇది వేరియబుల్) మరియు ఇన్పుట్ వోల్టేజ్ను రిఫరెన్స్ వోల్టేజ్తో పోలిక మరియు వ్యత్యాసాన్ని ఉపయోగించి పోల్చి చూస్తుంది, ఇది డిజిటల్ అవుట్పుట్ అవుతుంది, ఇది చాలా ముఖ్యమైన బిట్ (MSB) నుండి సేవ్ చేయబడుతుంది. పోలిక యొక్క వేగం PIC పనిచేస్తున్న క్లాక్ ఫ్రీక్వెన్సీ (ఫాస్క్) పై ఆధారపడి ఉంటుంది.
ఇప్పుడు మేము ADC లో కొన్ని ప్రాథమికాలను తెలుసుకున్నాము, మా డేటాషీట్ తెరిచి, మా PIC16F877A MCU లో ADC ని ఎలా ఉపయోగించాలో తెలుసుకోవడానికి అనుమతిస్తుంది. మేము ఉపయోగిస్తున్న PIC లో 10-బిట్ 8-ఛానల్ ADC ఉంది. దీని అర్థం మా ADC యొక్క అవుట్పుట్ విలువ 0-1024 (2 ^ 10) మరియు మా MCU లో 8 పిన్స్ (ఛానెల్స్) ఉన్నాయి, ఇవి అనలాగ్ వోల్టేజ్ చదవగలవు. మా ADC 10 బిట్ అయినందున 1024 విలువ 2 ^ 10 ద్వారా పొందబడుతుంది. అనలాగ్ వోల్టేజ్ను చదవగల ఎనిమిది పిన్లు డేటాషీట్లో పేర్కొనబడ్డాయి. క్రింద ఉన్న చిత్రాన్ని చూద్దాం.
AN0 నుండి AN7 వరకు అనలాగ్ ఛానెల్లు మీ కోసం హైలైట్ చేయబడ్డాయి. ఈ పిన్స్ మాత్రమే అనలాగ్ వోల్టేజ్ చదవగలవు. కాబట్టి ఇన్పుట్ వోల్టేజ్ చదవడానికి ముందు ఇన్పుట్ వోల్టేజ్ చదవడానికి ఏ ఛానెల్ ఉపయోగించాలో మన కోడ్లో పేర్కొనాలి. ఈ ట్యుటోరియల్లో ఈ ఛానెల్లోని అనలాగ్ వోల్టేజ్ను చదవడానికి పోటెన్టోమీటర్తో ఛానల్ 4 ను ఉపయోగిస్తాము.
A / D మాడ్యూల్ నాలుగు రిజిస్టర్లను కలిగి ఉంది, ఇది ఇన్పుట్ పిన్స్ నుండి డేటాను చదవడానికి కాన్ఫిగర్ చేయాలి. ఈ రిజిస్టర్లు:
• A / D ఫలితం హై రిజిస్టర్ (ADRESH)
• A / D ఫలితం తక్కువ రిజిస్టర్ (ADRESL)
• A / D కంట్రోల్ రిజిస్టర్ 0 (ADCON0)
• A / D కంట్రోల్ రిజిస్టర్ 1 (ADCON1)
ADC కోసం ప్రోగ్రామింగ్:
PIC సూక్ష్మ తో ADC ఉపయోగించి కోసం కార్యక్రమం చాలా సులభం, మేము కేవలం ఈ నాలుగు రిజిస్టర్ల అర్థం ఆపై చదివిన ఏ అనలాగ్ వోల్టేజ్ సాధారణ ఉంటుంది కలిగి. ఎప్పటిలాగే కాన్ఫిగరేషన్ బిట్లను ప్రారంభించండి మరియు శూన్యమైన ప్రధాన () తో ప్రారంభిద్దాం .
శూన్యమైన ప్రధాన () లోపల మేము ADCON1 రిజిస్టర్ మరియు ADCON0 రిజిస్టర్ ఉపయోగించి మా ADC ని ప్రారంభించాలి. ADCON0 రిజిస్టర్ కింది బిట్లను కలిగి ఉంది:
ఈ రిజిస్టర్లో మనం ADON = 1 ను తయారు చేయడం ద్వారా ADC మాడ్యూల్ను ఆన్ చేయాలి మరియు ADCS1 మరియు ADCS0 బిట్లను ఉపయోగించడం ద్వారా A / D మార్పిడి గడియారాన్ని ఆన్ చేయాలి, మిగిలినవి ప్రస్తుతానికి సెట్ చేయబడవు. మా ప్రోగ్రామ్లో A / D మార్పిడి గడియారం Fosc / 16 గా ఎంపిక చేయబడింది మీరు మీ స్వంత పౌన encies పున్యాలను ప్రయత్నించవచ్చు మరియు ఫలితం ఎలా మారుతుందో చూడవచ్చు. డేటాషీట్ యొక్క పేజీ 127 లో పూర్తి వివరాలు అందుబాటులో ఉన్నాయి. అందువల్ల ADCON0 ఈ క్రింది విధంగా ప్రారంభించబడుతుంది.
ADCON0 = 0b01000001;
ఇప్పుడు ADCON1 రిజిస్టర్ కింది బిట్లను కలిగి ఉంది:
ఈ రిజిస్టర్లో మనం A / D ఫలిత ఆకృతిని ADFM = 1 చేత బిట్ హైగా ఎంచుకోవాలి మరియు మళ్ళీ Fosc / 16 ని ఎంచుకోవడానికి ADCS2 = 1 ను తయారు చేయాలి. మేము అంతర్గత రిఫరెన్స్ వోల్టేజ్ను ఉపయోగించాలని అనుకున్నందున ఇతర బిట్స్ సున్నాగా ఉంటాయి. డేటాషీట్ పేజీ 128 లో పూర్తి వివరాలు అందుబాటులో ఉన్నాయి. అందువల్ల ADCON1 మేము ఈ క్రింది విధంగా సెట్ చేస్తాము.
ADCON1 = 0x11000000;
ఇప్పుడు మా ప్రధాన ఫంక్షన్ లోపల ADC మాడ్యూల్ను ప్రారంభించిన తరువాత, అయితే లూప్లోకి ప్రవేశించి, ADC విలువలను చదవడం ప్రారంభించండి. ADC విలువను చదవడానికి ఈ క్రింది దశలను అనుసరించాలి.
- ADC మాడ్యూల్ ప్రారంభించండి
- అనలాగ్ ఛానెల్ని ఎంచుకోండి
- గో / డన్ బిట్ హైగా చేయడం ద్వారా ADC ని ప్రారంభించండి
- Go / DONE బిట్ తక్కువగా ఉండటానికి వేచి ఉండండి
- ADRESH మరియు ADRESL రిజిస్టర్ నుండి ADC ఫలితాన్ని పొందండి
1. ADC మాడ్యూల్ను ప్రారంభించండి: ADC ని ఎలా ప్రారంభించాలో మేము ఇప్పటికే నేర్చుకున్నాము, కాబట్టి ADC ని ప్రారంభించడానికి ఈ క్రింది ఫంక్షన్ను పిలుస్తాము
గర్జన ADC_Initialize () ఫంక్షన్ క్రింది విధంగా ఉంది.
శూన్య ADC_ ప్రారంభించు () {ADCON0 = 0b01000001; // ADC ON మరియు Fosc / 16 ఎంపిక చేయబడ్డాయి ADCON1 = 0b11000000; // అంతర్గత సూచన వోల్టేజ్ ఎంచుకోబడింది}
2. అనలాగ్ ఛానెల్ని ఎంచుకోండి: ఇప్పుడు మనం ఏడిసి విలువను చదవడానికి ఏ ఛానెల్ని ఉపయోగించబోతున్నామో ఎంచుకోవాలి. ఈ కోసం ఒక ఫంక్షన్ చేయడానికి, మాకు లోపల ప్రతి ఛానల్ మధ్య మారవచ్చు సులభం అని అనుమతిస్తుంది అయితే లూప్.
సంతకం చేయని పూర్ణాంకం ADC_Read (సంతకం చేయని చార్ ఛానల్) {// **** ఛానెల్ని ఎంచుకోవడం ** /// ADCON0 & = 0x11000101; // ఛానల్ ఎంపిక బిట్లను క్లియర్ చేస్తోంది ADCON0 - = ఛానెల్ << 3; // అవసరమైన బిట్లను సెట్ చేస్తోంది // ** ఛానెల్ ఎంపిక పూర్తయింది *** ///}
అప్పుడు ఎంచుకోవలసిన ఛానెల్ వేరియబుల్ ఛానెల్ లోపల స్వీకరించబడుతుంది. లైన్ లో
ADCON0 & = 0x1100101;
మునుపటి ఛానెల్ ఎంపిక (ఏదైనా ఉంటే) క్లియర్ చేయబడింది. బిట్వైస్ మరియు ఆపరేటర్ “&” ఉపయోగించి ఇది జరుగుతుంది. 3, 4 మరియు 5 బిట్స్ 0 గా ఉండవలసి వస్తుంది, మిగిలినవి వాటి మునుపటి విలువలలో ఉండటానికి మిగిలి ఉన్నాయి.
అప్పుడు కావలసిన ఛానెల్ ఎడమవైపు ఛానెల్ సంఖ్యను మూడుసార్లు మార్చడం ద్వారా మరియు బిట్వైస్ లేదా ఆపరేటర్ “-” ఉపయోగించి బిట్లను సెట్ చేయడం ద్వారా ఎంపిక చేయబడుతుంది.
ADCON0 - = ఛానెల్ << 3; // అవసరమైన బిట్లను అమర్చుట
3. గో / డన్ బిట్ హైగా చేయడం ద్వారా ADC ని ప్రారంభించండి : ఛానెల్ ఎంచుకోబడిన తర్వాత మేము GO_nDONE బిట్ను అధికంగా చేయడం ద్వారా ADC మార్పిడిని ప్రారంభించాలి:
GO_nDONE = 1; // A / D మార్పిడిని ప్రారంభిస్తుంది
4. గో / డన్ బిట్ తక్కువగా వచ్చే వరకు వేచి ఉండండి: ADC మార్పిడి పూర్తయ్యే వరకు GO / DONE బిట్ ఎక్కువగా ఉంటుంది, అందువల్ల ఈ బిట్ మళ్లీ తక్కువ అయ్యే వరకు మనం వేచి ఉండాలి. కాసేపు లూప్ ఉపయోగించి ఇది చేయవచ్చు.
(GO_nDONE); // A / D మార్పిడి పూర్తయ్యే వరకు వేచి ఉండండి
5. ADRESH మరియు ADRESL రిజిస్టర్ నుండి ADC ఫలితాన్ని పొందండి: Go / DONE బిట్ మళ్లీ తక్కువగా ఉన్నప్పుడు, ADC మార్పిడి పూర్తయిందని అర్థం. ADC యొక్క ఫలితం 10-బిట్ విలువ అవుతుంది. మా MCU 8-బిట్ MCU కాబట్టి ఫలితం ఎగువ 8-బిట్ మరియు తక్కువ 2-బిట్స్ గా విభజించబడింది. ఎగువ 8-బిట్ ఫలితం రిజిస్టర్ ADRESH లో నిల్వ చేయబడుతుంది మరియు దిగువ 2-బిట్ ADRESL రిజిస్టర్లో నిల్వ చేయబడుతుంది. అందువల్ల మన 10-బిట్ ADC విలువను పొందడానికి రిజిస్టర్లలో వీటిని జోడించాలి. ఈ ఫలితం క్రింద చూపిన విధంగా ఫంక్షన్ ద్వారా తిరిగి ఇవ్వబడుతుంది:
తిరిగి ((ADRESH << 8) + ADRESL); // రిటర్న్స్ ఫలితం
ADC ఛానెల్ని ఎంచుకోవడానికి, ADC ని ట్రిగ్గర్ చేయడానికి మరియు ఫలితాన్ని తిరిగి ఇవ్వడానికి ఉపయోగించే పూర్తి ఫంక్షన్ ఇక్కడ చూపబడింది.
సంతకం చేయని పూర్ణాంకం ADC_Read (సంతకం చేయని చార్ ఛానల్) {ADCON0 & = 0x11000101; // ఛానల్ ఎంపిక బిట్లను క్లియర్ చేస్తోంది ADCON0 - = ఛానెల్ << 3; // అవసరమైన బిట్లను అమర్చుట __delay_ms (2); // హోల్డ్ కెపాసిటర్ ఛార్జ్ చేయడానికి సముపార్జన సమయం GO_nDONE = 1; // (GO_nDONE) అయితే A / D మార్పిడిని ప్రారంభిస్తుంది; // A / D మార్పిడి పూర్తి రాబడి కోసం వేచి ఉండండి ((ADRESH << 8) + ADRESL); // రిటర్న్స్ ఫలితం}
ఇప్పుడు మనకు ఒక ఫంక్షన్ ఉంది, ఇది ఛానెల్ ఎంపికను ఇన్పుట్గా తీసుకుంటుంది మరియు మాకు ADC విలువను తిరిగి ఇస్తుంది. అందువల్ల మేము నేరుగా మా లోపల ఈ ఫంక్షన్ కాల్ చేయవచ్చు అయితే మేము ఈ ట్యుటోరియల్ లో ఛానల్ 4 నుండి అనలాగ్ వోల్టేజ్ చదివిన నుండి, లూప్, ఫంక్షన్ కాల్ క్రింది ఉంటుంది.
i = (ADC_Read (4%); // adc ఫలితాన్ని “i” లో నిల్వ చేయండి.
మా ADC యొక్క అవుట్పుట్ను దృశ్యమానం చేయడానికి, మాకు LCD లేదా 7-సెగ్మెంట్ వంటి డిస్ప్లే మాడ్యూల్స్ అవసరం. ఈ ట్యుటోరియల్లో అవుట్పుట్ను ధృవీకరించడానికి మేము 7-సెగ్మెంట్ డిస్ప్లేని ఉపయోగిస్తున్నాము. పిక్ తో 7-సెగ్మెంట్ ఎలా ఉపయోగించాలో తెలుసుకోవాలంటే ఇక్కడ ట్యుటోరియల్ ను అనుసరించండి.
పూర్తి కోడ్ క్రింద ఇచ్చిన మరియు ప్రక్రియ కూడా వివరించబడింది వీడియో చివరిలో.
హార్డ్వేర్ సెటప్ మరియు పరీక్ష:
మా హార్డ్వేర్తో వెళ్లేముందు మామూలుగా ప్రోటీస్ను ఉపయోగించి కోడ్ను అనుకరించండి, ప్రాజెక్ట్ యొక్క స్కీమాటిక్స్ క్రింద చూపబడింది:
పిఐసి మైక్రోకంట్రోలర్తో 4-అంకెల ఏడు సెగ్మెంట్ డిస్ప్లే మాడ్యూల్ యొక్క కనెక్షన్లు మునుపటి ప్రాజెక్ట్ మాదిరిగానే ఉన్నాయి, మేము పిన్ 7 కి అనలాగ్ ఛానల్ 4 కు పొటెన్షియోమీటర్ను జోడించాము. కుండను మార్చడం ద్వారా, వేరియబుల్ వోల్టేజ్ MCU కి పంపబడుతుంది ఇది ADC మాడ్యూల్ చేత చదవబడుతుంది మరియు 7-సెగ్మెంట్ డిస్ప్లే మాడ్యూల్లో ప్రదర్శించబడుతుంది. 4-అంకెల 7-సెగ్మెంట్ డిస్ప్లే మరియు PIC MCU తో దాని ఇంటర్ఫేసింగ్ గురించి మరింత తెలుసుకోవడానికి మునుపటి ట్యుటోరియల్ని తనిఖీ చేయండి.
LED బ్లింకింగ్ ట్యుటోరియల్లో మనం సృష్టించిన అదే PIC మైక్రోకంట్రోలర్ బోర్డ్ను ఇక్కడ ఉపయోగించాము. కనెక్షన్ను భరోసా చేసిన తరువాత ప్రోగ్రామ్ను PIC లోకి అప్లోడ్ చేయండి మరియు మీరు ఇలాంటి అవుట్పుట్ను చూడాలి
ఇక్కడ మనం కుండ నుండి ADC విలువను చదివి, 0-1024 అవుట్పుట్ను 0-5 వోల్ట్లుగా మ్యాప్ చేయడం ద్వారా దానిని వాస్తవ వోల్టేజ్గా మార్చాము (ప్రోగ్రామ్లో చూపిన విధంగా). విలువ 7-విభాగంలో ప్రదర్శించబడుతుంది మరియు మల్టీమీటర్ ఉపయోగించి ధృవీకరించబడుతుంది.
అది ఇప్పుడు, మార్కెట్లో అందుబాటులో ఉన్న అన్ని అనలాగ్ సెన్సార్లను ఉపయోగించడానికి మేము సిద్ధంగా ఉన్నాము, ముందుకు సాగండి మరియు మీకు ప్రయత్నించండి మరియు మీకు ఎప్పటిలాగే ఏవైనా సమస్యలు ఉంటే వ్యాఖ్య విభాగాన్ని ఉపయోగించుకోండి, మేము మీకు సహాయం చేయడానికి సంతోషిస్తాము.