PCF8574: درباره I2C I / O Expander برای Arduino

PCF8574 TI تراشه

شما مطمئناً در مورد آن شنیده اید آی سی PCF8574، تراشه ای که می تواند به صورت جداگانه خریداری شود یا مانند بسیاری دیگر روی ماژول نصب شود اجزای الکترونیکی برای تسهیل ادغام با برد آردوینو. در این حالت ، این یک گسترش دهنده ورودی و خروجی برای است اتوبوس I2C.

ممکن است فکر کنید آردوینو از قبل خاص خود را دارد گذرگاه یکپارچه I2C، و این درست است. اما PCF8574 می تواند به گسترش آن گذرگاه بیش از محدوده صفحه توسعه شما کمک کند ، که می تواند برای برخی از سازندگان که نیازهای بیش از آنچه آردوینو فراهم می کند بسیار کمک کند.

اتوبوس I2C چیست؟

Arduino UNO توابع میلی

نام I2C از آنجا آمده است مدار مجتمع یا مدارهای یکپارچه. نسخه 1.0 آن در سال 1992 توسط فیلیپس ایجاد شد. سپس نسخه 2.1 دوم در سال 2000 وارد بازار می شود و امروزه با اتمام مدت اختراع ثبت شده در سال 100 به یک استاندارد تبدیل شده است (با سرعت 3.4 کیلوبیت بر ثانیه ، اگرچه حداکثر تا 2006 مگابیت در ثانیه امکان پذیر است) و می تواند آزادانه مورد استفاده قرار گیرد.

در حال حاضر به طور گسترده ای در صنعت استفاده می شود برای ارتباطات، و همچنین توسط سازندگان برای پروژه هایشان برای برقراری ارتباط با میکروکنترلرها و تجهیزات جانبی مختلف یکپارچه در یک IC بسیار مورد استقبال قرار گرفته است.

El I2C یک اتوبوس است ارتباط سریال شناخته شده از یک پروتکل ارتباطی همزمان فقط با 2 کانال استفاده می کند (یک کانال سوم نیز وجود دارد ، اما با مرجع یا GND همراه است) ، در واقع به نام TWI (رابط دو سیم) نیز شناخته می شود:

  • یکی برای ساعت (SCL).
  • سایر موارد برای داده (SDA).
هر دو اتصالات CMOS تخلیه باز هستند و به مقاومت در برابر کشش نیاز دارند. همچنین ، اگر یک دستگاه 0 و دیگری a 1 منتقل کند ، ممکن است مشکلاتی وجود داشته باشد ، به همین دلیل است که خط همیشه روی 1 تنظیم می شود (سطح بالا) و دستگاه ها همیشه 0 را انتقال می دهند (سطح پایین).

این بدان معنی است که ارباب و برده آنها داده ها را از طریق همان کابل یا مسیر ارسال می کنند ، که توسط اولین کسی که سیگنال ساعت را تولید می کند کنترل می شود. برای هدایت انتقال ها به هر یک از دستگاه های جانبی متصل به گذرگاه I2C آدرس منحصر به فردی اختصاص داده شده است. اما لازم نیست که استاد همیشه یکسان باشد (چند استاد) ، همیشه او است که انتقال را آغاز می کند.

همانطور که قبلاً در مقاله توضیح دادم آردوینو I2C من قبلاً اشاره کردم ، هر صفحه دارای این اتصالات I2C در مکان های مختلف است. این چیزی است که شما باید به خاطر داشته باشید تا بتوانید به درستی از آن در هر نسخه صفحه استفاده کنید:

  • Arduino UNO: SDA در A4 و SCK در A5 است
  • آردوینو نانو: همان قبلی.
  • آردوینو مینی پرو: یکسان.
  • آردوینو مگا: SDA روی پین 20 و SCK روی 21 است.
  • اطلاعات بیشتر در مورد صفحات.

