数码之家

 找回密码
 立即注册
搜索
查看: 2169|回复: 20

[Arduino] 【Arduino】168种传感器模块系列实验(143)---PCF8574T扩展模块

[复制链接]
发表于 2020-3-1 15:52:05 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
实验一百四十三:I2C接口I/O扩展模块 支持级联PCF8574T模块

0.jpg

 楼主| 发表于 2020-3-1 15:52:47 | 显示全部楼层
01.jpg
PCF8574T
是CMOS电路,它通过两条双向总线可使大多数MCU实现远程I/O扩展。该器件包含一个8位准双向口和一个总线接口。pcf8574t 电流消耗很低,并且输出锁存,具有大电流驱动能力,可直接驱动LED。它还带有一种中断接线可与MCU的中断逻辑相连。通过INT发送中断信号,远端I/O口不必经过总线通信就通知MCU是否有数据从端口输入。这意味着 pcf8574t 可以作为一个单被控器。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-1 16:17:50 | 显示全部楼层
PCF8574T主要参数
工作温度范围:-40°C to +85°C
针脚数:16
封装类型:SOIC
工作温度最低:-40°C
工作温度最高:85°C
器件标号:8574
电源电压 最大:6V
电源电压 最小:2.5V
电源电流:40μA
芯片标号:8574
表面安装器件:表面安装
逻辑功能号:8574
控制接口:I2C
时钟频率:0.1MHz
输入/输出数:16
02 (1).jpg

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-1 16:24:25 | 显示全部楼层
PCF8574逻辑图

02.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 05:44:41 | 显示全部楼层
各P口输入输出简化示意图

02-.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 08:07:50 | 显示全部楼层
03.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 08:09:05 | 显示全部楼层
04 (1).jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 08:11:01 | 显示全部楼层
04-.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 08:32:43 | 显示全部楼层
04-0.jpg

