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;

原文地址:https://www.cnblogs.com/gaotaozhaolei/p/1858156.html