ha303514587 发表于 2013-8-16 20:38:08

怎么打开后很多乱码的呢?

john800422 发表于 2013-8-16 22:14:59

ha303514587 发表于 2013-8-16 20:38 static/image/common/back.gif
怎么打开后很多乱码的呢?

繁體的
自己轉下就好了

ronic 发表于 2013-9-4 15:25:07

留名啀用谢谢楼主

lichuang是好人 发表于 2013-9-4 17:10:42

{:titter:}{:titter:}{:titter:}{:titter:}马克火速留名

keyxyh 发表于 2013-9-6 21:26:32

正在研究硬件IIC

cjwmusic 发表于 2013-9-22 21:35:23

请教下楼主ADXL345_I2C_ADDR是如何确定的啊

john800422 发表于 2013-9-23 00:04:38

cjwmusic 发表于 2013-9-22 21:35 static/image/common/back.gif
请教下楼主ADXL345_I2C_ADDR是如何确定的啊

看 Datasheet 的

keyxyh 发表于 2013-9-23 22:43:32

以后会用到先标记拉

nds_shenzhen 发表于 2013-10-24 12:01:01

楼主在吗

nds_shenzhen 发表于 2013-10-24 12:03:15

LSM303低8位 3轴加速计正常
但是高8位却是乱码
为什么呢? 静止不懂的时候 高8位应该是零才对吧
因为是16位的高8位有数据的话 左移8位的时候 数值变得很大了
有没有出现这情况的?

john800422 发表于 2013-10-24 12:49:14

本帖最后由 john800422 于 2013-10-24 12:54 编辑

nds_shenzhen 发表于 2013-10-24 12:03 static/image/common/back.gif
LSM303低8位 3轴加速计正常
但是高8位却是乱码
为什么呢? 静止不懂的时候 高8位应该是零才对吧

u8 Read_A_HL = {0};
s16 Read_A = {0};

Read_A_HL = OUT_X_L_A (28h)
Read_A_HL = OUT_X_H_A (29h)
Read_A_HL = OUT_Y_L_A (2Ah)
Read_A_HL = OUT_Y_H_A (2Bh)
Read_A_HL = OUT_Z_L_A (2Ch)
Read_A_HL = OUT_Z_H_A (2Dh)

Read_A = (s16)((Read_A << 8) | Read_A);
Read_A = (s16)((Read_A << 8) | Read_A);
Read_A = (s16)((Read_A << 8) | Read_A);
連續讀取的話,先讀出來的是低 8 寄存器
不知道是否是這個原因?

nds_shenzhen 发表于 2013-10-24 13:39:30

john800422 发表于 2013-10-24 12:49 static/image/common/back.gif
連續讀取的話,先讀出來的是低 8 寄存器
不知道是否是這個原因?

我的也是一样的
你帮我看看 是什么情况

LSM303低8位 3轴加速计正常
但是高8位却是乱码
为什么呢? 静止不懂的时候 高8位应该是零才对吧
因为是16位的高8位有数据的话 左移8位的时候 数值变得很大了
有没有出现这情况的?
void LSM303A_Init( void )
{
      
      Single_Write(LSM303A_I2C_ADDR,LSM303A_CTRL_REG1,0x27);
      delay_ms(5);
      Single_Write(LSM303A_I2C_ADDR,LSM303A_CTRL_REG4,0x40);
      delay_ms(5);
      temp=Single_Read(LSM303A_I2C_ADDR,LSM303A_CTRL_REG1);      
      printf("DS: %2x\n",temp);
}

初始化 返回寄存器设置是正确的。

void LSM303A_Read_Multiple_printf(void)
{
         unsigned char ACC_Data;
         int Ax = 0;
         int Ay = 0;
         int Az = 0;
      
    ACC_Data=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_X_L);
    ACC_Data=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_X_H);   
    ACC_Data=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Y_L);
    ACC_Data=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Y_H);
    ACC_Data=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Z_L);
    ACC_Data=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Z_H);   

//    Ax = (int) ((ACC_Data&0x0F) << 8) + ACC_Data;                     
//    Ay = (int) ((ACC_Data&0x0F) << 8) + ACC_Data;               
//    Az = (int) ((ACC_Data&0x0F) << 8) + ACC_Data;               
               
    Ax =   ACC_Data;                     
    Ay =   ACC_Data;               
    Az =   ACC_Data;      
    printf("LSM:Ax: %d,Ay: %d,Az: %d\n",Ax,Ay,Az);
}

