搜索
bottom↓
回复: 32

ADS1247读数总是0x7FFFFF 问题

[复制链接]

出0入53汤圆

发表于 2013-4-20 10:16:18 | 显示全部楼层 |阅读模式
刚刚在TI申请了3pcsADS1247样品 打样测试了一下发现 寄存器写进去 在读出的数据正常,读取AD值的时候不正常,读出的数据一直保持在0X7FFFFF
请问用过这个芯片的朋友,帮我看看是什么原因造成的谢谢!
#define   WakeUp              0x00        //Í˳ö˯Ãßģʽ
#define   Sleep               0x02        //½øÈë˯Ãßģʽ
#define   SYNC                0x04        //ͬ²½A/Dת»»
#define   Reset                      0x06        //¸´Î»Éϵç
#define   NOP                        0xff        //ÎÞ²Ù×÷
#define   RData                 0x12        //Ò»´Î¶ÁÈ¡Êý¾Ý
#define   RDataC              0x14        //Á¬Ðø¶ÁÈ¡Êý¾Ý
#define   SDataC              0x16        //Í£Ö¹Á¬Ðø¶ÁÈ¡Êý¾Ý
#define   RReg                0x20        //¶ÁÈ¡¼Ä´æÆ÷
#define   WReg                       0x40        //д¼Ä´æÆ÷
#define   SYSOCAL                  0x60        //ϵͳʧµ÷×ÔУ׼
#define   SYSGCAL                  0x61        //ϵͳÔöÒæУ׼
#define   SELFOCAL                  0x62        //×ÔÆ«ÒÆУ׼

#define   Reg_MUX0             0x00        //
#define   Reg_VBias            0x01        //
#define   Reg_MUX1             0x02        //
#define   Reg_SYS0             0x03        //
#define   Reg_CFC0             0x04        //
#define   Reg_CFC1             0x05        //
#define   Reg_CFC2             0x06        //
#define   Reg_FSC0             0x07        //
#define   Reg_FSC1             0x08        //
#define   Reg_FSC2              0x09        //
#define   Reg_IDAC0             0x0a        //
#define   Reg_IDAC1            0x0b        //
#define   Reg_GPIOCFG            0x0c        //
#define   Reg_GPIODIR           0x0d        //
#define   Reg_GPIODAT           0x0e        //

#define   ADS1247_MUX0          0x01        //AIN0(+)-AIN1(-)
#define   ADS1247_VBias          0x00        //²»Ê¹ÓÃÆ«Öõçѹ
#define   ADS1247_MUX1          0x00        //Íⲿ²Î¿¼REF,Õý³£ÔËÐÐ
#define   ADS1247_SYS0          0x00        //·Å´ó1±¶,5Hz
#define   ADS1247_IDAC0          0x06        //1mA
#define   ADS1247_IDAC1          0x0F        //µçÁ÷´ÓAIN0Êä³ö1mA



#define ADS1247_DIN_CLR()  GPIO_ResetBits(GPIOC,GPIO_Pin_0);
#define ADS1247_DIN_SET()  GPIO_SetBits(GPIOC,GPIO_Pin_0);
#define ADS1247_SCLK_CLR() GPIO_ResetBits(GPIOC,GPIO_Pin_2);
#define ADS1247_SCLK_SET() GPIO_SetBits(GPIOC,GPIO_Pin_2);
#define ADS1247_CS_CLR()          GPIO_ResetBits(GPIOC,GPIO_Pin_11);
#define ADS1247_CS_SET()          GPIO_SetBits(GPIOC,GPIO_Pin_11);

#define ADS1247_DOut_CLR() GPIO_ResetBits(GPIOC,GPIO_Pin_10);
#define ADS1247_DOut_SET() GPIO_SetBits(GPIOC,GPIO_Pin_10);
#define ADS1247_DOut_Get() GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_10)

