- పదార్థాలు అవసరం
- STM8S103F3P6 పై ADC
- STM8S పై ADC విలువలను చదవడానికి సర్క్యూట్ రేఖాచిత్రం మరియు LCD లో ప్రదర్శిస్తుంది
- STM8S103F3P6 కోసం ADC లైబ్రరీ
- ఎల్సిడిలో అనలాగ్ వోల్టేజ్ మరియు డిస్ప్లేని చదవడానికి STM8S ప్రోగ్రామ్
- STM8S ఉపయోగించి రెండు పొటెన్షియోమీటర్ నుండి అనలాగ్ వోల్టేజ్ చదవడం
మీరు మా STM8S మైక్రోకంట్రోలర్ ట్యుటోరియల్స్ ను అనుసరిస్తున్న రెగ్యులర్ రీడర్ అయితే, మా చివరి ట్యుటోరియల్ లో, STM8 లతో 16x2 LCD ని ఎలా ఇంటర్ఫేస్ చేయాలో నేర్చుకున్నామని మీకు తెలుసు. ఇప్పుడు, ఈ ట్యుటోరియల్లో దానితో ముందుకు సాగితే, మన STM8S103F3P6 మైక్రోకంట్రోలర్లో ADC లక్షణాన్ని ఎలా ఉపయోగించాలో నేర్చుకుంటాము. ADC అనేది మైక్రోకంట్రోలర్పై చాలా ఉపయోగకరమైన పరిధీయ, ఇది తరచూ వోల్టేజ్, కరెంట్, ఉష్ణోగ్రత, తేమ మొదలైన స్థిరమైన మార్పులో ఉన్న యూనిట్లను కొలవడానికి ఎంబెడెడ్ ప్రోగ్రామర్లచే ఉపయోగించబడుతుంది.
మనకు తెలిసినట్లుగా “మేము డిజిటల్ పరికరాలతో అనలాగ్ ప్రపంచంలో జీవిస్తున్నాము”, అంటే మన చుట్టూ ఉన్న గాలి వేగం, కాంతి తీవ్రత, ఉష్ణోగ్రత, మరియు వేగం, వేగం, పీడనం మొదలైన వాటితో మనం వ్యవహరించే ప్రతిదీ ప్రకృతిలో అనలాగ్. కానీ మా మైక్రోకంట్రోలర్లు మరియు మైక్రోప్రాసెసర్లు డిజిటల్ పరికరాలు మరియు అవి అనలాగ్ టు డిజిటల్ కన్వర్టర్స్ (ఎడిసి) అనే ముఖ్యమైన పరిధీయ లేకుండా ఈ పారామితులను కొలవలేవు. కాబట్టి ఈ వ్యాసంలో, COMIC C కంపైలర్తో STM8S మైక్రోకంట్రోలర్లో ADC ని ఎలా ఉపయోగించాలో నేర్చుకుందాం.
పదార్థాలు అవసరం
ఈ వ్యాసంలో, మేము రెండు పొటెన్షియోమీటర్ల నుండి రెండు అనలాగ్ వోల్టేజ్ విలువలను చదువుతాము మరియు దాని ADC విలువను 16x2 LCD డిస్ప్లేలో ప్రదర్శిస్తాము. దీన్ని చేయడానికి, మాకు ఈ క్రింది భాగాలు అవసరం.
- STM8S103F3P6 అభివృద్ధి బోర్డు
- ST- లింక్ V2 ప్రోగ్రామర్
- 16x2 LCD
- పొటెన్టోమీటర్లు
- వైర్లను కనెక్ట్ చేస్తోంది
- 1 కె రెసిస్టర్
STM8S103F3P6 పై ADC
అనేక రకాల ADC లు ఉన్నాయి మరియు ప్రతి మైక్రోకంట్రోలర్కు దాని స్వంత లక్షణాలు ఉన్నాయి. STM8S103F3P6 లో, మాకు 5 ఛానల్ మరియు 10-బిట్ రిజల్యూషన్ ఉన్న ADC ఉంది ; 10-బిట్ రిజల్యూషన్తో, మేము డిజిటల్ విలువను 0 నుండి 1024 వరకు కొలవగలుగుతాము మరియు 5 ఛానల్ ADC మనకు మైక్రోకంట్రోలర్పై 5 పిన్లు ఉన్నాయని సూచిస్తుంది, ఇవి ADC కి మద్దతు ఇవ్వగలవు, ఈ 5 పిన్లు క్రింది చిత్రంలో హైలైట్ చేయబడ్డాయి.
మీరు చూడగలిగినట్లుగా, ఈ ఐదు పిన్లు (AIN2, AIN3, AIN4, AIN5, మరియు AIN6) ఇతర పెరిఫెరల్స్తో మల్టీప్లెక్స్ చేయబడ్డాయి, అంటే కేవలం ADC పిన్గా పనిచేయడమే కాకుండా, ఈ పిన్లను ఇతర కమ్యూనికేషన్లను నిర్వహించడానికి కూడా ఉపయోగించవచ్చు, పిన్ 2 మరియు 3 (AIN5 మరియు AIN 6) ADC కోసం మాత్రమే ఉపయోగించబడవు, కానీ సీరియల్ కమ్యూనికేషన్ మరియు GPIO ఫంక్షన్లకు కూడా ఉపయోగించవచ్చు. మూడు ప్రయోజనాల కోసం ఒకే పిన్ను ఉపయోగించడం సాధ్యం కాదని గమనించండి, కాబట్టి మేము ఈ రెండు పిన్లను ADC కోసం ఉపయోగిస్తుంటే, అప్పుడు మేము సీరియల్ కమ్యూనికేషన్ చేయలేము. STM8S103P36 కోసం ఇతర ముఖ్యమైన ADC లక్షణాలను డేటాషీట్ నుండి తీసిన క్రింది పట్టికలో చూడవచ్చు.
పై పట్టికలో, Vdd ఆపరేటింగ్ వోల్టేజ్ను సూచిస్తుంది మరియు Vss భూమిని సూచిస్తుంది. కాబట్టి మా డెవలప్మెంట్ బోర్డులో మా విషయంలో, 3.3 విలో మైక్రోకంట్రోలర్ పనిచేస్తోంది, మీరు STM8S ట్యుటోరియల్తో ప్రారంభించడం నుండి డెవలప్మెంట్ బోర్డు సర్క్యూట్ రేఖాచిత్రాన్ని తనిఖీ చేయవచ్చు. ఆపరేటింగ్ వోల్టేజ్ వలె 3.3V తో, మా ADC క్లాక్ ఫ్రీక్వెన్సీని 1 నుండి 4MHz మధ్య సెట్ చేయవచ్చు మరియు మా మార్పిడి వోల్టేజ్ పరిధి 0V నుండి 3.3V మధ్య ఉంటుంది. అంటే 0V (Vss) అందించినప్పుడు మా 10-బిట్ ADC 0 చదువుతుంది మరియు 3.3V (Vdd) అందించినప్పుడు గరిష్టంగా 1024 చదువుతుంది. అవసరమైతే MCU యొక్క ఆపరేటింగ్ వోల్టేజ్ను మార్చడం ద్వారా మేము ఈ 0-5V ని సులభంగా మార్చవచ్చు.
STM8S పై ADC విలువలను చదవడానికి సర్క్యూట్ రేఖాచిత్రం మరియు LCD లో ప్రదర్శిస్తుంది
ఈ ప్రాజెక్ట్లో ఉపయోగించిన పూర్తి సర్క్యూట్ రేఖాచిత్రం క్రింద ఇవ్వబడింది, ఇది మేము ఇంతకుముందు చర్చించిన STM8S LCD ట్యుటోరియల్కు చాలా పోలి ఉంటుంది.
మీరు గమనిస్తే, LCD కాకుండా అదనపు భాగాలు POT_1 మరియు POT_2 అనే రెండు పొటెన్షియోమీటర్లు . ఈ కుండలు పిసి 4 మరియు పిడి 6 పోర్టులకు అనుసంధానించబడి ఉన్నాయి, ఇవి ముందు పిన్అవుట్ చిత్రంపై చర్చించినట్లు ANI2 మరియు ANI6 పిన్స్.
పొటెన్షియోమీటర్లు అనుసంధానించబడిన విధంగా అనుసంధానించబడి ఉంటాయి, మనం దానిని మార్చినప్పుడు, మన అనలాగ్ పిన్లపై 0-5 V పొందుతాము. ఈ అనలాగ్ వోల్టేజ్ను డిజిటల్ విలువలో (0 నుండి 1024 వరకు) చదివి ఎల్సిడి తెరపై ప్రదర్శించడానికి మేము మా కంట్రోలర్ను ప్రోగ్రామింగ్ చేస్తాము. అప్పుడు మేము సమానమైన వోల్టేజ్ విలువను కూడా లెక్కించి దానిని ఎల్సిడిలో ప్రదర్శిస్తాము, మా కంట్రోలర్ 3.3 వితో శక్తినిస్తుందని గుర్తుంచుకోండి, కాబట్టి మేము ఎడిసి పిన్కు 5 విని అందించినప్పటికీ, అది 0 వి నుండి 3.3 వి వరకు మాత్రమే చదవగలుగుతుంది.
కనెక్షన్లు పూర్తయిన తర్వాత, క్రింద చూపిన విధంగా నా హార్డ్వేర్ ఇలా కనిపిస్తుంది. మీరు కుడి వైపున రెండు పొటెన్షియోమీటర్లను మరియు ఎడమవైపు ST- లింక్ ప్రోగ్రామర్ను చూడవచ్చు.
STM8S103F3P6 కోసం ADC లైబ్రరీ
STM8S లో ADC కార్యాచరణ కోసం ప్రోగ్రామ్ చేయడానికి, మేము SPL లైబ్రరీలతో పాటు కాస్మిక్ సి కంపైలర్ను ఉపయోగిస్తాము. ప్రక్రియలను సులభతరం చేయడానికి, ఈ క్రింది లింక్తో గిట్హబ్లో కనుగొనగలిగే మరో హెడర్ ఫైల్ను తయారు చేసాను.
STM8S103F3P6 కోసం ADC లైబ్రరీ
మీరు ఏమి చేస్తున్నారో మీకు తెలిస్తే, మీరు పై కోడ్ను ఉపయోగించి హెడర్ ఫైల్ను సృష్టించవచ్చు మరియు దానిని మీ ప్రాజెక్ట్ పేజీలోని “ఫైల్లను చేర్చండి” డైరెక్టరీకి జోడించవచ్చు. మీ ప్రోగ్రామింగ్ పర్యావరణం మరియు కంపైలర్ను ఎలా సెటప్ చేయాలో తెలుసుకోవడానికి STM8S ట్యుటోరియల్తో ప్రారంభించడం అనుసరించండి. మీ సెటప్ సిద్ధమైన తర్వాత, మీ IDE కింది హెడర్ ఫైళ్ళను కలిగి ఉండాలి, కనీసం ఎరుపు రంగులో ఉంటాయి.
పై హెడర్ ఫైల్ ADC_Read () అనే ఫంక్షన్ను కలిగి ఉంటుంది. ఏ పిన్ వద్దనైనా ADC విలువను పొందడానికి ఈ ఫంక్షన్ను మీ ప్రధాన ప్రోగ్రామ్లో పిలుస్తారు. ఉదాహరణకు, ADC_Read (AN2) ఫలితంగా పిన్ AN2 పై ADC విలువను తిరిగి ఇస్తుంది. ఫంక్షన్ క్రింద చూపబడింది.
సంతకం చేయని పూర్ణాంకం ADC_Read (ADC_CHANNEL_TypeDef ADC_Channel_Number) {సంతకం చేయని పూర్ణాంక ఫలితం = 0; ADC1_DeInit (); ADC1_Init (ADC1_CONVERSIONMODE_CONTINUOUS, ADC_Channel_Number, ADC1_PRESSEL_FCPU_D18, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHLITT; ADC1_Cmd (ENABLE); ADC1_StartConversion (); అయితే (ADC1_GetFlagStatus (ADC1_FLAG_EOC) == FALSE); ఫలితం = ADC1_GetConversionValue (); ADC1_ClearFlag (ADC1_FLAG_EOC); ADC1_DeInit ();
మీరు చూస్తున్నట్లుగా, మేము ఈ ఫంక్షన్కు ఎనిమిది పారామితులను పాస్ చేయవచ్చు మరియు ఇది ADC ఎలా కాన్ఫిగర్ చేయబడిందో నిర్వచిస్తుంది. పై మా లైబ్రరీ కోడ్లో, మేము మార్పిడి మోడ్ను నిరంతరాయంగా సెట్ చేసి, ఆపై ఛానెల్ నంబర్ను పరామితిని దాటవేస్తాము. ఆపై మేము మా కంట్రోలర్ యొక్క CPU ఫ్రీక్వెన్సీని సెట్ చేయాలి, అప్రమేయంగా (మీరు బాహ్య క్రిస్టల్ను కనెక్ట్ చేయకపోతే), మీ STM8S 16Mhz అంతర్గత ఓసిలేటర్తో పని చేస్తుంది. కాబట్టి మేము “ ADC1_PRESSEL_FCPU_D18 ” ను ప్రీ- స్కేలర్ విలువగా పేర్కొన్నాము. ఈ ఫంక్షన్ లోపల, మేము SPL stm8s_adc1.h హెడర్ ఫైల్ ద్వారా నిర్వచించబడిన ఇతర పద్ధతులను ఉపయోగిస్తున్నాము. మేము ADC పిన్లను డి-ప్రారంభించడం ద్వారా ప్రారంభిస్తాము మరియు తరువాత ADC పరిధీయతను ప్రారంభించడానికి ADC1_Init () . SPL యూజర్ మాన్యువల్ నుండి ఈ ఫంక్షన్ యొక్క నిర్వచనం క్రింద చూపబడింది.
తరువాత, మేము టైమర్ ఉపయోగించి బాహ్య ట్రిగ్గర్ను సెట్ చేస్తాము మరియు బాహ్య ట్రిగ్గర్ను ఆపివేస్తాము ఎందుకంటే మేము దానిని ఇక్కడ ఉపయోగించలేము. ఆపై మనకు అమరిక కుడి వైపున ఉంది మరియు చివరి రెండు పారామితులు ష్మిట్ ట్రిగ్గర్ను సెట్ చేయడానికి ఉపయోగించబడతాయి, కాని మేము ఈ ట్యుటోరియల్ కోసం దానిని డిసేబుల్ చేస్తాము. కాబట్టి, చిన్నదిగా చెప్పాలంటే, బాహ్య ట్రిగ్గర్ మరియు ష్మిట్ ట్రిగ్గర్ నిలిపివేయబడిన అవసరమైన ADC పిన్పై నిరంతర మార్పిడి మోడ్లో మా ADC పని చేస్తుంది. బాహ్య ట్రిగ్గర్ లేదా ష్మిట్ ట్రిగ్గర్ ఎంపికను ఎలా ఉపయోగించాలో మీకు మరింత సమాచారం అవసరమైతే మీరు డేటాషీట్ ను తనిఖీ చేయవచ్చు, మేము ఈ ట్యుటోరియల్ లో చర్చించము.
ఎల్సిడిలో అనలాగ్ వోల్టేజ్ మరియు డిస్ప్లేని చదవడానికి STM8S ప్రోగ్రామ్
Main.c ఫైల్లో ఉపయోగించిన పూర్తి కోడ్ను ఈ పేజీ దిగువన చూడవచ్చు. అవసరమైన హెడర్ ఫైల్స్ మరియు సోర్స్ ఫైళ్ళను జోడించిన తరువాత, మీరు నేరుగా ప్రధాన ఫైల్ను కంపైల్ చేయగలరు. ప్రధాన ఫైల్లోని కోడ్ యొక్క వివరణ క్రింది విధంగా ఉంది. మునుపటి ట్యుటోరియల్లో మేము ఇప్పటికే చర్చించినందున నేను STM8S LCD ప్రోగ్రామ్ను వివరించను.
కోడ్ యొక్క ఉద్దేశ్యం రెండు పిన్స్ నుండి ADC విలువలను చదివి వోల్టేజ్ విలువగా మార్చడం. మేము ఎల్సిడిలో ఎడిసి విలువ మరియు వోల్టేజ్ విలువ రెండింటినీ ప్రదర్శిస్తాము. కాబట్టి, నేను LCD_Print Var అనే ఫంక్షన్ను ఉపయోగించాను, ఇది పూర్ణాంక ఆకృతిలో వేరియబుల్ను తీసుకుంటుంది మరియు దానిని LCD లో ప్రదర్శించడానికి ఒక అక్షరానికి మారుస్తుంది. వేరియబుల్ నుండి ప్రతి అంకెను పొందడానికి మేము సాధారణ మాడ్యులస్ (%) మరియు డివైడ్ (/) ఆపరేటర్లను ఉపయోగించాము మరియు క్రింద చూపిన విధంగా d1, d2, d3 మరియు d4 వంటి వేరియబుల్స్లో ఉంచాము. అప్పుడు మేము ఈ అక్షరాలను LCD లో ప్రదర్శించడానికి LCD_Print_Char ఫంక్షన్ను ఉపయోగించవచ్చు.
శూన్యమైన LCD_Print_Var (int var) {char d4, d3, d2, d1; d4 = var% 10 + '0'; d3 = (var / 10)% 10 + '0'; d2 = (var / 100)% 10 + '0'; d1 = (var / 1000) + '0'; ఎల్సిడి_ప్రింట్_చార్ (డి 1); ఎల్సిడి_ప్రింట్_చార్ (డి 2); ఎల్సిడి_ప్రింట్_చార్ (డి 3); ఎల్సిడి_ప్రింట్_చార్ (డి 4); }
ప్రధాన ఫంక్షన్ క్రింద, మనకు నాలుగు వేరియబుల్స్ డిక్లేర్డ్ ఉన్నాయి. వాటిలో రెండు ADC విలువను (0 నుండి 1024 వరకు) ఆదా చేయడానికి ఉపయోగించబడతాయి మరియు మిగతా రెండు వాస్తవ వోల్టేజ్ విలువను పొందడానికి ఉపయోగించబడతాయి.
సంతకం చేయని పూర్ణాంకం ADC_value_1 = 0; సంతకం చేయని పూర్ణాంకం ADC_value_2 = 0; int ADC_voltage_1 = 0; int ADC_voltage_2 = 0;
తరువాత, అనలాగ్ వోల్టేజ్ చదవడానికి మేము GPIO పిన్స్ మరియు క్లాక్ కాన్ఫిగరేషన్ను సిద్ధం చేయాలి. ఇక్కడ మనం పిన్స్ AIN2 మరియు AIN6 నుండి అనలాగ్ వోల్టేజ్ను చదువుతాము, అవి వరుసగా పిన్స్ PC4 మరియు PD6. క్రింద చూపిన విధంగా మేము ఈ పిన్ను తేలియాడే స్థితిలో నిర్వచించాలి. మేము ADC కోసం గడియార పరిధీయతను కూడా ప్రారంభిస్తాము.
CLK_PeripheralClockConfig (CLK_PERIPHERAL_ADC, ENABLE); // ADC GPIO_Init (GPIOC, GPIO_PIN_4, GPIO_MODE_IN_FL_IT) కోసం పరిధీయ గడియారాన్ని ప్రారంభించండి; GPIO_Init (GPIOC, GPIO_PIN_4, GPIO_MODE_IN_FL_IT);
ఇప్పుడు పిన్స్ సిద్ధంగా ఉన్నాయి, అనలాగ్ వోల్టేజ్ చదవడానికి మనం అనంతం అయితే లూప్ లోకి వెళ్ళాలి. మన హెడర్ ఫైల్ ఉన్నందున, ఈ క్రింది పంక్తులను ఉపయోగించి పిన్స్ AIN2 మరియు AIN 6 నుండి అనలాగ్ వోల్టేజ్ను సులభంగా చదవగలం.
ADC_value_1 = ADC_Read (AIN2); ADC_value_2 = ADC_Read (AIN6);
తదుపరి దశ ఈ ADC పఠనాన్ని (0 నుండి 1023 వరకు) అనలాగ్ వోల్టేజ్గా మార్చడం. ఈ విధంగా, పిన్ AIN2 మరియు AIN6 లకు ఇచ్చిన ఖచ్చితమైన వోల్టేజ్ విలువను మనం ప్రదర్శించవచ్చు. అనలాగ్ వోల్టేజ్ను లెక్కించడానికి సూత్రాలను ఇవ్వవచ్చు-
అనలాగ్ వోల్టేజ్ = ADC పఠనం * (3300/1023)
STM8S103F3 కంట్రోలర్లలో మా విషయంలో, మాకు 10-బిట్ రిజల్యూషన్తో ADC ఉంది, కాబట్టి మేము 1023 (2 ^ 10) ను ఉపయోగించాము . మా అభివృద్ధి శక్తులపై 3.3V తో నియంత్రిక 3300, కాబట్టి మేము పై సూత్రాలలో 3300 ను 1023 ద్వారా విభజించాము. సుమారు 3300/1023 మాకు 3.226 ఇస్తుంది, కాబట్టి మా ప్రోగ్రామ్లో, ADC వోల్టేజ్ను ఉపయోగించి వాస్తవ ADC వోల్టేజ్ను కొలవడానికి ఈ క్రింది పంక్తులు ఉన్నాయి.
ADC_voltage_1 = ADC_value_1 * (3.226); // (3300/1023 = ~ 3.226) ADC విలువ 1 నుండి 0 నుండి 3300mV ADC_voltage_2 = ADC_value_2 * (3.226) గా మార్చండి; // ADC విలువ 1 నుండి 0 నుండి 3300mV గా మార్చండి
కోడ్ యొక్క మిగిలిన భాగం ఈ నాలుగు విలువలను LCD స్క్రీన్లో ప్రదర్శించడానికి మాత్రమే ఉపయోగించబడుతుంది. మాకు 500ms ఆలస్యం కూడా ఉంది, తద్వారా ప్రతి 500mS కి LCD నవీకరించబడుతుంది. మీకు వేగంగా నవీకరణలు అవసరమైతే దీన్ని మరింత తగ్గించవచ్చు.
STM8S ఉపయోగించి రెండు పొటెన్షియోమీటర్ నుండి అనలాగ్ వోల్టేజ్ చదవడం
కోడ్ను కంపైల్ చేసి, దాన్ని మీ డెవలప్మెంట్ బోర్డుకు అప్లోడ్ చేయండి. మీకు ఏదైనా కంపైలింగ్ లోపం వస్తే, ఇంతకు ముందు చర్చించినట్లు మీరు అన్ని హెడర్ ఫైల్స్ మరియు సోర్స్ ఫైళ్ళను జోడించారని నిర్ధారించుకోండి. కోడ్ అప్లోడ్ అయిన తర్వాత, మీరు “STM8S లో ADC” అని ఒక చిన్న స్వాగత సందేశాన్ని చూడాలి, ఆపై మీరు ఈ క్రింది స్క్రీన్ను చూడాలి.
D1 మరియు D2 విలువ వరుసగా పిన్ Ain2 మరియు AIN6 నుండి ADC విలువను సూచిస్తాయి. కుడి వైపున, మనకు సమానమైన వోల్టేజ్ విలువలు కూడా ప్రదర్శించబడతాయి. ఈ విలువ వరుసగా పిన్ AIN2 మరియు AIN6 లలో కనిపించే వోల్టేజ్కు సమానంగా ఉండాలి. మల్టీమీటర్ ఉపయోగించి మనం దాని కోసం తనిఖీ చేయవచ్చు, వోల్టేజ్ విలువ కూడా తదనుగుణంగా మారుతుందో లేదో తనిఖీ చేయడానికి మేము పొటెన్షియోమీటర్లను కూడా మార్చవచ్చు.
పూర్తి పనిని ఈ క్రింది వీడియోలో కూడా చూడవచ్చు. మీరు ట్యుటోరియల్ని ఆస్వాదించారని మరియు ఉపయోగకరమైనదాన్ని నేర్చుకున్నారని ఆశిస్తున్నాము, మీకు ఏవైనా ప్రశ్నలు ఉంటే, వాటిని క్రింది వ్యాఖ్య విభాగంలో ఉంచండి. చర్చను ప్రారంభించడానికి లేదా ఇతర సాంకేతిక ప్రశ్నలను పోస్ట్ చేయడానికి మీరు మా ఫోరమ్లను కూడా ఉపయోగించవచ్చు.