This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请问8位MCU的SPI如何接驱ADS1118?

Other Parts Discussed in Thread: ADS1118

如果可以,编程要注意的要点是什么?有例程更好,谢谢

  • 连续发三四次8位SPI数据 然后将读回来的数据自己调整一下啊。

  • 这个地方有一个例程, 你看看是不是基于8位的SPI 的?


    http://www.deyisupport.com/question_answer/analog/data_converters/f/58/p/66635/159109.aspx#159109

  • 你是要用SPI模块驱动AD还是用I/O口模拟SPI时序进行读写?

  • 用的是SPI模块。MCU是STC15W4K系列的芯片。

    以下是我写的程序片段

    void ADS1118_config(uint config_h,uint config_l)
    {
     SS=0;
     
     SPDAT=config_h;
     while(!(SPSTAT&SPIF));//等待传输完毕
     SPSTAT=SPIF|WCOL;//清除状态
     
     SPDAT=config_l;
     while(!(SPSTAT&SPIF));
     SPSTAT=SPIF|WCOL;
     
     SPDAT=config_h;
     while(!(SPSTAT&SPIF));
     SPSTAT=SPIF|WCOL;
     
     SPDAT=config_l;
     while(!(SPSTAT&SPIF));
     SPSTAT=SPIF|WCOL;
     
     SS=1;
     DelayUS(10);
    }

    int ADS1118_read()
    {
     SS=0; 
     
     SPDAT=0xFF;//产生SCLK时钟,读出数据
     while(!(SPSTAT&SPIF));
     SPSTAT=SPIF|WCOL;
     ADS1118_DATA=SPDAT;
     ADS1118_DATA=ADS1118_DATA<<8;
     
     SPDAT=0xFF;
     while(!(SPSTAT&SPIF));
     SPSTAT=SPIF|WCOL;
     ADS1118_DATA|=SPDAT;
     
     SPDAT=0xFF;
     //while(!(SPSTAT&SPIF));
     //SPSTAT=SPIF|WCOL; 
     SPDAT=0xFF;
     //while(!(SPSTAT&SPIF));
     //SPSTAT=SPIF|WCOL;

     SS=1;
     return ADS1118_DATA;
    }

    void main()
    {

    ......

    ADS1118_config(0x43,0x89);//通道0,单次模式
    ADS1118_read();
    ......

    }

    实际运行后,ADS1118_DATA中的数据随温度升高而增大(比如常温下0F5C,对着芯片吹口热气马上爬升到0F88,停止吹气又逐步回落到0F5C),貌似没有工作在AD状态;如将注释掉的4条语句打开,则ADS1118_DATA中的数据一直是0000

    有点晕,不知道啥情况?MCU采用22.1184Mhz,SPI初始化时钟设定为Fsys/128