tag 标签: adc,2440,dmm

相关博文
  • 热度 25
    2013-8-22 22:09
    2208 次阅读|
    3 个评论
        虽然一开始打算做的是四位半万用表,但是,我们的终极目标是用高档表—— 六位半,向经典表王——安捷伦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;i24;i++)  {     ad_value=ad_value1;   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;  }