This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR5994:使用 Driverlib 的 MSP430FR5994 + ADS1115存在问题

Guru**** 2538930 points
Other Parts Discussed in Thread: ADS1115

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/938167/msp430fr5994-problem-with-msp430fr5994-ads1115-using-driverlib

器件型号:MSP430FR5994
主题中讨论的其他器件:ADS1115

大家好、我遇到了这些器件的问题、无法使 ADS1115正常工作、

这是出现错误的部分代码。 当我逐步调试时、问题出现在一个名为 writeRegister (uint8_t reg、uint16_t value)的函数中;

void writeRegister (uint8_t reg、uint16_t value){

//在发送模式下设置
EUSCI_B_I2C_setMode (I2C_EUSCI、EUSCI_B_I2C_Transmit _mode);
//启用 I2C 模块以启动操作
EUSCI_B_I2C_ENABLE (I2C_EUSCI);
// ADS1115数据表第25页
EUSCI_B_I2C_masterSendMultiByteStartWithTimeout (I2C_EUSCI、reg、1000); //--->开始+从器件地址字节+地址指针寄存
器延迟(1);
EUSCI_B_I2C_masterSendMultiByteNext (I2C_EUSCI、(uint8_t)(值>> 8)); // -->+数据字节1
延迟(1);
EUSCI_B_I2C_masterSendMultiByteFinish (I2C_EUSCI、(uint8_t)(value & 0xFF));//-->+数据字节2 +停止
延迟(1);

EUSCI_B_I2C_DIC_DISABLE (I2C_EUSCI);
}

具体而言、 在函数中、EUSCI_B_I2C_masterSendMultiByteNext (I2C_EUSCI、(uint8_t)(值>> 8))... 在该函数内、程序位于无限循环上、这是一个被调用的句子  

我不知道为什么会发生这种情况..

我跟踪"值"值、这就是它的内容。

uint16_t ADS1115_readadc_SingleEnd (uint8_t 通道){

if (通道> 3)}{
返回0;
}

//从默认值
uint16_t config =开始
ADS1015_REG_CONFIG_CQUE_NONE |//禁用比较器(默认值)
ADS1015_REG_CONFIG_CLAT_NONLAT |//非锁存(默认值)
ADS1015_REG_CONFIG_CPOL_ACTVLOW |//警报/ Rdy 低电平有效(默认值)
ADS1015_REG_CONFIG_CMODE_TRAD |//传统比较器(默认值)
ADS1015_REG_CONFIG_DR_1600SPS |//每秒1600个样本(默认)
ADS1015_REG_CONFIG_MODE_SINGLE;//单次触发模式(默认)

//设置 PGA/电压范围
配置|= m_GAIN;

//设置单端输入通道
开关(通道){
情形(0):
Config |= ADS1015_REG_CONFIG_MUX_SINGLE_0;
中断;
情况(1):
Config |= ADS1015_REG_CONFIG_MUX_SINGLE_1;
中断;
情况(2):
Config |= ADS1015_REG_CONFIG_MUX_SINGLE_2;
中断;
情况(3):
Config |= ADS1015_REG_CONFIG_MUX_SINGLE_3;
break;
}

//设置'启动单次转换'位
配置|= ADS1015_REG_CONFIG_OS_SINGLE;

//将配置寄存器写入 ADC
writeRegister (ADS1015_REG_POINTER_CONFIG、CONFIG);

//等待转换完成
延迟(m_convisionDelay);

//读取转换结果
//移位12位结果>ADS1015
寄存器的 bitrn 4位;针对 ADS1015_readshift
4位(对于 ADS1015)

/**获取电流电压读数
*读取电流差并将其乘以
*电流增益的常数。 MV 返回
到*提高电压精度
*
/
float ADS1115_getMilliVolts (uint8_t channel){
switch (m_gain){
外壳增益三分之二:
返回(ADS1115_readADC_SingleEnd (通道)* ADS1115_MV_6P144);
中断;
外壳增益_1:
返回(ADS1115_readADC_SingleEnd (通道)* ADS1115_MV_4P096);
中断;
外壳增益_2:
返回(ADS1115_readADC_SingleEnd (通道)* ADS1115_MV_2P048);
中断;
外壳增益_4:
返回(ADS1115_readADC_SingleEnd (通道)* ADS1115_MV_1P024);
中断;
外壳增益_8:
返回(ADS1115_readADC_SingleEnd (通道)* ADS1115_MV_0P512);
中断;
外壳增益_16:
返回(ADS1115_readADC_SingleEnd (通道)* ADS1115_MV_0P256);
中断;
}

配置寄存器是否正常?

我使用的是引脚7.0和7.1、因此我配置了#define I2C_EUSCI EUSCI_B2_base


希望您能为我提供帮助、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    多字节 I2C 函数不会检查 NACK、这大概是我希望 NACK 后挂起的位置。

    您可以在调试器中检查 UCB2IFG (UCNACKIFG)。

    ADS1115数据表(SBAS444D)表4建议其 I2C 地址应为0x48或0x49 (取决于 ADDR 引脚的连接方式)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bruce、

    感谢您回答问题。

    伊斯天