您好!
我正在尝试使用内部 DAC 连接校准 CTSD16 A/D、但我无法获得与 DAC 输出相对应的读数。 我能够独立使用 A/D 和 DAC、并且可以通过 A/D 监视 Veref+、内部温度传感器和 AVcc、但每次我尝试读取 DAC 时、无论 DAC 输出设置为什么、我都得到大约32768的读数。 除了将通道设置 为 CTSD16_INPUT_CH18之外、读取 DAC 是否还有任何特殊的注意事项?
谢谢、
Justin
void initialize_dac () { //将基准设置为外部、将放大器设置为中速且电流 DAC12_0CTL0 = DAC12SREF_3 | DAC12AMP_5 | DAC12OPS; //将增益设置为2个基准(如果 DAC12OG 开启且 DAC12IR 关闭增益为2个) DAC12_0CTL1 = DAC12OG; _DELAY_CYCLES (1000); //清除数据寄存器 DAC12_0DAT = 0; //在 DAC 上运行内部校准例程 DAC12_0CALCTL = DAC12PW;//设置密码并禁用校准寄存器锁定位 DAC12_0CTL0 |= DAC12CALON;//开始校准 while (DAC12_0CTL0 & DAC12CALON);//等待校准完成 DAC12_0CALCTL =( DAC12PW | DAC12LOCK );//启用校准寄存器锁定位 DAC12_0CTL0 |= DAC12ENC; } #define CALSAMPLES 10 void adcOffsetCal () { //为 CTDS16 CTSD16CTL 启用外部基准块&&~CTSD16OFFG; //必须将外部基准 IO 引脚设置为备用功能 P5SEL |= BIT0; //启用 P6SEL.0来为 A0-A3上的转换提供栅极基准 //对于 A4和 A5 P6SEL,为 P4SEL.6和 P4SEL.1|= BIT3 + BIT2 + BIT1 + BIT0; P4SEL |= BIT6 + BIT1; DAC12_0DAT = 1000; //使用外部基准和内部电阻器初始化 CTSD16以实现时钟 CTSD16_init (CTSD16_base、CTSD16_RTR_INPUT_CHARGEPUMP_BURST_REQUEST_ENABLE、CTSD16_REF_EXTERNAL); CTSD16_initConvertParam AdvParam ={0}; CTSD16_INPUT = convAdvParam.groupEnable convAdvParam.inputChannel = CCSD16_PUT = CCSD16_INPUT = CCEST_CONVRAPHOLDER.param;CTSD16_ENTREM_CONVER_CONVER_COMPON_COMPON_COMPONGAL;CTSD16_CLUS_COMPON_COMPON_COMP convAdvParam.dataFormat = CTSD16_DATA_FORMAT_BINARY; initAdvParam.railToRailInput = CTSD16_RTR_INPUT_ENABLE; convAdvParam.interruptDelay = CTSD16_Four_SAMP_INTERRUPT; Advatio.oversample_Param = CTSD16_oversample_256;// 16位样本需要 Advent.gain = CTSD16_COMP16 ;conv_Ct_16 = CTSDT_PRINT16;conv_0 = CTSD_16;conv_COMP_IN_16 = CTSDT_PRINT16; i++){ //清除转换器0中断标志 CTSD16_clearInterrupt (CTSD16_base、CTSD16_converter_0、CTSD16_converter_interrupt | CTSD16_converter_overflow_interrupt); CTSD16_startConverterConversion (CTSD16_base、CTSD16_converter_0); while (!CTSD16_getInterruptStatus (CTSD16_base、CTSD16_converter_0、CTSD16_converter_interrupt)); dummy[i]= CTSD16_getResults (CTSD16_base、CTSD16_converter_0)>> 8; dummyAvg += dummy[i]; } dummyAvg // CALSAMPLES; }