静止状态下 打印信息 很乱
LSM:Ax: 192,Ay: 16,Az: 112
LSM:Ax: 128,Ay: 64,Az: 64
LSM:Ax: 224,Ay: 240,Az: 176
LSM:Ax: 160,Ay: 0,Az: 48
LSM:Ax: 160,Ay: 176,Az: 176
LSM:Ax: 144,Ay: 0,Az: 16
LSM:Ax: 192,Ay: 0,Az: 128
LSM:Ax: 144,Ay: 16,Az: 80
LSM:Ax: 176,Ay: 16,Az: 224
LSM:Ax: 224,Ay: 32,Az: 0
LSM:Ax: 96,Ay: 144,Az: 208
LSM:Ax: 160,Ay: 208,Az: 48
LSM:Ax: 0,Ay: 160,Az: 112
LSM:Ax: 64,Ay: 224,Az: 96
LSM:Ax: 208,Ay: 240,Az: 160
LSM:Ax: 32,Ay: 224,Az: 160
LSM:Ax: 224,Ay: 208,Az: 208
LSM:Ax: 96,Ay: 208,Az: 112
LSM:Ax: 0,Ay: 160,Az: 80
LSM:Ax: 48,Ay: 32,Az: 208
LSM:Ax: 96,Ay: 160,Az: 112
LSM:Ax: 48,Ay: 32,Az: 192
LSM:Ax: 64,Ay: 160,Az: 0
LSM:Ax: 64,Ay: 32,Az: 144
LSM:Ax: 80,Ay: 176,Az: 192

同样一个读取函数
void LSM303A_Read_Multiple_printf(void)
{
         unsigned char ACC_Data;
         int Ax = 0;
         int Ay = 0;
         int Az = 0;
      
    ACC_Data=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_X_L);
    ACC_Data=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_X_H);   
    ACC_Data=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Y_L);
    ACC_Data=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Y_H);
    ACC_Data=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Z_L);
    ACC_Data=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Z_H);   

//    Ax = (int) ((ACC_Data&0x0F) << 8) + ACC_Data;                     
//    Ay = (int) ((ACC_Data&0x0F) << 8) + ACC_Data;               
//    Az = (int) ((ACC_Data&0x0F) << 8) + ACC_Data;               
               
    Ax =   ACC_Data;                     
    Ay =   ACC_Data;               
    Az =   ACC_Data;      
    printf("LSM:Ax: %d,Ay: %d,Az: %d\n",Ax,Ay,Az);
}

静止状态下打印信息很正确
LSM:Ax: 5,Ay: 2,Az: 67
LSM:Ax: 4,Ay: 2,Az: 66
LSM:Ax: 4,Ay: 3,Az: 66
LSM:Ax: 4,Ay: 3,Az: 66
LSM:Ax: 4,Ay: 3,Az: 65
LSM:Ax: 4,Ay: 3,Az: 66
LSM:Ax: 4,Ay: 3,Az: 66
LSM:Ax: 5,Ay: 2,Az: 66
LSM:Ax: 4,Ay: 2,Az: 67
LSM:Ax: 6,Ay: 2,Az: 66
LSM:Ax: 4,Ay: 2,Az: 66
LSM:Ax: 4,Ay: 2,Az: 67
LSM:Ax: 4,Ay: 3,Az: 67
LSM:Ax: 5,Ay: 3,Az: 66
LSM:Ax: 5,Ay: 3,Az: 67
LSM:Ax: 5,Ay: 2,Az: 66
LSM:Ax: 4,Ay: 3,Az: 68
LSM:Ax: 5,Ay: 3,Az: 66
LSM:Ax: 4,Ay: 2,Az: 65
LSM:Ax: 4,Ay: 2,Az: 66
LSM:Ax: 4,Ay: 2,Az: 65
LSM:Ax: 4,Ay: 2,Az: 66
LSM:Ax: 5,Ay: 2,Az: 66

nds_shenzhen 发表于 2013-10-24 13:43:02

