ADS1286的驱动
# ifndef _ADS1286_H
# define _ADS1286_H
# include "main.h"
# define ADCLK_H GPIO_SetBits(GPIOB,GPIO_Pin_0)
# define ADCLK_L GPIO_ResetBits(GPIOB,GPIO_Pin_0)
# define ADCS_H GPIO_SetBits(GPIOB,GPIO_Pin_1)
# define ADCS_L GPIO_ResetBits(GPIOB,GPIO_Pin_1)
# define ADOUT GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2)
//# define N 20 //确定平均采样点数
void ads1286_Init(void) ;
float ads1286_ctr(void) ;
float ad_aver(int Num) ;
void ad_delay(int N) ;
void ad_show(float value) ;
# endif
# include "main.h"
void ads1286_Init(void)
{
ADCS_L ;
ADCS_H ;
ADCLK_L ;
ADCLK_H ;
}
float ads1286_ctr(void)
{
int i = 0 ;
u16 AD_Value = 0 ;
ads1286_Init() ;
ADCS_L ;
ad_delay(100) ;
ADCLK_L ;
for(i=0 ; i<1 ;i++)
{
ADCLK_H ;
ad_delay(10) ;
ADCLK_L ;
}
for(i=0 ; i<11 ;i++)
{
ADCLK_H ;
ad_delay(10) ;
ADCLK_L ;
}
for(i=0 ; i<12 ;i++)
{
ADCLK_H ;
ad_delay(10) ;
ADCLK_L ;
AD_Value |= (ADOUT<<i) ;
}
ADCLK_H ;
ADCS_H ;
return (AD_Value) ;
}
float ad_aver(int Num)
{
char i;
float ad_data=0;
ads1286_ctr();
for(i=0;i<Num;i++) //采样Num次,求平均值
{
ad_data += ads1286_ctr();
}
ad_data = ad_data/Num ;
if(ad_data>=0xfff)
{
ad_data = 0;
}
ad_data = ad_data*5.0/4095.0 ;
return( ad_data) ;
}
void ad_delay(int N)
{
int i = 0 ;
for (i=0 ;i<N ;i++)
{
;
}
}
void ad_show(float value)
{
char chFloat[8]={0} ;
sprintf(chFloat ,"%7.5f" ,value) ;
DispStr(0, 0, (u8 *)chFloat ) ;
}
|