双线双向总线(I2C)的8位输入/输出(I/O)扩展器
设计用于2.5-V至6-V VCC操作。PCF8574通过I2C为大多数微控制器系列提供通用远程I/O扩展接口[串行时钟(SCL),串行数据(SDA)。该设备具有一个8位准双向I/O端口(P0–P7),包括带有大电流驱动的锁存输出直接驱动LED的能力。每个准双向I/O都可以用作输入或输出,而无需使用数据方向控制信号。开机时,I/O很高。在此模式下,只有VCC的电流源活跃。另一个强大的拉向VCC允许快速上升到重负荷输出边缘。这个装置转动当输出被写入高位并被SCL的负边缘关闭时打开。I/O应该很高,在用作输入之前。PCF8574提供了一个开漏输出(int),可以连接到微控制器。在输入模式下,端口输入的任何上升或下降沿都会产生中断。后续时间,tiv,int是有效的。当端口上的数据改变时,中断电路复位并重新激活从产生中断的端口读取或写入原始设置或数据。重置发生在在SCL信号上升沿后的确认位处的读取模式,或在SCL信号从高到低转换后的确认位。确认期间发生的中断由于在该脉冲期间中断复位,时钟脉冲可能丢失(或非常短)。每次变更复位后的I/O被检测到,并且在下一个上升时钟边缘之后,被发送。作为int读取,或者写入,另一个设备不影响中断电路。通过在这条线路上发送中断信号,远程I/O可以通知微控制器是否有输入数据在其端口上,无需通过I2C总线进行通信。因此,pcf8574可以保持简单的从机装置。


回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 08:39:08 | 显示全部楼层
05.jpg

I2C接口I/O 8位扩展  支持级联PCF8574T模块
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 08:43:57 | 显示全部楼层
I2C接口I/O扩展模块功能:
基于I2C接口的I/O扩展模块,使用2个I/O可扩展8个I/O。支持级联,最多可同时使用8个模块,扩张到64个I/O。通过拨码开关设置模块地址,将3位拨码开关全部拨到’ON’上。此时模块地址为0x27。

PCB Size: 37.5mm x 16.7mm

07- (1).jpg

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 08:50:59 | 显示全部楼层

07 (1).jpg

06.jpg

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 10:34:53 | 显示全部楼层
【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  实验一百四十二:I2C接口I/O 8位扩展  支持级联PCF8574T模块

  程序之一:扫描设备IIC地址,在串口上即可看到PCF8574T的地址

  Arduino------PCF8574
  5V-------------VCC
  GND-----------GND
  A4-----------SDA IIC 数据线
  A5-----------SCL IIC 时钟线

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百四十二:I2C接口I/O 8位扩展  支持级联PCF8574T模块

  4.   程序之一:扫描设备IIC地址,在串口上即可看到PCF8574T的地址

  5.   Arduino------PCF8574
  6.   5V-------------VCC
  7.   GND-----------GND
  8.   A4-----------SDA IIC 数据线
  9.   A5-----------SCL IIC 时钟线
  10. */

  11. #include <Wire.h>

  12. void setup() {
  13.   Serial.begin (115200); // 等待串行端口连接
  14.   while (!Serial) { }
  15.   Serial.println ();
  16.   Serial.println ("I2C scanner. Scanning ...");
  17.   byte count = 0;
  18.   Wire.begin();
  19.   for (byte i = 8; i < 120; i++) {
  20.     Wire.beginTransmission (i);
  21.     if (Wire.endTransmission () == 0) {
  22.       Serial.print ("Found address: ");
  23.       Serial.print (i, DEC);
  24.       Serial.print (" (0x");
  25.       Serial.print (i, HEX);
  26.       Serial.println (")");
  27.       count++;
  28.       delay (1); // 也许不需要?
  29.     } //良好反应结束
  30.   } // 结束for循环

  31.   Serial.println ("Done.");
  32.   Serial.print ("Found ");
  33.   Serial.print (count, DEC);
  34.   Serial.println (" device(s).");
  35. } // 运行结束

  36. void loop() {
  37. }
复制代码


回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 10:38:07 | 显示全部楼层
通过模块上拨码开关不同位置,来设置模块I2C地址
1上2上3上   为0x27

09.jpg

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 10:40:10 | 显示全部楼层
通过模块上拨码开关不同位置,来设置模块I2C地址

1下2上3上   为0x23

10.jpg

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 10:54:50 | 显示全部楼层
11.jpg

1下2上3上   为0x23
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 10:57:50 | 显示全部楼层
16.jpg

17.jpg

通过模块上拨码开关不同位置,来设置模块I2C地址
1上2上3上   为0x27
1下2上3上   为0x23
1下2下3上   为0x21
1下2下3下   为0x20
1上2下3下   为0x24
1上2上3下   为0x26
1下2上3下   为0x22
1上2下3上   为0x25

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 11:46:05 | 显示全部楼层
【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  实验一百四十二:I2C接口I/O 8位扩展  支持级联PCF8574T模块

  程序之二:每隔2秒钟,让P0~P7口输出高电平、低电平
  实验说明:本程序未能通过验证,请各位大侠帮忙看看

  Arduino------PCF8574
  5V-------------VCC
  GND-----------GND
  A4-----------SDA IIC 数据线
  A5-----------SCL IIC 时钟线
  A0-----------P0

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百四十二:I2C接口I/O 8位扩展  支持级联PCF8574T模块

  4.   程序之二:每隔2秒钟,让P0~P7口输出高电平、低电平
  5.   实验说明:本程序未能通过验证,请各位大侠帮忙看看

  6.   Arduino------PCF8574
  7.   5V-------------VCC
  8.   GND-----------GND
  9.   A4-----------SDA IIC 数据线
  10.   A5-----------SCL IIC 时钟线
  11.   A0-----------P0
  12. */

  13. #include <Wire.h>
  14. //初始化

  15. void setup() {
  16.   wire.begin();
  17. }

  18. unsigned char i = 0;
  19. void loop() {

  20.   //读取模拟管脚0上的输入
  21.   if (i = 0)
  22.     (
  23.       wire.beginTransmission(0x27) ;
  24.       wire.write(0xff);
  25.       wire.endTransmission();
  26.       i = 1;

  27.     )
  28.     else
  29.       (
  30.         wire.beginTransmission(0x27) ;
  31.         wire.write(0x00);
  32.         wire.endTransmission();
  33.         i = 0;
  34.       )
  35.       delay(2000);//延迟2秒
  36. }
复制代码


回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 12:18:04 | 显示全部楼层
实验开源仿真编程(linkboy3.6)

18.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 12:19:55 | 显示全部楼层
实验仿真编程(linkboy3.6)之二

19.jpg
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-30 00:34 , Processed in 0.140400 second(s), 14 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表