2019年3月3日 星期日

[Arduino] 實做 PCF8574 模組的輸出入功能(一)


此模組採用 PCF8574AT 芯片,具有 8 位輸入/輸出 (I/O) 擴展功能,您可以通過串行 I2C 接口擴展微控制器的可用數字 I/O 引腳。該器件具有8位準雙向 I/O 端口 (P0~P7),包括具有高電流驅動能力的鎖存輸出,可直接驅動LED。每個準雙向 I/O 都可以用作輸入或輸出,而無需使用數據方向控制信號。

3個板載跳線允許選擇最多8個 I2C 地址,這意味著最多 8 個模組 (64個 I/O 引腳) 可以連接到同一個 I2C 接口。該模組的每一端還具有方便的輸入和輸出接頭,因此可以簡單地以菊花鏈形式連接其他模塊,而無需額外的電線等。

註:模組附帶 PCF8574T 或 PCF8574AT 芯片,它會有不同的 I2C 地址,範圍如下:

PCF8574T = 0x20至0x27
PCF8574AT = 0x38至0x3F

PCF8574AT 模組 VCC工作電壓為 2.5~6V,低待機最大電流消耗 10μA,具有漏極開路中斷輸出功能,並與 Arduino 等大多數微控制器兼容,具有高電流驅動能力的鎖存輸出,閂鎖性能超過每 JESD 78 100 mA,Class II 。


Datasheet http://pdf1.alldatasheet.com/datasheet-pdf/view/18216/PHILIPS/PCF8574AT.html



接線

Arduino        PCF8574AT 模組
VCC             VCC
GND            GND
A4                SDA
A5                SCL


實作範例一

這個實驗用 Arduino 讀取 PCF8574AT 模組的 P0 腳位信號,所以您還應該在該腳位設置一個按鈕電路,然後在 Arduino 的序列視窗顯示按鈕的開關狀態。

程式碼

#include "HCPCF8574.h"    //Include the HCPCF8574 library

#define I2C_ADD 0x38      //I2C address of the PCF8574

HCPCF8574 Port(I2C_ADD);  //Create an instance of the library

void setup()
{
  Serial.begin(9600);     //Initiliase the Arduino serial library.
  Port.init();            //Initiliase the PCF8574 (all pins are set to high)
  Port.pinMode(0, INPUT); //Set digital pin 0 to an input
}

void loop()
{
  boolean State = Port.pinRead(0);  //Read the state of digital pin 0
  // Output the state to the serial port
  Serial.print("Pin 0 = ");
  if(State)
    Serial.println("HIGH");
  else
    Serial.println("LOW");

  delay(100);
}


實作範例二

承上個實驗一樣用 Arduino 讀取 PCF8574AT 模塊的 P0 腳位信號(您仍應該在該腳位設置一個按鈕電路),然後用 PCF8574AT 模塊的 P1 腳位讓 LED 隨著按鈕開關明滅(您應該在該腳位串接一個 LED 電路)。

程式碼

#include "HCPCF8574.h"    //Include the HCPCF8574 library

#define I2C_ADD 0x38      //I2C address of the PCF8574

HCPCF8574 Port(I2C_ADD);  //Create an instance of the library

void setup()
{
  Serial.begin(9600);     //Initiliase the Arduino serial library.
  Port.init();            //Initiliase the PCF8574 (all pins are set to high)
  Port.pinMode(0, INPUT); //Set digital pin 0 to an input
  Port.pinMode(1, OUTPUT); //Set digital pin 1 to an output
}

void loop()
{
  boolean State = Port.pinRead(0);  //Read the state of digital pin 0
  // Output the state to the serial port
  // Serial.print("Pin 0 = ");
  if(State)
    // Serial.println("HIGH");
    Port.pinWrite(1, HIGH);
  else
    // Serial.println("LOW");
    Port.pinWrite(1, LOW);

  delay(100);
}


後記

1.上電後的 PCF8574 模組腳位作為輸出時,是在 HIGH 的狀態,這個需要注意一下。

2.在 PCF8574 模組腳位作為輸出時,發現串接限流電阻 220R 的白發紅 5mm LED 並不是很亮,移除限流電阻後也沒達到正常亮度,如果真要用它來點亮 LED,應加裝電晶體來驅動 LED。


相關連結

實做 PCF8574 模組的輸出入功能(二) https://pizgchen.blogspot.com/2019/03/arduino-pcf8574_10.html


採購資訊

PCF8574AT I/O擴展模塊 https://goods.ruten.com.tw/item/show?21908917689628








1 則留言: