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
訂閱:
張貼留言 (Atom)
請教
回覆刪除有沒有 ESP8266 使用 PCF8574 的範例 ?