PCF8574: เกี่ยวกับ I2C I / O Expander สำหรับ Arduino

PCF8574 TI ชิป

คุณเคยได้ยินชื่อไฟล์ IC PCF8574ชิปที่สามารถซื้อแยกต่างหากหรือติดตั้งอยู่แล้วบนโมดูลเหมือนกับตัวอื่น ๆ ชิ้นส่วนอิเล็กทรอนิกส์ เพื่ออำนวยความสะดวกในการรวมเข้ากับบอร์ด Arduino ของคุณ ในกรณีนี้เป็นส่วนขยายของอินพุตและเอาต์พุตสำหรับ บัส I2C.

คุณอาจคิดว่า Arduino มีของตัวเองอยู่แล้ว บัส I2C ในตัวและมันเป็นความจริง แต่ PCF8574 สามารถช่วยขยายบัสนั้นให้เกินขีด จำกัด ของบอร์ดพัฒนาของคุณซึ่งสามารถช่วยได้มากสำหรับผู้ผลิตบางรายที่ต้องการมากกว่าสิ่งที่ Arduino มีให้

I2C บัสคืออะไร?

Arduino UNO ฟังก์ชันมิลลิวินาที

ชื่อ I2C มาจาก วงจรอินเตอร์อินทิเกรต หรือวงจรรวม เวอร์ชัน 1.0 ถูกสร้างขึ้นในปี 1992 โดย Philips จากนั้น 2.1 วินาทีจะมาในปี 2000 และในปัจจุบันได้กลายเป็นมาตรฐาน (ที่ 100 kbit / s แม้ว่าจะอนุญาตสูงสุด 3.4 Mbit / s) เมื่อสิทธิบัตรหมดอายุในปี 2006 และสามารถใช้ได้อย่างอิสระ

ในปัจจุบันมีการใช้กันอย่างแพร่หลายในอุตสาหกรรม เพื่อการสื่อสารและยังได้รับการชื่นชมอย่างมากจากผู้ผลิตสำหรับโครงการของพวกเขาในการสื่อสารไมโครคอนโทรลเลอร์และอุปกรณ์ต่อพ่วงต่างๆที่รวมอยู่ใน IC เดียว

El I2C เป็นบัส การสื่อสารแบบอนุกรมที่รู้จักกันดี ใช้โปรโตคอลการสื่อสารแบบซิงโครนัสที่มีเพียง 2 ช่องสัญญาณ (มีช่องที่สาม แต่ใช้คู่กับการอ้างอิงหรือ GND) ในความเป็นจริงเรียกอีกอย่างว่า TWI (Two Wire Interface):

  • หนึ่งสำหรับนาฬิกา (SCL)
  • อื่น ๆ สำหรับข้อมูล (SDA)
ทั้งสองเป็นการเชื่อมต่อ CMOS แบบเปิดและต้องใช้ตัวต้านทานแบบดึงขึ้น นอกจากนี้หากอุปกรณ์หนึ่งส่ง 0 และอีก 1 อาจมีปัญหานั่นคือสาเหตุที่สายถูกตั้งค่าเป็น 1 (ระดับสูง) เสมอและอุปกรณ์จะส่ง 0 (ระดับต่ำ) เสมอ

นั่นหมายความว่าไฟล์ นายและทาส ส่งข้อมูลผ่านสายเคเบิลหรือแทร็กเดียวกันซึ่งถูกควบคุมโดยสายแรกที่สร้างสัญญาณนาฬิกา อุปกรณ์ต่อพ่วงแต่ละตัวที่เชื่อมต่อกับบัส I2C จะมีการกำหนดแอดเดรสเฉพาะเพื่อกำหนดทิศทางการส่งข้อมูล แต่ไม่จำเป็นว่าต้นแบบจะเป็นคนเดียวกันเสมอไป (multi-master) เป็นผู้เริ่มต้นการถ่ายโอนเสมอ

ดังที่ฉันได้อธิบายไปแล้วในบทความเรื่อง Arduino I2C ฉันอ้างถึงก่อนหน้านี้แต่ละบอร์ดมีการเชื่อมต่อ I2C เหล่านี้ในที่ต่างๆ เป็นสิ่งที่คุณต้องจำไว้เพื่อให้สามารถใช้งานได้อย่างถูกต้องในบอร์ดแต่ละรุ่น:

