zhcj66 发表于 2013-4-20 15:44:50

ADS1110用了一下午的时间终于搞定了

今天把在TI申请的样片ADS1110焊接上,开始从头开始写测试程序,
一边看数据手册一边写,写完了在对照逻辑分析仪,验证自己的时序,今天太幸运了,一步到位搞定了。我用的芯片是000地址的。这个一定要注意哦。
测试了芯片数据稳定性,觉得这个芯片很完美,1倍放大15sps速度16bit数据很稳定。
写这篇文章的目的是回报阿莫论坛的无私精神。希望更多的莫友发表自己的成果,给正在挣扎的朋友一点帮助,
下面我用的是STM32F205芯片读取的,废话少说,上代码
/**
******************************************************************************
* @File                                :ADS1110.c
* @Author                                :Flame
* @Email                                :zhcj66@163.com
* @Version                        :V1.0.0
* @FileNewDate                :2013-04-20
* @FileChangeDate                :2013-04-20
* @Brief                                :16Bit_AD,自带2.048V ±.05%的电压基准,采样率:15/30/60/240sps;放大倍数:1/2/4/8
                                                :2013-04-20程序测试成功
******************************************************************************
*/
#include "includes.h"

#define ADS1110_SCL_CLR() GPIO_ResetBits(GPIOC,GPIO_Pin_7);
#define ADS1110_SCL_SET() GPIO_SetBits(GPIOC,GPIO_Pin_7);

#define ADS1110_SDA_CLR() GPIO_ResetBits(GPIOC,GPIO_Pin_8);
#define ADS1110_SDA_SET() GPIO_SetBits(GPIOC,GPIO_Pin_8);
#define ADS1110_SDA_Get() GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8)

#define ADS1110Addr                                        0x90                        //ADS1110地址
#define ADS1110ReadAddr                                ADS1110Addr+1        //ADS1110读地址
#define ADS1110WriteAddr                        ADS1110Addr+0        //ADS1110写地址
#define ADS1110Reg                                        0x0C                        //连续,15sps,1倍

void ADS1110_GPIO_In(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
}

void ADS1110_GPIO_Out(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
        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);
}

void ADS1110_GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
        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);
       
       
        ADS1110_GPIO_Out();
}


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

void ADS_delay(void)
{
unsigned char i;
for(i=0;i<5;i++);
}


void ADS1110_Start(void)   
{
        ADS1110_GPIO_Out();
       
        ADS1110_SDA_SET();
        ADS1110_SCL_SET();
        ADS1110_Delays(1);
        ADS1110_SDA_CLR();
        ADS1110_Delays(1);
        ADS1110_SCL_CLR();
}

void ADS1110_Stop(void)
{
        ADS1110_GPIO_Out();
       
        ADS1110_SDA_CLR();
        ADS1110_SCL_CLR();
        ADS1110_Delays(1);
        ADS1110_SCL_SET();
        ADS1110_Delays(1);
        ADS1110_SDA_SET();
        ADS1110_Delays(1);
}

//等待应答信号到来       返回值:1,接收应答失败 ;0,接收应答成功      
unsigned char ADS1110_Wait_Ack(void)
{
        u8 ucErrTime=0;
        ADS1110_GPIO_In();      //SDA设置为输入
        ADS1110_SDA_SET();
        ADS1110_Delays(1);   
        ADS1110_SCL_SET();
        ADS1110_Delays(1);
        while(ADS1110_SDA_Get())
        {
                ucErrTime++;
                if(ucErrTime>250)
                {
                        ADS1110_Stop();
                        return 1;
                }
        }
        ADS1110_SCL_CLR();//时钟输出0   
        return 0;
}

//产生ACK应答
void ADS1110_Ack(void)
{
        ADS1110_SCL_CLR();
        ADS1110_GPIO_Out();
        ADS1110_SDA_CLR();
        ADS1110_Delays(2);
        ADS1110_SCL_SET();
        ADS1110_Delays(2);
        ADS1110_SCL_CLR();
}

