सभी Arduino I2C बस के बारे में

Arduino I2C बस

साथ Arduino बड़ी संख्या में प्रोजेक्ट बना सकता है जैसा कि आपने देखा है कि अगर आप हलीब्रे पढ़ते हैं, एक सरल तरीके से माइक्रोकंट्रोलर प्रोग्रामिंग. लेकिन इस बोर्ड के एनालॉग और डिजिटल कनेक्शन के बीच hardware libre, कुछ ऐसे हैं जो अभी भी कई शुरुआती लोगों के लिए कुछ हद तक अज्ञात हैं, जैसे कि पीडब्लूएम कनेक्शन, एसपीआई, सीरियल पोर्ट के आरएक्स और टीएक्स पिन, या आई2सी बस की वास्तविक क्षमता। इसलिए, इस प्रविष्टि से आप कम से कम I2C के बारे में वह सब कुछ जान सकेंगे जो आपको चाहिए।

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

I2C क्या है?

I2C इंटर-इंटीग्रेटेड सर्किट को संदर्भित करता है, वह है, अंतर-एकीकृत सर्किट। यह फिलिप्स सेमीकंडक्टर्स कंपनी द्वारा 1982 में विकसित एक सीरियल डेटा संचार बस है, जो आज इस खंड से छुटकारा पाने के बाद NXP सेमीकंडक्टर्स है। सबसे पहले इसे इस ब्रांड के टीवी के लिए बनाया गया था, ताकि कई आंतरिक चिप्स को सरल तरीके से संवाद किया जा सके। लेकिन 1990 के बाद से I2C फैल गया है और कई निर्माताओं द्वारा उपयोग किया जाता है।

वर्तमान में दर्जनों चिपमेकर द्वारा उपयोग किया जाता है कई कार्यों के लिए। Arduino बोर्डों के लिए माइक्रोकंट्रोलर्स के निर्माता Atmel ने लाइसेंसिंग उद्देश्यों के लिए TWI (दो वायर्ड इंटरफ़ेस) पदनाम की शुरुआत की, हालांकि यह I2C के समान है। लेकिन 2006 में, मूल पेटेंट की अवधि समाप्त हो गई और अब कॉपीराइट के अधीन नहीं है, इसलिए I2C शब्द का पुन: उपयोग किया गया है (केवल लोगो को संरक्षित किया जाना जारी है, लेकिन इसके कार्यान्वयन या शब्द का उपयोग प्रतिबंधित नहीं है)।

I2C बस तकनीकी विवरण

I2C बस

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

इस बस पर इससे जुड़े प्रत्येक उपकरण का एक पता होता है इन उपकरणों को व्यक्तिगत रूप से एक्सेस करने के लिए उपयोग किया जाता है। यह पता हार्डवेयर द्वारा तय किया गया है, जंपर्स या स्विच डीआईपी के माध्यम से अंतिम 3 बिट्स को संशोधित करना है, हालांकि यह सॉफ्टवेयर द्वारा भी किया जा सकता है। प्रत्येक डिवाइस का एक अनूठा पता होगा, हालांकि उनमें से कई का पता एक ही हो सकता है और यदि संभव हो तो संघर्ष से बचने या इसे बदलने के लिए एक माध्यमिक बस का उपयोग करने की आवश्यकता हो सकती है।

इसके अलावा, I2C बस में एक है मास्टर-दास प्रकार वास्तुकला, वह है, गुरु-दास। इसका मतलब यह है कि जब संचार एक मास्टर डिवाइस द्वारा शुरू किया जाता है, तो यह अपने दासों से डेटा भेजने या प्राप्त करने में सक्षम होगा। दास संचार शुरू करने में सक्षम नहीं होंगे, केवल गुरु ही ऐसा कर सकते हैं, और दास स्वामी के हस्तक्षेप के बिना सीधे एक दूसरे से बात नहीं कर सकते।