你出现过这样的情况吗如果是高8位 移位和低8位 相加的话 那就变化很大了

john800422 发表于 2013-10-24 14:41:34

本帖最后由 john800422 于 2013-10-24 14:43 编辑

nds_shenzhen 发表于 2013-10-24 13:43 static/image/common/back.gif
你出现过这样的情况吗如果是高8位 移位和低8位 相加的话 那就变化很大了

試試看這樣吧
void LSM303A_Read_Multiple_printf(void)
{
    unsigned char ACC_Data = {0};
    int Ax = 0;
    int Ay = 0;
    int Az = 0;

    ACC_Data = Single_Read(LSM303A_I2C_ADDR, LSM303A_OUT_X_L);
    ACC_Data = Single_Read(LSM303A_I2C_ADDR, LSM303A_OUT_X_H);
    ACC_Data = Single_Read(LSM303A_I2C_ADDR, LSM303A_OUT_Y_L);
    ACC_Data = Single_Read(LSM303A_I2C_ADDR, LSM303A_OUT_Y_H);
    ACC_Data = Single_Read(LSM303A_I2C_ADDR, LSM303A_OUT_Z_L);
    ACC_Data = Single_Read(LSM303A_I2C_ADDR, LSM303A_OUT_Z_H);

    Ax = (int)((ACC_Data << 8) | ACC_Data);
    Ay = (int)((ACC_Data << 8) | ACC_Data);
    Az = (int)((ACC_Data << 8) | ACC_Data);

//    Ax = ACC_Data;
//    Ay = ACC_Data;
//    Az = ACC_Data;

    printf("ReadAcc: Ax: %d, Ay: %d, Az: %d\n", Ax, Ay, Az);
}

nds_shenzhen 发表于 2013-10-24 15:16:39

john800422 发表于 2013-10-24 14:41 static/image/common/back.gif
試試看這樣吧

    Ax = (int)((ACC_Data << 8) | ACC_Data);
    Ay = (int)((ACC_Data << 8) | ACC_Data);
    Az = (int)((ACC_Data << 8) | ACC_Data);

得到的结果如下
LSM:Ax: 49407,Ay: 28672,Az: 49218
LSM:Ax: 45311,Ay: 1,Az: 61506
LSM:Ax: 41215,Ay: 40960,Az: 49218
LSM:Ax: 0,Ay: 36864,Az: 20547
LSM:Ax: 24831,Ay: 1,Az: 49219
LSM:Ax: 45310,Ay: 8193,Az: 53314
LSM:Ax: 61695,Ay: 20481,Az: 53314
LSM:Ax: 37119,Ay: 40961,Az: 16451
LSM:Ax: 33023,Ay: 40960,Az: 61506
LSM:Ax: 49406,Ay: 12289,Az: 8259
LSM:Ax: 16639,Ay: 32769,Az: 16451
LSM:Ax: 45311,Ay: 4097,Az: 24643
LSM:Ax: 4351,Ay: 57344,Az: 20547
LSM:Ax: 24831,Ay: 4097,Az: 20547
LSM:Ax: 28927,Ay: 16385,Az: 12354
LSM:Ax: 37119,Ay: 36864,Az: 66
LSM:Ax: 61695,Ay: 24577,Az: 16451
LSM:Ax: 16384,Ay: 49152,Az: 24642
LSM:Ax: 16639,Ay: 20481,Az: 61506
LSM:Ax: 4096,Ay: 4097,Az: 16451
LSM:Ax: 57598,Ay: 53248,Az: 61507
LSM:Ax: 37119,Ay: 1,Az: 4163
LSM:Ax: 37119,Ay: 49152,Az: 32834
LSM:Ax: 28927,Ay: 36864,Az: 53314
LSM:Ax: 61695,Ay: 12288,Az: 53314
LSM:Ax: 24831,Ay: 40961,Az: 67
LSM:Ax: 33023,Ay: 32769,Az: 57410
LSM:Ax: 45311,Ay: 49152,Az: 32835
LSM:Ax: 57599,Ay: 12289,Az: 12355
LSM:Ax: 33023,Ay: 49152,Az: 4163
LSM:Ax: 20735,Ay: 12289,Az: 53314
LSM:Ax: 12543,Ay: 4097,Az: 67
LSM:Ax: 24831,Ay: 1,Az: 20546
LSM:Ax: 37118,Ay: 4097,Az: 32835
LSM:Ax: 33023,Ay: 61440,Az: 28738
LSM:Ax: 45311,Ay: 32769,Az: 12355
LSM:Ax: 53503,Ay: 45057,Az: 57410
LSM:Ax: 61695,Ay: 32769,Az: 32834
LSM:Ax: 45310,Ay: 53248,Az: 12355
LSM:Ax: 16384,Ay: 4097,Az: 24643
LSM:Ax: 61695,Ay: 24576,Az: 45122
LSM:Ax: 61694,Ay: 4097,Az: 41027
LSM:Ax: 49407,Ay: 40960,Az: 16450
LSM:Ax: 0,Ay: 20481,Az: 57410
LSM:Ax: 16639,Ay: 36864,Az: 20548
LSM:Ax: 28927,Ay: 57344,Az: 20547
LSM:Ax: 41215,Ay: 28672,Az: 24642
LSM:Ax: 4351,Ay: 24576,Az: 4163