//不产生ACK应答   
void ADS1110_NAck(void)
{
        ADS1110_SCL_CLR();
        ADS1110_GPIO_Out();
        ADS1110_SDA_SET();
        ADS1110_Delays(2);
        ADS1110_SCL_SET();
        ADS1110_Delays(2);
        ADS1110_SCL_CLR();
}
               
//IIC发送一个字节          
void ADS1110_Send_Byte(u8 txd)
{                        
        u8 t;   
        ADS1110_GPIO_Out();      
        ADS1110_SCL_CLR();//拉低时钟开始数据传输
        for(t=0;t<8;t++)
        {            
                //IIC_SDA=(txd&0x80)>>7;
                if (txd&0x80){ADS1110_SDA_SET();}
                else         {ADS1110_SDA_CLR();}
                txd<<=1;   
                ADS1110_Delays(2);   
                ADS1110_SCL_SET();
                ADS1110_Delays(2);
                ADS1110_SCL_CLR();
                ADS1110_Delays(2);
        }
}

//读1个字节,ack=1时,发送ACK,ack=0,发送nACK   
unsigned char ADS1110_Read_Byte(unsigned char ack)
{
        unsigned char i,receive=0;
        ADS1110_GPIO_In();//SDA设置为输入
        ADS1110_SDA_SET();
        for(i=0;i<8;i++ )
        {
                ADS1110_SCL_CLR();
                ADS1110_Delays(2);
                ADS1110_SCL_SET();
                receive<<=1;
                if(ADS1110_SDA_Get())receive++;   
                ADS1110_Delays(1);
        }      
        if (!ack)
        ADS1110_NAck();//发送nACK
        else
        ADS1110_Ack(); //发送ACK   
        return receive;
}

void ADS_WriteCfgReg(unsigned char CfgData)   //Write ADS1110 Congiguration Register
{
        ADS1110_Start();
        ADS1110_Send_Byte(ADS1110WriteAddr);
        ADS1110_Wait_Ack();
        ADS1110_Send_Byte(CfgData);
        ADS1110_Wait_Ack();
        ADS1110_Stop();
}

unsigned int ReadDataCfgReg(unsigned int ReadType)//Read data from ADS1110 Data registerReadType=0x01返回AD值,ReadType=0x00返回寄存器值
{
unsigned int temp,temp1;
        ADS1110_Start();
        ADS1110_Send_Byte(ADS1110ReadAddr);
        ADS1110_Wait_Ack();
        temp=ADS1110_Read_Byte(1)<<8;
        ADS1110_Ack();
        temp+=(ADS1110_Read_Byte(1));
        ADS1110_Ack();
        temp1 = ADS1110_Read_Byte(1);
        ADS1110_Ack();
        ADS1110_Stop();
        if(ReadType == 0x01)//返回AD值
        {
                return(temp);
        }
        else         return(temp1);//返回寄存器值
}

void ADS1110_Configuration(void)
{
        ADS1110_GPIO_Configuration();
        ADS_WriteCfgReg(ADS1110Reg);
}


void GetADS1110Data(void)
{
unsigned char Temp;
unsigned int Temp24;
        Temp24 = ReadDataCfgReg(1);
        Temp = Temp24/10000%10+0x30;
        Temp = Temp24/1000%10+0x30;
        Temp = Temp24/100%10+0x30;
        Temp = Temp24/10%10+0x30;
        Temp = Temp24%10+0x30;
        Temp = 0x0D;
        Temp = 0x0A;
        Temp = 0;
        USART1_Puts(Temp);
}

zhcj66 发表于 2013-4-20 15:45:35

自己顶一下,{:lol:}

zhcj66 发表于 2013-4-20 15:46:41

有用过ADS1247的朋友希望给我看看我发的ADS1247文章

zhcj66 发表于 2013-4-20 15:48:05

http://www.amobbs.com/thread-5530199-1-1.html   ads1247

lyg407 发表于 2013-4-20 17:56:13

谢谢楼主分享。。。。。。。

sun92845166 发表于 2013-4-20 23:02:53

谢谢楼主分享。。。。。。。

aureole 发表于 2013-4-20 23:40:34

我替你整理成 code 模式/**
******************************************************************************
* @File                              :ADS1110.c
* @Author                              :Flame
* @Email                              :zhcj66@163.com
* @Version                        :V1.0.0
* @FileNewDate                :2013-04-20
* @FileChangeDate                :2013-04-20
* @Brief                              :16Bit_AD,自带2.048V ±.05%的电压基准,采样率:15/30/60/240sps;放大倍数:1/2/4/8
                                                :2013-04-20程序测试成功
******************************************************************************
*/
#include "includes.h"

#define ADS1110_SCL_CLR() GPIO_ResetBits(GPIOC,GPIO_Pin_7);
#define ADS1110_SCL_SET() GPIO_SetBits(GPIOC,GPIO_Pin_7);

#define ADS1110_SDA_CLR() GPIO_ResetBits(GPIOC,GPIO_Pin_8);
#define ADS1110_SDA_SET() GPIO_SetBits(GPIOC,GPIO_Pin_8);
#define ADS1110_SDA_Get() GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8)

#define ADS1110Addr                                        0x90                        //ADS1110地址
#define ADS1110ReadAddr                              ADS1110Addr+1      //ADS1110读地址
#define ADS1110WriteAddr                        ADS1110Addr+0      //ADS1110写地址
#define ADS1110Reg                                        0x0C                        //连续,15sps,1倍

void ADS1110_GPIO_In(void)
{
      GPIO_InitTypeDef GPIO_InitStructure;
      
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
      GPIO_Init(GPIOC, &GPIO_InitStructure);
}

void ADS1110_GPIO_Out(void)
{
      GPIO_InitTypeDef GPIO_InitStructure;
      
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
      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);
}

void ADS1110_GPIO_Configuration(void)
{
      GPIO_InitTypeDef GPIO_InitStructure;
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
      
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
      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);
      
      
      ADS1110_GPIO_Out();
}


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

void ADS_delay(void)
{
unsigned char i;
for(i=0;i<5;i++);
}


void ADS1110_Start(void)   
{
      ADS1110_GPIO_Out();
      
      ADS1110_SDA_SET();
      ADS1110_SCL_SET();
      ADS1110_Delays(1);
      ADS1110_SDA_CLR();
      ADS1110_Delays(1);
      ADS1110_SCL_CLR();
}

void ADS1110_Stop(void)
{
      ADS1110_GPIO_Out();
      
      ADS1110_SDA_CLR();
      ADS1110_SCL_CLR();
      ADS1110_Delays(1);
      ADS1110_SCL_SET();
      ADS1110_Delays(1);
      ADS1110_SDA_SET();
      ADS1110_Delays(1);
}

//等待应答信号到来         返回值:1,接收应答失败 ;0,接收应答成功      
unsigned char ADS1110_Wait_Ack(void)
{
      u8 ucErrTime=0;
      ADS1110_GPIO_In();      //SDA设置为输入
      ADS1110_SDA_SET();
      ADS1110_Delays(1);   
      ADS1110_SCL_SET();
      ADS1110_Delays(1);
      while(ADS1110_SDA_Get())
      {
                ucErrTime++;
                if(ucErrTime>250)
                {
                        ADS1110_Stop();
                        return 1;
                }
      }
      ADS1110_SCL_CLR();//时钟输出0   
      return 0;
}

//产生ACK应答
void ADS1110_Ack(void)
{
      ADS1110_SCL_CLR();
      ADS1110_GPIO_Out();
      ADS1110_SDA_CLR();
      ADS1110_Delays(2);
      ADS1110_SCL_SET();
      ADS1110_Delays(2);
      ADS1110_SCL_CLR();
}

//不产生ACK应答   
void ADS1110_NAck(void)
{
      ADS1110_SCL_CLR();
      ADS1110_GPIO_Out();
      ADS1110_SDA_SET();
      ADS1110_Delays(2);
      ADS1110_SCL_SET();
      ADS1110_Delays(2);
      ADS1110_SCL_CLR();
}
               