#define ADS1247_RESET_CLR()  GPIO_ResetBits(GPIOC,GPIO_Pin_1);
#define ADS1247_RESET_SET()  GPIO_SetBits(GPIOC,GPIO_Pin_1);
#define ADS1247_START_CLR()  GPIO_ResetBits(GPIOC,GPIO_Pin_12);
#define ADS1247_START_SET()  GPIO_SetBits(GPIOC,GPIO_Pin_12);

void ADS1247_GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_11 | GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
       
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
}

void ADS1247_Delays(unsigned int count)//6us
{
        uint16_t i,j;
        for(i=count;i>0;i--)
                for(j=12;j>0;j--);
}

void WriteByteADS1247(unsigned char x)//8BIT
{
    unsigned char ii;

//         ADS1247_SCLK_SET();
    for (ii=0; ii<8; ii++)
        {
        ADS1247_SCLK_SET();
        ADS1247_Delays(20);
                if(x & 0x80) { ADS1247_DIN_SET(); }
                else         { ADS1247_DIN_CLR(); }      
        ADS1247_Delays(20);
                ADS1247_SCLK_CLR();
        ADS1247_Delays(20);
        x <<=1;
    }
}

void WriteWordADS1247(unsigned int x)//16BIT
{
    unsigned char ii;

//         ADS1247_SCLK_SET();//SET_ADSCK;
    for (ii=0; ii<16; ii++)
        {
        ADS1247_SCLK_SET();
        ADS1247_Delays(20);
                if(x & 0x8000){ ADS1247_DIN_SET(); }
                else          { ADS1247_DIN_CLR(); }
        ADS1247_Delays(20);
                ADS1247_SCLK_CLR();
        ADS1247_Delays(20);
        x <<=1;
    }
}

void WriteDWordADS1247(unsigned long int x)//24BIT
{
    unsigned char ii;

//         ADS1247_SCLK_SET();
    for (ii=0; ii<24; ii++)
        {
                ADS1247_SCLK_SET();
                ADS1247_Delays(20);
                if(x & 0x800000){ ADS1247_DIN_SET(); }
                else            { ADS1247_DIN_CLR(); }
                ADS1247_Delays(20);
                ADS1247_SCLK_CLR();
                ADS1247_Delays(20);
                x <<=1;
    }
}

unsigned char ReadByteADS1247(void)//8BIT
{
        unsigned char ii;
        unsigned char x ;
       
        while(ADS1247_DOut_Get());
//         ADS1247_SCLK_SET();
        for (ii = 0,x=0 ; ii < 8 ; ii++)
        {
                ADS1247_SCLK_SET();
                ADS1247_Delays(20);
                x<<=1;
                if(ADS1247_DOut_Get())   
                x |= 0x01;
                ADS1247_SCLK_CLR();
                ADS1247_Delays(20);
        }
        return  x;
}

unsigned int ReadWordADS1247(void)//16BIT
{
    unsigned char ii;
    unsigned int x ;

    while(ADS1247_DOut_Get());
//         ADS1247_SCLK_SET();
    for (ii = 0,x=0 ; ii < 16 ; ii++)
        {
        ADS1247_SCLK_SET();
        ADS1247_Delays(20);
        x<<=1;
        if (ADS1247_DOut_Get())   
            x |= 0x01;
                ADS1247_SCLK_CLR();
        ADS1247_Delays(20);
    }
    return  x;
}

unsigned long int ReadDWordADS1247(void)//24BIT
{
        unsigned char ii;
        unsigned long int x ;
//         ADS1247_SCLK_SET();
    for (ii = 0,x = 0 ; ii < 24 ; ii++)
        {
        ADS1247_SCLK_SET();
        ADS1247_Delays(20);
        x<<=1;
        if (ADS1247_DOut_Get())   
            x |= 0x01;
                ADS1247_SCLK_CLR();
        ADS1247_Delays(20);
    }
        //set_cs ;
    return  x;
}

