PCF8574: Arduino үчүн I2C I / O Expander жөнүндө

PCF8574 TI CHIP

Сиз жөнүндө уккансыз IC PCF8574, өзүнчө сатып алына турган же башка модулдарга орнотулган микросхема Электрондук компоненттер Arduino тактасы менен интеграцияланышыңызды жеңилдетүү. Бул учурда, ал үчүн киргизүүлөрдүн жана чыгарылыштардын кеңейтүүчү болуп саналат I2C автобус.

Ардуинонун буга чейин өзүнүкү бар деп ойлошуңуз мүмкүн интегралдык I2C автобус, жана бул чындык. Бирок PCF8574 бул автобусту сиздин өнүгүү тактаңыздын чегинен тышкары жайылтууга жардам берет, бул Arduino бергенден башка дагы көп нерсеге муктаж болгон кээ бир өндүрүүчүлөргө чоң жардам берет.

I2C автобус деген эмне?

Arduino UNO миллис функциялары

I2C аталышы келип чыккан Интер-интегралдык микросхема же интегралдык схемалар. Анын 1.0 версиясы 1992-жылы Philips компаниясы тарабынан түзүлгөн. Ошондо экинчи 2.1 2000-жылы келип, бүгүнкү күндө патенттин мөөнөтү 100-жылы аяктаганда стандарттык болуп калды (3.4 кбит / с максималдуу 2006 Мбит / сек чейин), эгерде ал эркин колдонула турган болсо.

Учурда ал тармакта кеңири колдонулуп жатат байланыш үчүнОшондой эле, бир ИКга бириктирилген ар кандай микроконтроллерлер менен перифериялык түзүлүштөрдү байланыштырган долбоорлору өндүрүүчүлөр тарабынан абдан бааланат.

El I2C автобус сериялык байланыштан жакшы белгилүү. Бул синхрондуу байланыш протоколун 2 гана каналы менен колдонот (үчүнчүсү бар, бирок ал шилтеме же GND менен бириктирилген), чындыгында ал TWI (Two Wire Interface) деп да белгилүү:

  • Саат үчүн бирөө (SCL).
  • Башка маалыматтар үчүн (SDA).
Экөө тең ачык дренаждык CMOS туташтыргычы жана тартылуу резисторлорун талап кылат. Ошондой эле, эгер бир шайман 0, ал эми экинчиси 1 өткөрсө, көйгөйлөр болушу мүмкүн, ошондуктан линия ар дайым 1 (жогорку деңгээл), ал эми түзмөктөр ар дайым 0 (төмөнкү деңгээл) өткөрөт.

Бул дегенди билдирет кожоюн жана кул алар маалыматты бир эле кабель же трек аркылуу жөнөтүшөт, ал биринчиси саат сигналын жараткан тарабынан башкарылат. I2C шинасына туташкан ар бир перифериялык түзмөктөр, берүүлөрдү багыттоо үчүн уникалдуу дарекке ээ болушат. Бирок кожоюндун ар дайым бирдей болушу шарт эмес (көп мастер), ал которууну ар дайым өзү демилгелейт.

Мен буга чейин макалада түшүндүргөндөй Arduino I2C Мен жогоруда айткан элем, ар бир тактада I2C байланыштары ар башка жерлерде бар. Аны ар бир табакчада туура колдоно алуу үчүн унутпаңыз:

Эки эски эскиздериңиз үчүн I2C колдонмосун оңой эле колдоно аларыңызды билесиз, анткени Wire.h китепкана ушул сериялык байланыш үчүн ар кандай функциялар менен:

  • баштоо (): Wire китепканасын баштап, анын кожоюн же кул экендигин аныктаңыз
  • requestFrom (): кулдан маалыматтарды сурап алуу үчүн кожоюн тарабынан колдонулат.
  • beginTransmission (): кул менен өткөрүп баштоо.
  • endTransmission (): акыркы берүү.
  • жазуу ()- Кожоюндун суроосуна жооп катары кулдан маалыматтарды жазыңыз, болбосо сиз кожоюндун берүүсүнө кезекке турсаңыз болот.
  • жеткиликтүү (): окула турган байттардын санын кайтарып берет.
  • окуу (): кулдан кожоюнга же тескерисинче берилген байтты окуу.
  • onReceive (): Кул кожоюндан берүүнү алганда, функцияны чакырат.
  • onRequest (): Кул кожоюндан маалымат сураганда функцияны чакырат.

Para Көбүрөөк маалымат Arduino программалоосу жана функциялары жөнүндө биздин жүктөп алсаңыз болот PDF окуу куралы.

PCF8574 деген эмне?

PCF8574 модулу

PCF8574 а I2C автобустун санарип киргизүү жана чыгаруу (I / O) кеңейтүүчү. Аны ИМ жана модулдарда бар болгондон тышкары, ар кандай өндүрүүчүлөр өндүрүшү мүмкүн. Кандай болгон күндө да, аны Arduino тактасына туташтыруу жана эне плитадан ашыкча шаймандарды көзөмөлдөө мүмкүнчүлүгү бар.

El PCF8574 pinout Бул жөнөкөй, анткени ага бир гана нерсе кирет 8-тазыл квази-багыттуу (чиптер байланышкан P0-P7), жана экинчи жагынан сизде Arduino тактасына туташуу керек болгон SDA жана SCL, ошондой эле VCC жана GND модулду кубаттоо үчүн. Байланыш түзмөктөрдүн кайсынысына багытталганын тандоо үчүн A0, A1, A2 үч даректөө төөнөгүчтү унутпаңыз ...

PCF8574 пинут

Ал бар башка өзгөчөлүктөрү сиз билишиңиз керек:

  • Анын туташуулары, ачык канализация болуп, болушу мүмкүн киргизүү жана чыгаруу катары да колдонулат.
  • La жогорку ток ал чыгымдын ролун аткарганда 25mA (чөгүп кетүү, ток PCF8574ке карай агат) жана 300 µA (булак, ток PCF8574тен агат).
  • La чымыркануу кубат менен камсыздоо 2.5 жана 6v. Күтүү режиминде керектөө өтө төмөн, болгону 10 µА.
  • Бардык жыйынтыктар ысырмалары бар, тышкы аракеттерди жасабай эле мамлекетти сактап калуу. Мамлекетти өзгөрткүң келгенде гана иш-аракет кылышың керек.
  • Сиз 8 ала аласыз мүмкүн болгон багыттар, башкача айтканда, 8 модул менен байланышуу үчүн 8 шайманга чейин же аны 64 шайманга чейин кеңейтүү үчүн 0 модул колдонулат. Даректер (A1, A2, AXNUMX казыктары):
    • 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 (A5 SCL) жана 15 (A4 SDA). Ушуну менен гана ал иштей баштайт, албетте, сиз Px аркылуу байланышкыңыз келген түзмөктөрдү туташтыра аласыз ...

Ошондо ал жок болуп калмак мисал эскиз менен баштоо in 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 Networks (ЕС) тарабынан уюштурулган маалыматтар базасы
  6. Укуктар: Каалаган убакта маалыматыңызды чектеп, калыбына келтирип жана жок кыла аласыз.