//IIC发送一个字节         
void ADS1110_Send_Byte(u8 txd)
{                        
      u8 t;   
      ADS1110_GPIO_Out();      
      ADS1110_SCL_CLR();//拉低时钟开始数据传输
      for(t=0;t<8;t++)
      {            
                //IIC_SDA=(txd&0x80)>>7;
                if (txd&0x80){ADS1110_SDA_SET();}
                else         {ADS1110_SDA_CLR();}
                txd<<=1;   
                ADS1110_Delays(2);   
                ADS1110_SCL_SET();
                ADS1110_Delays(2);
                ADS1110_SCL_CLR();
                ADS1110_Delays(2);
      }
}

//读1个字节,ack=1时,发送ACK,ack=0,发送nACK   
unsigned char ADS1110_Read_Byte(unsigned char ack)
{
      unsigned char i,receive=0;
      ADS1110_GPIO_In();//SDA设置为输入
      ADS1110_SDA_SET();
      for(i=0;i<8;i++ )
      {
                ADS1110_SCL_CLR();
                ADS1110_Delays(2);
                ADS1110_SCL_SET();
                receive<<=1;
                if(ADS1110_SDA_Get())receive++;   
                ADS1110_Delays(1);
      }      
      if (!ack)
      ADS1110_NAck();//发送nACK
      else
      ADS1110_Ack(); //发送ACK   
      return receive;
}

void ADS_WriteCfgReg(unsigned char CfgData)   //Write ADS1110 Congiguration Register
{
      ADS1110_Start();
      ADS1110_Send_Byte(ADS1110WriteAddr);
      ADS1110_Wait_Ack();
      ADS1110_Send_Byte(CfgData);
      ADS1110_Wait_Ack();
      ADS1110_Stop();
}

unsigned int ReadDataCfgReg(unsigned int ReadType)//Read data from ADS1110 Data registerReadType=0x01返回AD值,ReadType=0x00返回寄存器值
{
unsigned int temp,temp1;
      ADS1110_Start();
      ADS1110_Send_Byte(ADS1110ReadAddr);
      ADS1110_Wait_Ack();
      temp=ADS1110_Read_Byte(1)<<8;
      ADS1110_Ack();
      temp+=(ADS1110_Read_Byte(1));
      ADS1110_Ack();
      temp1 = ADS1110_Read_Byte(1);
      ADS1110_Ack();
      ADS1110_Stop();
      if(ReadType == 0x01)//返回AD值
      {
                return(temp);
      }
      else         return(temp1);//返回寄存器值
}

void ADS1110_Configuration(void)
{
      ADS1110_GPIO_Configuration();
      ADS_WriteCfgReg(ADS1110Reg);
}


void GetADS1110Data(void)
{
unsigned char Temp;
unsigned int Temp24;
      Temp24 = ReadDataCfgReg(1);
      Temp = Temp24/10000%10+0x30;
      Temp = Temp24/1000%10+0x30;
      Temp = Temp24/100%10+0x30;
      Temp = Temp24/10%10+0x30;
      Temp = Temp24%10+0x30;
      Temp = 0x0D;
      Temp = 0x0A;
      Temp = 0;
      USART1_Puts(Temp);
}

shiyingyifan 发表于 2013-4-22 00:59:10

做个记号,以备后用。

Shaw.Embedi 发表于 2013-4-22 09:13:47

嗯 。这个不错。。

zhcj66 发表于 2013-4-22 11:12:24

aureole 发表于 2013-4-20 23:40 static/image/common/back.gif
我替你整理成 code 模式

这种更容易看了,谢谢。这个怎么弄的?

liangjiatian 发表于 2013-4-22 11:15:32

是多少位的AD?

zhcj66 发表于 2013-4-22 11:43:22

liangjiatian 发表于 2013-4-22 11:15 static/image/common/back.gif
是多少位的AD?

16BIT的AD 可以说基本上稳定在16bit上

liangjiatian 发表于 2013-4-22 11:55:20

