#include #include #include #include #include #include #include float adc_read(int fd, int channel) { int16_t ret16; uint8_t reg[3]; reg[0] = 0x01; //address of config register reg[1] = 0xc5 | (channel << 4);//OS=1,MUX=4+channel,PGA=2,MODE=1 reg[2] = 0x43; //DR=4,COMP_QUE=3 if (write(fd, reg, 3) != 3) { printf("failed to write device.\n"); return -1; } reg[0] = 0; while(1) { if (read(fd, reg, 2) != 2) { printf("failed to read device.\n"); return -1; } if (reg[0] & 0x80) { break; } } reg[0] = 0x00; //address of conversion register if (write(fd, reg, 1) != 1) { printf("failed to write device.\n"); return -1; } if (read(fd, reg, 2) != 2) { printf("failed to read device.\n"); return -1; } ret16 = (int16_t)reg[0] << 8 | reg[1]; return (float)(2.048 / 32767 * 4 * ret16); } int main(int argc, char **argv) { int i, fd_48, fd_49; float Ain[8]; if ((fd_48 = open("/dev/i2c-1", O_RDWR)) < 0) { printf("failed to open 0x48 device.\n"); return 1; } if (ioctl(fd_48, I2C_SLAVE, 0x48) < 0) { printf("failed to ioctl 0x48 device.\n"); return 1; } if((fd_49 = open("/dev/i2c-1", O_RDWR)) < 0) { printf("failed to open 0x49 device.\n"); return 1; } if(ioctl(fd_49, I2C_SLAVE, 0x49) < 0) { printf("failed to ioctl 0x49 device.\n"); return 1; } for(i=0;i<4;i++) { Ain[i] = adc_read(fd_48, i); } for(i=0;i<4;i++) { Ain[i+4] = adc_read(fd_49, i); } for(i=0;i<8;i++){ printf("channel-%d: %2.3f V\n", i, Ain[i]); } close(fd_48); close(fd_49); return 0; }