void ResetADS1247(void)
{
    unsigned char ii;
    for(ii=0;ii<35;ii++)
        {   
                ADS1247_SCLK_CLR();
                ADS1247_Delays(20);
                ADS1247_DIN_SET();
                ADS1247_Delays(20);
                ADS1247_SCLK_SET();
                ADS1247_Delays(20);
    }
}

unsigned char k;
void ADS1247_Configuration(void)
{
        ADS1247_GPIO_Configuration();
       
        ADS1247_CS_CLR();
        ADS1247_RESET_SET()
       
        ADS1247_Delays(20);
        WriteByteADS1247(Reset);
        ADS1247_Delays(1000);//6ms
       
        WriteByteADS1247(WReg|Reg_MUX0);
        WriteByteADS1247(0x00);
        WriteByteADS1247(ADS1247_MUX0);
       
        WriteByteADS1247(WReg|Reg_VBias);
        WriteByteADS1247(0x00);
        WriteByteADS1247(ADS1247_VBias);
       
        WriteByteADS1247(WReg|Reg_MUX1);
        WriteByteADS1247(0x00);
        WriteByteADS1247(ADS1247_MUX1);
       
        WriteByteADS1247(WReg|Reg_SYS0);
        WriteByteADS1247(0x00);
        WriteByteADS1247(ADS1247_SYS0);
       
        WriteByteADS1247(WReg|Reg_IDAC0);
        WriteByteADS1247(0x00);
        WriteByteADS1247(ADS1247_IDAC0);
       
        WriteByteADS1247(WReg|Reg_IDAC1);
        WriteByteADS1247(0x00);
        WriteByteADS1247(ADS1247_IDAC1);
       
        WriteByteADS1247(RReg|Reg_IDAC1);
        WriteByteADS1247(0x00);
        k = ReadByteADS1247();
       
        WriteByteADS1247(0x14);
//         ADS1247_CS_SET();
        ADS1247_START_SET();
}

