- బిట్ బ్యాంగింగ్ అంటే ఏమిటి?
- బిట్ బ్యాంగింగ్ ఎప్పుడు ఉపయోగించాలి
- బిట్ బ్యాంగింగ్ ద్వారా సీరియల్ కమ్యూనికేషన్ కోసం అల్గోరిథం
- SPI పై బిట్ బ్యాంగింగ్
- బిట్ బ్యాంగింగ్ యొక్క ఉదాహరణ: ఆర్డునోలో SPI కమ్యూనికేషన్
- బిట్ బ్యాంగింగ్ యొక్క ప్రతికూలతలు
- Arduino లో బిట్ బ్యాంగింగ్ ద్వారా UART
ఒక ప్రాజెక్ట్ కోసం ఉపయోగించాల్సిన మైక్రోకంట్రోలర్ను ఎన్నుకునేటప్పుడు పరిగణించబడే అంశాలలో కమ్యూనికేషన్ ఇంటర్ఫేస్లు ఒకటి. ఎంచుకున్న మైక్రోకంట్రోలర్కు ఉత్పత్తి కోసం ఉపయోగించాల్సిన అన్ని ఇతర భాగాలతో కమ్యూనికేట్ చేయడానికి అవసరమైన అన్ని ఇంటర్ఫేస్లు ఉన్నాయని డిజైనర్ నిర్ధారిస్తాడు. మైక్రోకంట్రోలర్పై SPI మరియు I2C వంటి కొన్ని ఇంటర్ఫేస్ల ఉనికి అటువంటి మైక్రోకంట్రోలర్ల ధరను స్థిరంగా పెంచుతుంది మరియు BOM బడ్జెట్ను బట్టి ఇది కావలసిన మైక్రోకంట్రోలర్ను సరసమైనదిగా చేయదు. ఇలాంటి పరిస్థితులలో బిట్ బ్యాంగింగ్ వంటి పద్ధతులు ఆడటానికి వస్తాయి.
బిట్ బ్యాంగింగ్ అంటే ఏమిటి?
బిట్ బ్యాంగింగ్ అనేది సీరియల్ కమ్యూనికేషన్ కోసం ఒక టెక్నిక్, దీనిలో మొత్తం కమ్యూనికేషన్ ప్రాసెస్ అంకితమైన హార్డ్వేర్కు బదులుగా సాఫ్ట్వేర్ ద్వారా నిర్వహించబడుతుంది. డేటాను ప్రసారం చేయడానికి, సాంకేతికతను డేటాను సిగ్నల్స్ మరియు పప్పులుగా ఎన్కోడ్ చేయడానికి సాఫ్ట్వేర్ను ఉపయోగించడం జరుగుతుంది, ఇవి మైక్రోకంట్రోలర్ యొక్క I / O పిన్ యొక్క స్థితిని మార్చటానికి ఉపయోగిస్తారు, ఇది లక్ష్య పరికరానికి డేటాను పంపడానికి Tx పిన్గా పనిచేస్తుంది. డేటాను స్వీకరించడానికి, సాంకేతికత కొన్ని విరామాల తర్వాత Rx పిన్ యొక్క స్థితిని నమూనా బాడ్ రేటు ద్వారా నిర్ణయించబడుతుంది. సింక్రొనైజేషన్, టైమింగ్, లెవల్స్ మొదలైన వాటితో సహా ఈ కమ్యూనికేషన్ను సాధించడానికి అవసరమైన అన్ని పారామితులను సాఫ్ట్వేర్ సెట్ చేస్తుంది, ఇవి సాధారణంగా బిట్ బ్యాంగింగ్ ఉపయోగించనప్పుడు అంకితమైన హార్డ్వేర్ ద్వారా నిర్ణయించబడతాయి.
బిట్ బ్యాంగింగ్ ఎప్పుడు ఉపయోగించాలి
అవసరమైన ఇంటర్ఫేస్తో మైక్రోకంట్రోలర్ అందుబాటులో లేని పరిస్థితుల్లో లేదా అవసరమైన ఇంటర్ఫేస్తో మైక్రోకంట్రోలర్కు మారినప్పుడు బిట్-బ్యాంగింగ్ సాధారణంగా ఉపయోగించబడుతుంది. అనేక ప్రోటోకాల్లను ఉపయోగించి ఒకే పరికరాన్ని కమ్యూనికేట్ చేయడానికి ఇది చౌకైన మార్గాన్ని అందిస్తుంది. గతంలో UART కమ్యూనికేషన్ కోసం మాత్రమే ప్రారంభించబడిన మైక్రోకంట్రోలర్, బిట్ బ్యాంగింగ్ ద్వారా SPI మరియు 12C ఉపయోగించి కమ్యూనికేట్ చేయడానికి అమర్చవచ్చు.
బిట్ బ్యాంగింగ్ ద్వారా సీరియల్ కమ్యూనికేషన్ కోసం అల్గోరిథం
బిట్ బ్యాంగింగ్ను అమలు చేసే కోడ్ విభిన్న మైక్రోకంట్రోలర్లలో విభిన్నంగా ఉండవచ్చు మరియు వేర్వేరు సీరియల్ ప్రోటోకాల్లకు కూడా మారవచ్చు, అయితే బిట్ బ్యాంగింగ్ను అమలు చేసే విధానం / అల్గోరిథం అన్ని ప్లాట్ఫామ్లలో ఒకే విధంగా ఉంటుంది.
ఉదాహరణకు డేటాను పంపడానికి దిగువ నకిలీ కోడ్ ఉపయోగించబడుతుంది;
- ప్రారంభించండి
- ప్రారంభ బిట్ పంపండి
- రిసీవర్ యొక్క బాడ్ రేటుకు అనుగుణంగా సమయం కోసం వేచి ఉండండి
- డేటా బిట్ పంపండి
- రిసీవర్ యొక్క బాడ్ రేటుకు అనుగుణంగా కాలపరిమితి కోసం వేచి ఉండండి
- అన్ని డేటా బిట్స్ పంపబడిందా అని తనిఖీ చేయండి. లేకపోతే, 4 కి వెళ్ళండి. అవును, గోటో 7
- స్టాప్ బిట్ పంపండి
- ఆపు
డేటాను స్వీకరించడం కొంచెం క్లిష్టంగా ఉంటుంది, సాధారణంగా రిసీవర్ పిన్లో డేటా ఎప్పుడు లభిస్తుందో తెలుసుకోవడానికి అంతరాయం ఉపయోగించబడుతుంది. మైక్రోకంట్రోలర్ ఎక్కువ ప్రాసెసింగ్ శక్తిని వృథా చేయకుండా చూసుకోవడానికి ఇది సహాయపడుతుంది. కొన్ని అమలులు మైక్రోకంట్రోలర్లు I / O పిన్లలో దేనినైనా ఉపయోగిస్తున్నప్పటికీ, శబ్దం మరియు లోపాలు, బహుశా నిర్వహించకపోతే, ఎక్కువ. అంతరాయాలను ఉపయోగించి డేటాను స్వీకరించే అల్గోరిథం క్రింద వివరించబడింది.
- ప్రారంభించండి
- Rx పిన్లో అంతరాయాన్ని ప్రారంభించండి
- అంతరాయం ప్రేరేపించినప్పుడు, ప్రారంభ బిట్ను పొందండి
- బాడ్ రేటు ప్రకారం టైమింగ్ కోసం వేచి ఉండండి
- Rx పిన్ చదవండి
- అన్ని డేటా స్వీకరించబడే వరకు 4 నుండి పునరావృతం చేయండి
- బాడ్ రేటు ప్రకారం టైమింగ్ కోసం వేచి ఉండండి
- స్టాప్ బిట్ కోసం తనిఖీ చేయండి
- ఆపు
SPI పై బిట్ బ్యాంగింగ్
పైన చెప్పినట్లుగా, వేర్వేరు ప్రోటోకాల్ల కోసం బిట్ బ్యాంగింగ్ భిన్నంగా పనిచేస్తుంది మరియు ప్రతి ప్రోటోకాల్ గురించి చదవడం, అమలు చేయడానికి ప్రయత్నించే ముందు డేటా ఫ్రేమింగ్ మరియు క్లాకింగ్ను అర్థం చేసుకోవడం చాలా ముఖ్యం. SPI మోడ్ 1 ని ఉదాహరణగా తీసుకుంటే, గడియారం యొక్క మూల విలువ ఎల్లప్పుడూ 0 మరియు డేటా ఎల్లప్పుడూ గడియారం యొక్క పెరుగుతున్న అంచున పంపబడుతుంది లేదా స్వీకరించబడుతుంది. SPI మోడ్ 1 కమ్యూనికేషన్ ప్రోటోకాల్ కోసం టైమింగ్ రేఖాచిత్రం క్రింద చూపబడింది.
దీన్ని అమలు చేయడానికి, కింది అల్గోరిథం ఉపయోగించవచ్చు;
- ప్రారంభించండి
- కమ్యూనికేషన్ ప్రారంభించడానికి SS పిన్ను తక్కువగా సెట్ చేయండి
- పంపాల్సిన డేటా యొక్క మొదటి బిట్కు మాస్టర్ అవుట్ స్లేవ్ ఇన్ (మోసి) కోసం పిన్ను సెట్ చేయండి
- క్లాక్ పిన్ (SCK) ను అధికంగా సెట్ చేయండి, తద్వారా డేటా మాస్టర్ చేత ప్రసారం చేయబడుతుంది మరియు బానిస అందుకుంటుంది
- బానిస నుండి మొదటి బిట్ డేటాను స్వీకరించడానికి మాస్టర్ ఇన్ స్లేవ్ అవుట్ (MISO) యొక్క స్థితిని చదవండి
- SCK తక్కువని సెట్ చేయండి, కాబట్టి డేటాను తదుపరి పెరుగుతున్న అంచున పంపవచ్చు
- అన్ని డేటా బిట్స్ ప్రసారం అయ్యే వరకు 2 కి వెళ్ళండి.
- ప్రసారాన్ని ఆపడానికి SS పిన్ హైని సెట్ చేయండి.
- ఆపు
బిట్ బ్యాంగింగ్ యొక్క ఉదాహరణ: ఆర్డునోలో SPI కమ్యూనికేషన్
ఉదాహరణగా, దిగువ కోడ్ను ఉపయోగించి SPI పై డేటాను ఎలా బిట్-బ్యాంగ్ చేయవచ్చో చూపించడానికి Arduino లో బిట్ బ్యాంగింగ్ ద్వారా SPI కమ్యూనికేషన్ కోసం అల్గోరిథంను అమలు చేద్దాం.
ఆర్డునో యొక్క పిన్లను ఉపయోగించమని ప్రకటించడం ద్వారా మేము ప్రారంభిస్తాము.
const int SSPin = 11; const int SCKPin = 10; const int MISOPin = 9; const int MOSIPin = 8; బైట్ సెండ్డేటా = 64; // పంపాల్సిన విలువ బైట్ స్లేవ్డేటా = 0; // బానిస పంపిన విలువను నిల్వ చేయడానికి
తరువాత, మేము పిన్స్ యొక్క స్థితిని ప్రకటించిన శూన్య సెటప్ () ఫంక్షన్కు వెళ్తాము. డేటాను స్వీకరించే ఏకైక పిన్ అయినందున మాస్టర్ ఇన్ స్లేవ్ అవుట్ (MISO) పిన్ మాత్రమే ఇన్పుట్గా ప్రకటించబడింది. అన్ని ఇతర పిన్లను అవుట్పుట్గా ప్రకటించారు. పిన్ మోడ్లను ప్రకటించిన తరువాత, SS పిన్ HIGH కు సెట్ చేయబడింది. దీనికి కారణం ప్రక్రియ లోపం లేనిదని మరియు కమ్యూనికేషన్ తక్కువకు సెట్ అయినప్పుడు మాత్రమే ప్రారంభమవుతుందని నిర్ధారించడం.
శూన్య సెటప్ () { పిన్మోడ్ (MISOPin, INPUT); పిన్మోడ్ (SSPin, OUTPUT); పిన్మోడ్ (SCKPin, OUTPUT); పిన్మోడ్ (మోసిపిన్, అవుట్పుట్); డిజిటల్ రైట్ (SSPin, HIGH); }
తరువాత, మేము డేటాను పంపడానికి లూప్ను ప్రారంభిస్తాము. ఈ లూప్ డేటాను పదేపదే పంపుతూనే ఉంటుందని గమనించండి.
కమ్యూనికేషన్ యొక్క ప్రారంభాన్ని ప్రారంభించడానికి, SS పిన్ను తక్కువగా వ్రాయడం ద్వారా మేము లూప్ను ప్రారంభిస్తాము మరియు ముందే నిర్వచించిన డేటాను బిట్లుగా విడదీసి పంపే బిట్బాంగ్డేటా ఫంక్షన్కు కాల్ చేస్తాము . ఇది పూర్తయిన తరువాత, డేటా ట్రాన్స్మిషన్ ముగింపును సూచించడానికి మేము SS పిన్ HIGH ను వ్రాస్తాము.
void loop () { DigitalWrite (SSPin, LOW); // ఎస్ఎస్ తక్కువ స్లేవ్డేటా = బిట్బాంగ్డేటా (సెండ్డేటా); // డేటా ట్రాన్స్మిషన్ డిజిటల్ రైట్ (SSPin, HIGH); // మళ్ళీ SS అధికం }
Bitbangdata () ఫంక్షన్ క్రింద రాస్తారు. ఫంక్షన్ పంపాల్సిన డేటాను తీసుకుంటుంది మరియు దానిని బిట్స్గా విచ్ఛిన్నం చేస్తుంది మరియు అల్గోరిథం యొక్క 7 వ దశలో సూచించిన విధంగా ప్రసారం కోసం కోడ్ను లూప్ చేయడం ద్వారా దాన్ని పంపుతుంది.
బైట్ బిట్బాంగ్డేటా (బైట్ _సెండ్) // ఈ ఫంక్షన్ బిట్బ్యాంగింగ్ ద్వారా డేటాను ప్రసారం చేస్తుంది { బైట్ _receive = 0; (int i = 0; i <8; i ++) // బైట్లో 8 బిట్స్ { DigitalWrite (MOSIPin, bitRead (_send, i)); // సెట్ మోసి డిజిటల్ రైట్ (SCKPin, HIGH); // SCK హై బిట్రైట్ (_receive, i, DigitalRead (MISOPin)); // క్యాప్చర్ MISO డిజిటల్ రైట్ (SCKPin, LOW); // SCK తక్కువ } తిరిగి _receive; // అందుకున్న డేటాను తిరిగి ఇవ్వండి }
బిట్ బ్యాంగింగ్ యొక్క ప్రతికూలతలు
బిట్ బ్యాంగింగ్ను స్వీకరించడం బాగా ఆలోచించదగిన నిర్ణయం కావాలి, ఎందుకంటే బిట్ బ్యాంగింగ్కు అనేక నష్టాలు ఉన్నాయి, ఇవి కొన్ని పరిష్కారాలలో అమలు చేయడానికి నమ్మదగినవి కావు. బిట్ బ్యాంగింగ్ మైక్రోకంట్రోలర్ వినియోగించే శక్తిని పెంచుతుంది, ఎందుకంటే ఈ ప్రక్రియ అధికంగా వినియోగించబడుతుంది. అంకితమైన హార్డ్వేర్తో పోల్చితే, బిట్ బ్యాంగింగ్ ఉపయోగించినప్పుడు అవాంతరాలు మరియు జిట్టర్లు వంటి ఎక్కువ కమ్యూనికేషన్ లోపాలు సంభవిస్తాయి, ప్రత్యేకించి ఇతర పనుల మాదిరిగానే మైక్రోకంట్రోలర్ చేత డేటా కమ్యూనికేషన్ నిర్వహిస్తున్నప్పుడు. బిట్ బ్యాంగింగ్ ద్వారా కమ్యూనికేషన్ అంకితమైన హార్డ్వేర్ ఉపయోగించినప్పుడు సంభవించే వేగంతో జరుగుతుంది. కొన్ని అనువర్తనాల్లో ఇది ముఖ్యమైనది కావచ్చు మరియు బిట్ బ్యాంగింగ్ “అంత మంచిది కాదు” ఎంపిక కావచ్చు.
బిట్ బ్యాంగింగ్ అన్ని రకాల సీరియల్ కమ్యూనికేషన్ల కోసం ఉపయోగించబడుతుంది; RS-232, అసమకాలిక సీరియల్ కమ్యూనికేషన్, UART, SPI మరియు I2C.
Arduino లో బిట్ బ్యాంగింగ్ ద్వారా UART
బిట్ బ్యాంగింగ్ యొక్క ప్రసిద్ధ అమలులలో ఒకటి ఆర్డునో సాఫ్ట్వేర్ సీరియల్ లైబ్రరీ, ఇది అంకితమైన హార్డ్వేర్ UART పిన్లను (D0 మరియు D1) ఉపయోగించకుండా UART ద్వారా సంభాషించడానికి Arduino ని అనుమతిస్తుంది. ఆర్డునో బోర్డ్లోని పిన్ల సంఖ్యకు మద్దతు ఇవ్వగలిగినంత యూజర్లు ఎక్కువ సీరియల్ పరికరాలను కనెక్ట్ చేయగలగటం వలన ఇది చాలా సౌలభ్యాన్ని ఇస్తుంది.