شما قبلاً می دانید که می توانید از I2C برای اسکچ های خود به راحتی استفاده کنید ، از Wire.h کتابخانه با توابع مختلف برای این ارتباط سریال:

  • شروع (): کتابخانه Wire را شروع کرده و مشخص کنید که اصلی است یا برده
  • درخواست از (): توسط استاد برای درخواست داده از برده استفاده می شود.
  • startTransmission (): انتقال را با برده شروع کنید.
  • endTransmission (): انتقال نهایی.
  • نوشتن()- داده ها را از یک برده در پاسخ به درخواست استاد بنویسید وگرنه می توانید برای انتقال استاد در صف قرار بگیرید
  • در دسترس (): تعداد بایت ها را برای خواندن بازمی گرداند.
  • خواندن(): یک بایت منتقل شده از یک برده به یک استاد یا بالعکس را بخوانید.
  • onReceive (): هنگامی که برده از ارباب یک ارور دریافت می کند ، یک عملکرد را فراخوانی می کند.
  • بنا به درخواست (): وقتی برده داده را از استاد درخواست می کند ، یک عملکرد را فراخوانی می کند.

به MAS INFORMACION درباره برنامه نویسی و توابع آردوینو می توانید ما را بارگیری کنید آموزش PDF.

PCF8574 چیست؟

ماژول PCF8574

PCF8574 یک است منبسط ورودی و خروجی دیجیتال باس I2C. علاوه بر اینکه در IC و ماژول در دسترس است ، توسط تولیدکنندگان مختلفی قابل تولید است. در هر صورت ، بسیار کاربردی است که آن را به برد آردوینو متصل کنید و توانایی کنترل دستگاه های بیشتری را نسبت به مادربرد داشته باشید.

El PCF8574 pinout این ساده است ، زیرا فقط شامل می شود کاج 8 شبه جهت دار (P0-P7 جایی که تراشه های ارتباطی متصل هستند) و از طرف دیگر SDA و SCL دارید که باید به برد آردوینو وصل شوید ، همچنین VCC و GND نیز ماژول را روشن می کند. و سه پین ​​آدرس A0 ، A1 ، A2 را فراموش نکنید تا انتخاب کنید که ارتباطات به کدام یک از دستگاه ها هدایت می شود ...

pinout PCF8574

صاحب سایر ویژگی ها که باید بدانید:

  • اتصالات آن ، به عنوان یک تخلیه باز ، می تواند باشد به عنوان ورودی و خروجی استفاده می شود.
  • La اوج جریان هنگامی که به عنوان خروجی عمل کند 25mA است (سینک ، وقتی جریان به سمت PCF8574 می رود) و 300 میکرو آمپر است (منبع ، جریان از PCF8574 جریان دارد).
  • La استرس منبع تغذیه 2.5 و 6 ولت است. مصرف آماده به کار بسیار کم است و فقط 10 میکرو آمپر است.
  • همه خروجی ها قفل دارند، برای حفظ دولت بدون نیاز به اقدامات خارجی. فقط زمانی باید اقدام کنید که بخواهید حالت را تغییر دهید.
  • می توانید 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 IDE

اتصال با آردوینو بسیار ساده است ، فقط باید Vcc را با پین 5 ولت برد آردوینو و GND را با GND آردوینو وصل کنید. از طرف دیگر پایه های ماژول PCF8574 SDA و SCL می توانند باشند اتصال با پین 14 (A5 SCL) و 15 (A4 SDA). فقط با این کار شروع به کار می کند ، بدیهی است که می توانید از 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. مسئول داده ها: میگل آنخل گاتون
  2. هدف از داده ها: کنترل هرزنامه ، مدیریت نظرات.
  3. مشروعیت: رضایت شما
  4. ارتباط داده ها: داده ها به اشخاص ثالث منتقل نمی شوند مگر با تعهد قانونی.
  5. ذخیره سازی داده ها: پایگاه داده به میزبانی شبکه های Occentus (EU)
  6. حقوق: در هر زمان می توانید اطلاعات خود را محدود ، بازیابی و حذف کنید.