PCF8574: Arduino के लिए I2C I / O एक्सपैंडर के बारे में

PCF8574 TI CHIP

आपने जरूर सुना होगा आईसी PCF8574, एक चिप जिसे अलग से खरीदा जा सकता है या पहले से ही कई अन्य की तरह एक मॉड्यूल पर लगाया जा सकता है बिजली के उपकरण अपने Arduino बोर्ड के साथ अपने एकीकरण को सुविधाजनक बनाने के लिए। इस मामले में, यह इनपुट और आउटपुट के लिए एक एक्सटेंडर है I2C बस.

आप सोच सकते हैं कि अरुडिनो पहले से ही अपना है एकीकृत I2C बस, और यह सच है। लेकिन PCF8574 आपके विकास बोर्ड की सीमाओं से परे उस बस का विस्तार करने में मदद कर सकता है, जो कुछ निर्माताओं को बहुत मदद कर सकता है, जिन्हें केवल Arduino द्वारा प्रदान की गई आवश्यकता से अधिक की आवश्यकता होती है।

I2C बस क्या है?

Arduino UNO मिली फंक्शन

I2C नाम से आता है इंटर-इंटीग्रेटेड सर्किट या अंतर-एकीकृत सर्किट। इसका संस्करण 1.0 फिलिप्स द्वारा 1992 में बनाया गया था। फिर दूसरा 2.1 2000 में आएगा और आज यह एक मानक बन गया है (100 kbit / s पर, हालांकि यह 3.4 Mbit / s अधिकतम तक की अनुमति देता है) जब 2006 में पेटेंट की समय सीमा समाप्त हो जाती है और इसे स्वतंत्र रूप से उपयोग किया जा सकता है।

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

El I2C एक बस है धारावाहिक संचार से अच्छी तरह से जाना जाता है। यह केवल 2 चैनलों के साथ एक तुल्यकालिक संचार प्रोटोकॉल का उपयोग करता है (एक तीसरा है, लेकिन इसे संदर्भ या GND के साथ जोड़ा गया है), वास्तव में इसे TWI (टू वायर इंटरफ़ेस) के रूप में भी जाना जाता है:

  • घड़ी के लिए एक (एससीएल)।
  • अन्य डेटा (एसडीए) के लिए।
दोनों ओपन ड्रेन सीएमओएस कनेक्शन हैं और पुल-अप प्रतिरोधों की आवश्यकता होती है। इसके अलावा, यदि एक उपकरण 0 और दूसरे 1 को प्रसारित करता है, तो समस्याएं हो सकती हैं, यही कारण है कि लाइन हमेशा 1 (उच्च स्तर) पर सेट होती है और डिवाइस हमेशा 0 (निम्न स्तर) संचारित होते हैं।

इसका मतलब है कि ए गुरु और दास वे एक ही केबल या ट्रैक पर डेटा भेजते हैं, जो पहले संकेत द्वारा नियंत्रित होता है जो घड़ी संकेत उत्पन्न करता है। I2C बस से जुड़े परिधीय उपकरणों में से प्रत्येक में एक अनूठा पता होगा, जो प्रसारण को निर्देशित करने के लिए सौंपा गया है। लेकिन यह जरूरी नहीं है कि शिक्षक हमेशा एक ही हो (बहु-शिक्षक), यह हमेशा वह होता है जो स्थानांतरण शुरू करता है।

जैसा कि मैंने पहले ही लेख में बताया है अरुडिनो आई 2 सी मैंने पहले उल्लेख किया है, प्रत्येक बोर्ड में अलग-अलग स्थानों पर इन I2C कनेक्शन हैं। यह कुछ ऐसा है जिसे आपको प्लेट के प्रत्येक संस्करण में ठीक से उपयोग करने में सक्षम होने के लिए ध्यान में रखना होगा:

आप पहले से ही जानते हैं कि आप अपने रेखाचित्र के लिए I2C का उपयोग आसानी से कर सकते हैं, चूंकि तार.ह लाइब्रेरी इस धारावाहिक संचार के लिए विभिन्न कार्यों के साथ:

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

पैरा अधिक जानकारी Arduino प्रोग्रामिंग और फ़ंक्शंस के बारे में आप हमारे डाउनलोड कर सकते हैं पीडीएफ ट्यूटोरियल.

PCF8574 क्या है?

PCF8574 मॉड्यूल

PCF8574 एक है I2C बस डिजिटल इनपुट और आउटपुट (I / O) विस्तारक। यह आईसी और मॉड्यूल में उपलब्ध होने के अलावा, विभिन्न निर्माताओं द्वारा निर्मित किया जा सकता है। किसी भी मामले में, इसे अपने Arduino बोर्ड से कनेक्ट करने के लिए बहुत व्यावहारिक है और मदरबोर्ड की अनुमति से अधिक उपकरणों को नियंत्रित करने की क्षमता है।

