Arduino - इंटर इंटीग्रेटेड सर्किट

इंटर-इंटीग्रेटेड सर्किट (I2C) एक नई पीढ़ी के माइक्रोकंट्रोलर और विशेष एकीकृत सर्किट के बीच सीरियल डेटा एक्सचेंज के लिए एक प्रणाली है। इसका उपयोग तब किया जाता है जब उनके बीच की दूरी कम होती है (रिसीवर और ट्रांसमीटर आमतौर पर एक ही मुद्रित बोर्ड पर होते हैं)। कनेक्शन दो कंडक्टरों के माध्यम से स्थापित किया गया है। एक का उपयोग डेटा ट्रांसफर के लिए किया जाता है और दूसरे का उपयोग सिंक्रोनाइज़ेशन (क्लॉक सिग्नल) के लिए किया जाता है।

जैसा कि निम्नलिखित आकृति में देखा गया है, एक उपकरण हमेशा एक मास्टर होता है। यह संचार शुरू होने से पहले एक दास चिप को संबोधित करता है। इस तरह, एक माइक्रोकंट्रोलर 112 विभिन्न उपकरणों के साथ संचार कर सकता है। बॉड दर आमतौर पर 100 Kb / सेकंड (मानक मोड) या 10 Kb / सेकंड (धीमी बॉड दर मोड) है। 3.4 एमबी / सेकंड की बॉड दर वाले सिस्टम हाल ही में दिखाई दिए हैं। उपकरणों के बीच की दूरी, जो एक I2C बस पर संचार करती है, कई मीटर तक सीमित है।

बोर्ड I2C पिंस

I2C बस में दो सिग्नल होते हैं - एससीएल और एसडीए। एससीएल घड़ी संकेत है, और एसडीए डेटा सिग्नल है। वर्तमान बस मास्टर हमेशा घड़ी संकेत उत्पन्न करता है। कुछ दास डिवाइस मास्टर को अधिक डेटा भेजने में देरी के लिए कई बार घड़ी को कम कर सकते हैं (या मास्टर को इसे देखने का प्रयास करने से पहले डेटा तैयार करने के लिए अधिक समय की आवश्यकता होती है)। इसे "क्लॉक स्ट्रेचिंग" के रूप में जाना जाता है।

विभिन्न Arduino बोर्डों के लिए निम्नलिखित पिन हैं -

  • ऊनो, प्रो मिनी ए 4 (एसडीए), ए 5 (एससीएल)
  • मेगा, देय 20 (एसडीए), 21 (एससीएल)
  • लियोनार्डो, यूं 2 (एसडीए), 3 (एससीएल)

अरुडिनो आई 2 सी

हमारे पास दो मोड हैं - मास्टर कोड और दास कोड - I2C का उपयोग करके दो Arduino बोर्डों को जोड़ने के लिए। वे हैं -

  • मास्टर ट्रांसमीटर / स्लेव रिसीवर
  • मास्टर रिसीवर / गुलाम ट्रांसमीटर

मास्टर ट्रांसमीटर / स्लेव रिसीवर

आइए अब देखते हैं कि मास्टर ट्रांसमीटर और दास रिसीवर क्या है।

मास्टर ट्रांसमीटर

वायर लाइब्रेरी को आरंभ करने के लिए और मास्टर या दास के रूप में I2C बस में शामिल होने के लिए निम्न कार्यों का उपयोग किया जाता है। इसे सामान्य रूप से केवल एक बार कहा जाता है।

  • Wire.begin(address) - पता हमारे मामले में 7-बिट दास का पता है क्योंकि मास्टर निर्दिष्ट नहीं है और यह मास्टर के रूप में बस में शामिल हो जाएगा।

  • Wire.beginTransmission(address) - दिए गए पते के साथ I2C स्लेव डिवाइस पर ट्रांसमिशन शुरू करें।

  • Wire.write(value) - एक मास्टर से गुलाम डिवाइस तक ट्रांसमिशन के लिए कतार बाइट्स (इन-टू-कॉल टू स्टार्टट्रांसमीशन () और एंडट्रांस एडमिशन ())।

  • Wire.endTransmission() - एक गुलाम डिवाइस के लिए एक प्रसारण को समाप्त करता है जो startTransmission () द्वारा शुरू किया गया था और उन बाइट्स को प्रसारित करता है जो वायर द्वारा लिखित थे। ()।

