Psoc4 CY8C kit_042 BLE 先锋套件带有 adxl345 使用 I2C 或 SPI

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

大家好

   

我想通过 psoc5 运行 adxl345,但我 CAN无法在 i2c 或 spi 外设中运行。

   

有没有人有接口 5LP 的示例代码,以便在 i2c 或 spi 中使用正确的编程来处理主从关系,或者测试了 adxl345 的 Psoc4 创建器文件?

使用 CY8C4248LQI-BLE583 设备

 

我创建了一个项目,当我移动 adxl345 传感器时,我的 x、y、z 值没有变化。

该项目的 PFA。

 

 

   

0 点赞
3 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

非常感谢你查看代码和评论 mottoTanaka

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

你好 @ADSW @MotooTanaka 

我试过 通过读取设备 ID (0x00) 来检查 I2C 模式我正在附上下面的输出 (PFA)

请把项目的 Zip 文件和你确切的硬件连接发给我,我不明白这是硬件故障还是软件故障。

我在下面附上我关于如何读取设备ID值的项目,如果我做错了什么,请告诉我。

CAN ,您能否告诉我代码,以及如何读取设备 ID 和 Ack 状态

抱歉回复晚了,提前谢谢

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

你好 @Mungara_07

我们需要检查 i2c_i2cMastersendStart 函数的返回值才能知道 I2C 的状态

ADSW_0-1693384559747.png



我使用模块 GY-85 连接到 PSoC 4。
若要读取设备 ID, CAN 使用以下代码从地址数据中读取字节:

 

static inline uint32_t ADXL345_readbyte(uint16_t reg, uint8_t* retVal, uint32_t timeout)
{
    //start for write
    uint32_t res = I2C_I2CMasterSendStart(ADXL375_ADDR , I2C_I2C_WRITE_XFER_MODE, timeout);
    if( res == I2C_I2C_MSTR_NO_ERROR )
    {
        // request for the register 
        res = I2C_I2CMasterWriteByte(reg, timeout);
        if( res == I2C_I2C_MSTR_NO_ERROR )
        {
            // start for read
            res = I2C_I2CMasterSendRestart(ADXL375_ADDR, I2C_I2C_READ_XFER_MODE, timeout);
            if( res == I2C_I2C_MSTR_NO_ERROR )
                res = I2C_I2CMasterReadByte(I2C_I2C_NAK_ADDR, retVal, timeout);
        };
    };
    I2C_I2CMasterSendStop(timeout);
    return res;
}

 

在 main.c 中的 adxl345_init 之前调用该函数

 

uint8_t dev_id = 0;
    if( ADXL345_readbyte(0x00,(uint8_t*)&dev_id, 200) != 0 )
    {
        UART_1_UartPutString("device not found !\r\n");
    }else{
        sprintf(str, " ID = 0x%X \r\n", dev_id);
        UART_1_UartPutString(str);
    }
status = ADXl345_Init();

 

我收到了设备 ID = 0xE5


热烈的问候,ADSW

 

0 点赞