原创 【博客大赛】DMM电阻测量分析笔记三~ADS1232驱动程序

2013-8-22 22:09 2207 22 25 分类: 测试测量 文集: C

    虽然一开始打算做的是四位半万用表,但是,我们的终极目标是用高档表—— 六位半,向经典表王——安捷伦34401A学习。所以,我思前想后,LT2440无疑是最好的选择,因为其是积分型ADC,温漂够小,但是其价格昂贵,所以我打算在后期六位半中使用,四位半试验阶段就用TI的ADS1232,同是24位ADC,但ADS1232的淘宝价格是12元,与LT2440的几十个大洋想比,还是很便宜的。 

    下面是ADS1232的STM32驱动程序。

 

 
 #include"stm32f10x.h"
 #include"delay.h"
 #include"ads1232.h"
 
 extern unsigned char flag;
 
 
#define DOUT GPIO_Pin_0
#define SCLK GPIO_Pin_1
#define PDWN GPIO_Pin_2
#define SPEED  GPIO_Pin_3
#define GAIN0 GPIO_Pin_4
#define GAIN1 GPIO_Pin_5
#define A0    GPIO_Pin_6
#define ADPORT GPIOB
 
 
#define DOUT_H GPIO_SetBits(ADPORT,DOUT)
#define DOUT_L GPIO_ResetBits(ADPORT,DOUT)
#define SCLK_H GPIO_SetBits(ADPORT,SCLK)
#define SCLK_L GPIO_ResetBits(ADPORT,SCLK)
#define SPEED_H GPIO_SetBits(ADPORT,SPEED)
#define SPEED_L GPIO_ResetBits(ADPORT,SPEED)
#define PDWN_H GPIO_SetBits(ADPORT,PDWN)
#define PDWN_L GPIO_ResetBits(ADPORT,PDWN)
#define A0_H   GPIO_SetBits(ADPORT,A0)    //AIN 2
#define A0_L   GPIO_ResetBits(ADPORT,A0)  //AIN 1
#define GAIN_1 GPIO_ResetBits(ADPORT,GAIN0|GAIN1);
 
 
 /****************************************************
 *function name: void AD_InitIO(void)
 *description  : AD GPIO Initialization,PB0-DOUT,PB1-SCLK
 *input        : null
 *output       : null
 *return       £ºnull
 ******************************************************/
 void AD_InitIO(void)
{
   GPIO_InitTypeDef GPIO_InitStructure;
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
 
   GPIO_InitStructure.GPIO_Pin=SCLK;
   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
   GPIO_Init(ADPORT,&GPIO_InitStructure);
}
 
 
 /****************************************************
 *function name: void DOUT_IN(void)
 *description  : ADS1232's DOUT PB0 config input
 *input        : null
 *output       : null
 *return       £ºnull
 ******************************************************/
 void DOUT_IN(void)
 {
   GPIO_InitTypeDef GPIO_InitStructure;
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
   GPIO_InitStructure.GPIO_Pin=DOUT;
   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //ÉÏÀ­ÊäÈë
   GPIO_Init(ADPORT,&GPIO_InitStructure);
 }
 
  /****************************************************
 *function name: void DOUT_OUT(void)
 *description  : ADS1232's DOUT PB0 config input
 *input        : null
 *output       : null
 *return       £ºnull
 ******************************************************/
 void DOUT_OUT(void)
 {
   GPIO_InitTypeDef GPIO_InitStructure;
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
   GPIO_InitStructure.GPIO_Pin=DOUT;
   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
   GPIO_Init(ADPORT,&GPIO_InitStructure);
 }
 
 /****************************************************
 *function name: unsigned long AD_read(void)
 *description  : read AD data
 *input        : null
 *output       : null
 *return       £ºnull
 ******************************************************/
unsigned long AD_read(unsigned char channel)
 {
    int i=0;
 unsigned long ad_value=0;
 AD_InitIO();
 
 
 
SCLK_L;
 PDWN_L;
delay_us(20);
 if(channel == 1)
{
A0_L; //AIN1
}
else 
{
A0_H;  //AIN2
}
GAIN_1;
 SPEED_H;     //80SPS 
 PDWN_H;  
 delay_us(20);
 
//  DOUT_OUT();
//  DOUT_H; 
//  delay_us(1);
 DOUT_IN();
 while(GPIO_ReadInputDataBit(ADPORT,DOUT)==1);
//delay_ms(200);
 flag=1;
 for(i=0;i<24;i++)
 {
    ad_value=ad_value<<1;
  SCLK_H;
  delay_us(2);
  if(GPIO_ReadInputDataBit(ADPORT,DOUT)==1)
   {
   ad_value|=0x00000001;  //or  ad_value+=1;     
}
else 
 SCLK_L;
 delay_us(2);
 }
 SCLK_H;
 delay_us(2);
 SCLK_L;
 delay_ms(1);
 return ad_value;
 }
PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

345002072_353389109 2013-9-9 19:57

你的ADS1232硬件电路DVDD一定是要接3.3V,不能接5V。你是这样的吗?

用户377235 2013-9-7 05:53

楼主。。。不知道你的其他没有定义的GPIO设置的管脚怎么设置的。还有就是为什么我按你的程序测试的时候DOUT一直是高电平。。。。

用户377235 2013-9-7 05:53

楼主。。。不知道你的其他没有定义的GPIO设置的管脚怎么设置的。还有就是为什么我按你的程序测试的时候DOUT一直是高电平。。。。
相关推荐阅读
啊左不是蜗牛 2015-01-28 09:21
【博客大赛】那样的人生,看不穿
         昨晚11点跟PM姐姐聊天,问她今晚要不要加班,她回:刚刚开发哥哥陪她出来打的。。。我以为我十点半从实验室回去已经够晚了。。我脸红了。        我问她为什么不早点回去...
啊左不是蜗牛 2015-01-13 19:41
【智能手机】三个观点说说国产手机未来
在此篇文章之前还有一个各大手机品牌的总结,请点击查看。 智能手机之论英雄出处      谈手机之前换个角度,类比一下PC领域。 PC领域毛利最高的时候,国产PC一直混在低端。随着时代发...
啊左不是蜗牛 2015-01-09 17:56
【智能手机】论英雄出处
我认为,如果你不知道对手的底细,那么你就很难战胜对手。知己知彼,百战百胜。所以,我简单地说说我对这几家手机品牌的看法。个人之见,欢迎讨论。   苹果: 1976年成立,在乔布斯这样的天...
啊左不是蜗牛 2014-11-19 13:48
【博客大赛】蜗牛求职记之华为篇
1、前言说明          蜗牛是电赛出身,本科做硬件嵌入式,画板子和写C程序,然后研究生阶段是转战android,但是由于项目涉及到硬件,导师项目众多,小伙伴少,于是我也负责部分st...
啊左不是蜗牛 2014-08-16 14:38
以另一种位图的思想来解决一道OJ题目
前言: 以前所接触到的位图的思想都是以1位的形式去存储某个数出现的次数是1次还是0次。常见的例子不外乎在《编程珠玑》上的开篇例子里,1千万个数的排序统计,用1.25M的内存空间就可以达到遍历一...
啊左不是蜗牛 2014-08-15 11:57
Android 笔记之 listview 性能优化
列表显示需要三个元素, (1)listview 视图,用来显示列表的View ; (2)适配器,用来把数据映射到listView上面的 (3)数据,具体将被映射的数据,包括字符串,图片...
EE直播间
更多
我要评论
3
22
关闭 站长推荐上一条 /3 下一条