El PCF8574 पिनआउट सरल है, क्योंकि इसमें केवल शामिल हैं 8 पाइंस quasidirectional (P0-P7 जहां संवाद करने के लिए चिप्स जुड़े हुए हैं), और दूसरी ओर आपके पास SDA और SCL है जिसे आपको Arduino बोर्ड से कनेक्ट करना होगा, साथ ही VCC और GND को भी मॉड्यूल को पावर करना होगा। और उन तीन एड्रेसिंग पिन A0, A1, A2 को मत भूलिए कि कम्युनिकेशन के लिए कौन से डिवाइस को चुनना है ...

PCF8574 पिनआउट

इसका मालिक है अन्य विशेषताएं जो आपको पता होना चाहिए:

  • इसका कनेक्शन, एक खुली नाली होने के नाते हो सकता है इनपुट और आउटपुट दोनों के रूप में उपयोग किया जाता है.
  • La मौजूदा शिखर यह 25mA है जब यह आउटपुट (सिंक, जब पीसीएफ 8574 की ओर बहता है) और 300 PC ए (स्रोत, पीसीएफ 8574 से चालू प्रवाह) के रूप में कार्य करता है।
  • La तनाव बिजली की आपूर्ति 2.5 और 6v है। स्टैंड-बाय की खपत बहुत कम है, केवल 10 isA।
  • सभी आउटपुट कुंडी लगी हैबाहरी क्रियाओं की आवश्यकता के बिना राज्य बनाए रखने के लिए। आपको केवल तब कार्य करना है जब आप राज्य को बदलना चाहते हैं।
  • आप 8 प्राप्त कर सकते हैं संभव निर्देश, यानी, 8 उपकरणों के साथ संचार करने के लिए या इसे 8 उपकरणों तक विस्तारित करने के लिए 64 मॉड्यूल का उपयोग करना। पते (पिन A0, A1, A2) होंगे:
    • 000: पता 0x20
    • 001: पता 0x21
    • 010: पता 0x22
    • 011: पता 0x23
    • 100: पता 0x24
    • 101: पता 0x25
    • 110: पता 0x26
    • 111: पता 0x27
  • मानते हैं व्यवधान (INT) लगातार निगरानी के बिना डेटा का पता लगाने के लिए एक विशेष लाइन द्वारा।

Arduino के साथ एकीकरण

Arduino IDE का स्क्रीनशॉट

Arduino के साथ कनेक्शन बहुत सरल है, आपको बस Vcc को Arduino बोर्ड के 5V पिन के साथ और GND को Arduino के GND के साथ जोड़ना होगा। दूसरी ओर, PCF8574 SDA और SCL मॉड्यूल के पिन हो सकते हैं पिंस के साथ कनेक्ट करें 14 (ए 5 एससीएल) और 15 (ए 4 एसडीए)। केवल इसके साथ ही यह काम करना शुरू कर देगा, जाहिर है कि आप उन उपकरणों को कनेक्ट करने के लिए Px का उपयोग कर सकते हैं जिन्हें आप संवाद करना चाहते हैं ...

तब यह केवल गायब होगा एक उदाहरण स्केच से शुरू करें Arduino IDE में। आप एक अतिरिक्त पुस्तकालय का उपयोग किए बिना ऐसा कर सकते हैं ...

#include <Wire.h>
 
const int address = 0x38;
 
void setup()
{
   Wire.begin();
   Serial.begin(9600);
}
 
void loop()
{
   for (short channel = 0; channel < 8; channel++)
   {
      // Escribir dato en cada uno de los 8 canales
      Wire.beginTransmission(address);
      Wire.write(~(1 << channel));
      Wire.endTransmission();
      
      // Lee dato del canal
      delay(500);
   }
}

इनपुट के रूप में:

#include <Wire.h>
 
const int address = 0x38;
 
void setup()
{
   Wire.begin();
   Serial.begin(9600);
}
 
void loop()
{
   short channel = 1;
   byte value = 0;
 
   // Leer el dato del canal
   Wire.requestFrom(pcfAddress, 1 << channel);
   if (Wire.available())
   {
      value = Wire.read();
   }
   Wire.endTransmission();
 
   // Mostrar el valor leido por el monitor serie
   Serial.println(value);
}

या भी पुस्तकालयों का उपयोग करें, जैसे कि PCF8574 जो आप कर सकते हैं यहां डाउनलोड करें और इस पुस्तकालय के साथ आने वाले उदाहरण से इसके समान कोड का उपयोग करें:

#include <Wire.h>
#include "PCF8574.h"
 
PCF8574 expander;
 
void setup() 
{
  Serial.begin(9600);
  
  expander.begin(0x20);
  
  /* Setup some PCF8574 pins for demo */
  expander.pinMode(0, OUTPUT);
  expander.pinMode(1, OUTPUT);
  expander.pinMode(2, OUTPUT);
  expander.pinMode(3, INPUT_PULLUP);
 
  /* Blink hardware LED for debug */
  digitalWrite(13, HIGH);  
  
  /* Toggle PCF8574 output 0 for demo */
  expander.toggle();
  
  /* Blink hardware LED for debug */
  digitalWrite(13, LOW);
}
 
 
 
void loop() 
{
}


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

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

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

*

*

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