PCF8574: Arduino-ийн I2C I / O Expander програмын тухай

PCF8574 TI CHIP

Та үүнийг сонссон нь гарцаагүй IC PCF8574, тусад нь худалдаж авах эсвэл бусадтай адил модуль дээр суурилуулсан чип Цахим бүрэлдэхүүн хэсгүүд Arduino самбартай нэгтгэх ажлыг хөнгөвчлөх. Энэ тохиолдолд энэ нь оролт, гаралтын өргөтгөгч юм I2C автобус.

Arduino аль хэдийн өөрийн гэсэн зүйлтэй болсон гэж бодож магадгүй нэгдсэн I2C автобус, энэ нь үнэн. Гэхдээ PCF8574 нь уг автобусыг таны хөгжүүлэлтийн самбараас хэтрүүлэхэд тусалж болох бөгөөд энэ нь Arduino-ийн хангаж өгдөг зүйлээс илүү их хэрэгцээтэй зарим үйлдвэрлэгчдэд маш их тус болно.

I2C автобус гэж юу вэ?

Arduino UNO миллис функцууд

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

Одоогийн байдлаар энэ салбарт өргөн хэрэглэгддэг харилцааны хувьдМөн нэг IC-д нэгтгэсэн янз бүрийн микроконтроллерууд болон дагалдах төхөөрөмжүүдтэй харилцах төслүүдээ үйлдвэрлэгчдэд маш их талархаж байна.

El I2C бол автобус юм сайн мэддэг цуваа холбоо. Энэ нь зөвхөн 2 суваг бүхий синхрон харилцаа холбооны протоколыг ашигладаг (гурав дахь нь байдаг, гэхдээ энэ нь лавлагаа эсвэл GND-тэй хослуулсан байдаг), үнэндээ үүнийг TWI (Two Wire Interface) гэж нэрлэдэг.

  • Цагны нэг (SCL).
  • Өгөгдлийн бусад (SDA).
Эдгээр нь хоёулаа нээлттэй ус зайлуулах хоолойн CMOS холболт бөгөөд татах резистор шаарддаг. Түүнчлэн, хэрэв нэг төхөөрөмж 0, нөгөө нь 1 дамжуулдаг бол асуудал үүсч болзошгүй тул шугамыг үргэлж 1 (өндөр түвшин) болгож, төхөөрөмжүүд үргэлж 0 дамжуулдаг (доод түвшин).

Энэ нь эзэн ба боол тэд өгөгдлийг ижил кабель эсвэл зам дээр илгээдэг бөгөөд үүнийг цагны дохиог үүсгэдэг эхнийх нь удирддаг. I2C автобусанд холбогдсон захын төхөөрөмж тус бүрт дамжуулалтыг чиглүүлэхийн тулд өвөрмөц хаяг оноогдсон байна. Гэхдээ мастер үргэлж ижил байх ёстой (олон мастер) байх албагүй, тэр шилжүүлгийг өөрөө эхлүүлдэг.

Дээрх өгүүлэлд би аль хэдийн тайлбарласны дагуу Arduino I2C Би өмнө нь иш татсан, самбар бүр өөр өөр газруудад эдгээр I2C холболттой байдаг. Үүнийг самбарын хувилбар бүрт зөв ашиглах боломжтой байхын тулд та үүнийг санаж байх хэрэгтэй.

Учир нь I2C-ийг зураг зурахдаа хялбархан ашиглаж болно гэдгийг та аль хэдийн мэдэж байгаа Утас.h номын сан энэ цуваа холбооны янз бүрийн функцуудтай:

  • Эхлэх (): Wire санг эхлүүлж, мастер эсвэл боол эсэхийг нь зааж өгөх
  • requestFrom () -аас: мастераас боолоос мэдээлэл хүсэхэд ашигладаг.
  • эхлэх дамжуулалт (): дамжуулалтыг боолоор эхлүүлэх.
  • endTransmission (): эцсийн дамжуулалт.
  • бичих ()- Эзний хүсэлтийн дагуу боолоос өгөгдөл бичих, эсхүл мастер дамжуулах дараалалд зогсох боломжтой.
  • боломжтой (): унших байтын тоог буцаана.
  • унших (): боолоос эзэн рүү дамжуулсан байтыг уншдаг эсвэл эсрэгээр.
  • onReceive (): Боол мастераас дамжуулалт хүлээн авах үед функцийг дууддаг.
  • хүсэлтээр (): Боол мастераас өгөгдөл хүсэхэд функцийг дууддаг.

Пара дэлгэрэнгүй мэдээлэл Arduino програмчлал ба функцуудын талаар та манай татаж авах боломжтой PDF заавар.

PCF8574 гэж юу вэ?

PCF8574 модуль

PCF8574 нь a I2C автобусны дижитал оролт ба гаралт (I / O) өргөтгөгч. Үүнийг IC болон модульд ашиглахаас гадна янз бүрийн үйлдвэрлэгчид үйлдвэрлэж болно. Ямар ч тохиолдолд үүнийг Arduino самбарт холбож, эх хавтангийн зөвшөөрдөг хэмжээнээс илүү төхөөрөмжийг хянах чадвартай байх нь маш практик юм.

El PCF8574 залгаас Энэ нь зөвхөн багтдаг тул энгийн 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 төхөөрөмж хүртэл өргөжүүлэх боломжтой. Хаягууд (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 (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 Networks (ЕХ) -с зохион байгуулсан мэдээллийн сан
  6. Эрх: Та хүссэн үедээ мэдээллээ хязгаарлаж, сэргээж, устгаж болно.