यदि आप बस में कई शिक्षक, केवल एक साथ एक शिक्षक के रूप में कार्य करने में सक्षम हो जाएगा। लेकिन यह इसके लायक नहीं है, चूंकि शिक्षक का परिवर्तन एक उच्च जटिलता की मांग करता है, इसलिए यह अक्सर नहीं होता है।

ध्यान रखें कि मास्टर बस पर सभी उपकरणों को सिंक्रनाइज़ करने के लिए घड़ी संकेत प्रदान करता है। यह प्रत्येक दास की अपनी घड़ी की आवश्यकता को समाप्त करता है।

I2C बस प्रोटोकॉल भी आपूर्ति वोल्टेज लाइनों (Vcc) में पुल-अप प्रतिरोधों के उपयोग की पुष्टि करता है, हालांकि इन प्रतिरोधों का उपयोग आमतौर पर Arduino के साथ नहीं किया जाता है प्रोग्रामिंग पुस्तकालयों के कारण पुल-अप चूंकि वायर 20-30 k के मानों के साथ आंतरिक को सक्रिय करता है। यह कुछ परियोजनाओं के लिए बहुत नरम हो सकता है, इसलिए सिग्नल के बढ़ते किनारों को धीमा किया जाएगा, इसलिए कम गति और कम संचार दूरी का उपयोग किया जा सकता है। यह सही करने के लिए कि आपको 1k से 4k7 तक बाहरी पुल-अप प्रतिरोधों को सेट करने की आवश्यकता हो सकती है।

संकेत

I2C संकेत

La संचार फ्रेम जिनमें से I2C बस सिग्नल में बिट्स या स्टेट्स होते हैं (जो Ar2Cino में उपयोग किए जाते हैं, क्योंकि IXNUMXC मानक दूसरों को अनुमति देता है):

  • 8 बिट, उनमें से 7 पता उस गुलाम उपकरण से जिसे आप डेटा भेजना या प्राप्त करना चाहते हैं। 7 बिट्स के साथ, 128 अलग-अलग पते बनाए जा सकते हैं, इसलिए 128 डिवाइसों को सैद्धांतिक रूप से एक्सेस किया जा सकता है, लेकिन केवल 112 तक ही पहुँचा जा सकता है, क्योंकि 16 विशेष उपयोगों के लिए आरक्षित हैं। और अतिरिक्त बिट जो इंगित करता है यदि आप चाहते हैं भेजना या प्राप्त करना दास डिवाइस जानकारी।
  • इसके अलावा मौजूद है एक सत्यापन बिट, अगर यह सक्रिय नहीं है तो संचार मान्य नहीं होगा।
  • फिर डेटा बाइट्स वे गुलामों द्वारा भेजना या प्राप्त करना चाहते हैं। प्रत्येक बाइट, जैसा कि आप जानते हैं, 8-बिट्स से बना है। ध्यान दें कि भेजे गए या प्राप्त किए गए डेटा के प्रत्येक 8-बिट या 1 बाइट के लिए सत्यापन, पता आदि के अतिरिक्त 18 बिट्स की आवश्यकता होती है, जिसका अर्थ है कि बस गति में बहुत सीमित है।
  • का अंतिम बिट मान्यता संचार की।

इसके अलावा, के लिए घड़ी की आवृत्ति प्रसारण मानक के रूप में 100 मेगाहर्ट्ज है, हालांकि 400 मेगाहर्ट्ज पर तेज़ मोड है।

I2C बस के फायदे और नुकसान

लास लाभ ध्वनि:

  • सादगी केवल दो लाइनों का उपयोग करके।
  • यह है यह जानने के लिए तंत्र कि सिग्नल आ गया है अन्य संचार प्रोटोकॉल की तुलना में।

लास नुकसान ध्वनि:

  • गति काफी कम संचरण।
  • यह पूर्ण द्वैध नहीं हैयही है, आप एक साथ भेज और प्राप्त नहीं कर सकते।
  • समता का उपयोग नहीं करता है न ही किसी अन्य प्रकार के सत्यापन तंत्र को यह जानने के लिए कि क्या डेटा बिट्स सही हैं।

