Il giorno lun, 14/05/2007 alle 16.00 +0000, og13270 ha scritto: > Hi, I don't see any error in your code. It would be easier to find the > problem if you print the error with perror(), after every call of > ioctl().
Reading from 4 ch 8 bit A/D converter PCF8591 ioctl(): Argument list too long CH0 = 3.30v (FF hex) ioctl(): Argument list too long ioctl(): Argument list too long CH1 = 3.30v (FF hex) ioctl(): Argument list too long ioctl(): Argument list too long CH2 = 3.30v (FF hex) ioctl(): Argument list too long ioctl(): Argument list too long CH3 = 3.30v (FF hex) ioctl(): Argument list too long ioctl(): Argument list too long CH4 = 3.30v (FF hex) ioctl(): Argument list too long > --- In [email protected], Luca <[EMAIL PROTECTED]> wrote: > > > > > > Hello to all, > > > > > > I was trying to make to go the pcf8591 with the driver i2c of the > > kernel, but with outcome negative. Then I have changed the pin dell > i2c > > from 0 to 1 I have put 6 for SDA and 7 for SCL therefore pin 38 and > 37 > > of j6. I even enclose you the code I have forgotten something;) > > > > thanks > > > > > > #include "stdio.h" > > #include "unistd.h" > > #include "sys/types.h" > > #include "sys/stat.h" > > #include "fcntl.h" > > #include "sys/ioctl.h" > > #include "linux/i2c.h" > > #include "asm/etraxi2c.h" > > > > #define ADDR 0x09 > > > > /* > > EXAMPLE usage: > > > > i2c_arg = I2C_WRITEARG(STA013_WRITE_ADDR, reg, val); > > ioctl(fd, _IO(ETRAXI2C_IOCTYPE, I2C_WRITEREG), i2c_arg); > > > > i2c_arg = I2C_READARG(STA013_READ_ADDR, reg); > > val = ioctl(fd, _IO(ETRAXI2C_IOCTYPE, I2C_READREG), i2c_arg); > > > > */ > > > > int main(void) { > > int value; > > int ch, i2c_arg; > > > > int i2c_fd = open("/dev/i2c", O_RDWR); > > if (!i2c_fd) return -1; > > > > // PCF8591 address scheme > > // | 1 | 0 | 0 | 1 | A2 | A1 | A0 | R/W | > > // | i2c_fixed | i2c_addr | 1/0 | > > // ADDR > > int i2c_fixed=0x09; > > int i2c_addr=0x01; > > > > printf("Reading from 4 ch 8 bit A/D converter PCF8591\n"); > > > > > > for (ch =0; ch <=4 ; ch++){ > > // Select the channel number > > i2c_arg = I2C_WRITEARG(ADDR, (ADDR<<4)|(i2c_addr<<1)|0, ch); > > ioctl(i2c_fd, _IO(ETRAXI2C_IOCTYPE, I2C_WRITEREG), i2c_arg); > > > > // Read the A/D value > > i2c_arg = I2C_READARG(ADDR, (ADDR<<4)|(i2c_addr<<1)|1); > > value = ioctl(i2c_fd, _IO(ETRAXI2C_IOCTYPE, I2C_READREG), i2c_arg); > > > > // Show the voltage level > > printf("CH%d = %.2fv (%02X hex)\n",ch,value*0.012941,value); > > } > > > > > > return 0; > > } > > > > > > > > Chiacchiera con i tuoi amici in tempo reale! > > http://it.yahoo.com/mail_it/foot/*http://it.messenger.yahoo.com > > > > > > > Chiacchiera con i tuoi amici in tempo reale! http://it.yahoo.com/mail_it/foot/*http://it.messenger.yahoo.com
