请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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。 请告诉我、问题可能出在哪里?
