PCF8575扩展SOC端口很方便

使用odroid c2开发板读取10位绝对值编码器,由于端口不够,用了一片PCF8575,再用i2c读取PCF8575,即可读到编码器的位置值。
步骤:

一、硬件连接

把带有PCF8575芯片的电路板用杜邦线连接odroid c2开发板的40pins外接端口的I2CA-SDA、I2CA-SCL针。
二、编译odroid c2的kernel,增加i2c

1、$make menuconfig
     Device Drivers --->
         Amlogic Device Drivers --->
            I2C Hardware Bus Support --->
               <*> Amlogic I2C Driver
2、编译、安装、重启

三、用户程序

//i2c_demo.c-读取pcf8575端口值
//$gcc -o i2c_demo i2c_demo.c
//$sudo ./i2c_demo
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
#include <errno.h>
#include <string.h>

/*
PCF8575的A2A1A0脚接GND,则 Address=0b0010,0000+000=0x20
PCF8575的A2A1脚接GND,A0脚接VDD,则 Address=0b010,0000+001=0x21
其中,0b0010,0000是I2C地址固定值。
*/
#define I2C_PCF8575_ADDR 0x20  
#define READ_SIZE  2

int main (void) {
    int i,value;
    int i2c_fd;
  
    // 打开设备
    i2c_fd = open("/dev/i2c-1", O_RDWR);
    if (i2c_fd < 0) {
        printf("Error opening file: %s\n", strerror(errno));
        return -1;
    }
   
   for( i = 0 ; i < 8 ; i++ ){
   // 先写欲读的I2C从设备地址
    if (ioctl(i2c_fd, I2C_SLAVE, I2C_PCF8575_ADDR) < 0) {
        printf("ioctl error: %s\n", strerror(errno));
        return -1;
    }
    if( read(i2c_fd , &value, READ_SIZE ) != READ_SIZE) {
      printf("Error writing file: %s\n", strerror(errno));
    else
      printf("0x%0x\n",value);
      }

    usleep(500000); // 延时500ms
 }
 
 close(i2c_fd);
 return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值