PCF8574: Arduino အတွက် I2C I / O Expander အကြောင်း

PCF8574 TI ချစ်

သငျသညျsurelyကန်အမှန်ကြားဖူးတယ် IC PCF8574သီးခြားစီ ၀ ယ်နိုင်သည်သို့မဟုတ်အခြားသူများကဲ့သို့မော်ဂျူးတစ်ခုပေါ်တွင်တပ်ဆင်ပြီးသားဖြစ်သည် အီလက်ထရောနစ်အစိတ်အပိုင်းများ သင့်ရဲ့ Arduino ဘုတ်အဖွဲ့နှင့်သင်၏ပေါင်းစည်းမှုလွယ်ကူချောမွေ့ရန်။ ဤကိစ္စတွင်၎င်းသည်သွင်းအားစုများနှင့်အကျိုးရလဒ်များကိုတိုးချဲ့ပေးသည် I2C ဘတ်စ်ကား.

Arduino မှာသူ့ကိုယ်ပိုင်ရှိပြီးသားလို့သင်ထင်ကောင်းထင်လိမ့်မယ် ဘက်ပေါင်းစုံ I2C ဘတ်စ်ကားဒါအမှန်ပဲ။ သို့သော် PCF8574 သည်သင်၏ဖွံ့ဖြိုးရေးဘုတ်၏ကန့်သတ်ချက်ထက် ကျော်လွန်၍ ၎င်းဘတ်စ်ကားကိုတိုးချဲ့ရန်ကူညီနိုင်သည်။ ၎င်းသည် Arduino ထောက်ပံ့ပေးရုံထက်မကလိုအပ်သောထုတ်လုပ်သူအချို့အတွက်များစွာအထောက်အကူပြုနိုင်သည်။

I2C ဘတ်စ်ကားကဘာလဲ။

Arduino UNO millis လုပ်ဆောင်ချက်များကို

I2C ဆိုတဲ့နာမည်ကလာတယ် Inter- ပေါင်းစည်းတိုက်နယ် သို့မဟုတ်အချင်းချင်းပေါင်းစပ်ဆားကစ်။ ၎င်း၏ version 1.0 ကို ၁၉၉၂ ခုနှစ်တွင် Philips မှဖန်တီးခဲ့သည်။ ထို့နောက် ၂၀၀၀ တွင်ဒုတိယအချက် ၂.၁ ရောက်လာပြီးယနေ့တွင်မူပိုင်ခွင့်သည်သက်တမ်းကုန်ဆုံးသွားပြီးလွတ်လပ်စွာအသုံးပြုနိုင်သောအခါ (၁၀၀ kbit / s နှုန်းဖြင့် ၃.၄ Mbit / s အမြင့်ဆုံးအထိ) စံဖြစ်လာသည်။

လက်ရှိတွင်၎င်းကိုစက်မှုလုပ်ငန်းများတွင်ကျယ်ပြန့်စွာအသုံးပြုသည် ဆက်သွယ်ရေးများအတွက်ထုတ်လုပ်သူများကသူတို့၏ IC ပရောဂျက်များတွင်မတူညီသော microcontroller များနှင့်အရံပစ္စည်းများကိုဆက်သွယ်နိုင်ရန်အတွက်အလွန်တန်ဖိုးထားကြသည်။

El I2C သည်ဘတ်စ်ကားတစ်စီးဖြစ်သည် လူသိများအမှတ်စဉ်ဆက်သွယ်ရေး။ ၎င်းသည်ချန်နယ်နယ် ၂ ခုပါ ၀ င်သောထပ်တူဆက်သွယ်ရေး protocol ကိုအသုံးပြုသည် (တတိယရှိသော်လည်းရည်ညွှန်းသို့မဟုတ် GND နှင့်ချိတ်ဆက်ထားသည်)၊ ၎င်းကို TWI (Wire Wire Interface) ဟုလည်းလူသိများသည်။

  • နာရီများအတွက်တစ်ခု (SCL) ။
  • ဒေတာအတွက်အခြား (SDA) ။
နှစ်ခုလုံးသည် open drain CMOS connection များဖြစ်ပြီး pull-up resistors များလိုအပ်ပါသည်။ ထို့အပြင် device တစ်ခုသည် 0 နှင့်အခြား 1 ကို transmit လုပ်လျှင်ပြproblemsနာများရှိနိုင်သည်။ ထို့ကြောင့် line ကို 1 (high level) သို့သတ်မှတ်ထားပြီး devices များသည် 0 (low level) ထုတ်လွှင့်သည်။

