本帖最后由 ar_m_cu 于 2014-1-15 22:10 编辑
程序如下:
初始化函数:
void SD24Init(void)
{
uint16_t i = 0;
SD24CTL = SD24REFON | SD24SSEL0 | SD24DIV_3; // 1.2V ref, SMCLK, 8 分频
SD24CCTL0 = (SD24SNGL | SD24GRP | /*SD24DF |*/ // 单次转换,组合转换,补码形式 ,双极性模式
SD24LSBTOG); // 24位结果
SD24CCTL1 = (SD24SNGL | SD24GRP | /*SD24DF |*/ // 单次转换,组合转换,补码形式 ,双极性模式
SD24LSBTOG); // 24位结果
SD24CCTL2 = (SD24SNGL | SD24IE | /*SD24DF |*/ // 单次转换,使能中断,补码形式 ,双极性模式
SD24LSBTOG); // 24位结果
SD24INCTL0 = SD24INCH_5; // (AVcc - AVss) / 11
SD24INCTL1 = SD24INCH_6; // 内部温度
SD24INCTL2 = SD24INCH_7; // PGA 偏移
//SD24AE = 0x07;
for (i = 0; i < 0x3600; i++); // Delay for 1.2V ref startup
SD24CCTL2 |= SD24SC; // Set bit to start conversion
}
中断处理函数:
int32_t ConvData[3];
float SampValue[3];
#pragma vector=SD24_VECTOR
__interrupt void SD24AISR(void)
{
switch (SD24IV)
{
case 2:
break;
case 4:
break;
case 6:
break;
case 8:
ConvData[0] = SD24MEM0; // 高16位
SD24CCTL0 |= SD24LSBACC; // 激活低16位
ConvData[1] = SD24MEM1;
SD24CCTL1 |= SD24LSBACC;
ConvData[2] = SD24MEM2;
SD24CCTL2 |= SD24LSBACC;
ConvData[0] = (ConvData[0] << 16) + SD24MEM0; // 组合得到24位结果
SD24CCTL0 &= ~SD24LSBACC; // 恢复 SD24MEM0 存储高 16 位 ,为下次转换准备
ConvData[1] = (ConvData[1] << 16) + SD24MEM1;
SD24CCTL1 &= ~SD24LSBACC;
ConvData[2] = (ConvData[2] << 16) + SD24MEM2;
SD24CCTL2 &= ~SD24LSBACC;
SampValue[0] = 0.6 * ConvData[0] / (4194304.0); // 计算电压 4194304 = 1 << 22
SampValue[1] = 0.6 * ConvData[1] / (4194304.0);
SampValue[1] = SampValue[1] * 1000 / 1.32 - 273;
SampValue[2] = 0.6 * ConvData[2] / (4194304.0);
break;
}
}
3个SD24通道分别采样 芯片模拟供电电压、内部温度传感器、PAG偏置,采用24位数据模式,单次转换,
但是得到结果却是完全不对,有人知道原因吗?是不是我的程序有什么问题?求指导
没用过SD16,我用的SD24,外部最大参考电压1.2V
那输入电压的范围应该是多少呢?如果我要检测的电压输入大于参考电压,我需要怎么做呢?电阻分压吗?谢谢~~
一周热门 更多>