zhcj66 发表于 2013-4-22 11:43 static/image/common/back.gif
16BIT的AD 可以说基本上稳定在16bit上

我想做一个数控电源 想找一个AD和DA 比较高精度的 DAC芯片 有什么好推荐

xtxtt 发表于 2013-4-22 12:12:40

这个好,收藏

zhcj66 发表于 2013-4-22 12:24:14

liangjiatian 发表于 2013-4-22 11:55 static/image/common/back.gif
我想做一个数控电源 想找一个AD和DA 比较高精度的 DAC芯片 有什么好推荐

还没有研究过数控电源,AD你可以使用ADS1110这个芯片,体积小SOT6封装

liangjiatian 发表于 2013-4-22 12:24:49

zhcj66 发表于 2013-4-22 12:24 static/image/common/back.gif
还没有研究过数控电源,AD你可以使用ADS1110这个芯片,体积小SOT6封装

DA有没有推荐

zhcj66 发表于 2013-4-22 13:02:40

liangjiatian 发表于 2013-4-22 12:24 static/image/common/back.gif
DA有没有推荐

DAC没有用过,你可以去TI或者ADI网站找一下哦

liangjiatian 发表于 2013-4-22 17:02:49

zhcj66 发表于 2013-4-22 13:02 static/image/common/back.gif
DAC没有用过,你可以去TI或者ADI网站找一下哦

好的 {:smile:}

zhcj66 发表于 2013-4-22 17:05:11

liangjiatian 发表于 2013-4-22 17:02 static/image/common/back.gif
好的

请问你用过ADS1247/6/8片子吗?

liangjiatian 发表于 2013-4-22 17:55:07

zhcj66 发表于 2013-4-22 17:05 static/image/common/back.gif
请问你用过ADS1247/6/8片子吗?

没有哦{:smile:}

lyg407 发表于 2013-4-22 18:12:09

zhcj66 发表于 2013-4-22 11:12 static/image/common/back.gif
这种更容易看了,谢谢。这个怎么弄的?

在发帖子时候, 最右边一栏 里面第一个 添加代码文字 。。。复制到框里 即可。

zhcj66 发表于 2013-4-22 18:34:19

lyg407 发表于 2013-4-22 18:12 static/image/common/back.gif
在发帖子时候, 最右边一栏 里面第一个 添加代码文字 。。。复制到框里 即可。 ...

哦谢谢

shiyingyifan 发表于 2013-5-2 02:30:31

12位的话推荐DAC7512

abcdzhy 发表于 2013-5-2 07:36:13

楼主的程序好用!

xinxinEC 发表于 2013-5-2 08:06:10

谢谢楼主。

gzhmcu 发表于 2013-5-2 08:09:53

这个东东最好改成单极化测量,我就是这么做的

zuu0 发表于 2013-5-2 08:49:23

ADS系列的这些都非常好用

用过ADS1100 ADS1115 数据准的一塌糊涂,一次平均不用取都很稳,这就是积分型AD,,,但就是速度慢了,高速的话不行

顺便问下,你现在买多少钱一片,我当年是35买的

wallacer 发表于 2013-5-2 09:19:57

感谢楼主无私奉献

sergeserge 发表于 2013-5-3 08:01:31

{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}

wkman 发表于 2013-5-3 08:11:24

Ti 一次能申请几种,每种 几片?{:titter:}

zhcj66 发表于 2013-5-3 08:25:57

zuu0 发表于 2013-5-2 08:49 static/image/common/back.gif
ADS系列的这些都非常好用

用过ADS1100 ADS1115 数据准的一塌糊涂,一次平均不用取都很稳,这就是积分型A ...

我在TI申请的样片,还没有买

zhcj66 发表于 2013-5-3 08:26:51

wkman 发表于 2013-5-3 08:11 static/image/common/back.gif
Ti 一次能申请几种,每种 几片?

好像一次最多每种申请3pcs 最多5种

lyg407 发表于 2013-5-10 10:22:35

