毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> linux >> 正文

ok6410接mpu6050读不出数据

更新时间:2013-7-16:  来源:毕业论文

ok6410接mpu6050读不出数据

本人因为设计  刚刚自学 arm和linux 求多多指教。
ok6410 烧的qtopia linux 想读通过ok6410上的自带iic  读 mpu6050数据
芯片给的例程是arduino和c51的,不太会移植到linux。
我先说我现在做的:
硬件:用杜邦线连接了  mpu6050芯片  gnd------->  CAMERA 20 引脚     ok6410
                                   vcc------->  CAMERA 17 引脚
                                   sda------->  CAMERA 1  引脚
                                   scl------->  CAMERA 2  引脚
软件:在PC上的VMware里面装了Ubuntu  程序写在里面 并编译  然后用超级终端发到ok6410执行

C/C++ code?#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/select.h> #include <sys/time.h> #include <errno.h> //瀹忓畾涔? #define    SMPLRT_DIV        0x19    //闄铻轰华閲囨牱鐜囷紝鍏稿瀷鍊硷細0x07(125Hz) #define    CONFIG            0x1A    //浣庨氭护娉㈤鐜囷紝鍏稿瀷鍊硷細0x06(5Hz) #define    GYRO_CONFIG        0x1B    //闄铻轰华鑷鍙婃祴閲忚寖鍥达紝鍏稿瀷鍊硷細0x18(涓嶈嚜妫锛?000deg/s) #define    ACCEL_CONFIG    0x1C    //鍔犻熻鑷銆佹祴閲忚寖鍥村強楂橀氭护娉㈤鐜囷紝鍏稿瀷鍊硷細0x01(涓嶈嚜妫锛?G锛?Hz) #define    ACCEL_XOUT_H    0x3B #define    ACCEL_XOUT_L    0x3C #define    ACCEL_YOUT_H    0x3D #define    ACCEL_YOUT_L    0x3E #define    ACCEL_ZOUT_H    0x3F #define    ACCEL_ZOUT_L    0x40 #define    TEMP_OUT_H        0x41 #define    TEMP_OUT_L        0x42 #define    GYRO_XOUT_H        0x43 #define    GYRO_XOUT_L        0x44     #define    GYRO_YOUT_H        0x45 #define    GYRO_YOUT_L        0x46 #define    GYRO_ZOUT_H        0x47 #define    GYRO_ZOUT_L        0x48 #define    PWR_MGMT_1        0x6B    //鐢垫簮绠$悊锛屽吀鍨嬪硷細0x00(姝e父鍚敤)   #define uint8 unsigned char #define uchar unsigned char   #define Address 0x68 //mpu6050鍦板潃 #define I2C_RETRIES 0x0701 #define I2C_TIMEOUT 0x0702 #define I2C_SLAVE 0x0703 //IIC浠庡櫒浠剁殑鍦板潃璁剧疆 #define I2C_BUS_MODE 0x0780   int fd = -1; //鍑芥暟澹版槑 static uint8 mpu6050_Init(void);     //mpu6050鍒濆鍖? static uint8 IIC_Init(void) { fd = open("/dev/i2c/0", O_RDWR); //鍏佽璇诲啓   if(fd < 0) { perror("Can't open /dev/nrf24l01 \n"); //鎵撳紑iic璁惧鏂囦欢澶辫触 exit(1); }   printf("open /dev/i2c/0 success !\n"); //鎵撳紑iic璁惧鏂囦欢鎴愬姛     if(ioctl(fd, I2C_SLAVE, Address)<0) { //璁剧疆iic浠庡櫒浠跺湴鍧   printf("fail to set i2c device slave address!\n"); close(fd); return -1; } printf("set slave address to 0x%x success!\n", Address);   if(ioctl(fd, I2C_BUS_MODE, 1)<0) //璁剧疆iic鎬荤嚎妯″紡 printf("set bus mode fail!\n"); elseprintf("set bus mode ok!\n"); return(0); }   //************************************** //鍚慖2C璁惧鍐欏叆涓涓瓧鑺傛暟鎹? //************************************** int Single_WriteI2C(uchar REG_Address,uchar REG_data) { int retries; uint8 data[2]; data[0] = REG_Address; data[1] = REG_data; for(retries=5; retries; retries--) { if(write(fd, data, 2)==2) return 0; usleep(1000*10); } return -1; } //************************************** //浠嶪2C璁惧璇诲彇涓涓瓧鑺傛暟鎹? //************************************** uchar Single_ReadI2C(uint8 reg, uint8 *val) { int retries; for(retries=5; retries; retries--) if(write(fd, &reg, 1)==1) if(read(fd, val, 1)==1) return 0; return -1; }       static uint8 mpu6050_Init(void) {   if(IIC_Init()!=0) {   printf("IIC init failed!\n");   return(-1); } Single_WriteI2C(PWR_MGMT_1, 0x00);    //瑙i櫎浼戠湢鐘舵? Single_WriteI2C(SMPLRT_DIV, 0x07); Single_WriteI2C(CONFIG, 0x06); Single_WriteI2C(GYRO_CONFIG, 0x18); Single_WriteI2C(ACCEL_CONFIG, 0x01); return(1);  }     /* uint8 mpu6050_Write(uint8 *nData, uint8 Reg, uint8 Num) { write(fd, &Reg, 1); // usleep(100); //寤舵椂100us write(fd, nData, Num); usleep(1000*4); //寤舵椂 4ms   return(1); }   uint8 mpu6050_Read(uint8 nData[], uint8 Reg, uint8 Num) { write(fd, &Reg, 1);  usleep(100); //寤舵椂100us read(fd, nData, Num); usleep(1000*4); //寤舵椂 4ms   return(1); } */   int GetData(uchar REG_Address) {     char H,L;     Single_ReadI2C(REG_Address,&H);     Single_ReadI2C(REG_Address+1,&L);     return (H<<8)+L;   //鍚堟垚鏁版嵁 } //涓诲嚱鏁?   int main(int argc, char *argv[]) { int i; usleep(1000*100); mpu6050_Init(); usleep(1000*100);     while(1)     {                         printf("xa is:%f\n",GetData(ACCEL_XOUT_H));    //鏄剧ずX杞村姞閫熷害         printf("ya is:%f\n",GetData(ACCEL_YOUT_H));    //鏄剧ずY杞村姞閫熷害         printf("za is:%f\n",GetData(ACCEL_ZOUT_H));    //鏄剧ずZ杞村姞閫熷害         printf("xj is:%f\n",GetData(GYRO_XOUT_H));    //鏄剧ずX杞磋閫熷害         printf("yj is:%f\n",GetData(GYRO_YOUT_H));    //鏄剧ずY杞磋閫熷害         printf("zj is:%f\n",GetData(GYRO_ZOUT_H));    //鏄剧ずZ杞磋閫熷害         usleep(1000*100);     }     close(fd); }

 

执行后出现      open /dev/i2c/0 success!
                set slave address to 0x68 success!
                set bus mode fail  
                xa is 0;
                ya is 0;
                各种 is 0   读的全是0    拔掉  芯片也是0 
 这个0x68是一个固定值,不是写进去的,是地址寄存器中的一个只读值,如果你能读出这个值,说明距离成功近了一步。

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©chuibin.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。