Example

#include <Wire.h> //include wire library

void setup() //this will run only once { 
   Wire.begin(); // join i2c bus as master
} 

short age = 0; 

void loop() {   
   Wire.beginTransmission(2); 
   // transmit to device #2
   Wire.write("age is = ");
   Wire.write(age); // sends one byte
   Wire.endTransmission(); // stop transmitting
   delay(1000); 
}

दास प्राप्त करनेवाला

निम्नलिखित कार्यों का उपयोग किया जाता है -

  • Wire.begin(address) - पता 7-बिट दास का पता है।

  • Wire.onReceive(received data handler) - एक दास डिवाइस को मास्टर से डेटा प्राप्त होने पर फंक्शन कहा जाता है।

  • Wire.available() - वायर.डर () के साथ पुनर्प्राप्ति के लिए उपलब्ध बाइट्स की संख्या लौटाता है। इसे वायर.ऑनर्सिव () हैंडलर के अंदर कहा जाना चाहिए।

Example

#include <Wire.h> //include wire library

void setup() {  //this will run only once
   Wire.begin(2); // join i2c bus with address #2
   Wire.onReceive(receiveEvent); // call receiveEvent when the master send any thing 
   Serial.begin(9600); // start serial for output to print what we receive 
}

void loop() {   
   delay(250); 
}

//-----this function will execute whenever data is received from master-----//

void receiveEvent(int howMany) { 
   while (Wire.available()>1) // loop through all but the last {
      char c = Wire.read(); // receive byte as a character
      Serial.print(c); // print the character
   }
}

मास्टर रिसीवर / गुलाम ट्रांसमीटर

आइए अब देखते हैं कि मास्टर रिसीवर और दास ट्रांसमीटर क्या है।

मास्टर रिसीवर

मास्टर, अनुरोध करने के लिए क्रमादेशित है, और फिर डेटा के बाइट्स को पढ़ा जाता है जो विशिष्ट रूप से संबोधित दास अर्डुइनो से भेजे जाते हैं।

निम्नलिखित फ़ंक्शन का उपयोग किया जाता है -

Wire.requestFrom(address,number of bytes)- एक दास डिवाइस से बाइट्स का अनुरोध करने के लिए मास्टर द्वारा उपयोग किया जाता है। बाइट्स तब फ़ंक्शंस वायर के साथ फिर से प्राप्त किया जा सकता है। उपलब्ध (और) और वायर।

Example

#include <Wire.h> //include wire library void setup() { 
   Wire.begin(); // join i2c bus (address optional for master) 
   Serial.begin(9600); // start serial for output
} 

void loop() { 
   Wire.requestFrom(2, 1); // request 1 bytes from slave device #2
   while (Wire.available()) // slave may send less than requested {
      char c = Wire.read(); // receive a byte as character
      Serial.print(c); // print the character
   } 
   delay(500); 
}

गुलाम ट्रांसमीटर

निम्न फ़ंक्शन का उपयोग किया जाता है।

Wire.onRequest(handler) - एक फ़ंक्शन को कहा जाता है जब एक मास्टर इस गुलाम डिवाइस से डेटा का अनुरोध करता है।

Example

#include <Wire.h> 

void setup() { 
   Wire.begin(2); // join i2c bus with address #2
   Wire.onRequest(requestEvent); // register event
} 

Byte x = 0;

void loop() { 
   delay(100); 
} 

// function that executes whenever data is requested by master
// this function is registered as an event, see setup()

void requestEvent() { 
   Wire.write(x); // respond with message of 1 bytes as expected by master
   x++; 
}