unsigned int temp24;
void GetADS1247Data(void)
{
       
        while(ADS1247_DOut_Get());
        temp24 = ReadDWordADS1247();
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入53汤圆

 楼主| 发表于 2013-4-20 15:47:41 | 显示全部楼层
怎么没有人帮我看看呢?

出0入85汤圆

发表于 2013-4-20 15:55:08 | 显示全部楼层
TI不是只能申请一片的吗?怎么申请3片?

出50入0汤圆

发表于 2013-4-20 20:36:48 | 显示全部楼层
0X7FFFFF 为正输入最大值,即输入等于或大于基准。
看你的电路应该是属于伪差分输入,REF-端要接地,
REF+怎么会短接到输入AIN1呢?

出0入53汤圆

 楼主| 发表于 2013-4-22 11:15:21 | 显示全部楼层
marshallemon 发表于 2013-4-20 15:55
TI不是只能申请一片的吗?怎么申请3片?

现在TI最多能申请3PCS啊,我申请 好几次了,而且回复的很快,上午申请,下午就给你打电话。发顺风很快。ADI最多2pcs,申请速度慢,他一般从菲律宾工厂发过来

出0入53汤圆

 楼主| 发表于 2013-4-22 11:41:58 | 显示全部楼层
jinfen 发表于 2013-4-20 20:36
0X7FFFFF 为正输入最大值,即输入等于或大于基准。
看你的电路应该是属于伪差分输入,REF-端要接地,
REF+ ...

上一个原理图有点错误我改掉了
我的AIN0连接了内部的激励电流源,产生1mA的恒流 然后连接一个不大于680欧姆的电阻,接入AIN1和REF+;REF+和REF-就产生基准电压。
改完后数据不停的跳动,一会0x000000一会0xFF8000就这两个数,来回跳动请问这是什么问题?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入53汤圆

 楼主| 发表于 2013-4-22 11:45:29 | 显示全部楼层
还有为什么我的配置完后,没有在AIN0产生1mA的电流?

出50入0汤圆

发表于 2013-4-23 14:10:05 | 显示全部楼层
zhcj66 发表于 2013-4-22 11:45
还有为什么我的配置完后,没有在AIN0产生1mA的电流?

是不是配置程序有问题?
如果没有1ma电流,那测试的值不对也很正常。
建议先检查程序

出0入53汤圆

 楼主| 发表于 2013-5-6 11:06:04 | 显示全部楼层
问题终于解决了,这里是解决过程,那些东西我就不发了,我发个网站
http://www.deyisupport.com/quest ... s/f/58/t/21162.aspx

出0入0汤圆

发表于 2013-5-28 15:28:56 | 显示全部楼层
求楼主解决的程序,我调的是ADS1248,已经好几天了,返回的值都是乱的,谢谢了。我邮箱2244327207@qq.com

出0入53汤圆

 楼主| 发表于 2013-5-28 15:45:37 | 显示全部楼层
z708875378 发表于 2013-5-28 15:28
求楼主解决的程序,我调的是ADS1248,已经好几天了,返回的值都是乱的,谢谢了。我邮箱 ...

你可以参照我解决1247的过程,他们2个设置基本一样

出0入0汤圆

发表于 2013-5-29 09:23:10 | 显示全部楼层
zhcj66 发表于 2013-5-28 15:45
你可以参照我解决1247的过程,他们2个设置基本一样

请发给我一份吧,我按照你这个配置了,但结果还是不正确。我想对照参考下,谢谢了。

出0入53汤圆

 楼主| 发表于 2013-6-1 08:03:08 | 显示全部楼层
z708875378 发表于 2013-5-29 09:23
请发给我一份吧,我按照你这个配置了,但结果还是不正确。我想对照参考下,谢谢了。 ...
  1. #define   WakeUp              0x00        //退出睡眠模式
  2. #define   Sleep               0x02        //进入睡眠模式
  3. #define   SYNC                0x04        //同步A/D转换
  4. #define   Reset                      0x06        //复位上电
  5. #define   NOP                        0xff        //无操作
  6. #define   RData                 0x12        //一次读取数据
  7. #define   RDataC              0x14        //连续读取数据
  8. #define   SDataC              0x16        //停止连续读取数据
  9. #define   RReg                0x20        //读取寄存器
  10. #define   WReg                       0x40        //写寄存器
  11. #define   SYSOCAL                  0x60        //系统失调自校准
  12. #define   SYSGCAL                  0x61        //系统增益校准
  13. #define   SELFOCAL                  0x62        //自偏移校准

  14. #define   Reg_MUX0             0x00        //
  15. #define   Reg_VBias            0x01        //
  16. #define   Reg_MUX1             0x02        //
  17. #define   Reg_SYS0             0x03        //
  18. #define   Reg_CFC0             0x04        //
  19. #define   Reg_CFC1             0x05        //
  20. #define   Reg_CFC2             0x06        //
  21. #define   Reg_FSC0             0x07        //
  22. #define   Reg_FSC1             0x08        //
  23. #define   Reg_FSC2              0x09        //
  24. #define   Reg_IDAC0             0x0a        //
  25. #define   Reg_IDAC1            0x0b        //
  26. #define   Reg_GPIOCFG            0x0c        //
  27. #define   Reg_GPIODIR           0x0d        //
  28. #define   Reg_GPIODAT           0x0e        //

  29. #define   ADS1247_MUX0          0x01        //AIN0(+)-AIN1(-)
  30. #define   ADS1247_VBias          0x00        //不使用偏置电压
  31. #define   ADS1247_MUX1          0x38        //外部参考REF,正常运行
  32. #define   ADS1247_SYS0          0x00        //放大1倍,5Hz
  33. #define   ADS1247_IDAC0          0x06        //1mA
  34. #define   ADS1247_IDAC1          0x03        //电流从AIN0输出1mA

  35. #define ADS1247_DIN_CLR()  GPIO_ResetBits(GPIOC,GPIO_Pin_7);
  36. #define ADS1247_DIN_SET()  GPIO_SetBits(GPIOC,GPIO_Pin_7);
  37. #define ADS1247_SCLK_CLR() GPIO_ResetBits(GPIOC,GPIO_Pin_8);
  38. #define ADS1247_SCLK_SET() GPIO_SetBits(GPIOC,GPIO_Pin_8);
  39. #define ADS1247_CS_CLR()          GPIO_ResetBits(GPIOC,GPIO_Pin_9);
  40. #define ADS1247_CS_SET()          GPIO_SetBits(GPIOC,GPIO_Pin_9);

  41. #define ADS1247_DOut_CLR() GPIO_ResetBits(GPIOA,GPIO_Pin_8);
  42. #define ADS1247_DOut_SET() GPIO_SetBits(GPIOA,GPIO_Pin_8);
  43. #define ADS1247_DOut_Get() GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)

  44. // #define ADS1247_RESET_CLR()  GPIO_ResetBits(GPIOC,GPIO_Pin_1);
  45. // #define ADS1247_RESET_SET()  GPIO_SetBits(GPIOC,GPIO_Pin_1);
  46. #define ADS1247_START_CLR()  GPIO_ResetBits(GPIOB,GPIO_Pin_15);
  47. #define ADS1247_START_SET()  GPIO_SetBits(GPIOB,GPIO_Pin_15);

  48. void ADS1247_GPIO_Configuration(void)
  49. {
  50.         GPIO_InitTypeDef GPIO_InitStructure;
  51.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC, ENABLE);
  52.        
  53.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
  54.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  55.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  56.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  57.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  58.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  59.        
  60.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_8 | GPIO_Pin_7;
  61.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  62.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  63.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  64.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  65.         GPIO_Init(GPIOC, &GPIO_InitStructure);
  66.        
  67.        
  68.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  69.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  70.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  71.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  72.        
  73.         ADS1247_DIN_SET();
  74.         ADS1247_SCLK_SET();
  75. }

  76. void ADS1247_Delays(unsigned int count)//6us
  77. {
  78.         uint16_t i,j;
  79.         for(i=count;i>0;i--)
  80.                 for(j=12;j>0;j--);
  81. }

  82. void WriteByteADS1247(unsigned char x)//8BIT
  83. {
  84.     unsigned char ii;

  85.     for (ii=0; ii<8; ii++)
  86.         {
  87.         ADS1247_SCLK_SET();
  88.         ADS1247_Delays(20);
  89.                 if(x & 0x80) { ADS1247_DIN_SET(); }
  90.                 else         { ADS1247_DIN_CLR(); }      
  91.         ADS1247_Delays(20);
  92.                 ADS1247_SCLK_CLR();
  93.         ADS1247_Delays(20);
  94.         x <<=1;
  95.     }
  96.         ADS1247_DIN_SET();//这里必须把DIN线设为1否则,在读取AD值的时候会出错
  97. }

  98. void WriteWordADS1247(unsigned int x)//16BIT
  99. {
  100.     unsigned char ii;

  101.     for (ii=0; ii<16; ii++)
  102.         {
  103.         ADS1247_SCLK_SET();
  104.         ADS1247_Delays(20);
  105.                 if(x & 0x8000){ ADS1247_DIN_SET(); }
  106.                 else          { ADS1247_DIN_CLR(); }
  107.         ADS1247_Delays(20);
  108.                 ADS1247_SCLK_CLR();
  109.         ADS1247_Delays(20);
  110.         x <<=1;
  111.     }
  112.         ADS1247_DIN_SET();
  113. }

  114. void WriteDWordADS1247(unsigned long int x)//24BIT
  115. {
  116.     unsigned char ii;

  117.     for (ii=0; ii<24; ii++)
  118.         {
  119.                 ADS1247_SCLK_SET();
  120.                 ADS1247_Delays(20);
  121.                 if(x & 0x800000){ ADS1247_DIN_SET(); }
  122.                 else            { ADS1247_DIN_CLR(); }
  123.                 ADS1247_Delays(20);
  124.                 ADS1247_SCLK_CLR();
  125.                 ADS1247_Delays(20);
  126.                 x <<=1;
  127.     }
  128.         ADS1247_DIN_SET();
  129. }

  130. unsigned char ReadByteADS1247(void)//8BIT
  131. {
  132.         unsigned char ii;
  133.         unsigned char x ;
  134.        
  135.         while(ADS1247_DOut_Get());
  136.         for (ii = 0,x=0 ; ii < 8 ; ii++)
  137.         {
  138.                 ADS1247_SCLK_SET();
  139.                 ADS1247_Delays(20);
  140.                 ADS1247_SCLK_CLR();
  141.                 x<<=1;
  142.                 if(ADS1247_DOut_Get())   
  143.                 x |= 0x01;
  144.                 ADS1247_Delays(20);
  145.         }
  146.         return  x;
  147. }

  148. unsigned int ReadWordADS1247(void)//16BIT
  149. {
  150.     unsigned char ii;
  151.     unsigned int x ;

  152.     while(ADS1247_DOut_Get());
  153.     for (ii = 0,x=0 ; ii < 16 ; ii++)
  154.         {
  155.         ADS1247_SCLK_SET();
  156.         ADS1247_Delays(20);
  157.                 ADS1247_SCLK_CLR();
  158.         x<<=1;
  159.         if (ADS1247_DOut_Get())   
  160.             x |= 0x01;
  161.         ADS1247_Delays(20);
  162.     }
  163.     return  x;
  164. }

  165. unsigned long int ReadDWordADS1247(void)//24BIT
  166. {
  167.         unsigned char ii;
  168.         unsigned long int x ;
  169.     for (ii = 0,x = 0 ; ii < 24 ; ii++)
  170.         {
  171.         ADS1247_SCLK_SET();
  172.         ADS1247_Delays(20);
  173.                 ADS1247_SCLK_CLR();
  174.         x<<=1;
  175.         if (ADS1247_DOut_Get())   
  176.             x |= 0x01;
  177.         ADS1247_Delays(20);
  178.     }
  179.     return  x;
  180. }

  181. void ResetADS1247(void)
  182. {
  183.     unsigned char ii;
  184.     for(ii=0;ii<35;ii++)
  185.         {   
  186.                 ADS1247_SCLK_CLR();
  187.                 ADS1247_Delays(20);
  188.                 ADS1247_DIN_SET();
  189.                 ADS1247_Delays(20);
  190.                 ADS1247_SCLK_SET();
  191.                 ADS1247_Delays(20);
  192.     }
  193. }



  194. unsigned char k;
  195. void ADS1247_Configuration(void)
  196. {
  197.         ADS1247_GPIO_Configuration();
  198.        
  199.         ADS1247_CS_CLR();
  200. //         ADS1247_RESET_SET();
  201.         ADS1247_START_CLR();
  202.        
  203.         ADS1247_Delays(20);
  204.         WriteByteADS1247(Reset);
  205.         ADS1247_START_SET();
  206.         ADS1247_Delays(1000);//300ms
  207.        
  208.         WriteByteADS1247(WReg|Reg_MUX0);
  209.         WriteByteADS1247(0x00);
  210.         WriteByteADS1247(ADS1247_MUX0);
  211.        
  212.         WriteByteADS1247(WReg|Reg_VBias);
  213.         WriteByteADS1247(0x00);
  214.         WriteByteADS1247(ADS1247_VBias);
  215.        
  216.         WriteByteADS1247(WReg|Reg_MUX1);
  217.         WriteByteADS1247(0x00);
  218.         WriteByteADS1247(ADS1247_MUX1);
  219.        
  220.         WriteByteADS1247(WReg|Reg_SYS0);
  221.         WriteByteADS1247(0x00);
  222.         WriteByteADS1247(ADS1247_SYS0);
  223.        
  224.         WriteByteADS1247(WReg|Reg_IDAC0);
  225.         WriteByteADS1247(0x00);
  226.         WriteByteADS1247(ADS1247_IDAC0);
  227. //         ADS1247WREG(Reg_IDAC0,ADS1247_IDAC0);
  228.        
  229.         WriteByteADS1247(WReg|Reg_IDAC1);
  230.         WriteByteADS1247(0x00);
  231.         WriteByteADS1247(ADS1247_IDAC1);
  232.        
  233.         WriteByteADS1247(RReg|Reg_IDAC0);
  234.         WriteByteADS1247(0x00);
  235.         k = ReadByteADS1247();
  236.        
  237. //         ADS1247WREG(Reg_IDAC1,ADS1247_IDAC1);
  238. //         k = ADS1247RREG(Reg_IDAC1);
  239. //         k = ADS1247RREG(Reg_IDAC0);
  240.        
  241. //         WriteByteADS1247(0x14);
  242. //         ADS1247_CS_SET();
  243. //         ADS1247_START_SET();
  244. // delays(0xFFFFF);
  245. }

  246. unsigned int temp1247;
  247. void GetADS1247Data(void)
  248. {
  249. unsigned char Temp[9];
  250. unsigned int Temp24;       
  251.         while(ADS1247_DOut_Get());
  252.         ADS1247_CS_CLR();
  253.         WriteByteADS1247(0x12);
  254.         temp1247 = ReadDWordADS1247();
  255.         ADS1247_CS_SET();
  256.        
  257.         Temp24 = temp1247;
  258.         Temp[0] = Temp24/10000000%10+0x30;
  259.         Temp[1] = Temp24/1000000%10+0x30;
  260.         Temp[2] = Temp24/100000%10+0x30;
  261.         Temp[3] = Temp24/10000%10+0x30;
  262.         Temp[4] = Temp24/1000%10+0x30;
  263.         Temp[5] = Temp24/100%10+0x30;
  264.         Temp[6] = Temp24/10%10+0x30;
  265.         Temp[7] = Temp24%10+0x30;
  266.         Temp[8] = 0;
  267.         printf ("%s\r\n",Temp);
  268. }
