430板子AD采集不到基准电压(Ref+)的问题解决
问题描述:
之前的板子AD采集是正确的,但是新作出来的板子(新板有稍许改动)AD采集的结果:
有的板子是对的,有的板子是错误的。错误板子的现象是基准电压(Ref+)的值都采不到。
解决方法:
在给2543的数据输入脚送入值后,一定要延迟一定时间(目的是等待送入的值稳定下来) 再给时钟送上升沿。
之前程序 :
SPI_CLK_0;
SPI_CS_0;
for (i = 0; i < 12; i++) // Loop
{
Delay_us(10);
if (cmd & 0x80)
{
SPI_OUT_1;
}
else
{
SPI_OUT_0;
}
SPI_CLK_1;
cmd = cmd << 1;
g_usADValue[iChIdx][g_iSampleNo] = g_usADValue[iChIdx][g_iSampleNo] << 1;
if (SPI_IN)
{
g_usADValue[iChIdx][g_iSampleNo] |= 0x0001;
}
Delay_us(10);
SPI_CLK_0;
}
SPI_CS_1;
之后的程序
SPI_CLK_0;
SPI_CS_0;
for (i = 0; i < 12; i++) // Loop
{
Delay_us(10);
if (cmd & 0x80)
{
SPI_OUT_1;
}
else
{
SPI_OUT_0;
}
//一定要加这一句,否则会出问题,表现在有的板子是好的,有的板子有问题
//该句的目的是:在SPI_OUT加载数据后,要等待该数据稳定
Delay_us(10);
SPI_CLK_1;
cmd = cmd << 1;
g_usADValue[iChIdx][g_iSampleNo] = g_usADValue[iChIdx][g_iSampleNo] << 1;
if (SPI_IN)
{
g_usADValue[iChIdx][g_iSampleNo] |= 0x0001;
}
Delay_us(10);
SPI_CLK_0;
}
SPI_CS_1;