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.

[参考译文] ADS1292:0x7FFFFF、而不是实值

Guru**** 2496595 points
Other Parts Discussed in Thread: ADS1292

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/725077/ads1292-0x7fffff-instead-of-real-values

器件型号:ADS1292

你好。 我在项目中使用 ADC ADS1292。 AVDD = 5V、DVDD = 3.3V、IN2P = 200mV。 我首先根据数据表中的"快速入门"指令配置了该 ADC。 ​​我在两个通道上得到的不是0x7FFFFF 的实际值、状态位是正确的- 0xС00000。 我尝试打开校准-结果相同。 以下是 MPLAB x IDE 中该 ADC 的初始化详细代码:

define ADC_REG_DevID 0x00
#define ADC_REG_CONFIG1 0x01
#define ADC_REG_CONFIG2 0x02
#define ADC_REG_LOFF 0x03
#define ADC_REG_CH1SET 0x04
#define ADC_REG_CH2SET 0x05
#define ADC_REG_RLD_SENS 0x06
#define ADC_REG_ADC_RECOL_ADC_RE_RE_ADC_RECORD 0x08


#define 0x0_ADC_RE_ADC_RE_ADC_RECOL_ADC_RE_ADC_RECORD 0x01 #RE_ADC_RE_ADC_RECORD #define 0x07 0x0ADC_RE_ADC_RE_ADC_RE_ADC_RE_ADC_RE_ADC_RECOL_ADC_RE_ADC_RECORD #RE_ADC_RECORD #0X0X0X0_ADC_RE_ADC_RE_ADC_RE_






0x1A
#define ADC_CMD_RREG 0x20
#define ADC_CMD_WREG 0x40



LATBbits.LATB2 = 0; //将 CS 引脚设为低
LATBbits.LATB3 = 0; //引脚启动至高

ADC_RESET = 0;
Delay10TCYx (9);//延迟8.14 μs
ADC_RESET = 1;
Delay10KTCYx (256);//延迟460ms
Delay10KTCYx (256);

ADC_Stop ();
ADC_SetConfig ();
ADC_Start ();

ADC_Start (256);// delay 460ms delay10KTCYx (256);ADC_sid

Command (256);ADC_SetADC_sp000/ CC_SET


= 0 (ADC_CONFIG)
= 0 (ADC_RECOLD)= 0 (ADC_RECOLD);ADC_RECOL (ADC_RECOLD)

//启用内部基准
//将内部基准设置为2.42v
ADC_WriteRegister (ADC_REG_CONFIG2、0b10100000);

//启用通道1
//增益 x1
//正常电极输入
ADC_WriteRegister (ADC_REG_CH1SET、0b00010000);

//启用通道2
//增益 x12
//正常电极输入 ADC_WriteRegister
(ADC_REG_CH1SET、0b00010000);//启用通道2

// RLDREF 信号(AVDD–AVSS)/2在内部生成
//在
ADC_WriteRegister (ADC_REG_RESP2、0x83)上进行校准;

//启用 RLD 缓冲器
ADC_WriteRegister (ADC_REG_RLD_SENS、0x20);

//使用默认值初始化其余寄存器 ADC_REG_WriteRegister
(ADC_REG_REG_REG_REG_REG_REG_REG_REG_REG_REG_REG_REG_REG_REG_REG_REG_REGISTR_ADC_REG_REG_REGIST_REGIST_REG_0x10

);//用默认值初始化 ADC_REG_REG_ 0b00011111);
ADC_WriteRegister (ADC_REG_RESP1、0x02);
ADC_WriteRegister (ADC_REG_GPIO、0x00);

ADC_SendCommand (ADC_CMD_OFFSETCAL);

}

void ADC_SendCommand (byte 命令){

ADC_CS = 0;
SPI_SEND_b (命令);
ADC_CS = 1;

}



void ADC_WriteRegister (byte address、byte value){

ADC_CS = 0;
// writecode + address
SPI_SEND_b (COMMAND

)= 1;ADC_WRITE
= 1;ADC_REG_D/ ADC_REG_1

;ADC_REGISTER (ADC_REG_1)



//通道数据(24个状态位+ 24位? 2个通道)= 72位

void ADC_UpdateChannelData (void){

字节 i、j、tmp;
ADC_CS = 0;
//读取3字节状态寄存器(1100 + LOFF_STAT[4:0]+ GPIO[1:0]+ 13 '0')
tmp = SPI_rcv_b ();
tmp = SPI_rcv (4:0]+ GPIO[1:0]+13'0')
;tmp = SPI_tmp_b (t = SPI_rv_b)


i++)

{
channelData[i]= 0;
//以3个字节块读取24位通道数据
、适用于(j = 0;j < 3;j++)
{
tmp = SPI_rcv_b ();
channelData[i]=((channelData[i])<< 8)| tmp;
}
//将3字节二进制补码转换为4字节二进制补码
if ((channelData[i]>> 23)=1)
{
channelData[i]|= 0xFF000000;
}
否则
{
channelData[i]&= 0x00FFFFFF;
}
}channelDC_CS
= 1;

}

void ADC_READY_INTERRUPT (void)
{
INTCON3bits.INT1IF = 0;//сброс флага прерывания
ADC_UpdateChannelData();

} 


我尝试禁用通道-我在通道上得到的值为0、这意味着写入命令被正确执行。 我尝试打开测试模式以获得至少一些数据(在 CH1SET 寄存​​器中、我选择0101 =测试信号模式、并在 CONFIG2寄存器中设置0b10100011)-仍然是相同的值0x7FFFFF。 请告诉我、问题可能出在哪里?

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

    感谢您的发帖、欢迎加入论坛!

    7FFFFF 是正满量程输出、可能是以下位置之一出现问题:模拟输入、PGA 增益、基准或输出代码转换。

    IN1P 的值是什么? 也是200mV?
    IN2N 连接到什么?
    IN1N 保持浮动?

    在通道2上、假设 IN2N 为 GND - 200mV 的差分电压乘以12的 PGA 增益可得到2.4V 电压、这是您的基准电压。 这将产生预期的7FFFFF。

    尝试将内部基准电压增加到4.033V、以查看 ADC 上的额外净空是否有帮助!

    e2e.ti.com/.../2391901