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 

Reply via email to