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 

Reply via email to