复制代码

出0入0汤圆

发表于 2013-6-9 08:21:50 | 显示全部楼层
zhcj66 发表于 2013-6-1 08:03

谢谢了,已经调出来了,用的是硬件SPI,模拟的还是有问题。

出0入53汤圆

 楼主| 发表于 2013-6-10 20:26:18 | 显示全部楼层
z708875378 发表于 2013-6-9 08:21
谢谢了,已经调出来了,用的是硬件SPI,模拟的还是有问题。

那就是时序问题,你的芯片能稳定到多少位?

出0入0汤圆

发表于 2013-6-14 07:20:42 | 显示全部楼层
zhcj66 发表于 2013-6-10 20:26
那就是时序问题,你的芯片能稳定到多少位?

目前能稳定在16位,最好的时候在20位,还在继续调。

出0入0汤圆

发表于 2013-6-14 09:01:31 | 显示全部楼层
z708875378 发表于 2013-6-14 07:20
目前能稳定在16位,最好的时候在20位,还在继续调。

你好,我还发现个问题就是我把output data rate of the ADC设置成低于2000sps时芯片输出就不正常了,设置成2000时输出的数据就是对的

出0入0汤圆

发表于 2013-6-17 14:04:03 | 显示全部楼层
本帖最后由 z708875378 于 2013-6-17 14:06 编辑

