nRF52 与 PCA9685

问题描述

我的问题是关于微控制器开发的。我开始将 PCA9685 连接到 nRF52 DK 并遇到一个奇怪的问题。初始化PWM模块时,不起作用。初始化需要将寄存器设置为特定值,这并不复杂。坐了一会儿后,我设法使它恢复正常工作。 [链接到工作代码][1] 代码看起来很糟糕,但它有效

我遇到了以下问题:

void pca9685_write_u8 (uint8_t reg,uint8_t val)
{
  uint8_t buff[2] = {reg,val};
    nrf_drv_twi_tx(&m_pcah.twi_handle,m_pcah.device_address,buff,2,false);
}

我认为不值得解释该方法的作用。我经常使用它来初始化 PWM 驱动程序。但是如果我复制函数的主体并在其使用的地方替换它,那么一切都会停止工作。例如:

void pca9685_sleep(void)
{
    // Read the current state of the mode 1 register.
    uint8_t mode1_reg;
     pca9685_read_u8( PCA9685_REGISTER_MODE1,&mode1_reg);

    // Don't write the restart bit back and set the sleep bit.
    PCA9685_CLEAR_BIT_MASK(mode1_reg,PCA9685_REGISTER_MODE1_RESTART);
    PCA9685_SET_BIT_MASK(mode1_reg,PCA9685_REGISTER_MODE1_SLEEP);
     //pca9685_write_u8( PCA9685_REGISTER_MODE1,mode1_reg);
    uint8_t buff[2] = {PCA9685_REGISTER_MODE1,mode1_reg};
    nrf_drv_twi_tx(&m_pcah.twi_handle,false);
}

这还不是全部。但这是我唯一经历过反复试验的事情。

void pca9685_write_u8 (pca9685_handle_t *m_handle,uint8_t reg,val};
    nrf_drv_twi_tx(&m_handle->twi_handle,m_handle->device_address,false);
}

但是没有用 这是我第一次遇到这样的事情。

使用过的工具:

  • nRF52-DK,
  • Segger Embedded Studio
  • PCA9685

我也用类似的方式收集了上面的发送函数 [1]:https://github.com/Nursultan-Salikhov/PCA_9686-with-nRF52/blob/main/pca9685.c

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)