树莓派学习笔记——I2C PCF8574 BCM2835 Library

1.前言

树莓派的GPIO端口数量有限,可通过IO扩展芯片增加GPIO的数量,使得树莓派可以适应更多的应用。PCF8574为一款通过I2C总线扩展IO的芯片,单个PCF8574可扩展8个IO,一个I2C总线最多可挂载8个PCF8574,所以树莓派最多可扩展64个IO。
树莓派的LIB很多,例如wiringPi和bcm2835 C library都提供I2C API函数,本文选择bcm2835 C librayr实现对PCF8574的控制。

2.PCF8574使用简述

PCF8574的采用7位I2C地址,7位I2C地址中的低3位从高到低分别为A2 A1和A0,该3位为地址选择位,若地址选择全部接GND,那么PCF8574的I2C从机地址为0x20。图1为PCF8574的基本信息,左侧为芯片内部结构示意图,其中A2 A1和A0决定从机地址而从机地址直接影响I2C总线控制器,右侧上部为PCF8574引脚图,右侧下部为I2C从机地址组成示意图,从机地址的高4位为0100,该4位数字固定不变。

图1 PCF8574基本信息
请注意I2C 7位从机地址和I2C 读控制字或i2C写控制器存在联系与区别,对于7位从机地址为0x20的PCF8574而言,读控制字为0x41,写控制字为0x40。若使用GPIO通过软件法模拟I2C时序时,通常把写控制字0x40定义为I2C从机地址,软件模拟时的I2C地址(0x40)和I2C 7位从机地址(0x41)存在区别。
为了保险起见可使用i2cdetect工具查看,具体使用方法请查看参考资料【1】。

图2 使用I2C detect查看PCF8574从机地址
PCF8574内部含有8个准双向IO,对PCF8574进行一次写操作可修改IO口的输出状态,对PCF8574进行一次读操作可获取IO口的输入状态。I2C总线的操作较为复杂,各芯片之间的差异较大,例如BH1750、AT24C04和ADXL345虽然均使用I2C接口,但是细节之处存在差异较大。

3.代码实现

新建C文件,并命名为PCF8574.c
#include <bcm2835.h>

char WriteBuf[1] = {0x00};

int main(int argc, char **argv)
{
    if (!bcm2835_init())
    return 1;
    
    bcm2835_i2c_begin();
    bcm2835_i2c_setSlaveAddress(0x20);
    bcm2835_i2c_set_baudrate(10000);
   
    while(1)
    {
        WriteBuf[0] = 0x00;
        bcm2835_i2c_write( WriteBuf , 1);
        bcm2835_delay(500);

        WriteBuf[0] = 0x01;
        bcm2835_i2c_write( &WriteBuf[0] , 1);
        bcm2835_delay(500);
    }
   
    bcm2835_i2c_end();
    bcm2835_close();

    return 0;
}

bcm2835_i2c_begin();
设置I2C相关引脚为复用功能
bcm2835_i2c_setSlaveAddress(0x20);
设置I2C从机设备的地址,此处为0x20。
bcm2835_i2c_set_baudrate(100000);
设定I2C通信时的波特率,一般情况下不超过200000HZ(200KHz)。
WriteBuf
该数组为IO口输出结果,若数组中唯一的元素值为0x00时,所有IO口的输出状态为低电平;若该元素的值为0x01时,只有IO0(最低位)为高电平。加上延时函数便了实现PCF8574 IO0电平不断翻转的效果。

4.编译与执行

使用CD命令进入PCF8574.c所在的目录,并输入
gcc -o PCF8574 PCF8574.c -lbcm8574
sudo ./PCF8574

5.总结和展望

具备I2C接口的传感器很多,例如温度、湿度、加速度和角速度等等,如果用好树莓派的I2C接口做很多的应用。bcm2835 C library也非常好用,把之前需要几天乃至几周调试的工作量缩短为几个小时乃至几分钟,这样可以把更多的时间与精力集中于应用本身。学习树莓派更看重的是树莓派的网络功能,把网络功能和传感功能结合起来做一些好玩有意思的应用。

参考资料

2.PCF8574数据手册
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值