楼主,我正在做的是要用1248测pt100的温度,我是个学生,没人指导,我看了些你的帖子发现你做过pt100的测温,你能不能给我些资料学习下,或者能不能指导下我应该怎么下手,我现在1248可以稳定在16位,pt100从来没用过。pt100的测温电路以及温度如何计算请给我些指导,谢谢。

出0入53汤圆

 楼主| 发表于 2013-7-31 15:30:51 | 显示全部楼层
z708875378 发表于 2013-6-17 14:04
楼主,我正在做的是要用1248测pt100的温度,我是个学生,没人指导,我看了些你的帖子发现你做过pt100的测温 ...

1个恒流 串入被测电阻 然后在串入参考电阻 取被测电阻的电压,参考电阻要大于测量电阻

出0入0汤圆

发表于 2013-8-2 09:43:40 | 显示全部楼层
zhcj66 发表于 2013-7-31 15:30
1个恒流 串入被测电阻 然后在串入参考电阻 取被测电阻的电压,参考电阻要大于测量电阻 ...

非常感谢,我准备使用1248自己产生恒流源来测pt100了

出0入53汤圆

 楼主| 发表于 2013-8-3 08:21:35 | 显示全部楼层
z708875378 发表于 2013-8-2 09:43
非常感谢,我准备使用1248自己产生恒流源来测pt100了

