#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, fd_4A, fd_4B; float Ain[16]; 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; } if ((fd_4A = open("/dev/i2c-1", O_RDWR)) < 0) { printf("failed to open 0x4A device.\n"); return 1; } if (ioctl(fd_4A, I2C_SLAVE, 0x4A) < 0) { printf("failed to ioctl 0x4A device.\n"); return 1; } if ((fd_4B = open("/dev/i2c-1", O_RDWR)) < 0) { printf("failed to open 0x4B device.\n"); return 1; } if (ioctl(fd_4B, I2C_SLAVE, 0x4B) < 0) { printf("failed to ioctl 0x4B 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<4;i++) { Ain[i+8] = adc_read(fd_4A, i); } for (i=0;i<4;i++) { Ain[i+12] = adc_read(fd_4B, i); } for (i=0;i<16;i++){ printf("channel-%d: %2.3f V\n", i, Ain[i]); } close(fd_48); close(fd_49); close(fd_4A); close(fd_4B); return 0; }