ဆိုလိုသည်မှာ သခင်နှင့်ကျွန် သူတို့က data signal ကို clock signal ကိုပထမဆုံးထုတ်လွှတ်တဲ့ cable နဲ့ track တစ်ခုတည်းကနေပေးပို့သည်။ I2C bus နှင့်ချိတ်ဆက်ထားသောအရံပစ္စည်းတစ်ခုချင်းစီတွင်ထုတ်လွှင့်မှုကိုညွှန်ကြားနိုင်ရန်အတွက်ထူးခြားသောလိပ်စာတစ်ခုရှိရမည်။ သို့သော်မာစတာသည်အမြဲတမ်းအတူတူ (multi-master) ဖြစ်ရန်မလိုပါ၊ လွှဲပြောင်းမှုကိုအစပြုသူမှာအမြဲဖြစ်သည်။

ငါပြီးသားအပေါ်ဆောင်းပါး၌ရှင်းပြအဖြစ် Arduino I2C ငါအစောပိုင်းကကိုးကား, ဘုတ်အဖွဲ့တစ်ခုချင်းစီကွဲပြားခြားနားသောနေရာများတွင်ဤ I2C ဆက်သွယ်မှုရှိပါတယ်။ ပန်းကန်ဗားရှင်းတစ်ခုချင်းစီတွင်၎င်းကိုစနစ်တကျအသုံးပြုနိုင်ရန်သင်သတိရဖို့လိုသည်။

I2C သည်သင်၏ပုံကြမ်းများအတွက်လွယ်ကူစွာအသုံးပြုနိုင်သည်ကိုသင်သိပြီးဖြစ်သည် Wire.h စာကြည့်တိုက် ဒီအမှတ်စဉ်ဆက်သွယ်ရေးအတွက်အမျိုးမျိုးသောလုပ်ဆောင်ချက်များကိုအတူ

  • အစ ()ကြိုးမဲ့စာကြည့်တိုက်ကိုဖွင့်ပြီး၎င်းဟာ master လားကျွန်ဖြစ်စေ၊
  • requestFrom (): ကျွန်ထံမှဒေတာကိုတောင်းဆိုရန်မာစတာအသုံးပြုသည်။
  • စတင်သယ်ယူပို့ဆောင်ရေး (): ကျွန်နှင့်အတူဂီယာစတင်ပါ။
  • endTransmission ()ဆက်သွယ်မှုအဆုံးသတ်
  • ရေး ()- မာစတာထံမှတောင်းဆိုမှုကိုတုံ့ပြန်သည့်အနေဖြင့်ကျွန်မှဒေတာကိုရေးပါသို့မဟုတ်သင်မာစတာ၏ဂီယာကိုတန်းစီနိုင်သည်
  • ရရှိနိုင် ()ဖတ်ရန် bytes အရေအတွက်ကိုပြန်ပို့ပေးလိမ့်မည်။
  • ဖတ်ပါ (): ကျွန်တစ် ဦး ထံမှမာစတာသို့ပြောင်းပြန် byte မှအပြန်အလှန်ပေးပို့သော byte တစ်ခုကိုဖတ်ပါ။
  • onReceive (): ကျွန်ကမာစတာကနေဂီယာကိုလက်ခံရရှိသည့်အခါ function ကိုခေါ်ဆိုသည်။
  • တောင်းဆိုချက်အရ (): ကျွန်ကမာစတာကနေဒေတာတွေကိုတောင်းတဲ့အခါ function ကိုခေါ်တယ်။

မသန်စွမ်း ပိုမိုသိရှိလိုပါက Arduino ပရိုဂရမ်းမင်းနှင့်လုပ်ဆောင်ပုံများအကြောင်းကိုကျွန်ုပ်တို့ download လုပ်နိုင်သည် PDF သင်ခန်းစာ.

PCF8574 ဆိုတာဘာလဲ။

PCF8574 module ကို

အဆိုပါ PCF8574 တစ် ဦး ဖြစ်ပါတယ် I2C bus ဒစ်ဂျစ်တယ်သွင်းအားစုများနှင့်ထုတ်လွှတ်မှုများ (I / O) ချဲ့ထွင်သည်။ ၎င်းကို ICs နှင့် modules များတွင်ရရှိနိုင်သောအပြင်အမျိုးမျိုးသောထုတ်လုပ်သူများကထုတ်လုပ်နိုင်သည်။ မည်သို့ပင်ဖြစ်စေ၊ ၎င်းကိုသင်၏ Arduino board နှင့်ချိတ်ဆက်ပြီး motherboard ခွင့်ပြုသည်ထက်ထုတ်ကုန်များကိုပိုမိုထိန်းချုပ်နိုင်စွမ်းရှိသည်။