测试完毕请把你测试的数据和心得共享一下

出0入0汤圆

发表于 2013-8-5 08:19:30 | 显示全部楼层
zhcj66 发表于 2013-8-3 08:21
测试完毕请把你测试的数据和心得共享一下

好的,现在在画电路图,等板子做出来测试好了有时间的时候跟大家分享下

出0入0汤圆

发表于 2013-8-31 11:37:36 | 显示全部楼层
z708875378 发表于 2013-5-29 09:23
请发给我一份吧,我按照你这个配置了,但结果还是不正确。我想对照参考下,谢谢了。 ...

同学,你用STM32的SPI通信写的ADS1247么,我也搞了一天的1247了,头都大了,能把你的SPI通信的ADS1247程序发我一份么,谢了!

出0入0汤圆

发表于 2013-8-31 11:39:16 | 显示全部楼层
z708875378 发表于 2013-8-5 08:19
好的,现在在画电路图,等板子做出来测试好了有时间的时候跟大家分享下 ...

额,忘记说我邮箱了:624591992@qq.com .

出0入0汤圆

发表于 2014-11-16 21:16:15 | 显示全部楼层
标记下pt100测温度

出0入0汤圆

发表于 2014-11-17 07:16:10 | 显示全部楼层
Hardware design issues -> there is no way you wouldn't get the max reading.