Arduino पर I2C

Arduino I2C बस

En मॉडल पर निर्भर करता है, Arduino, पिन जो इस I2C बस भिन्न का उपयोग करने में सक्षम हो सकते हैं। उदाहरण के लिए:

  • Arduino UNO, नैनो, मिनी प्रो: A4 का उपयोग SDA (डेटा) और A5 के लिए SCK (घड़ी) के लिए किया जाता है।
  • अरुडिनो मेगा: एसडीए के लिए 20 और एससीके के लिए 21 पिन।

याद रखें कि इसका उपयोग करने के लिए आपको चाहिए पुस्तकालय का उपयोग करें तार.ह आपके Arduino IDE कोड के लिए, हालाँकि अन्य जैसे हैं I2C y i2cdevlib। आप इन पुस्तकालयों के दस्तावेजों या हमारे लेखों को उन परियोजनाओं पर पढ़ सकते हैं जो आपकी रुचि रखते हैं कि यह कैसे प्रोग्राम किया जाएगा।

I2C के साथ इसका उपयोग करने के लिए एक उपकरण का पता कैसे पता चलेगा?

बस एक आखिरी चेतावनी, और वह यह है कि जब आप यूरोपीय, जापानी या अमेरिकी निर्माताओं से आईसीएस खरीदते हैं, तो आप दिशा बताएं आपको डिवाइस के लिए उपयोग करना चाहिए। दूसरी ओर, चीनी कभी-कभी इसका विवरण नहीं देते हैं या यह सही नहीं है, इसलिए यह काम नहीं करेगा। यह पता करने के लिए एक पता स्कैनर के साथ आसानी से हल किया जा सकता है कि आपको अपने स्केच में किस दिशा का उल्लेख करना चाहिए।

La Arduino समुदाय इसे बनाया है पता स्कैन करने और उसे पहचानने के लिए कोड सरल तरीके से। हालाँकि मैं आपको कोड यहाँ दिखाता हूँ:

#include "Wire.h"
 
extern "C" { 
    #include "utility/twi.h"
}
 
void scanI2CBus(byte from_addr, byte to_addr, void(*callback)(byte address, byte result) ) 
{
  byte rc;
  byte data = 0;
  for( byte addr = from_addr; addr <= to_addr; addr++ ) {
    rc = twi_writeTo(addr, &data, 0, 1, 0);
    callback( addr, rc );
  }
}
 
void scanFunc( byte addr, byte result ) {
  Serial.print("addr: ");
  Serial.print(addr,DEC);
  Serial.print( (result==0) ? " Encontrado!":"       ");
  Serial.print( (addr%4) ? "\t":"\n");
}
 
 
const byte start_address = 8;
const byte end_address = 119;
 
void setup()
{
    Wire.begin();
 
    Serial.begin(9600);
    Serial.print("Escaneando bus I2C...");
    scanI2CBus( start_address, end_address, scanFunc );
    Serial.println("\nTerminado");
}
 
void loop() 
{
    delay(1000);
}


पहली टिप्पणी करने के लिए

अपनी टिप्पणी दर्ज करें

आपका ईमेल पता प्रकाशित नहीं किया जाएगा। आवश्यक फ़ील्ड के साथ चिह्नित कर रहे हैं *

*

*

  1. डेटा के लिए जिम्मेदार: मिगुएल elngel Gatón
  2. डेटा का उद्देश्य: नियंत्रण स्पैम, टिप्पणी प्रबंधन।
  3. वैधता: आपकी सहमति
  4. डेटा का संचार: डेटा को कानूनी बाध्यता को छोड़कर तीसरे पक्ष को संचार नहीं किया जाएगा।
  5. डेटा संग्रहण: ऑकेंटस नेटवर्क्स (EU) द्वारा होस्ट किया गया डेटाबेस
  6. अधिकार: किसी भी समय आप अपनी जानकारी को सीमित, पुनर्प्राप्त और हटा सकते हैं।