El PCF8574 pinout ဒါဟာသာပါဝင်သည်ကတည်းကဒါဟာရိုးရှင်းပါသည် 8 ထင်းရူး quasi-directional (P0-P7 ဆက်သွယ်မှုရှိသည့်ချစ်ပ်များချိတ်ဆက်ထားသည့်နေရာ) နှင့်အခြားတစ်ဖက်တွင်သင် moddu ကိုထောက်ပံ့ရန်အတွက် Arduino ဘုတ်နှင့် VCC နှင့် GND ချိတ်ဆက်ရမည့် SDA နှင့် SCL ရှိသည်။ ဆက်သွယ်မှုသို့မည်သည့်ကိရိယာများကိုရွေးချယ်ရန်လိပ်စာတံသင် A0, A1, A2 သုံးခုကိုမမေ့ပါနှင့် ...

PCF8574 pinout

ဒါဟာရှိပါတယ် အခြားအင်္ဂါရပ်များ မင်းသိသင့်တယ်

  • ၎င်း၏ဆက်သွယ်မှုတစ်ခုပွင့်လင်းယိုစီးမှုဖြစ်ခြင်းနိုင်ပါတယ် သွင်းအားစုများနှင့်ရလဒ်များအဖြစ်နှစ် ဦး စလုံးအသုံးပြုခဲ့သည်.
  • La အထွတ်အထိပ်လက်ရှိ ၎င်းသည် output တစ်ခုအနေနှင့်ပြုသည့်အခါ 25mA (လက်ရှိ PCF8574 ဆီသို့စီးဆင်းသောအခါနစ်မြှုပ်ပါ) နှင့် 300 µA (အရင်းအမြစ်, PCF8574 မှစီးဆင်းမှု) ဖြစ်သည်။
  • La တင်းမာမှု power supply သည် 2.5 နှင့် 6v ဖြစ်သည်။ stand-by စားသုံးမှုအလွန်နိမ့်သည်, 10 μAသာ။
  • ရလဒ်အားလုံး တံခါးကျင်ရှိသည်ပြင်ပလုပ်ဆောင်မှုများမလိုအပ်ဘဲပြည်နယ်ကိုထိန်းသိမ်းရန်။ သငျသညျပြည်နယ်ပြောင်းလဲချင်တဲ့အခါမှသာပြုမူရန်ရှိသည်။
  • မင်းရနိုင်တယ် ဖြစ်နိုင်တဲ့လမ်းညွန်၊ ဆိုလိုသည်မှာထုတ်ကုန် ၈ ခုအထိနှင့်ဆက်သွယ်ရန်သို့မဟုတ်သိုလှောင်ရန် ၈ ခုကို အသုံးပြု၍ ၄၄ ခုအထိတိုးချဲ့ရန် လိပ်စာများ (တံသင် A8, A8, A64) ဖြစ်လိမ့်မည်
    • 000: 0x20 လိပ်စာ
    • 001: 0x21 လိပ်စာ
    • 010: 0x22 လိပ်စာ
    • 011: 0x23 လိပ်စာ
    • 100: 0x24 လိပ်စာ
    • 101: 0x25 လိပ်စာ
    • 110: 0x26 လိပ်စာ
    • 111: 0x27 လိပ်စာ
  • ဝန်ခံ ကြားဖြတ် အဆက်မပြတ်စောင့်ကြည့်ခြင်းမရှိဘဲ data တွေကို detect လုပ်ဖို့အထူးလိုင်းအားဖြင့် (INT) ။

Arduino နှင့်အတူပေါင်းစည်းမှု

Arduino IDE မျက်နှာပြင်

Arduino နဲ့ဆက်သွယ်မှုကအရမ်းကိုရိုးရှင်းပါတယ်။ Vcc ကို Arduino ဘုတ်၏ 5v pin နဲ့ GND of Arduino နဲ့ချိတ်ဆက်ရုံပဲ။ အခြားတစ်ဖက်တွင်, PCF8574 SDA နှင့် SCL module တစ်ခု၏တံသင်ဖြစ်နိုင်သည် တံသင်နှင့်ချိတ်ဆက်ပါ 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);
   }
}

input အဖြစ်:

#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. အချက်အလက်အတွက်တာဝန်ရှိသည် - Miguel ÁngelGatón
  2. အချက်အလက်များ၏ရည်ရွယ်ချက်: ထိန်းချုပ်ခြင်း SPAM, မှတ်ချက်စီမံခန့်ခွဲမှု။
  3. တရားဝင်: သင်၏ခွင့်ပြုချက်
  4. အချက်အလက်များ၏ဆက်သွယ်မှု - ဒေတာများကိုဥပဒေအရတာ ၀ န်ယူမှုမှ လွဲ၍ တတိယပါတီများသို့ဆက်သွယ်မည်မဟုတ်ပါ။
  5. ဒေတာသိမ်းဆည်းခြင်း: Occentus ကွန်ယက်များ (အီးယူ) မှလက်ခံသည့်ဒေတာဘေ့စ
  6. အခွင့်အရေး - မည်သည့်အချိန်တွင်မဆိုသင်၏အချက်အလက်များကိုကန့်သတ်၊