出0入0汤圆

发表于 2015-1-1 13:24:16 | 显示全部楼层
楼主,能把你的整个工程传上来参考一下吗,包括硬件原理图与程序!,最近在弄PT100测温,用的是STM32加ADS1247,想学习一下,谢谢啦!!

出0入53汤圆

 楼主| 发表于 2015-1-2 14:06:30 | 显示全部楼层
电子学生 发表于 2015-1-1 13:24
楼主,能把你的整个工程传上来参考一下吗,包括硬件原理图与程序!,最近在弄PT100测温,用的是STM32加ADS1 ...

帖子里有

出0入0汤圆

发表于 2015-1-17 21:53:31 | 显示全部楼层
楼主您好,我移植了你的程序,输出1mA电流到100欧姆电阻,读出的数据是0677xxxx左右,请问,我1mA的电流经过100欧姆的电阻应该是100mv左右,那它的数据也应该是10000000左右啊,怎么会是0677xxxx啊,哪里的问题啊!!

出0入53汤圆

 楼主| 发表于 2015-5-22 20:00:58 | 显示全部楼层
电子学生 发表于 2015-1-17 21:53
楼主您好,我移植了你的程序,输出1mA电流到100欧姆电阻,读出的数据是0677xxxx左右,请问,我1mA的电流经 ...

这个和参考电压,放大倍数,电流源精度等有关系

出0入0汤圆

发表于 2015-5-28 21:28:07 | 显示全部楼层
谢谢楼主

出0入0汤圆

发表于 2015-5-28 21:28:39 | 显示全部楼层
zhcj66 发表于 2015-5-22 20:00
这个和参考电压,放大倍数,电流源精度等有关系

谢谢楼主指导

出0入0汤圆

发表于 2015-8-19 08:35:17 | 显示全部楼层
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 00:09

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表