很奇怪的。。。

湛泸骏驰 发表于 2013-11-8 18:20:55

{:smile:}恩恩。

baplmqj 发表于 2013-12-5 15:54:43

楼主   我也是刚开始做四轴想用IIC+DMA   _Read_Multiple这个是什么意思,每个器件头文件里面都有小弟新手

baplmqj 发表于 2013-12-5 23:03:24

我想问,这个代码硬件iic加dma用着稳定吗?iic还挂载了多个器件,我硬件iic总是跑飞

baplmqj 发表于 2013-12-6 10:09:32

楼主,能够正常初始化,但是却读不到设备的ID,ID总是0,这是为什么呀?

yayagepei 发表于 2013-12-13 18:06:30

膜拜一下大神的杰作

ngc501 发表于 2013-12-17 15:39:08

太好了~

soniclidi 发表于 2013-12-18 12:59:54

顶一个啊

翔宇 发表于 2014-10-4 18:50:48

谢谢分享,下载留名~

haoran518 发表于 2014-10-4 20:41:33

mark。         

jsszdfdn 发表于 2014-10-18 21:07:58

john800422 发表于 2012-8-27 22:01
已经可以了

谢谢~


谢谢分享!

laylovesb1314 发表于 2015-3-8 23:04:27

mark一下子啊~!有空也想做四轴

炸弹人 发表于 2015-5-17 15:24:55

很有用,收藏了

炸弹人 发表于 2015-5-17 16:34:38

楼主问一下这个函数作用是什么?
void I2C1_Recv_DMA_IRQ( void )
{
        if(DMA_GetFlagStatus(DMA1_FLAG_TC7)) {
                if(I2C1->SR2 & 0x01) {
                        I2C_DMACmd(I2C1, DISABLE);
                        I2C_GenerateSTOP(I2C1, ENABLE);
                        PV_flag_1 = 0;
                }
                DMA_ClearFlag(DMA1_FLAG_TC7);
        }
        if(DMA_GetFlagStatus(DMA1_FLAG_GL7))
                DMA_ClearFlag(DMA1_FLAG_GL7);
        if(DMA_GetFlagStatus(DMA1_FLAG_HT7))
                DMA_ClearFlag(DMA1_FLAG_HT7);
}

bj232 发表于 2015-5-17 16:51:48

我是冲着硬件IIC来的,希望楼主给力

beihai326 发表于 2015-7-31 12:03:52

以前弄过,回头找找给你!

1170390 发表于 2015-7-31 23:08:18

LZ有没有做数据融合?

竹叶船 发表于 2018-6-6 11:53:24

谢谢分析!学习下LSM303.

18825206226 发表于 2019-3-18 16:03:56

被GD32 的i2c搞死了

xinchangkk 发表于 2019-3-18 16:21:46

本来还想说竟然用洞洞板搭,一看时间2012年!!   

厉害!

FireBrain 发表于 2019-3-18 18:31:26

我就想知道lsm303怎么焊接啊,太他妈小了

ronic 发表于 2019-3-18 21:47:10

好东西标志
页: 1 [2]
查看完整版本: STM32F103 硬件I2C ADXL345 L3G4200 LSM303 调试成功