- I2C కమ్యూనికేషన్ ప్రోటోకాల్ అంటే ఏమిటి?
- I2C కమ్యూనికేషన్ ఎలా పనిచేస్తుంది?
- I2C కమ్యూనికేషన్ను ఎక్కడ ఉపయోగించాలి?
- MSP430 లో I2C: AD5171 డిజిటల్ పొటెన్టోమీటర్ను నియంత్రించడం
MSP430 అనేది ఎంబెడెడ్ ప్రాజెక్టుల కోసం టెక్సాస్ ఇన్స్ట్రుమెంట్స్ అందించిన ఒక శక్తివంతమైన వేదిక, దాని బహుముఖ స్వభావం అనేక అనువర్తనాలకు మార్గాలను కనుగొనటానికి దీనిని చేసింది మరియు దశ ఇంకా కొనసాగుతోంది. మీరు మా MSP430 ట్యుటోరియల్లను అనుసరిస్తుంటే, ఈ మైక్రోకంట్రోలర్పై మేము ఇప్పటికే చాలా ప్రాథమిక ట్యుటోరియల్లను కవర్ చేశాము. ఇప్పటి నుండి, కమ్యూనికేషన్ పోర్టల్ వంటి మరింత ఆసక్తికరమైన విషయాలలోకి ప్రవేశించగల ప్రాథమికాలను మేము కవర్ చేసాము.
ఎంబెడెడ్ అనువర్తనాల యొక్క విస్తారమైన వ్యవస్థలో, మైక్రోకంట్రోలర్ అన్ని కార్యకలాపాలను స్వయంగా చేయలేడు. కొంత దశలో సమాచారాన్ని పంచుకోవడానికి ఇతర పరికరాలతో కమ్యూనికేట్ చేయవలసి ఉంటుంది, ఈ సమాచారాన్ని పంచుకోవడానికి అనేక రకాలైన కమ్యూనికేషన్ ప్రోటోకాల్లు ఉన్నాయి, అయితే ఎక్కువగా ఉపయోగించినవి USART, IIC, SPI మరియు CAN. ప్రతి కమ్యూనికేషన్ ప్రోటోకాల్ దాని స్వంత ప్రయోజనం మరియు ప్రతికూలతను కలిగి ఉంటుంది. ఈ ట్యుటోరియల్లో మనం నేర్చుకోబోయేది కనుక ఇప్పుడే I2C భాగంపై దృష్టి పెడదాం.
I2C కమ్యూనికేషన్ ప్రోటోకాల్ అంటే ఏమిటి?
IIC అనే పదం “ ఇంటర్ ఇంటిగ్రేటెడ్ సర్క్యూట్స్ ”. ఇది సాధారణంగా I2C లేదా I స్క్వేర్డ్ సి లేదా కొన్ని ప్రదేశాలలో 2-వైర్ ఇంటర్ఫేస్ ప్రోటోకాల్ (TWI) గా సూచించబడుతుంది, అయితే ఇవన్నీ ఒకే విధంగా ఉంటాయి. I2C అనేది సింక్రోనస్ కమ్యూనికేషన్ ప్రోటోకాల్ అర్థం, సమాచారాన్ని పంచుకునే రెండు పరికరాలు తప్పనిసరిగా సాధారణ గడియార సంకేతాన్ని పంచుకోవాలి. సమాచారాన్ని పంచుకోవడానికి దీనికి రెండు వైర్లు మాత్రమే ఉన్నాయి, వీటిలో ఒకటి కాక్ సిగ్నల్ కోసం ఉపయోగించబడుతుంది మరియు మరొకటి డేటాను పంపడానికి మరియు స్వీకరించడానికి ఉపయోగించబడుతుంది.
I2C కమ్యూనికేషన్ ఎలా పనిచేస్తుంది?
I2C కమ్యూనికేషన్ను మొదట ఫిలిప్స్ పరిచయం చేశారు. ఇంతకు ముందు చెప్పినట్లుగా దీనికి రెండు వైర్లు ఉన్నాయి, ఈ రెండు వైర్లు రెండు పరికరాల్లో అనుసంధానించబడతాయి. ఇక్కడ ఒక పరికరాన్ని మాస్టర్ అని, మరొక పరికరాన్ని బానిస అని పిలుస్తారు. కమ్యూనికేషన్ మరియు మాస్టర్ మరియు స్లేవ్ ఇద్దరి మధ్య ఎల్లప్పుడూ జరగాలి. I2C కమ్యూనికేషన్ యొక్క ప్రయోజనం ఏమిటంటే, ఒకటి కంటే ఎక్కువ బానిసలను మాస్టర్కు కనెక్ట్ చేయవచ్చు.
సీరియల్ క్లాక్ (ఎస్సీఎల్) మరియు సీరియల్ డేటా (ఎస్డీఏ) అనే ఈ రెండు వైర్ల ద్వారా పూర్తి కమ్యూనికేషన్ జరుగుతుంది.
సీరియల్ క్లాక్ (ఎస్సీఎల్): మాస్టర్ సృష్టించిన క్లాక్ సిగ్నల్ను బానిసతో పంచుకుంటుంది
సీరియల్ డేటా (SDA): మాస్టర్ మరియు బానిస మధ్య మరియు నుండి డేటాను పంపుతుంది.
ఏ సమయంలోనైనా మాస్టర్ మాత్రమే కమ్యూనికేషన్ను ప్రారంభించగలుగుతారు. బస్సులో ఒకటి కంటే ఎక్కువ బానిసలు ఉన్నందున, మాస్టర్ ప్రతి బానిసను వేరే చిరునామాను ఉపయోగించి సూచించాలి. ప్రసంగించినప్పుడు ఆ నిర్దిష్ట చిరునామా ఉన్న బానిస మాత్రమే సమాచారంతో తిరిగి ప్రత్యుత్తరం ఇస్తాడు, మరికొందరు నిష్క్రమించేవారు. ఈ విధంగా మనం బహుళ పరికరాలతో కమ్యూనికేట్ చేయడానికి ఒకే బస్సును ఉపయోగించవచ్చు.
I2C యొక్క వోల్టేజ్ స్థాయిలు ముందే నిర్వచించబడలేదు. I2C కమ్యూనికేషన్ సరళమైనది, అంటే 5v వోల్ట్తో నడిచే పరికరం, I2C కోసం 5v ని ఉపయోగించవచ్చు మరియు 3.3v పరికరాలు I2C కమ్యూనికేషన్ కోసం 3v ని ఉపయోగించవచ్చు. వేర్వేరు వోల్టేజ్లలో నడుస్తున్న రెండు పరికరాలు, I2C ఉపయోగించి కమ్యూనికేట్ చేయవలసి వస్తే? 5 వి ఐ 2 సి బస్సును 3.3 వి పరికరంతో కనెక్ట్ చేయలేము. ఈ సందర్భంలో వోల్టేజ్ షిఫ్టర్లు రెండు I2C బస్సుల మధ్య వోల్టేజ్ స్థాయిలను సరిపోల్చడానికి ఉపయోగిస్తారు.
లావాదేవీని రూపొందించే కొన్ని షరతులు ఉన్నాయి. ట్రాన్స్మిషన్ ప్రారంభించడం SDA యొక్క పడిపోయే అంచుతో ప్రారంభమవుతుంది, ఇది క్రింద ఉన్న రేఖాచిత్రంలో 'START' కండిషన్ అని నిర్వచించబడింది, ఇక్కడ మాస్టర్ SDA ని తక్కువ సెట్ చేసేటప్పుడు SCL ను వదిలివేస్తుంది.
క్రింద ఉన్న రేఖాచిత్రంలో చూపిన విధంగా, SDA యొక్క పడిపోయే అంచు START పరిస్థితికి హార్డ్వేర్ ట్రిగ్గర్. దీని తరువాత ఒకే బస్సులోని అన్ని పరికరాలు లిజనింగ్ మోడ్లోకి వెళ్తాయి.
అదే పద్ధతిలో, SDA యొక్క పెరుగుతున్న అంచు పైన ఉన్న రేఖాచిత్రంలో 'STOP' కండిషన్గా చూపబడిన ప్రసారాన్ని ఆపివేస్తుంది, ఇక్కడ మాస్టర్ SCL ను అధికంగా వదిలివేస్తుంది మరియు SDA ను అధికంగా వెళ్ళడానికి విడుదల చేస్తుంది. కాబట్టి SDA యొక్క పెరుగుతున్న అంచు ప్రసారాన్ని ఆపివేస్తుంది.
R / W బిట్ క్రింది బైట్ల ప్రసార దిశను సూచిస్తుంది, అది HIGH అయితే బానిస ప్రసారం చేస్తుంది మరియు అది తక్కువగా ఉంటే మాస్టర్ ప్రసారం చేస్తుంది.
ప్రతి గడియార చక్రంలో ప్రతి బిట్ ప్రసారం చేయబడుతుంది, కాబట్టి బైట్ను ప్రసారం చేయడానికి 8 గడియార చక్రాలు పడుతుంది. ప్రతి బైట్ పంపిన లేదా స్వీకరించిన తరువాత, ACK / NACK కోసం తొమ్మిదవ గడియార చక్రం జరుగుతుంది (గుర్తించబడింది / గుర్తించబడలేదు). ఈ ACK బిట్ పరిస్థితిని బట్టి బానిస లేదా మాస్టర్ చేత ఉత్పత్తి అవుతుంది. ACK బిట్ కోసం, SDA 9 వ గడియార చక్రంలో మాస్టర్ లేదా బానిస చేత తక్కువగా సెట్ చేయబడింది. కనుక ఇది ACK లేకపోతే NACK గా పరిగణించబడుతుంది.
I2C కమ్యూనికేషన్ను ఎక్కడ ఉపయోగించాలి?
I2C కమ్యూనికేషన్ స్వల్ప దూర కమ్యూనికేషన్ కోసం మాత్రమే ఉపయోగించబడుతుంది. ఇది స్మార్ట్గా చేయడానికి సమకాలీకరించబడిన గడియారపు పల్స్ ఉన్నందున ఇది ఖచ్చితంగా కొంతవరకు నమ్మదగినది. ఈ ప్రోటోకాల్ ప్రధానంగా సెన్సార్ లేదా ఇతర పరికరాలతో కమ్యూనికేట్ చేయడానికి ఉపయోగించబడుతుంది, ఇది మాస్టర్కు సమాచారాన్ని పంపాలి. మైక్రోకంట్రోలర్ కనీసం అనేక వైర్లను ఉపయోగించి అనేక ఇతర బానిస మాడ్యూళ్ళతో కమ్యూనికేట్ చేయవలసి వచ్చినప్పుడు ఇది చాలా సులభమైంది. మీరు సుదూర కమ్యూనికేషన్ కోసం చూస్తున్నట్లయితే మీరు RS232 ను ప్రయత్నించాలి మరియు మీరు మరింత నమ్మదగిన కమ్యూనికేషన్ కోసం చూస్తున్నట్లయితే మీరు SPI ప్రోటోకాల్ను ప్రయత్నించాలి.
MSP430 లో I2C: AD5171 డిజిటల్ పొటెన్టోమీటర్ను నియంత్రించడం
ఎనర్జియా IDE మా MSP430 ను ప్రోగ్రామ్ చేయడానికి సులభమైన సాఫ్ట్వేర్. ఇది Arduino IDE వలె ఉంటుంది. ఎనర్జియా IDE ని ఉపయోగించి MSP430 తో ప్రారంభించడం గురించి మీరు ఇక్కడ మరింత తెలుసుకోవచ్చు.
కాబట్టి, ఎనర్జియా IDE లో I2C ని ఉపయోగించడానికి మనం wire.h హెడర్ ఫైల్ను చేర్చాలి. పిన్ డిక్లరేషన్ (SDA మరియు SCL) వైర్ లైబ్రరీ లోపల ఉంది , కాబట్టి మేము సెటప్ ఫంక్షన్లో ప్రకటించాల్సిన అవసరం లేదు.
నమూనా ఉదాహరణలు IDE యొక్క ఉదాహరణ మెనులో చూడవచ్చు. ఉదాహరణలలో ఒకటి క్రింద వివరించబడింది:
I2C సింక్రోనస్ సీరియల్ ప్రోటోకాల్ ద్వారా కమ్యూనికేట్ చేసే అనలాగ్ పరికరాలను AD5171 డిజిటల్ పొటెన్టోమీటర్ ఎలా నియంత్రించాలో ఈ ఉదాహరణ చూపిస్తుంది. MSP యొక్క I2C వైర్ లైబ్రరీని ఉపయోగించి, డిజిటల్ పాట్ 64 స్థాయిల నిరోధకత ద్వారా అడుగుపెడుతుంది, LED ని క్షీణిస్తుంది.
మొదట, మేము i2c కమ్యూనికేషన్కు బాధ్యత వహించే లైబ్రరీని చేర్చుతాము, అంటే వైర్ లైబ్రరీ
# చేర్చండి
లో సెటప్ ఫంక్షన్, మేము ద్వారా వైర్ లైబ్రరీ మొదలుపెడతాయి .కుక్క () ఫంక్షన్.
శూన్య సెటప్ () { వైర్.బెగిన్ (); }
పొటెన్షియోమీటర్ విలువలను నిల్వ చేయడానికి వేరియబుల్ వాల్ను ప్రారంభించండి
బైట్ వాల్ = 0;
లో లూప్ ఫంక్షన్, మేము ఉంటుంది i2c బానిస పరికరం ప్రసార మొదలు IC యొక్క డేటాషీట్ లో ఇవ్వబడుతుంది పరికర చిరునామా పేర్కొనడం ద్వారా (ఈ సందర్భంలో డిజిటల్ potentiometer IC లో).
void loop () { Wire.beginTransmission (44); // పరికరం # 44 (0x2c) కు ప్రసారం చేయండి
తదనంతరం, క్యూ బైట్లు అనగా మీరు రైట్ () ఫంక్షన్తో ప్రసారం కోసం ఐసికి పంపాలనుకుంటున్న డేటా.
వైర్.రైట్ (బైట్ (0x00)); // ఇన్స్ట్రక్షన్ బైట్ వైర్.రైట్ (వాల్) పంపుతుంది ; // పొటెన్షియోమీటర్ విలువ బైట్ను పంపుతుంది
ఎండ్ట్రాన్స్మిషన్ () అని పిలవడం ద్వారా వాటిని ప్రసారం చేయండి.
వైర్.ఎండ్ ట్రాన్స్మిషన్ (); // వాల్ ++ ప్రసారం ఆపండి ; // ఇంక్రిమెంట్ విలువ (val == 64) {// 64 వ స్థానానికి చేరుకుంటే (గరిష్టంగా) val = 0; // అత్యల్ప విలువ నుండి ప్రారంభించండి } ఆలస్యం (500); }