คุณรู้อยู่แล้วว่าคุณสามารถใช้ I2C สำหรับภาพร่างของคุณได้อย่างง่ายดายตั้งแต่ไฟล์ ไลบรารี Wire.h ด้วยฟังก์ชั่นต่างๆสำหรับการสื่อสารแบบอนุกรมนี้:

  • เริ่มต้น (): เริ่มไลบรารี Wire และระบุว่าเป็น master หรือ slave
  • requestFrom (): ใช้โดยต้นแบบเพื่อขอข้อมูลจากทาส
  • startTransmission (): เริ่มการส่งด้วยทาส
  • endTransmission (): สิ้นสุดการส่ง
  • เขียน()- เขียนข้อมูลจากทาสเพื่อตอบสนองคำขอจากเจ้านายหรือคุณสามารถจัดคิวการส่งข้อมูลของอาจารย์ได้
  • ใช้ได้ (): จะส่งคืนจำนวนไบต์ที่จะอ่าน
  • อ่าน(): อ่านไบต์ที่ส่งจากทาสไปยังมาสเตอร์หรือในทางกลับกัน
  • onReceive (): เรียกใช้ฟังก์ชันเมื่อทาสได้รับการส่งผ่านจากมาสเตอร์
  • ตามคำขอร้อง (): เรียกใช้ฟังก์ชันเมื่อทาสร้องขอข้อมูลจากมาสเตอร์

ไปยัง ข้อมูลเพิ่มเติม เกี่ยวกับการเขียนโปรแกรม Arduino และฟังก์ชั่นคุณสามารถดาวน์โหลดไฟล์ บทแนะนำ PDF.

PCF8574 คืออะไร

โมดูล PCF8574

PCF8574 เป็นไฟล์ I2C บัสอินพุตและเอาต์พุตดิจิตอล (I / O) ตัวขยาย. สามารถผลิตโดยผู้ผลิตหลายรายนอกเหนือจากการมีจำหน่ายใน IC และโมดูล ไม่ว่าในกรณีใดการเชื่อมต่อกับบอร์ด Arduino ของคุณนั้นเป็นประโยชน์อย่างมากและมีความสามารถในการควบคุมอุปกรณ์มากกว่าที่เมนบอร์ดอนุญาต

El PCF8574 พินเอาต์ เป็นเรื่องง่ายเนื่องจากมีเพียง 8 pines กึ่งทิศทาง (P0-P7 ที่ชิปที่จะสื่อสารเชื่อมต่ออยู่) และในทางกลับกันคุณมี SDA และ SCL ที่คุณต้องเชื่อมต่อกับบอร์ด Arduino รวมถึง VCC และ GND เพื่อจ่ายไฟให้กับโมดูลด้วย และอย่าลืมพินแอดเดรส 0 พิน A1, A2, AXNUMX เพื่อเลือกว่าต้องการให้การสื่อสารไปยังอุปกรณ์ใด ...

PCF8574 พินเอาต์

มันมี คุณสมบัติอื่น ๆ ที่คุณควรรู้:

  • การเชื่อมต่อซึ่งเป็นท่อระบายน้ำแบบเปิดสามารถเป็นได้ ใช้เป็นทั้งอินพุตและเอาต์พุต.
  • La กระแสสูงสุด เป็น 25mA เมื่อทำหน้าที่เป็นเอาต์พุต (อ่างล้างจานเมื่อกระแสไหลไปยัง PCF8574) และ 300 µA (แหล่งที่มากระแสไหลจาก PCF8574)
  • La ความตึงเครียด แหล่งจ่ายไฟคือ 2.5 และ 6v การบริโภคแบบสแตนด์บายต่ำมากเพียง 10 µA
  • เอาต์พุตทั้งหมด มีสลักเพื่อรักษาสถานะโดยไม่จำเป็นต้องดำเนินการภายนอก คุณจะต้องดำเนินการเมื่อคุณต้องการเปลี่ยนสถานะเท่านั้น
  • คุณจะได้รับ 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 กับขา 5v ของบอร์ด Arduino และ GND กับ GND ของ Arduino ในทางกลับกันพินของโมดูล 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. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา