Bonjour,
J'ai un problème pour lire la température du capteur LM75.
En effet, j'ai un projet et je dois faire la lecture de la température
du capteur branché sur un module APF9328 armadeus via le bus I2C.
Quand je regarde les signaux SCL et SAD sur l'oscilloscope, je vois
bien que l'adresse envoyée est bien reçue mais que l'acquisition n'est
pas bonne. Je ne sais pas si c'est le programme ou au niveau du
capteur. Je fais la compilation sous linux via le terminal mais le
programme s'arrête à ce niveau:
Voici mon programme de lecture:Code:// write the desired register address if ( ioctl( fd, I2C_SLAVE, addr) < 0 ){ printf("Write error\n");
D'avance merci pour vos réponsesCode:#include <stdio.h> #include <fcntl.h> #include <errno.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <stdint.h> #include <linux/i2c.h> #include <linux/i2c-dev.h> #include <sys/ioctl.h> int fd; int read_byte( int fd,unsigned char addr, unsigned char reg, unsigned char *buf ) { buf [32]; // create an I2C write message (only one byte: the address) struct i2c_msg msg = {addr, 1, 1, buf }; // create a I2C IOCTL request struct i2c_rdwr_ioctl_data rdwr = { &msg, 1 }; buf[0] = reg; // select reg to read // write the desired register address if ( ioctl( fd, I2C_SLAVE, addr) < 0 ){ printf("Write error\n"); return -1; } msg.len = 2; buf[0]=0; buf[1]=0; msg.flags = I2C_M_RD; // read // read the result and write it in buf[0] if ( ioctl( fd, I2C_SLAVE, addr ) < 0 ){ printf("Read error\n"); return -1; } printf("bufs %02x -> %02x\n", buf[0], buf[1]); return (((unsigned char)buf[0])<<8 | ((unsigned char)buf[1]) ); //return 0; } /* i2cread i2c-devfile addr*/ int main(int argc, char **argv){ unsigned char buf; unsigned char addr; unsigned char subaddr; unsigned char value; if(argc != 4){ printf("wrong args numbers\nsyntaxe (hexa) :\ni2cread i2c-devfile addr subaddr\n"); return -1; } fd = open(argv[1],O_RDWR); if(fd < 0){ printf("can't open %s\n",argv[1]); return -1; } addr = (unsigned char )strtol(argv[2], (char **)NULL, 16); subaddr = (unsigned char )strtol(argv[3], (char **)NULL, 16); read_byte(fd,addr, subaddr, &buf); printf("Read component %02x at subaddress %02x -> %02x\n",addr,subaddr,buf); return value; }
Dseven
Prière à l'avenir de ne pas oublier les balises code afin d'en faciliter la lecture
-----