shiyingyifan 发表于 2013-5-2 02:30 static/image/common/back.gif
12位的话推荐DAC7512

   额。。。。亲,你说的DAC7512应该是 12bit DA 芯片吧。ADS1110 是AD 芯片喔。

himan 发表于 2013-11-22 08:44:15

备用备用

闪客 发表于 2014-2-18 11:40:16

正在使用这款芯片做产品。。。收藏

yyj_sd 发表于 2014-2-18 12:14:19

这个封装貌似太小了,以前测试过。

ccao 发表于 2014-5-2 18:45:37

ads1110   mark

reynold007 发表于 2014-5-2 21:59:05

刚申请了ADS1120,不过有ADS1220程序,稍稍修改就可以用了

reynold007 发表于 2014-5-2 22:03:03

wkman 发表于 2013-5-3 08:11
Ti 一次能申请几种,每种 几片?

一次最多5种,每种最多3片

tony_jintao 发表于 2014-5-2 22:22:14

赞一个!厉害!

PCBBOY1991 发表于 2014-5-2 22:28:42

谢谢楼主!!!{:shy:}

bingshuihuo888 发表于 2014-5-6 10:13:07

做个记号,以备后用。

zjb879653946 发表于 2014-10-21 18:44:38

我用楼主的程序读回来的数据都是65535?什么原因?

zhcj66 发表于 2014-10-22 08:09:59

zjb879653946 发表于 2014-10-21 18:44
我用楼主的程序读回来的数据都是65535?什么原因?

1.拿逻辑分析仪 分析一下muc的数据,
2.芯片IO损坏

zjb879653946 发表于 2014-10-22 08:22:50

zhcj66 发表于 2014-10-22 08:09
1.拿逻辑分析仪 分析一下muc的数据,
2.芯片IO损坏

我发现问题了,是我用的器件地址和你不一样,改了地址后能读回来,调节外部电压数据也会变化,但是数据不准确,和实际电压不一样,我的verf-接的地

diegoo 发表于 2014-10-22 08:33:53

收藏,mark

zdc 发表于 2015-3-22 00:32:07

真好,正考虑这款芯片,看样子可以放心使用了

zhcj66 发表于 2015-3-23 07:40:36

zdc 发表于 2015-3-22 00:32
真好,正考虑这款芯片,看样子可以放心使用了

ADS1100和ADS1110程序通用

zhoulei123 发表于 2015-3-23 08:35:09

MARK {:tongue:}{:tongue:}{:tongue:}{:tongue:}

fenjinzhe 发表于 2015-8-11 11:04:47

      temp=ADS1110_Read_Byte(1)<<8;
      ADS1110_Ack();
      temp+=(ADS1110_Read_Byte(1));
      ADS1110_Ack();
      temp1 = ADS1110_Read_Byte(1);
      ADS1110_Ack()

ADS1110_Read_Byte(1);这个函数中有ACK 跳出后再加个ACK正常吗?

firegod01cn 发表于 2015-8-11 16:31:03

备用 谢谢了

sos9616 发表于 2015-8-18 16:33:42

LZ你好,没接触过STM
while(ADS1110_SDA_Get())这句是什么意思?

zhcj66 发表于 2015-8-19 07:56:44

sos9616 发表于 2015-8-18 16:33
LZ你好,没接触过STM
while(ADS1110_SDA_Get())这句是什么意思?

while(ADS1110_SDA_Get()) ;这句是等待SDA管脚变为低(表示数据转换完成),跳出获取ADS1110的数据;可以把ADS1110_SDA_Get()认为成51单片机的Px.x管脚

0123456789 发表于 2015-8-19 09:17:46

16位都很稳定,确实牛,这个跟布线有很大关系吧。

zhcj66 发表于 2015-8-19 09:24:24

0123456789 发表于 2015-8-19 09:17
16位都很稳定,确实牛,这个跟布线有很大关系吧。

是这个芯片很牛,24位的我最高可以做到18位不跳动,这也归功于芯片

sos9616 发表于 2015-8-21 14:19:05

zhcj66 发表于 2015-8-19 07:56
while(ADS1110_SDA_Get()) ;这句是等待SDA管脚变为低(表示数据转换完成),跳出获取ADS1110的数据;可以 ...

好的,谢谢LZ。
还有个问题看不懂,不能理解,
就是

Temp24 = ReadDataCfgReg(1);
Temp = Temp24/10000%10+0x30;
Temp = Temp24/1000%10+0x30;
Temp = Temp24/100%10+0x30;
Temp = Temp24/10%10+0x30;
Temp = Temp24%10+0x30;
Temp = 0x0D;
Temp = 0x0A;
Temp = 0;

这个是什么意思呢?在下理解能力有限,望LZ说明一下。

zhcj66 发表于 2015-8-21 15:17:52

sos9616 发表于 2015-8-21 14:19
好的,谢谢LZ。
还有个问题看不懂,不能理解,
就是


这个是把ADC的值 以字符串的方式 放入数组最后回车换行   也可以写成sprintf(Temp,"%u\r\n",Temp24);

sos9616 发表于 2015-8-26 08:37:31

zhcj66 发表于 2015-8-21 15:17
这个是把ADC的值 以字符串的方式 放入数组最后回车换行   也可以写成sprintf(Temp,"%u\r\n",Temp24); ...

LZ你好,
ADS1110去测负电压接线应该是怎样的?
目前电路是:V+接测量电压,V-接地,测量正电压都正常,
负电压就不正常了。

还有采样的值用什么方法滤波比较好?
目前用平均滤波法处理,最后转换为浮点型,但感觉采样的值还是不稳定。

0123456789 发表于 2015-9-30 12:21:56


楼主的接法只能有15位的分辨率?

0123456789 发表于 2015-9-30 12:27:54

sos9616 发表于 2015-8-26 08:37
LZ你好,
ADS1110去测负电压接线应该是怎样的?
目前电路是:V+接测量电压,V-接地,测量正电压都正常,


V+接测量电压,V-接地,测量正电压都正常,
-------------
这种接法无法测量负电压

jinchenaquarius 发表于 2015-9-30 13:47:05

顶一下,之前也玩过,遇到了不少问题

usm4glx 发表于 2015-9-30 14:22:37

恭喜恭喜,顺带学习

pangbin4 发表于 2015-9-30 23:00:58

很好的程序!收藏后面研究使用!

huarana 发表于 2016-4-20 09:26:58

0123456789 发表于 2015-9-30 12:27
V+接测量电压,V-接地,测量正电压都正常,
-------------
这种接法无法测量负电压 ...

ads1110不支持负电压。所谓的差分ad指的是   (V+) - (V-) 的值   ,有可能V+ 比V-大 2.048也有可能V+比V-小 2.048。

xml2028 发表于 2018-12-19 12:37:49

好贴,谢谢楼主

zhcj66 发表于 2018-12-19 14:25:33

huarana 发表于 2016-4-20 09:26
ads1110不支持负电压。所谓的差分ad指的是   (V+) - (V-) 的值   ,有可能V+ 比V-大 2.048也有可 ...

可以加2个1MO电阻 一个接5v 另外一个电阻接地, 电阻的另外一端分别接热电偶

Billion 发表于 2018-12-20 16:23:58

谢谢楼主分享

kevinchen026 发表于 2018-12-20 17:21:51

ADS1110ADS1110

eliterxzgxu 发表于 2018-12-20 20:47:39

感谢楼主分享

cvi670 发表于 2021-3-15 11:58:31

不错 参考了你的程序能够成功读取数据 谢谢   我用的GD32F103RCT6

zhcj66 发表于 2021-3-19 08:26:22

cvi670 发表于 2021-3-15 11:58
不错 参考了你的程序能够成功读取数据 谢谢   我用的GD32F103RCT6

103RC价格也飞上天了

keeta 发表于 2022-5-17 00:36:53

aaaaaaaaaa

canicula112 发表于 2023-4-4 21:49:44

谢谢楼主分享
页: [1]
查看完整版本: ADS1110用了一下午的时间终于搞定了